a
    kh1W                  	   @   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( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 dd Z7e*8edd Z9e+8edd Z9e+8edd Z9e+8edd Z9e+8edd Z9e+:eedd Z9e+:eedd Z9e+8edd Z9e+8edd Z9e,8edd Z9e,8edd Z9e,8edd Z9e,8edd Z9e,:eedd Z9e,8ed d Z9e,8ed!d Z9e,8ed"d Z9e,8ed#d Z9e,8e	d$d Z9e,8ed%d Z9e,8ed&d Z9e,8ed'd Z9e-8ed(d Z9e-8ed)d Z9e-8ed*d Z9e-8ed+d Z9e-8ed,d Z9e-8ed-d Z9e-:eed.d Z9e-8ed/d Z9e-8e d0d Z9e.8ed1d Z9e.8ed2d Z9e.8ed3d Z9e.:eed4d Z9e.8ed5d Z9e.:e"ed6d Z9e.8ed7d Z9e.8e d8d Z9e/8ed9d Z9e/8ed:d Z9e/8ed;d Z9e/8ed<d Z9e/8ed=d Z9e/:eed>d Z9e/8ed?d Z9e08ed@d Z9e08edAd Z9e08edBd Z9e08edCd Z9e08edDd Z9e08edEd Z9e08edFd Z9e0:eedGd Z9e08edHd Z9e18edId Z9e18edJd Z9e18edKd Z9e18edLd Z9e1:eedMd Z9e18edNd Z9e18edOd Z9e18edPd Z9e18edQd Z9e18e dRd Z9e28edSd Z9e28edTd Z9e28edUd Z9e28edVd Z9e2:eedWd Z9e28edXd Z9e28edYd Z9e28edZd Z9e28ed[d Z9e28e d\d Z9d]d^ Z;e38ed_d Z9e38ed`d Z9e38edad Z9e38edbd Z9e38edcd Z9e3:eeddd Z9e38eded Z9e3:eeeedfd Z9e38e dgd Z9dhdi Z<djdk Z=dldm Z>e4:eeeeednd Z9e48edod Z9e4:eeedpd Z9e48edqd Z9e48edrd Z9e48edsd Z9e5:ee eeeedtd Z9e58edud Z9e58edvd Z9e58edwd Z9e58edxd Z9e6:ee eeeeedyd Z9e68edzd Z9e68ed{d Z9e68ed|d Z9e68ed}d Z9e68e"d~d Z9d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)reblock_2x2)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 r2   Q/var/www/auris/lib/python3.9/site-packages/sympy/assumptions/handlers/matrices.py_Factorization   s    
r4   c                 C   s   | j d | j d kS Nr      shaper0   r1   r2   r2   r3   _#   s    r:   c                    s   |   \}}t fdd|jD r(dS tt|  r<dS t|jdkr|jd |jd jkrt|jdkrrdS ttt	|jdd   S d S )Nc                 3   s   | ]}t t| V  qd S Nr   r   	symmetric.0argr1   r2   r3   	<genexpr>-       _.<locals>.<genexpr>Tr   r   r6   )
as_coeff_mmulallargsr   r   diagonallenTr=   r   r0   r1   factorZmmulr2   rA   r3   r:   *   s    $c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S NF)rH   r   r   integernegative
invertibler=   r0   r1   baseexpint_expZnon_negativer2   r2   r3   r:   8   s    
c                    s   t  fdd| jD S )Nc                 3   s   | ]}t t| V  qd S r;   r<   r>   rA   r2   r3   rB   G   rC   rD   rG   rH   r9   r2   rA   r3   r:   E   s    c                 C   s8   | j s
dS tt| |rdS t| t|v r4dS d S NFT)	is_squarer   r   rI   r=   r   r9   r2   r2   r3   r:   I   s    c                 C   s   t t| |S r;   )r   r   Zsquarer9   r2   r2   r3   r:   T   s    c                 C   s   t t| j|S r;   )r   r   r=   r@   r9   r2   r2   r3   r:   X   s    c                 C   s4   t t| |rdS | jsd S t t| j|S d S r-   )r   r   rI   on_diagr=   parentr9   r2   r2   r3   r:   \   s
    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:   g   s    c                    sH   |   \}}t fdd|jD r(dS t fdd|jD rDdS d S )Nc                 3   s   | ]}t t| V  qd S r;   r   r   rQ   r>   rA   r2   r3   rB   q   rC   rD   Tc                 3   s"   | ]}t t| d u V  qdS FNr[   r>   rA   r2   r3   rB   s   s   FrF   rG   rH   anyrL   r2   rA   r3   r:   n   s    c                 C   s@   | j \}}tt||}|s"d S |jdkr<tt||S d S rN   )rH   r   r   rO   is_negativerQ   r0   r1   rS   rT   rU   r2   r2   r3   r:   w   s    

c                 C   s   d S r;   r2   r9   r2   r2   r3   r:      s    c                 C   s$   | j s
dS t| t|v r dS d S rW   )rX   r   rQ   r   r9   r2   r2   r3   r:      s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:      s    c                 C   s   dS rN   r2   r9   r2   r2   r3   r:      s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:      s    c                 C   s   t t| j|S r;   )r   r   rQ   r@   r9   r2   r2   r3   r:      s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   rQ   rZ   r9   r2   r2   r3   r:      s    c                 C   s   | j s
dS |  | jkS rN   )rX   Zrankrowsr9   r2   r2   r3   r:      s    c                 C   s   | j s
dS d S rN   )rX   r9   r2   r2   r3   r:      s    c                 C   sX  | j s
dS | jdkr*tt| jd |S t| } | jdkrT| j \\}}\}}tt||dkrtt|||j |  |}|d ur|S tt||dkrtt|||j |  |}|d ur|S tt||dkrtt|||j |  |}|d ur|S tt||dkrTtt|||j |  |}|d urT|S d S )NFr6   r6   r   r   )r   r   T)	rX   Z
blockshaper   r   rQ   blocksr   tolistI)r0   r1   ABCDrQ   r2   r2   r3   r:      s0    


c                    s(   | j | jkrd S t fdd| jD S )Nc                    s   g | ]}t t| qS r2   r[   )r?   arA   r2   r3   
<listcomp>   rC   z_.<locals>.<listcomp>)ZrowblocksizesZcolblocksizesr   Zdiagr9   r2   rA   r3   r:      s    c                    sP   |   \}}t fdd|jD r0|dkr0dS t fdd|jD rLdS d S )Nc                 3   s   | ]}t t| V  qd S r;   )r   r   
orthogonalr>   rA   r2   r3   rB      rC   rD   r6   Tc                 3   s"   | ]}t t| d u V  qdS r\   r[   r>   rA   r2   r3   rB      s   Fr]   rL   r2   rA   r3   r:      s    c                 C   s2   | j \}}tt||}|r.tt||S d S r;   )rH   r   r   rO   rm   r`   r2   r2   r3   r:      s
    
c                 C   s,   t | jdkr(tt| jd |r(dS d S )Nr6   r   T)rJ   rH   r   r   rm   r9   r2   r2   r3   r:      s    c                 C   s8   | j rtt| |du rdS t| t|v r4dS d S rW   )rX   r   r   rQ   rm   r   r9   r2   r2   r3   r:      s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:      s    c                 C   s   dS rN   r2   r9   r2   r2   r3   r:      s    c                 C   s   t t| j|S r;   )r   r   rm   r@   r9   r2   r2   r3   r:      s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   rm   rZ   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r4   r   rm   r9   r2   r2   r3   r:     s    c                    sT   |   \}}t fdd|jD r4t|dkr4dS t fdd|jD rPdS d S )Nc                 3   s   | ]}t t| V  qd S r;   )r   r   unitaryr>   rA   r2   r3   rB     rC   rD   r6   Tc                 3   s"   | ]}t t| d u V  qdS r\   r[   r>   rA   r2   r3   rB     s   F)rF   rG   rH   absr^   rL   r2   rA   r3   r:     s    
c                 C   s2   | j \}}tt||}|r.tt||S d S r;   )rH   r   r   rO   rn   r`   r2   r2   r3   r:     s
    
c                 C   s8   | j rtt| |du rdS t| t|v r4dS d S rW   )rX   r   r   rQ   rn   r   r9   r2   r2   r3   r:   "  s    c                 C   s   t t| j|S r;   )r   r   rn   r@   r9   r2   r2   r3   r:   *  s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   rn   rZ   r9   r2   r2   r3   r:   .  s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:   5  s    c                 C   s   dS rN   r2   r9   r2   r2   r3   r:   9  s    c                 C   s   t tj| |S r;   )r4   r   rn   r9   r2   r2   r3   r:   =  s    c                    s    t  fdd| jD rdS d S )Nc                 3   s   | ]}t t| V  qd S r;   )r   r   fullrankr>   rA   r2   r3   rB   F  rC   rD   TrV   r9   r2   rA   r3   r:   D  s    c                 C   sD   | j \}}tt||}|r@tt| |r@tt||S d S r;   )rH   r   r   rO   rP   rp   r`   r2   r2   r3   r:   I  s
    
