o
    jg1W                  	   @   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)
predicates	predicateexprassumptions r3   [/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/assumptions/handlers/matrices.py_Factorization   s   
r5   c                 C   s   | j d | j d kS Nr      shaper1   r2   r3   r3   r4   _#   s   r;   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r2   r3   r4   	<genexpr>-       _.<locals>.<genexpr>Tr   r   r7   )
as_coeff_mmulallargsr   r   diagonallenTr?   r   r1   r2   factormmulr3   rC   r4   r;   *   s   $c                 C   d   | j \}}tt||}|sd S tt| |}|s(|dkr0tt||r0tt||S d S NF)rJ   r   r   integernegative
invertibler?   r1   r2   baseexpint_expnon_negativer3   r3   r4   r;   8      
c                    s   t  fdd| jD S )Nc                 3   r<   r=   r>   r@   rC   r3   r4   rD   G   rE   rF   rI   rJ   r:   r3   rC   r4   r;   E   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   rK   r?   r   r:   r3   r3   r4   r;   I   s   c                 C   s   t t| |S r=   )r   r   squarer:   r3   r3   r4   r;   T      c                 C      t t| j|S r=   )r   r   r?   rB   r:   r3   r3   r4   r;   X      c                 C   s0   t t| |r
dS | jsd S t t| j|S r-   )r   r   rK   on_diagr?   parentr:   r3   r3   r4   r;   \   s
   c                 C      dS r-   r3   r:   r3   r3   r4   r;   g      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   rU   r@   rC   r3   r4   rD   q   rE   rF   Tc                 3   $    | ]}t t| d u V  qdS FNrg   r@   rC   r3   r4   rD   s       FrH   rI   rJ   anyrN   r3   rC   r4   r;   n   s   c                 C   @   | j \}}tt||}|sd S |jdkrtt||S d S rR   )rJ   r   r   rS   is_negativerU   r1   r2   rW   rX   rY   r3   r3   r4   r;   w      

c                 C   s   d S r=   r3   r:   r3   r3   r4   r;      rf   c                 C   $   | j sdS t| t|v rdS d S r]   )r^   r   rU   r   r:   r3   r3   r4   r;      
   c                 C   re   r-   r3   r:   r3   r3   r4   r;      rf   c                 C   re   rR   r3   r:   r3   r3   r4   r;      rf   c                 C      | j d dko| j d dkS r6   r8   r:   r3   r3   r4   r;         c                 C   ra   r=   )r   r   rU   rB   r:   r3   r3   r4   r;      rb   c                 C      | j sd S tt| j|S r=   )rc   r   r   rU   rd   r:   r3   r3   r4   r;         c                 C   s   | j sdS |  | jkS rR   )r^   rankrowsr:   r3   r3   r4   r;      s   c                 C   s   | j sdS d S rR   )r^   r:   r3   r3   r4   r;      s   c                 C   sN  | j sdS | jdkrtt| jd |S t| } | jdkr| j \\}}\}}tt||dkrHtt|||j |  |}|d urH|S tt||dkrgtt|||j |  |}|d urg|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 )NFr7   r7   r   r   )r   r   T)	r^   
blockshaper   r   rU   blocksr   tolistI)r1   r2   ABCDrU   r3   r3   r4   r;      s0   

c                    s(   | j | jkrd S t fdd| jD S )Nc                    s   g | ]
}t t| qS r3   rg   )rA   arC   r3   r4   
<listcomp>   s    z_.<locals>.<listcomp>)rowblocksizescolblocksizesr   diagr:   r3   rC   r4   r;      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@   rC   r3   r4   rD      rE   rF   r7   Tc                 3   rh   ri   rg   r@   rC   r3   r4   rD      rj   Frk   rN   r3   rC   r4   r;      s   c                 C   2   | j \}}tt||}|rtt||S d S r=   )rJ   r   r   rS   r   ro   r3   r3   r4   r;      
   
