o
    FZh1W                  	   @   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   R/var/www/auris/lib/python3.10/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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r1   r2   r3   	<genexpr>-       _.<locals>.<genexpr>Tr   r   r6   )
as_coeff_mmulallargsr   r   diagonallenTr>   r   r0   r1   factorZmmulr2   rB   r3   r:   *   s   $c                 C   d   | j \}}tt||}|sd S tt| |}|s(|dkr0tt||r0tt||S d S NF)rI   r   r   integernegative
invertibler>   r0   r1   baseexpint_expZnon_negativer2   r2   r3   r:   8      
c                    s   t  fdd| jD S )Nc                 3   r;   r<   r=   r?   rB   r2   r3   rC   G   rD   rE   rH   rI   r9   r2   rB   r3   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   rJ   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      c                 C      t t| j|S r<   )r   r   r>   rA   r9   r2   r2   r3   r:   X      c                 C   s0   t t| |r
dS | jsd S t t| j|S r-   )r   r   rJ   on_diagr>   parentr9   r2   r2   r3   r:   \   s
   c                 C      dS r-   r2   r9   r2   r2   r3   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   rS   r?   rB   r2   r3   rC   q   rD   rE   Tc                 3   $    | ]}t t| d u V  qdS FNrc   r?   rB   r2   r3   rC   s       FrG   rH   rI   anyrM   r2   rB   r3   r:   n   s   c                 C   @   | j \}}tt||}|sd S |jdkrtt||S d S rP   )rI   r   r   rQ   is_negativerS   r0   r1   rU   rV   rW   r2   r2   r3   r:   w      