c                 C   s   dS r-   r2   r9   r2   r2   r3   r:   R  s    c                 C   s   dS rN   r2   r9   r2   r2   r3   r:   V  s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:   Z  s    c                 C   s   t t| j|S r;   )r   r   rp   r@   r9   r2   r2   r3   r:   ^  s    c                 C   s   t t| j|rdS d S r-   )r   r   rm   rZ   r9   r2   r2   r3   r:   b  s    c                    s   |   \}}t fdd|jD r0|dkr0dS t|jdkr|jd |jd jkrtt|jd  rttt	|jdd   S d S )Nc                 3   s   | ]}t t| V  qd S r;   r   r   positive_definiter>   rA   r2   r3   rB   m  s   rD   r   Tr   rE   r6   )
rF   rG   rH   rJ   rK   r   r   rp   rr   r   rL   r2   rA   r3   r:   j  s"    c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rr   rH   r9   r2   r2   r3   r:   v  s    c                    s    t  fdd| jD rdS d S )Nc                 3   s   | ]}t t| V  qd S r;   rq   r>   rA   r2   r3   rB   ~  s   rD   TrV   r9   r2   rA   r3   r:   |  s    c                 C   s$   | j s
dS t| t|v r dS d S rW   )rX   r   rr   r   r9   r2   r2   r3   r:     s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:     s    c                 C   s   dS rN   r2   r9   r2   r2   r3   r:     s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:     s    c                 C   s   t t| j|S r;   )r   r   rr   r@   r9   r2   r2   r3   r:     s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   rr   rZ   r9   r2   r2   r3   r:     s    c                    s*   |   \}}t fdd|D r&dS d S )Nc                 3   s   | ]}t t| V  qd S r;   r   r   upper_triangularr?   mrA   r2   r3   rB     rC   rD   Tas_coeff_matricesrG   r0   r1   rM   matricesr2   rA   r3   r:     s    c                    s    t  fdd| jD rdS d S )Nc                 3   s   | ]}t t| V  qd S r;   rs   r>   rA   r2   r3   rB     rC   rD   TrV   r9   r2   rA   r3   r:     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rN   )rH   r   r   rO   rP   rQ   rt   rR   r2   r2   r3   r:     s    
c                 C   s   t | t|v rdS d S r-   )r   rt   r   r9   r2   r2   r3   r:     s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:     s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:     s    c                 C   s   t t| j|S r;   r   r   lower_triangularr@   r9   r2   r2   r3   r:     s    c                 C   s   t t| j|S r;   r   r   rt   r@   r9   r2   r2   r3   r:     s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   rt   rZ   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r4   r   rt   r9   r2   r2   r3   r:     s    c                    s*   |   \}}t fdd|D r&dS d S )Nc                 3   s   | ]}t t| V  qd S r;   r   r   r|   ru   rA   r2   r3   rB     rC   rD   Trw   ry   r2   rA   r3   r:     s    c                    s    t  fdd| jD rdS d S )Nc                 3   s   | ]}t t| V  qd S r;   r~   r>   rA   r2   r3   rB     rC   rD   TrV   r9   r2   rA   r3   r:     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rN   )rH   r   r   rO   rP   rQ   r|   rR   r2   r2   r3   r:     s    
c                 C   s   t | t|v rdS d S r-   )r   r|   r   r9   r2   r2   r3   r:     s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:     s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:     s    c                 C   s   t t| j|S r;   r}   r9   r2   r2   r3   r:     s    c                 C   s   t t| j|S r;   r{   r9   r2   r2   r3   r:     s    c                 C   s    | j s
d S tt| j|S d S r;   )rY   r   r   r|   rZ   r9   r2   r2   r3   r:   
  s    c                 C   s   t tj| |S r;   )r4   r   r|   r9   r2   r2   r3   r:     s    c                 C   s
   | j dv S )N)rc   rb   r7   )r0   r2   r2   r3   _is_empty_or_1x1  s    r   c                    s6   t | rdS |  \}}t fdd|D r2dS d S )NTc                 3   s   | ]}t t| V  qd S r;   r   r   rI   ru   rA   r2   r3   rB      rC   rD   )r   rx   rG   ry   r2   rA   r3   r:     s
    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rN   )rH   r   r   rO   rP   rQ   rI   rR   r2   r2   r3   r:   #  s    