c                 C   s0   t | jdkrtt| jd |rdS d S d S )Nr7   r   T)rL   rJ   r   r   r   r:   r3   r3   r4   r;      s
   c                 C   8   | j rtt| |du rdS t| t|v rdS d S r]   )r^   r   r   rU   r   r   r:   r3   r3   r4   r;         c                 C   re   r-   r3   r:   r3   r3   r4   r;      rf   c                 C   re   rR   r3   r:   r3   r3   r4   r;      rf   c                 C   ra   r=   )r   r   r   rB   r:   r3   r3   r4   r;      rb   c                 C   ru   r=   )rc   r   r   r   rd   r:   r3   r3   r4   r;     rv   c                 C      t tj| |S r=   )r5   r   r   r:   r3   r3   r4   r;        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@   rC   r3   r4   rD     rE   rF   r7   Tc                 3   rh   ri   rg   r@   rC   r3   r4   rD     rj   F)rH   rI   rJ   absrl   rN   r3   rC   r4   r;     s   c                 C   r   r=   )rJ   r   r   rS   r   ro   r3   r3   r4   r;     r   c                 C   r   r]   )r^   r   r   rU   r   r   r:   r3   r3   r4   r;   "  r   c                 C   ra   r=   )r   r   r   rB   r:   r3   r3   r4   r;   *  rb   c                 C   ru   r=   )rc   r   r   r   rd   r:   r3   r3   r4   r;   .  rv   c                 C   re   r-   r3   r:   r3   r3   r4   r;   5  rf   c                 C   re   rR   r3   r:   r3   r3   r4   r;   9  rf   c                 C   r   r=   )r5   r   r   r:   r3   r3   r4   r;   =  r   c                        t  fdd| jD rdS d S )Nc                 3   r<   r=   )r   r   fullrankr@   rC   r3   r4   rD   F  rE   rF   Tr\   r:   r3   rC   r4   r;   D     c                 C   sD   | j \}}tt||}|r tt| |r tt||S d S r=   )rJ   r   r   rS   rT   r   ro   r3   r3   r4   r;   I  s
   
