a
    {ždO=  ć                   @   s8  d dl mZ d dlmZ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 d dl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mZm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) e#d	d
d\Z*Z+Z,Z-Z.Z/Z0ede/e/Z1ede/e/Z2ede/e/Z3ede/e/Z4ede/e/Z5ede/e/Z6e
e5e6ggZ7e
e5ge6ggZ8dd Z9dd Z:dd Z;dd Z<dd Z=dd Z>dd Z?d d! Z@d"d# ZAd$d% ZBd&d' ZCd(d) ZDd*d+ ZEd,d- ZFed.d/ ZGd0d1 ZHd2d3 ZId4d5 ZJd6d7 ZKd8d9 ZLd:d; ZMd<d= ZNd>d? ZOd@dA ZPdBdC ZQdDdE ZRdFdG ZSdHdI ZTdJdK ZUdLS )Mé    )ŚTrace)ŚraisesŚslow)Śblock_collapseŚ	bc_matmulŚbc_block_plus_identŚBlockDiagMatrixŚBlockMatrixŚbc_distŚ	bc_mataddŚbc_transposeŚ
bc_inverseŚblockcutŚreblock_2x2Śdeblock)ŚMatrixSymbolŚIdentityŚInverseŚtraceŚ	TransposeŚdetŚ
ZeroMatrixŚ	OneMatrix)ŚNonInvertibleMatrixError)ŚMatrixŚImmutableMatrixŚImmutableSparseMatrix)ŚTupleŚsymbolsŚExprŚS)Ś	transposeŚimŚrezi:n, pT)ŚintegerŚAŚBŚCŚDŚGŚHc                   C   s@   t tt t t ttt t tt t  t ggks<J d S ©N)r   r*   Śb1Śb2r)   r	   © r.   r.   śz/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pyŚtest_bc_matmul   s    r0   c                   C   s>   t tttggtttgg ttt tt ggks:J d S r+   )r   r	   r)   r*   r.   r.   r.   r/   Śtest_bc_matadd   s    ’r1   c                   C   s@   t ttttgttggttjtjgtjtjggks<J d S r+   )r   r   r	   r%   r&   r'   r(   ŚTr.   r.   r.   r/   Śtest_bc_transpose    s    ’r3   c                  C   s^   t dtt} t dtt}t dtt}t| ||}t||  td|  d| d| ”sZJ d S )Nr%   r&   r'   é   )r   ŚnŚmŚlr   r
   Śequals©r%   r&   r'   ŚXr.   r.   r/   Śtest_bc_dist_diag$   s
    r;   c                  C   s   t dtt} t dtt}t dtt}t dtt}t| |g||gg}t dtt tt }t|ttt  | ttttt| | ksJ d S )Nr%   r&   r'   r(   ŚZ)r   r5   r6   r	   r   r   r   )r%   r&   r'   r(   r:   r<   r.   r.   r/   Śtest_block_plus_ident,   s    ’r=   c                  C   sų  t dtt} t dtt}t dtt}t dtt}t dtt t}t dtt tt }tt| |g||gg}|j|j	 |ksJ t dtt}t
| d|  | d|  ks¬J t d	tt}t
|j|  | |j|  | ksÜJ |jtt tt fksöJ |jd
ksJ t|tt| j|jg|j|jggks4J t|j|jd d d ksTJ || jsdJ | |”jsvJ || jtt tfksJ || js¢J | |”js“J || j|jksŹJ t dtd}t d	td}tt|g|gg}	||	 jtt dfksJ t
||	 jd | | ||  ks:J t
||	 jd || ||  ksbJ t
t||	 tt
||	 ksJ t
t||	 d| t
||	 t
d| fks¼J t| gg}
t dg| j¢R  }t
|
| | | ksōJ d S )Nr%   r&   r'   r(   ŚMŚNŚEr4   ŚF©r4   r4   é’’’’é   )r   r   )rD   r   r<   )r   r5   r6   Śkr7   Śpr	   r   Ś	__class__Śargsr   r2   ŚshapeZ
blockshaper!   Ś	is_MatMulŚ	_blockmulŚ	is_MatAddŚ	_blockaddŚblocksr   )r%   r&   r'   r(   r>   r?   r:   r@   rA   ŚYZAbr<   r.   r.   r/   Śtest_BlockMatrix6   sF     $. ((&’rP   c                  C   s\   t ddgddgg} tt| gg| ks,J tddgddgg} tt| gg| ksXJ d S ©NrD   r4   é   é   )r   r   r	   r   ©r%   r.   r.   r/   Ś%test_block_collapse_explicit_matricesg   s    rU   c                  C   s   t ddd} tdd}t| |g||gg}t|| t| d |g||ggksRJ t|| | t| d |g||ggks~J d S )NŚar4   rR   )r   r   r	   r   )rV   ŚzŚbr.   r.   r/   Śtest_issue_17624n   s
    
