o
    8VaCW                  	   @   s  d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlm Z  dd	l!m"Z" dd
l#m$Z$ ddl%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 dd Z5e(6edd Z7e)6edd Z7e)6edd Z7e)6edd Z7e)6edd Z7e)8eedd Z7e)8eedd Z7e)6edd Z7e)6edd Z7e*6edd Z7e*6edd Z7e*6edd Z7e*6edd Z7e*8eedd Z7e*6edd Z7e*6ed d Z7e*6ed!d Z7e*6ed"d Z7e*6e	d#d Z7e*6ed$d Z7e*6ed%d Z7e*6ed&d Z7e+6ed'd Z7e+6ed(d Z7e+6ed)d Z7e+6ed*d Z7e+6ed+d Z7e+6ed,d Z7e+8eed-d Z7e+6ed.d Z7e+6ed/d Z7e,6ed0d Z7e,6ed1d Z7e,6ed2d Z7e,8eed3d Z7e,6ed4d Z7e,8e ed5d Z7e,6ed6d Z7e,6ed7d Z7e-6ed8d Z7e-6ed9d Z7e-6ed:d Z7e-6ed;d Z7e-6ed<d Z7e-8eed=d Z7e-6ed>d Z7e.6ed?d Z7e.6ed@d Z7e.6edAd Z7e.6edBd Z7e.6edCd Z7e.6edDd Z7e.6edEd Z7e.8eedFd Z7e.6edGd Z7e/6edHd Z7e/6edId Z7e/6edJd Z7e/6edKd Z7e/8eedLd Z7e/6edMd Z7e/6edNd Z7e/6edOd Z7e/6edPd Z7e/6edQd Z7e06edRd Z7e06edSd Z7e06edTd Z7e06edUd Z7e08eedVd Z7e06edWd Z7e06edXd Z7e06edYd Z7e06edZd Z7e06ed[d Z7d\d] Z9e16ed^d Z7e16ed_d Z7e16ed`d Z7e16edad Z7e16edbd Z7e18eedcd Z7e16eddd Z7e18eeeeded Z7e16edfd Z7dgdh Z:didj Z;dkdl Z<e28eeeeedmd Z7e26ednd Z7e28eeedod Z7e26edpd Z7e26edqd Z7e26edrd Z7e38eeeeeedsd Z7e36edtd Z7e36edud Z7e36edvd Z7e36edwd Z7e48eeeeeeedxd Z7e46edyd Z7e46edzd Z7e46ed{d Z7e46ed|d Z7e46e d}d Z7d~S )zj
This module contains query handlers responsible for Matrices queries:
Square, Symmetric, Invertible etc.
    )	conjuncts)Qask)test_closed_group)
MatrixBase)BlockMatrixBlockDiagMatrixDeterminant
DiagMatrixDiagonalMatrixHadamardProductIdentityInverseMatAddMatMulMatPow
MatrixExprMatrixSliceMatrixSymbol	OneMatrixTrace	Transpose
ZeroMatrix)Factorization)DFT)	fuzzy_and)sift)Basic   )SquarePredicateSymmetricPredicateInvertiblePredicateOrthogonalPredicateUnitaryPredicateFullRankPredicatePositiveDefinitePredicateUpperTriangularPredicateLowerTriangularPredicateDiagonalPredicateIntegerElementsPredicateRealElementsPredicateComplexElementsPredicatec                 C   s   | |j v rdS d S NT)Z
predicates	predicateexprassumptions r1   E/usr/lib/python3/dist-packages/sympy/assumptions/handlers/matrices.py_Factorization   s   
r3   c                 C   s   | j d | j d kS Nr      shaper/   r0   r1   r1   r2   _"   s   r9   c                    s   |   \}}t fdd|jD rdS tt|  rdS t|jdkrH|jd |jd jkrJt|jdkr9dS ttt	|jdd   S d S d S )Nc                 3        | ]}t t| V  qd S Nr   r   	symmetric.0argr0   r1   r2   	<genexpr>,       _.<locals>.<genexpr>Tr   r   r5   )
as_coeff_mmulallargsr   r   diagonallenTr=   r   r/   r0   factorZmmulr1   rA   r2   r9   )   s   $c                 C   d   | j \}}tt||}|sd S tt| |}|s(|dkr0tt||r0tt||S d S NF)rH   r   r   integernegative
invertibler=   r/   r0   baseexpint_expZnon_negativer1   r1   r2   r9   7      
c                    s   t  fdd| jD S )Nc                 3   r:   r;   r<   r>   rA   r1   r2   rB   F   rC   rD   rG   rH   r8   r1   rA   r2   r9   D   s   c                 C   s8   | j sdS tt| |rdS t| t|v rdS d S NFT)	is_squarer   r   rI   r=   r   r8   r1   r1   r2   r9   H   s   c                 C   s   t t| |S r;   )r   r   Zsquarer8   r1   r1   r2   r9   S      c                 C      t t| j|S r;   )r   r   r=   r@   r8   r1   r1   r2   r9   W      c                 C   s0   t t| |r
dS | jsd S t t| j|S r,   )r   r   rI   on_diagr=   parentr8   r1   r1   r2   r9   [   s
   c                 C      dS r,   r1   r8   r1   r1   r2   r9   f      c                    sH   |   \}}t fdd|jD rdS t fdd|jD r"dS d S )Nc                 3   r:   r;   r   r   rR   r>   rA   r1   r2   rB   p   rC   rD   Tc                 3   $    | ]}t t| d u V  qdS FNrb   r>   rA   r1   r2   rB   r       FrF   rG   rH   anyrL   r1   rA   r2   r9   m   s   c                 C   @   | j \}}tt||}|sd S |jdkrtt||S d S rO   )rH   r   r   rP   is_negativerR   r/   r0   rT   rU   rV   r1   r1   r2   r9   v      

