U
    -e1W                  	   @   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 krdS d S NT)Z
predicates	predicateexprassumptions r2   d/var/www/html/Darija-Ai-Train/env/lib/python3.8/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>-   s     _.<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)rG   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   s     rC   rF   rG   r9   r2   rA   r3   r:   E   s    c                 C   s8   | j s
dS tt| |rdS t| t|kr4dS d S NFT)	is_squarer   r   rH   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   rH   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   rP   r>   rA   r2   r3   rB   q   s     rC   Tc                 3   s"   | ]}t t| d kV  qdS FNrZ   r>   rA   r2   r3   rB   s   s   FrE   rF   rG   anyrK   r2   rA   r3   r:   n   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   r0   r1   rR   rS   rT   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|kr dS d S rV   )rW   r   rP   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 rM   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   rP   r@   r9   r2   r2   r3   r:      s    c                 C   s    | j s
d S tt| j|S d S r;   )rX   r   r   rP   rY   r9   r2   r2   r3   r:      s    c                 C   s   | j s
dS |  | jkS rM   )rW   Zrankrowsr9   r2   r2   r3   r:      s    c                 C   s   | j s
dS d S rM   )rW   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 k	r|S tt||dkrtt|||j |  |}|d k	r|S tt||dkrtt|||j |  |}|d k	r|S tt||dkrTtt|||j |  |}|d k	rT|S d S )NFr6   r6   r   r   )r   r   T)	rW   Z
blockshaper   r   rP   blocksr   tolistI)r0   r1   ABCDrP   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   rZ   )r?   arA   r2   r3   
<listcomp>   s     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      s     rC   r6   Tc                 3   s"   | ]}t t| d kV  qdS r[   rZ   r>   rA   r2   r3   rB      s   Fr\   rK   r2   rA   r3   r:      s    c                 C   s2   | j \}}tt||}|r.tt||S d S r;   )rG   r   r   rN   rl   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)rI   rG   r   r   rl   r9   r2   r2   r3   r:      s    c                 C   s8   | j rtt| |dkrdS t| t|kr4dS d S rV   )rW   r   r   rP   rl   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 rM   r2   r9   r2   r2   r3   r:      s    c                 C   s   t t| j|S r;   )r   r   rl   r@   r9   r2   r2   r3   r:      s    c                 C   s    | j s
d S tt| j|S d S r;   )rX   r   r   rl   rY   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r4   r   rl   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     s     rC   r6   Tc                 3   s"   | ]}t t| d kV  qdS r[   rZ   r>   rA   r2   r3   rB     s   F)rE   rF   rG   absr]   rK   r2   rA   r3   r:     s    
c                 C   s2   | j \}}tt||}|r.tt||S d S r;   )rG   r   r   rN   rm   r_   r2   r2   r3   r:     s
    
c                 C   s8   | j rtt| |dkrdS t| t|kr4dS d S rV   )rW   r   r   rP   rm   r   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;   )rX   r   r   rm   rY   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 rM   r2   r9   r2   r2   r3   r:   9  s    c                 C   s   t tj| |S r;   )r4   r   rm   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  s     rC   TrU   r9   r2   rA   r3   r:   D  s    c                 C   sD   | j \}}tt||}|r@tt| |r@tt||S d S r;   )rG   r   r   rN   rO   ro   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 rM   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   ro   r@   r9   r2   r2   r3   r:   ^  s    c                 C   s   t t| j|rdS d S r-   )r   r   rl   rY   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   rC   r   Tr   rD   r6   )
rE   rF   rG   rI   rJ   r   r   ro   rq   r   rK   r2   rA   r3   r:   j  s"    c                 C   s   t t| jd |rdS d S )Nr   T)r   r   rq   rG   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;   rp   r>   rA   r2   r3   rB   ~  s   rC   TrU   r9   r2   rA   r3   r:   |  s    c                 C   s$   | j s
dS t| t|kr dS d S rV   )rW   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 rM   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;   )rX   r   r   rq   rY   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     s     rC   Tas_coeff_matricesrF   r0   r1   rL   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;   rr   r>   rA   r2   r3   rB     s     rC   TrU   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 rM   )rG   r   r   rN   rO   rP   rs   rQ   r2   r2   r3   r:     s    
c                 C   s   t | t|krdS d S r-   )r   rs   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   rs   r@   r9   r2   r2   r3   r:     s    c                 C   s    | j s
d S tt| j|S d S r;   )rX   r   r   rs   rY   r9   r2   r2   r3   r:     s    c                 C   s   t tj| |S r;   )r4   r   rs   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{   rt   rA   r2   r3   rB     s     rC   Trv   rx   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     s     rC   TrU   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 rM   )rG   r   r   rN   rO   rP   r{   rQ   r2   r2   r3   r:     s    
c                 C   s   t | t|k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;   rz   r9   r2   r2   r3   r:     s    c                 C   s    | j s
d S tt| j|S d S r;   )rX   r   r   r{   rY   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kS )N)rb   ra   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   rH   rt   rA   r2   r3   rB      s     rC   )r~   rw   rF   rx   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 rM   )rG   r   r   rN   rO   rP   rH   rQ   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  s     rC   TrU   r9   r2   rA   r3   r:   0  s    c                 C   s&   t | rdS t| t|kr"dS d S r-   )r~   r   rH   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   rH   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~   rX   r   r   rH   rY   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   rH   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  s     zBM_elements.<locals>.<genexpr>)rF   rc   r.   r2   r   r3   BM_elementsX  s    r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   rY   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      z!MatMul_elements.<locals>.<lambda>FT)r   rG   r   r   r   )Zmatrix_predicateZscalar_predicater0   r1   dZfactorsry   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 rM   )rG   r   r   rN   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   rN   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 rM   )rG   r   r   rN   rO   rP   r   rQ   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 rM   )rG   r   r   rN   rO   rP   r   rQ   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<















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

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