a
    <b5W                  	   @   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   s/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-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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r0   r1   r2   	<genexpr>,       _.<locals>.<genexpr>Tr   r   r5   )
as_coeff_mmulallargsr   r   diagonallenTr<   r   r/   r0   factorZmmulr1   r@   r2   r9   )   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)rG   r   r   integernegative
invertibler<   r/   r0   baseexpint_expZnon_negativer1   r1   r2   r9   7   s    
c                    s   t  fdd| jD S )Nc                 3   s   | ]}t t| V  qd S r:   r;   r=   r@   r1   r2   rA   F   rB   rC   rF   rG   r8   r1   r@   r2   r9   D   s    c                 C   s8   | j s
dS tt| |rdS t| t|v r4dS d S NFT)	is_squarer   r   rH   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   s    c                 C   s   t t| j|S r:   )r   r   r<   r?   r8   r1   r1   r2   r9   W   s    c                 C   s4   t t| |rdS | jsd S t t| j|S d S r,   )r   r   rH   on_diagr<   parentr8   r1   r1   r2   r9   [   s
    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9   f   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   rP   r=   r@   r1   r2   rA   p   rB   rC   Tc                 3   s"   | ]}t t| d u V  qdS FNrZ   r=   r@   r1   r2   rA   r   s   FrE   rF   rG   anyrK   r1   r@   r2   r9   m   s    c                 C   s@   | j \}}tt||}|s"d S |jdkr<tt||S d S rM   )rG   r   r   rN   is_negativerP   r/   r0   rR   rS   rT   r1   r1   r2   r9   v   s    