c                 C   s   d S r;   r1   r8   r1   r1   r2   r9      ra   c                 C   $   | j sdS t| t|v rdS d S rY   )rZ   r   rR   r   r8   r1   r1   r2   r9      
   c                 C   r`   r,   r1   r8   r1   r1   r2   r9      ra   c                 C   r`   rO   r1   r8   r1   r1   r2   r9      ra   c                 C      | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9         c                 C   r\   r;   )r   r   rR   r@   r8   r1   r1   r2   r9      r]   c                 C      | j sd S tt| j|S r;   )r^   r   r   rR   r_   r8   r1   r1   r2   r9         c                 C   s   | j sdS |  | jkS rO   )rZ   ZrankZrowsr8   r1   r1   r2   r9      s   c                 C   s   | j sdS d S rO   )rZ   r8   r1   r1   r2   r9      s   c                 C   sZ  ddl m} | jsdS | jdkrtt| jd |S || } | jdkr| j \\}}\}}tt||dkrNtt|||j	 |  |}|d urN|S tt||dkrmtt|||j	 |  |}|d urm|S tt||dkrtt|||j	 |  |}|d ur|S tt||dkrtt|||j	 |  |}|d ur|S d S )Nr   )reblock_2x2Fr5   r5   r   r   )r   r   T)
Z&sympy.matrices.expressions.blockmatrixrr   rZ   Z
blockshaper   r   rR   blockstolistI)r/   r0   rr   ABCDrR   r1   r1   r2   r9      s2   

c                    s(   | j | jkrd S t fdd| jD S )Nc                    s   g | ]
}t t| qS r1   rb   )r?   arA   r1   r2   
<listcomp>   s    z_.<locals>.<listcomp>)ZrowblocksizesZcolblocksizesr   Zdiagr8   r1   rA   r2   r9      s   c                    sP   |   \}}t fdd|jD r|dkrdS t fdd|jD r&dS d S )Nc                 3   r:   r;   )r   r   
orthogonalr>   rA   r1   r2   rB      rC   rD   r5   Tc                 3   rc   rd   rb   r>   rA   r1   r2   rB      re   Frf   rL   r1   rA   r2   r9      s   c                 C   2   | j \}}tt||}|rtt||S d S r;   )rH   r   r   rP   r~   rj   r1   r1   r2   r9      
   
c                 C   s0   t | jdkrtt| jd |rdS d S d S )Nr5   r   T)rJ   rH   r   r   r~   r8   r1   r1   r2   r9      s
   c                 C   8   | j rtt| |du rdS t| t|v rdS d S rY   )rZ   r   r   rR   r~   r   r8   r1   r1   r2   r9         c                 C   r`   r,   r1   r8   r1   r1   r2   r9      ra   c                 C   r`   rO   r1   r8   r1   r1   r2   r9      ra   c                 C   r\   r;   )r   r   r~   r@   r8   r1   r1   r2   r9      r]   c                 C   rp   r;   )r^   r   r   r~   r_   r8   r1   r1   r2   r9     rq   c                 C      t tj| |S r;   )r3   r   r~   r8   r1   r1   r2   r9        c                    sT   |   \}}t fdd|jD rt|dkrdS t fdd|jD r(dS d S )Nc                 3   r:   r;   )r   r   unitaryr>   rA   r1   r2   rB     rC   rD   r5   Tc                 3   rc   rd   rb   r>   rA   r1   r2   rB     re   F)rF   rG   rH   absrg   rL   r1   rA   r2   r9     s   