c                 C   re   r-   r3   r:   r3   r3   r4   r;   R  rf   c                 C   re   rR   r3   r:   r3   r3   r4   r;   V  rf   c                 C   rs   r6   r8   r:   r3   r3   r4   r;   Z  rt   c                 C   ra   r=   )r   r   r   rB   r:   r3   r3   r4   r;   ^  rb   c                 C   s   t t| j|rdS d S r-   )r   r   r   rd   r:   r3   r3   r4   r;   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@   rC   r3   r4   rD   m      rF   r   Tr   rG   r7   )
rH   rI   rJ   rL   rM   r   r   r   r   r   rN   r3   rC   r4   r;   j  s"   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   r   rJ   r:   r3   r3   r4   r;   v  s   c                    r   )Nc                 3   r<   r=   r   r@   rC   r3   r4   rD   ~  r   rF   Tr\   r:   r3   rC   r4   r;   |  s
   c                 C   rq   r]   )r^   r   r   r   r:   r3   r3   r4   r;     rr   c                 C   re   r-   r3   r:   r3   r3   r4   r;     rf   c                 C   re   rR   r3   r:   r3   r3   r4   r;     rf   c                 C   rs   r6   r8   r:   r3   r3   r4   r;     rt   c                 C   ra   r=   )r   r   r   rB   r:   r3   r3   r4   r;     rb   c                 C   ru   r=   )rc   r   r   r   rd   r:   r3   r3   r4   r;     rv   c                    *   |   \}}t fdd|D rdS d S )Nc                 3   r<   r=   r   r   upper_triangularrA   mrC   r3   r4   rD     rE   rF   Tas_coeff_matricesrI   r1   r2   rO   matricesr3   rC   r4   r;        c                    r   )Nc                 3   r<   r=   r   r@   rC   r3   r4   rD     rE   rF   Tr\   r:   r3   rC   r4   r;     r   c                 C   rQ   rR   )rJ   r   r   rS   rT   rU   r   rV   r3   r3   r4   r;     r[   c                 C      t | t|v rdS d S r-   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   re   r-   r3   r:   r3   r3   r4   r;     rf   c                 C   rs   r6   r8   r:   r3   r3   r4   r;     rt   c                 C   ra   r=   r   r   lower_triangularrB   r:   r3   r3   r4   r;     rb   c                 C   ra   r=   r   r   r   rB   r:   r3   r3   r4   r;     rb   c                 C   ru   r=   )rc   r   r   r   rd   r:   r3   r3   r4   r;     rv   c                 C   r   r=   )r5   r   r   r:   r3   r3   r4   r;     r   c                    r   )Nc                 3   r<   r=   r   r   r   r   rC   r3   r4   rD     rE   rF   Tr   r   r3   rC   r4   r;     r   c                    r   )Nc                 3   r<   r=   r   r@   rC   r3   r4   rD     rE   rF   Tr\   r:   r3   rC   r4   r;     r   c                 C   rQ   rR   )rJ   r   r   rS   rT   rU   r   rV   r3   r3   r4   r;     r[   c                 C   r   r-   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   re   r-   r3   r:   r3   r3   r4   r;     rf   c                 C   rs   r6   r8   r:   r3   r3   r4   r;     rt   c                 C   ra   r=   r   r:   r3   r3   r4   r;     rb   c                 C   ra   r=   r   r:   r3   r3   r4   r;     rb   c                 C   ru   r=   )rc   r   r   r   rd   r:   r3   r3   r4   r;   
  rv   c                 C   r   r=   )r5   r   r   r:   r3   r3   r4   r;     r   c                 C   s
   | j dv S )N)rz   ry   r8   )r1   r3   r3   r4   _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   rK   r   rC   r3   r4   rD      rE   rF   )r   r   rI   r   r3   rC   r4   r;     s   c                 C   rQ   rR   )rJ   r   r   rS   rT   rU   rK   rV   r3   r3   r4   r;   #  r[   c                    r   )Nc                 3   r<   r=   r   r@   rC   r3   r4   rD   2  rE   rF   Tr\   r:   r3   rC   r4   r;   0  r   c                 C   s&   t | rdS t| t|v rdS d S r-   )r   r   rK   r   r:   r3   r3   r4   r;   5  s
   c                 C   rs   r6   r8   r:   r3   r3   r4   r;   <  rt   c                 C   ra   r=   )r   r   rK   rB   r:   r3   r3   r4   r;   @  rb   c                 C   s(   t | rdS | jsd S tt| j|S r-   )r   rc   r   r   rK   rd   r:   r3   r3   r4   r;   D  s
   c                 C   re   r-   r3   r:   r3   r3   r4   r;   M  rf   c                 C   r   r=   )r5   r   rK   r:   r3   r3   r4   r;   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   )rA   br2   r0   r3   r4   rD   Z  s    zBM_elements.<locals>.<genexpr>)rI   r|   r/   r3   r   r4   BM_elementsX  s   r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   rd   r/   r3   r3   r4   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   )xr3   r3   r4   <lambda>a  s   
 z!MatMul_elements.<locals>.<lambda>FT)r   rJ   r   r   r   )matrix_predicatescalar_predicater1   r2   dfactorsr   r3   r3   r4   MatMul_elements`  s   r   c                 C      t | |tjS r=   )r   r   integer_elementsr:   r3   r3   r4   r;   h     c                 C   rm   rR   )rJ   r   r   rS   rn   r   ro   r3   r3   r4   r;   m  rp   c                 C   re   r-   r3   r:   r3   r3   r4   r;   x  rf   c                 C      t tjtj| |S r=   )r   r   r   rS   r:   r3   r3   r4   r;   |  rb   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   r   r=   )r   r   real_elementsr:   r3   r3   r4   r;     r   c                 C   rQ   rR   )rJ   r   r   rS   rT   rU   r   rV   r3   r3   r4   r;     r[   c                 C   r   r=   )r   r   r   realr:   r3   r3   r4   r;     rb   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   r   r=   )r   r   complex_elementsr:   r3   r3   r4   r;     r   c                 C   rQ   rR   )rJ   r   r   rS   rT   rU   r   rV   r3   r3   r4   r;     r[   c                 C   r   r=   )r   r   r   complexr:   r3   r3   r4   r;     rb   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   r   r=   )r   r   r   r:   r3   r3   r4   r;     r   c                 C   re   r-   r3   r:   r3   r3   r4   r;     rf   N)?__doc__sympy.logic.boolalgr   sympy.assumptionsr   r   sympy.assumptions.handlersr   sympy.matricesr   sympy.matrices.expressionsr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &sympy.matrices.expressions.blockmatrixr   )sympy.matrices.expressions.factorizationsr   "sympy.matrices.expressions.fourierr   sympy.core.logicr   sympy.utilities.iterablesr   
sympy.corer   predicates.matricesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r5   registerr;   register_manyr   r   r   r   r3   r3   r3   r4   <module>   s   P<
















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

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