(rY   c                  C   s2   t g d¢g d¢g d¢g} | t t| ks.J d S )N)rD   r4   rR   )rS   é   é   )é   é   é	   )r   r   rT   r.   r.   r/   Śtest_issue_18618u   s    r_   c                  C   sf   dd dD \} }}}t | |g||gg}t|t| t| ksFJ tt tttgdksbJ d S )Nc                 S   s   g | ]}t |d d qS ©rR   ©r   ©Ś.0Śsr.   r.   r/   Ś
<listcomp>z   ó    z*test_BlockMatrix_trace.<locals>.<listcomp>ŚABCDr   )r	   r   r   r5   ©r%   r&   r'   r(   r:   r.   r.   r/   Śtest_BlockMatrix_tracey   s    ri   c                  C   sŽ   dd dD \} }}}t | |g||gg}ddlm} ddlm} || | ”2 t|t| t| d” kstJ W d    n1 s0    Y  tt|t	s¤J tt | gt| ks¾J tt t
ttgdksŚJ d S )Nc                 S   s   g | ]}t |d d qS r`   ra   rb   r.   r.   r/   re      rf   z0test_BlockMatrix_Determinant.<locals>.<listcomp>rg   r   )ŚQ)Śassumingr%   )r	   Zsympy.assumptions.askrj   Zsympy.assumptions.assumerk   Z
invertibler   ŚschurŚ
isinstancer   r   r5   )r%   r&   r'   r(   r:   rj   rk   r.   r.   r/   Śtest_BlockMatrix_Determinant   s    @rn   c                  C   s0  t dtt} t dtt}t dtt}t dtt}t| |g||gg}t| gg}|jsZJ |ttt  }t|t| tt |g||tt ggksJ |t dtt tt  jsøJ |t dtt tt  jsÖJ t|j	| j	ksźJ t
| ” tsüJ |jrJ ttt|g||gg}|jr,J d S )Nr%   r&   r'   r(   rj   )r   r5   r6   r	   Ś	is_squarer   r   rL   rJ   ŚIrm   Śinverser   Zis_Identity)r%   r&   r'   r(   r:   rO   rj   r<   r.   r.   r/   Śtest_squareBlockMatrix   s$    
"’rr   c               	   C   sl  t dtt} t dttt }t dtt t}t dtt tt }t| |g||gg}|jrh|jttfkslJ tt|j	t
sJ t dtt} t dtt}t dtt}ttt}t| |g||gg}t| ” t| j	| j	| | d”j	 | | j	  | j	 | | d”j	 g| d”j	 | | j	 | d”j	ggks:J t dtt} t dtt}ttt}t dtt}t| |g||gg}t| ” t| d”j	 | |j	 | d”j	g|j	|j	|  | d”j	 | |j	  |j	 |  | d”j	 ggksōJ t dtt} ttt}t dtt}t dtt}t| |g||gg}t| ” t|j	 | | d”j	 |j	|j	| | d”j	 |  |j	  g| d”j	| d”j	 |  |j	 ggks®J ttt} t dtt}t dtt}t dtt}t| |g||gg}t| ” t| d”j	| d”j	 | |j	 g|j	 | | d”j	 |j	|j	| | d”j	 | |j	  ggkshJ d S ©Nr%   r&   r'   r(   )r   r5   r6   rE   r	   ro   rI   rm   r   rp   r   r   rq   rl   rh   r.   r.   r/   Ś%test_BlockMatrix_2x2_inverse_symbolic¦   sV    
<"ž
"<ž
<"ž
"<žrt   c                  C   s  t ddgddgg} t ddgddgg}t ddgddgg}t ddgddgg}| ” | ”   krz| ”   krzdksn J ||  ” ||  ”   kr¶||  ”   kr¶dks¼n J t| |g||gg}t| ”  ” | ”  ” ksšJ t|| g||gg}t| ”  ” | ”  ” ks&J t||g| |gg}t| ”  ” | ”  ” ks\J t||g|| gg}t| ”  ” | ”  ” ksJ dS )z>Test 2x2 block matrix inversion numerically for all 4 formulasrD   r4   rR   rS   r^   é   N)r   Zrankr	   r   ŚinvŚas_explicit)r>   ZD1ZD2ZD3ŚKr.   r.   r/   Ś$test_BlockMatrix_2x2_inverse_numericÜ   s    0< ""ry   c                     sF   t ttf} ttt f t fdd| D }t|j}t|tsBJ d S )Nc                    s   g | ]  fd dD qS )c                    s    g | ]}t d  |f  |qS )zM%s%sra   )rc   Ścols©Śrowsr.   r/   re   ś   rf   z<test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>.<listcomp>r.   ©rc   ©Ścolblocksizesr{   r/   re   ł   s   ’z1test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>)r5   r6   rE   r	   r   rp   rm   )Śrowblocksizesrx   Zcollapser.   r~   r/   Śtest_BlockMatrix_3x3_symbolicō   s    

ž
r   c                     s&  t dtt t dttt dttt dtt t tt t } t t d d }jd ksrJ jtt t tt t fksJ t fdd	tdD søJ j	j
 ksĢJ  ”  fksāJ ttj tsśJ t t     ks$J t t     ksNJ t  td  d d ”szJ t| t   d  d  ks¬J t| td  d d
 ksÖJ d|   jsźJ d|   jsžJ  | ”jsJ  | ”js"J d S )Nr%   r&   r'   r>   r4   rR   )rD   rD   c                 3   sL   | ]D}t d D ]6}||kr*j||f jnj||f  fv V  qqdS )rR   N)ŚrangerN   Zis_ZeroMatrix)rc   ŚiŚjr9   r.   r/   Ś	<genexpr>  s   ’z'test_BlockDiagMatrix.<locals>.<genexpr>rS   )r   r5   r6   r7   r   rN   rI   Śallr   rG   rH   Zget_diag_blocksrm   r   rp   r   r   r8   rJ   rL   rK   rM   )r>   rO   r.   r9   r/   Śtest_BlockDiagMatrix  s.    "’**,2*r   c                     sž   t dtt t dtt} t | }|jtt tt fks<J |jtt tt fksVJ |jttgkshJ |jttgkszJ t dttt dtt}t|}t	|| t  | | ks¾J t	||j
 t j
 | |j
 ksęJ tt fdd d S )Nr%   r&   r'   r(   c                      s   t  j ” S r+   )r   r2   rq   r.   ©r%   r'   r.   r/   Ś<lambda>.  rf   z0test_BlockDiagMatrix_nonsquare.<locals>.<lambda>)r   r5   r6   rE   r7   r   rI   r   r   r   r2   r   r   )r&   r:   r(   rO   r.   r   r/   Śtest_BlockDiagMatrix_nonsquare!  s    

"(r   c                  C   s   t dtt} t dtt}tt dks*J tt| t| ksBJ tt| |t| t| ksdJ t dtt}t dtt}tt||dksJ d S )Nr%   r&   rD   r'   r(   r   )r   r5   r6   r   r   ©r%   r&   r'   r(   r.   r.   r/   Ś test_BlockDiagMatrix_determinant0  s    "r   c                  C   s²   t t dksJ t ttttdks,J tdtt} t t| t | ksPJ tdtt}t t| |t | t | ks~J tdtt}tdtt}tt t||ts®J d S )Nr   r%   r&   r'   r(   )r   r   r   r5   r   r6   rm   r   r   r.   r.   r/   Śtest_BlockDiagMatrix_trace<  s    "r   c                  C   sj   t dtt} t dtt}tt t ks,J tt| t| jksFJ tt| |t| j|jksfJ d S )Nr%   r&   )r   r5   r6   rE   r7   r!   r   r2   )r%   r&   r.   r.   r/   Śtest_BlockDiagMatrix_transposeI  s
    r   c                  C   s^   t ttgttg} t ttgttg}t| | t ttt gttt gksZJ d S r+   )r   r   r   r   rE   r7   r   )Zbdm1Zbdm2r.   r.   r/   Śtest_issue_2460P  s    r   c                  C   s
  t dtt} t| td td ftd td f}|t| d td d td f | d td td d f g| td d d td f | td d td d f ggks¬J tddtd}t|dd}|t|ksŲJ t|dd}t|jd tddggksJ d S )	Nr%   r4   rS   ru   rB   )rD   rR   )r   rD   rR   )r   r5   r6   r   r	   r   r   rN   )r%   r&   r>   r.   r.   r/   Śtest_blockcutU  s    $:6’r   c                  C   sf   t dd tdD } | jjdks&J t| }|jjdks>J | j|jksNJ |  ” | ” ksbJ d S )Nc                    s"   g | ]  fd dt dD qS )c                    s    g | ]}t d  |f ddqS )śA_%d%dr4   ra   ©rc   r   ©r   r.   r/   re   c  s   ’z/test_reblock_2x2.<locals>.<listcomp>.<listcomp>rR   ©r   r}   r.   r   r/   re   c  s   ž
’z$test_reblock_2x2.<locals>.<listcomp>rR   )rR   rR   rB   )r	   r   rN   rI   r   rw   )r&   ŚBBr.   r.   r/   Śtest_reblock_2x2b  s    žr   c                  C   s.   t dd tdD } tt| | ks*J d S )Nc                    s"   g | ]  fd dt dD qS )c                    s    g | ]}t d  |f ttqS )r   )r   r5   r   r   r.   r/   re   o  s   ’z+test_deblock.<locals>.<listcomp>.<listcomp>rS   r   r}   r.   r   r/   re   o  s   ž
’z test_deblock.<locals>.<listcomp>rS   )r	   r   r   r   )r&   r.   r.   r/   Śtest_deblockn  s    žr   c                  C   s®   t tdgtdg} t tdgtdg}| jjt ks<J t| | jt ksRJ tt| jt kshJ tt| jt ks~J tt| jt ksJ tt| jt ksŖJ d S rQ   )	r   r   r2   rG   r   r   r   r   r   )Zbm1Zbm2r.   r.   r/   Śtest_block_collapse_typeu  s    r   c                   C   s<   t tdd  t tdd  t tdd  t tdd  d S )Nc                   S   s   t tdtdggS )Nr4   rZ   )r	   r   r.   r.   r.   r/   r     s   ’z+test_invalid_block_matrix.<locals>.<lambda>c                   S   s   t ttttggS r+   )r	   r   r5   r6   r.   r.   r.   r/   r     s   ’c                   S   s4   t ttttttgtttd tttd ggS ©NrD   ©r	   r   r5   r.   r.   r.   r/   r     s   žc                   S   s4   t ttd ttttgttd ttttggS r   r   r.   r.   r.   r/   r     s   ž)r   Ś
ValueErrorr.   r.   r.   r/   Śtest_invalid_block_matrix  s    r   c                  C   s“   t dtt} t dtt}t dtt}t dtt}t| |g||gg}| ” \}}}t|| | |ksjJ | ” \}}}t|| | |ksJ | ” \}}t|| |ks°J d S rs   )r   r5   r6   r	   ZLDUdecompositionr   ZUDLdecompositionZLUdecomposition)r%   r&   r'   r(   r:   ŚLŚUr.   r.   r/   Śtest_block_lu_decomposition  s    r   c                  C   s   d} t | }t| | }t||||g||||g||||g||||gg}t| ” }t||||g||||g||||g| |||gg}||ksJ d S )Né
   )r   r   r	   r   rv   )r5   rp   ŚOr%   ZAinvZAinvTr.   r.   r/   Śtest_issue_21866£  s    



ż

żr¢   c                  C   sž   t d} tdd}tdd}t d}t| |g||gg}t| tj| g||gg}| ” t| tddgtdd|ggks~J t||ksJ | ” t| tddgtj tdd |ggksĀJ t|ttddtddgtddtddggksśJ d S )NrR   r4   )	r   r   r   r	   r    ZImaginaryUnitZadjointr#   r"   )r%   r&   r'   r(   r:   ZX2r.   r.   r/   Ś!test_adjoint_and_special_matrices³  s    

,4r£   N)VZ sympy.matrices.expressions.tracer   Zsympy.testing.pytestr   r   Z&sympy.matrices.expressions.blockmatrixr   r   r   r   r	   r
   r   r   r   r   r   r   Zsympy.matrices.expressionsr   r   r   r   r   r   r   r   Zsympy.matrices.commonr   Zsympy.matricesr   r   r   Z
sympy.corer   r   r   r    Zsympy.functionsr!   r"   r#   r   r   rE   r7   r6   r5   rF   r%   r&   r'   r(   r)   r*   r,   r-   r0   r1   r3   r;   r=   rP   rU   rY   r_   ri   rn   rr   rt   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r¢   r£   r.   r.   r.   r/   Ś<module>   s\   8(
16
 