c                 C   r   r;   )rH   r   r   rP   r   rj   r1   r1   r2   r9     r   c                 C   r   rY   )rZ   r   r   rR   r   r   r8   r1   r1   r2   r9   "  r   c                 C   r\   r;   )r   r   r   r@   r8   r1   r1   r2   r9   *  r]   c                 C   rp   r;   )r^   r   r   r   r_   r8   r1   r1   r2   r9   .  rq   c                 C   r`   r,   r1   r8   r1   r1   r2   r9   5  ra   c                 C   r`   rO   r1   r8   r1   r1   r2   r9   9  ra   c                 C   r   r;   )r3   r   r   r8   r1   r1   r2   r9   =  r   c                        t  fdd| jD rdS d S )Nc                 3   r:   r;   )r   r   fullrankr>   rA   r1   r2   rB   F  rC   rD   TrX   r8   r1   rA   r2   r9   D     c                 C   sD   | j \}}tt||}|r tt| |r tt||S d S r;   )rH   r   r   rP   rQ   r   rj   r1   r1   r2   r9   I  s
   
c                 C   r`   r,   r1   r8   r1   r1   r2   r9   R  ra   c                 C   r`   rO   r1   r8   r1   r1   r2   r9   V  ra   c                 C   rn   r4   r6   r8   r1   r1   r2   r9   Z  ro   c                 C   r\   r;   )r   r   r   r@   r8   r1   r1   r2   r9   ^  r]   c                 C   s   t t| j|rdS d S r,   )r   r   r~   r_   r8   r1   r1   r2   r9   b     c                    s   |   \}}t fdd|jD r|dkrdS t|jdkrD|jd |jd jkrFtt|jd  rHttt	|jdd   S d S d S d S )Nc                 3   r:   r;   r   r   positive_definiter>   rA   r1   r2   rB   m      rD   r   Tr   rE   r5   )
rF   rG   rH   rJ   rK   r   r   r   r   r   rL   r1   rA   r2   r9   j  s$   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   r   rH   r8   r1   r1   r2   r9   v  s   c                    r   )Nc                 3   r:   r;   r   r>   rA   r1   r2   rB   ~  r   rD   TrX   r8   r1   rA   r2   r9   |  s
   c                 C   rl   rY   )rZ   r   r   r   r8   r1   r1   r2   r9     rm   c                 C   r`   r,   r1   r8   r1   r1   r2   r9     ra   c                 C   r`   rO   r1   r8   r1   r1   r2   r9     ra   c                 C   rn   r4   r6   r8   r1   r1   r2   r9     ro   c                 C   r\   r;   )r   r   r   r@   r8   r1   r1   r2   r9     r]   c                 C   rp   r;   )r^   r   r   r   r_   r8   r1   r1   r2   r9     rq   c                    *   |   \}}t fdd|D rdS d S )Nc                 3   r:   r;   r   r   upper_triangularr?   mrA   r1   r2   rB     rC   rD   Tas_coeff_matricesrG   r/   r0   rM   matricesr1   rA   r2   r9        c                    r   )Nc                 3   r:   r;   r   r>   rA   r1   r2   rB     rC   rD   TrX   r8   r1   rA   r2   r9     r   c                 C   rN   rO   )rH   r   r   rP   rQ   rR   r   rS   r1   r1   r2   r9     rW   c                 C      t | t|v rdS d S r,   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r`   r,   r1   r8   r1   r1   r2   r9     ra   c                 C   rn   r4   r6   r8   r1   r1   r2   r9     ro   c                 C   r\   r;   r   r   lower_triangularr@   r8   r1   r1   r2   r9     r]   c                 C   r\   r;   r   r   r   r@   r8   r1   r1   r2   r9     r]   c                 C   rp   r;   )r^   r   r   r   r_   r8   r1   r1   r2   r9     rq   c                 C   r   r;   )r3   r   r   r8   r1   r1   r2   r9     r   c                    r   )Nc                 3   r:   r;   r   r   r   r   rA   r1   r2   rB     rC   rD   Tr   r   r1   rA   r2   r9     r   c                    r   )Nc                 3   r:   r;   r   r>   rA   r1   r2   rB     rC   rD   TrX   r8   r1   rA   r2   r9     r   c                 C   rN   rO   )rH   r   r   rP   rQ   rR   r   rS   r1   r1   r2   r9     rW   c                 C   r   r,   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r`   r,   r1   r8   r1   r1   r2   r9     ra   c                 C   rn   r4   r6   r8   r1   r1   r2   r9     ro   c                 C   r\   r;   r   r8   r1   r1   r2   r9     r]   c                 C   r\   r;   r   r8   r1   r1   r2   r9     r]   c                 C   rp   r;   )r^   r   r   r   r_   r8   r1   r1   r2   r9   
  rq   c                 C   r   r;   )r3   r   r   r8   r1   r1   r2   r9     r   c                 C   s   | j dkp	| j dkS )Nrt   rs   r6   )r/   r1   r1   r2   _is_empty_or_1x1  s   r   c                    s6   t | rdS |  \}}t fdd|D rdS d S )NTc                 3   r:   r;   r   r   rI   r   rA   r1   r2   rB      rC   rD   )r   r   rG   r   r1   rA   r2   r9     s   c                 C   rN   rO   )rH   r   r   rP   rQ   rR   rI   rS   r1   r1   r2   r9   #  rW   c                    r   )Nc                 3   r:   r;   r   r>   rA   r1   r2   rB   2  rC   rD   TrX   r8   r1   rA   r2   r9   0  r   c                 C   s&   t | rdS t| t|v rdS d S r,   )r   r   rI   r   r8   r1   r1   r2   r9   5  s
   c                 C   rn   r4   r6   r8   r1   r1   r2   r9   <  ro   c                 C   r\   r;   )r   r   rI   r@   r8   r1   r1   r2   r9   @  r]   c                 C   s(   t | rdS | jsd S tt| j|S r,   )r   r^   r   r   rI   r_   r8   r1   r1   r2   r9   D  s
   c                 C   r`   r,   r1   r8   r1   r1   r2   r9   M  ra   c                 C   r   r;   )r3   r   rI   r8   r1   r1   r2   r9   Q  r   c                    s   t  fdd|jD S )z Block Matrix elements. c                 3   s    | ]
}t | V  qd S r;   )r   )r?   br0   r.   r1   r2   rB   Z  s    zBM_elements.<locals>.<genexpr>)rG   ru   r-   r1   r   r2   BM_elementsX  s   r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   r_   r-   r1   r1   r2   MS_elements\  r[   r   c                 C   sF   t |jdd }|d |d }}ttt| ||tt| || gS )Nc                 S   s
   t | tS r;   )
isinstancer   )xr1   r1   r2   <lambda>a  s   
 z!MatMul_elements.<locals>.<lambda>FT)r   rH   r   r   r   )Zmatrix_predicateZscalar_predicater/   r0   dZfactorsr   r1   r1   r2   MatMul_elements`  s   r   c                 C      t | |tjS r;   )r   r   integer_elementsr8   r1   r1   r2   r9   h     c                 C   rh   rO   )rH   r   r   rP   ri   r   rj   r1   r1   r2   r9   m  rk   c                 C   r`   r,   r1   r8   r1   r1   r2   r9   x  ra   c                 C      t tjtj| |S r;   )r   r   r   rP   r8   r1   r1   r2   r9   |  r]   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r   r;   )r   r   real_elementsr8   r1   r1   r2   r9     r   c                 C   rN   rO   )rH   r   r   rP   rQ   rR   r   rS   r1   r1   r2   r9     rW   c                 C   r   r;   )r   r   r   realr8   r1   r1   r2   r9     r]   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r   r;   )r   r   complex_elementsr8   r1   r1   r2   r9     r   c                 C   rN   rO   )rH   r   r   rP   rQ   rR   r   rS   r1   r1   r2   r9     rW   c                 C   r   r;   )r   r   r   complexr8   r1   r1   r2   r9     r]   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r   r;   )r   r   r   r8   r1   r1   r2   r9     r   c                 C   r`   r,   r1   r8   r1   r1   r2   r9     ra   N)=__doc__Zsympy.logic.boolalgr   Zsympy.assumptionsr   r   Zsympy.assumptions.handlersr   Zsympy.matricesr   Zsympy.matrices.expressionsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z)sympy.matrices.expressions.factorizationsr   Z"sympy.matrices.expressions.fourierr   Zsympy.core.logicr   Zsympy.utilities.iterablesr   Z
sympy.corer   Zpredicates.matricesr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r3   registerr9   Zregister_manyr   r   r   r   r1   r1   r1   r2   <module>   s   P<




























	









	


























	



















