c                 C   s   d S r<   r2   r9   r2   r2   r3   r:      rb   c                 C   $   | j sdS t| t|v rdS d S rZ   )r[   r   rS   r   r9   r2   r2   r3   r:      
   c                 C   ra   r-   r2   r9   r2   r2   r3   r:      rb   c                 C   ra   rP   r2   r9   r2   r2   r3   r:      rb   c                 C      | j d dko| j d dkS r5   r7   r9   r2   r2   r3   r:         c                 C   r]   r<   )r   r   rS   rA   r9   r2   r2   r3   r:      r^   c                 C      | j sd S tt| j|S r<   )r_   r   r   rS   r`   r9   r2   r2   r3   r:         c                 C   s   | j sdS |  | jkS rP   )r[   Zrankrowsr9   r2   r2   r3   r:      s   c                 C   s   | j sdS d S rP   )r[   r9   r2   r2   r3   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r6   r6   r   r   )r   r   T)	r[   Z
blockshaper   r   rS   blocksr   tolistI)r0   r1   ABCDrS   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   rc   )r@   arB   r2   r3   
<listcomp>   s    z_.<locals>.<listcomp>)ZrowblocksizesZcolblocksizesr   Zdiagr9   r2   rB   r3   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?   rB   r2   r3   rC      rD   rE   r6   Tc                 3   rd   re   rc   r?   rB   r2   r3   rC      rf   Frg   rM   r2   rB   r3   r:      s   c                 C   2   | j \}}tt||}|rtt||S d S r<   )rI   r   r   rQ   r   rk   r2   r2   r3   r:      
   
c                 C   s0   t | jdkrtt| jd |rdS d S d S )Nr6   r   T)rK   rI   r   r   r   r9   r2   r2   r3   r:      s
   c                 C   8   | j rtt| |du rdS t| t|v rdS d S rZ   )r[   r   r   rS   r   r   r9   r2   r2   r3   r:         c                 C   ra   r-   r2   r9   r2   r2   r3   r:      rb   c                 C   ra   rP   r2   r9   r2   r2   r3   r:      rb   c                 C   r]   r<   )r   r   r   rA   r9   r2   r2   r3   r:      r^   c                 C   rq   r<   )r_   r   r   r   r`   r9   r2   r2   r3   r:     rr   c                 C      t tj| |S r<   )r4   r   r   r9   r2   r2   r3   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?   rB   r2   r3   rC     rD   rE   r6   Tc                 3   rd   re   rc   r?   rB   r2   r3   rC     rf   F)rG   rH   rI   absrh   rM   r2   rB   r3   r:     s   c                 C   r   r<   )rI   r   r   rQ   r   rk   r2   r2   r3   r:     r   c                 C   r   rZ   )r[   r   r   rS   r   r   r9   r2   r2   r3   r:   "  r   c                 C   r]   r<   )r   r   r   rA   r9   r2   r2   r3   r:   *  r^   c                 C   rq   r<   )r_   r   r   r   r`   r9   r2   r2   r3   r:   .  rr   c                 C   ra   r-   r2   r9   r2   r2   r3   r:   5  rb   c                 C   ra   rP   r2   r9   r2   r2   r3   r:   9  rb   c                 C   r   r<   )r4   r   r   r9   r2   r2   r3   r:   =  r   c                        t  fdd| jD rdS d S )Nc                 3   r;   r<   )r   r   fullrankr?   rB   r2   r3   rC   F  rD   rE   TrY   r9   r2   rB   r3   r:   D     c                 C   sD   | j \}}tt||}|r tt| |r tt||S d S r<   )rI   r   r   rQ   rR   r   rk   r2   r2   r3   r:   I  s
   
c                 C   ra   r-   r2   r9   r2   r2   r3   r:   R  rb   c                 C   ra   rP   r2   r9   r2   r2   r3   r:   V  rb   c                 C   ro   r5   r7   r9   r2   r2   r3   r:   Z  rp   c                 C   r]   r<   )r   r   r   rA   r9   r2   r2   r3   r:   ^  r^   c                 C   s   t t| j|rdS d S r-   )r   r   r   r`   r9   r2   r2   r3   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?   rB   r2   r3   rC   m      rE   r   Tr   rF   r6   )
rG   rH   rI   rK   rL   r   r   r   r   r   rM   r2   rB   r3   r:   j  s"   c                 C   s   t t| jd |rdS d S )Nr   T)r   r   r   rI   r9   r2   r2   r3   r:   v  s   c                    r   )Nc                 3   r;   r<   r   r?   rB   r2   r3   rC   ~  r   rE   TrY   r9   r2   rB   r3   r:   |  s
   c                 C   rm   rZ   )r[   r   r   r   r9   r2   r2   r3   r:     rn   c                 C   ra   r-   r2   r9   r2   r2   r3   r:     rb   c                 C   ra   rP   r2   r9   r2   r2   r3   r:     rb   c                 C   ro   r5   r7   r9   r2   r2   r3   r:     rp   c                 C   r]   r<   )r   r   r   rA   r9   r2   r2   r3   r:     r^   c                 C   rq   r<   )r_   r   r   r   r`   r9   r2   r2   r3   r:     rr   c                    *   |   \}}t fdd|D rdS d S )Nc                 3   r;   r<   r   r   upper_triangularr@   mrB   r2   r3   rC     rD   rE   Tas_coeff_matricesrH   r0   r1   rN   matricesr2   rB   r3   r:        c                    r   )Nc                 3   r;   r<   r   r?   rB   r2   r3   rC     rD   rE   TrY   r9   r2   rB   r3   r:     r   c                 C   rO   rP   )rI   r   r   rQ   rR   rS   r   rT   r2   r2   r3   r:     rX   c                 C      t | t|v rdS d S r-   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   ra   r-   r2   r9   r2   r2   r3   r:     rb   c                 C   ro   r5   r7   r9   r2   r2   r3   r:     rp   c                 C   r]   r<   r   r   lower_triangularrA   r9   r2   r2   r3   r:     r^   c                 C   r]   r<   r   r   r   rA   r9   r2   r2   r3   r:     r^   c                 C   rq   r<   )r_   r   r   r   r`   r9   r2   r2   r3   r:     rr   c                 C   r   r<   )r4   r   r   r9   r2   r2   r3   r:     r   c                    r   )Nc                 3   r;   r<   r   r   r   r   rB   r2   r3   rC     rD   rE   Tr   r   r2   rB   r3   r:     r   c                    r   )Nc                 3   r;   r<   r   r?   rB   r2   r3   rC     rD   rE   TrY   r9   r2   rB   r3   r:     r   c                 C   rO   rP   )rI   r   r   rQ   rR   rS   r   rT   r2   r2   r3   r:     rX   c                 C   r   r-   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   ra   r-   r2   r9   r2   r2   r3   r:     rb   c                 C   ro   r5   r7   r9   r2   r2   r3   r:     rp   c                 C   r]   r<   r   r9   r2   r2   r3   r:     r^   c                 C   r]   r<   r   r9   r2   r2   r3   r:     r^   c                 C   rq   r<   )r_   r   r   r   r`   r9   r2   r2   r3   r:   
  rr   c                 C   r   r<   )r4   r   r   r9   r2   r2   r3   r:     r   c                 C   s
   | j dv S )N)ru   rt   r7   )r0   r2   r2   r3   _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   rJ   r   rB   r2   r3   rC      rD   rE   )r   r   rH   r   r2   rB   r3   r:     s   c                 C   rO   rP   )rI   r   r   rQ   rR   rS   rJ   rT   r2   r2   r3   r:   #  rX   c                    r   )Nc                 3   r;   r<   r   r?   rB   r2   r3   rC   2  rD   rE   TrY   r9   r2   rB   r3   r:   0  r   c                 C   s&   t | rdS t| t|v rdS d S r-   )r   r   rJ   r   r9   r2   r2   r3   r:   5  s
   c                 C   ro   r5   r7   r9   r2   r2   r3   r:   <  rp   c                 C   r]   r<   )r   r   rJ   rA   r9   r2   r2   r3   r:   @  r^   c                 C   s(   t | rdS | jsd S tt| j|S r-   )r   r_   r   r   rJ   r`   r9   r2   r2   r3   r:   D  s
   c                 C   ra   r-   r2   r9   r2   r2   r3   r:   M  rb   c                 C   r   r<   )r4   r   rJ   r9   r2   r2   r3   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   )r@   br1   r/   r2   r3   rC   Z  s    zBM_elements.<locals>.<genexpr>)rH   rv   r.   r2   r   r3   BM_elementsX  s   r   c                 C   s   t | |j|S )z Matrix Slice elements. )r   r`   r.   r2   r2   r3   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   )xr2   r2   r3   <lambda>a  s   
 z!MatMul_elements.<locals>.<lambda>FT)r   rI   r   r   r   )Zmatrix_predicateZscalar_predicater0   r1   dZfactorsr   r2   r2   r3   MatMul_elements`  s   r   c                 C      t | |tjS r<   )r   r   integer_elementsr9   r2   r2   r3   r:   h     c                 C   ri   rP   )rI   r   r   rQ   rj   r   rk   r2   r2   r3   r:   m  rl   c                 C   ra   r-   r2   r9   r2   r2   r3   r:   x  rb   c                 C      t tjtj| |S r<   )r   r   r   rQ   r9   r2   r2   r3   r:   |  r^   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   r   r<   )r   r   real_elementsr9   r2   r2   r3   r:     r   c                 C   rO   rP   )rI   r   r   rQ   rR   rS   r   rT   r2   r2   r3   r:     rX   c                 C   r   r<   )r   r   r   realr9   r2   r2   r3   r:     r^   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   r   r<   )r   r   complex_elementsr9   r2   r2   r3   r:     r   c                 C   rO   rP   )rI   r   r   rQ   rR   rS   r   rT   r2   r2   r3   r:     rX   c                 C   r   r<   )r   r   r   complexr9   r2   r2   r3   r:     r^   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   r   r<   )r   r   r   r9   r2   r2   r3   r:     r   c                 C   ra   r-   r2   r9   r2   r2   r3   r:     rb   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<
















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

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