c                    s    t  fdd| jD rdS d S )Nc                 3   s   | ]}t t| V  qd S r;   r   r>   rA   r2   r3   rB   2  rC   rD   TrV   r9   r2   rA   r3   r:   0  s    c                 C   s&   t | rdS t| t|v r"dS d S r-   )r   r   rI   r   r9   r2   r2   r3   r:   5  s    c                 C   s   | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:   <  s    c                 C   s   t t| j|S r;   )r   r   rI   r@   r9   r2   r2   r3   r:   @  s    c                 C   s,   t | rdS | jsd S tt| j|S d S r-   )r   rY   r   r   rI   rZ   r9   r2   r2   r3   r:   D  s
    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:   M  s    c                 C   s   t tj| |S r;   )r4   r   rI   r9   r2   r2   r3   r:   Q  s    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r1   r/   r2   r3   rB   Z  rC   zBM_elements.<locals>.<genexpr>)rG   rd   r.   r2   r   r3   BM_elementsX  s    r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   rZ   r.   r2   r2   r3   MS_elements\  s    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   )xr2   r2   r3   <lambda>a  rC   z!MatMul_elements.<locals>.<lambda>FT)r   rH   r   r   r   )Zmatrix_predicateZscalar_predicater0   r1   dZfactorsrz   r2   r2   r3   MatMul_elements`  s    r   c                 C   s   t | |tjS r;   )r   r   integer_elementsr9   r2   r2   r3   r:   h  s    c                 C   s@   | j \}}tt||}|s"d S |jdkr<tt||S d S rN   )rH   r   r   rO   r_   r   r`   r2   r2   r3   r:   m  s    

c                 C   s   dS r-   r2   r9   r2   r2   r3   r:   x  s    c                 C   s   t tjtj| |S r;   )r   r   r   rO   r9   r2   r2   r3   r:   |  s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   t | |tjS r;   )r   r   real_elementsr9   r2   r2   r3   r:     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rN   )rH   r   r   rO   rP   rQ   r   rR   r2   r2   r3   r:     s    
c                 C   s   t tjtj| |S r;   )r   r   r   realr9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   t | |tjS r;   )r   r   complex_elementsr9   r2   r2   r3   r:     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rN   )rH   r   r   rO   rP   rQ   r   rR   r2   r2   r3   r:     s    
c                 C   s   t tjtj| |S r;   )r   r   r   complexr9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r   r   r   r9   r2   r2   r3   r:     s    c                 C   s   dS r-   r2   r9   r2   r2   r3   r:     s    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.blockmatrixr   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,   r4   registerr:   Zregister_manyr   r   r   r   r2   r2   r2   r3   <module>   s  P<















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

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