c                 C   s   d S r:   r1   r8   r1   r1   r2   r9      s    c                 C   s$   | j s
dS t| t|v r dS d S rV   )rW   r   rP   r   r8   r1   r1   r2   r9      s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9      s    c                 C   s   dS rM   r1   r8   r1   r1   r2   r9      s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9      s    c                 C   s   t t| j|S r:   )r   r   rP   r?   r8   r1   r1   r2   r9      s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   rP   rY   r8   r1   r1   r2   r9      s    c                 C   s   | j s
dS |  | jkS rM   )rW   Zrankrowsr8   r1   r1   r2   r9      s    c                 C   s   | j s
dS d S rM   )rW   r8   r1   r1   r2   r9      s    c                 C   sd  ddl m} | jsdS | jdkr6tt| jd |S || } | jdkr`| 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r`tt|||j	 |  |}|d ur`|S d S )Nr   )reblock_2x2Fr5   r5   r   r   )r   r   T)
Z&sympy.matrices.expressions.blockmatrixra   rW   Z
blockshaper   r   rP   blockstolistI)r/   r0   ra   ABCDrP   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   rZ   )r>   ar@   r1   r2   
<listcomp>   rB   z_.<locals>.<listcomp>)ZrowblocksizesZcolblocksizesr   Zdiagr8   r1   r@   r2   r9      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=   r@   r1   r2   rA      rB   rC   r5   Tc                 3   s"   | ]}t t| d u V  qdS r[   rZ   r=   r@   r1   r2   rA      s   Fr\   rK   r1   r@   r2   r9      s    c                 C   s2   | j \}}tt||}|r.tt||S d S r:   )rG   r   r   rN   rm   r_   r1   r1   r2   r9      s
    
c                 C   s,   t | jdkr(tt| jd |r(dS d S )Nr5   r   T)rI   rG   r   r   rm   r8   r1   r1   r2   r9      s    c                 C   s8   | j rtt| |du rdS t| t|v r4dS d S rV   )rW   r   r   rP   rm   r   r8   r1   r1   r2   r9      s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9      s    c                 C   s   dS rM   r1   r8   r1   r1   r2   r9      s    c                 C   s   t t| j|S r:   )r   r   rm   r?   r8   r1   r1   r2   r9      s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   rm   rY   r8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r3   r   rm   r8   r1   r1   r2   r9     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=   r@   r1   r2   rA     rB   rC   r5   Tc                 3   s"   | ]}t t| d u V  qdS r[   rZ   r=   r@   r1   r2   rA     s   F)rE   rF   rG   absr]   rK   r1   r@   r2   r9     s    
c                 C   s2   | j \}}tt||}|r.tt||S d S r:   )rG   r   r   rN   rn   r_   r1   r1   r2   r9     s
    
c                 C   s8   | j rtt| |du rdS t| t|v r4dS d S rV   )rW   r   r   rP   rn   r   r8   r1   r1   r2   r9   "  s    c                 C   s   t t| j|S r:   )r   r   rn   r?   r8   r1   r1   r2   r9   *  s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   rn   rY   r8   r1   r1   r2   r9   .  s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9   5  s    c                 C   s   dS rM   r1   r8   r1   r1   r2   r9   9  s    c                 C   s   t tj| |S r:   )r3   r   rn   r8   r1   r1   r2   r9   =  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=   r@   r1   r2   rA   F  rB   rC   TrU   r8   r1   r@   r2   r9   D  s    c                 C   sD   | j \}}tt||}|r@tt| |r@tt||S d S r:   )rG   r   r   rN   rO   rp   r_   r1   r1   r2   r9   I  s
    
c                 C   s   dS r,   r1   r8   r1   r1   r2   r9   R  s    c                 C   s   dS rM   r1   r8   r1   r1   r2   r9   V  s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9   Z  s    c                 C   s   t t| j|S r:   )r   r   rp   r?   r8   r1   r1   r2   r9   ^  s    c                 C   s   t t| j|rdS d S r,   )r   r   rm   rY   r8   r1   r1   r2   r9   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=   r@   r1   r2   rA   m  s   rC   r   Tr   rD   r5   )
rE   rF   rG   rI   rJ   r   r   rp   rr   r   rK   r1   r@   r2   r9   j  s"    c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rr   rG   r8   r1   r1   r2   r9   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=   r@   r1   r2   rA   ~  s   rC   TrU   r8   r1   r@   r2   r9   |  s    c                 C   s$   | j s
dS t| t|v r dS d S rV   )rW   r   rr   r   r8   r1   r1   r2   r9     s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9     s    c                 C   s   dS rM   r1   r8   r1   r1   r2   r9     s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9     s    c                 C   s   t t| j|S r:   )r   r   rr   r?   r8   r1   r1   r2   r9     s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   rr   rY   r8   r1   r1   r2   r9     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>   mr@   r1   r2   rA     rB   rC   Tas_coeff_matricesrF   r/   r0   rL   matricesr1   r@   r2   r9     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=   r@   r1   r2   rA     rB   rC   TrU   r8   r1   r@   r2   r9     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rM   )rG   r   r   rN   rO   rP   rt   rQ   r1   r1   r2   r9     s    
c                 C   s   t | t|v rdS d S r,   )r   rt   r   r8   r1   r1   r2   r9     s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9     s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9     s    c                 C   s   t t| j|S r:   r   r   lower_triangularr?   r8   r1   r1   r2   r9     s    c                 C   s   t t| j|S r:   r   r   rt   r?   r8   r1   r1   r2   r9     s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   rt   rY   r8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r3   r   rt   r8   r1   r1   r2   r9     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   r@   r1   r2   rA     rB   rC   Trw   ry   r1   r@   r2   r9     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=   r@   r1   r2   rA     rB   rC   TrU   r8   r1   r@   r2   r9     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rM   )rG   r   r   rN   rO   rP   r|   rQ   r1   r1   r2   r9     s    
c                 C   s   t | t|v rdS d S r,   )r   r|   r   r8   r1   r1   r2   r9     s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9     s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9     s    c                 C   s   t t| j|S r:   r}   r8   r1   r1   r2   r9     s    c                 C   s   t t| j|S r:   r{   r8   r1   r1   r2   r9     s    c                 C   s    | j s
d S tt| j|S d S r:   )rX   r   r   r|   rY   r8   r1   r1   r2   r9   
  s    c                 C   s   t tj| |S r:   )r3   r   r|   r8   r1   r1   r2   r9     s    c                 C   s
   | j dv S )N)rc   rb   r6   )r/   r1   r1   r2   _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   rH   ru   r@   r1   r2   rA      rB   rC   )r   rx   rF   ry   r1   r@   r2   r9     s
    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rM   )rG   r   r   rN   rO   rP   rH   rQ   r1   r1   r2   r9   #  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=   r@   r1   r2   rA   2  rB   rC   TrU   r8   r1   r@   r2   r9   0  s    c                 C   s&   t | rdS t| t|v r"dS d S r,   )r   r   rH   r   r8   r1   r1   r2   r9   5  s    c                 C   s   | j d dko| j d dkS r4   r6   r8   r1   r1   r2   r9   <  s    c                 C   s   t t| j|S r:   )r   r   rH   r?   r8   r1   r1   r2   r9   @  s    c                 C   s,   t | rdS | jsd S tt| j|S d S r,   )r   rX   r   r   rH   rY   r8   r1   r1   r2   r9   D  s
    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9   M  s    c                 C   s   t tj| |S r:   )r3   r   rH   r8   r1   r1   r2   r9   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r0   r.   r1   r2   rA   Z  rB   zBM_elements.<locals>.<genexpr>)rF   rd   r-   r1   r   r2   BM_elementsX  s    r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   rY   r-   r1   r1   r2   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   )xr1   r1   r2   <lambda>a  rB   z!MatMul_elements.<locals>.<lambda>FT)r   rG   r   r   r   )Zmatrix_predicateZscalar_predicater/   r0   dZfactorsrz   r1   r1   r2   MatMul_elements`  s    r   c                 C   s   t | |tjS r:   )r   r   integer_elementsr8   r1   r1   r2   r9   h  s    c                 C   s@   | j \}}tt||}|s"d S |jdkr<tt||S d S rM   )rG   r   r   rN   r^   r   r_   r1   r1   r2   r9   m  s    

c                 C   s   dS r,   r1   r8   r1   r1   r2   r9   x  s    c                 C   s   t tjtj| |S r:   )r   r   r   rN   r8   r1   r1   r2   r9   |  s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   t | |tjS r:   )r   r   real_elementsr8   r1   r1   r2   r9     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rM   )rG   r   r   rN   rO   rP   r   rQ   r1   r1   r2   r9     s    
c                 C   s   t tjtj| |S r:   )r   r   r   realr8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   t | |tjS r:   )r   r   complex_elementsr8   r1   r1   r2   r9     s    c                 C   sd   | j \}}tt||}|s"d S tt| |}|sP|dkr`tt||r`tt||S d S rM   )rG   r   r   rN   rO   rP   r   rQ   r1   r1   r2   r9     s    
c                 C   s   t tjtj| |S r:   )r   r   r   complexr8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   t tj| |S r:   )r   r   r   r8   r1   r1   r2   r9     s    c                 C   s   dS r,   r1   r8   r1   r1   r2   r9     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.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<















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

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