
    g@                        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 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% d d
l&m'Z'm(Z(m)Z)m*Z* d dl+m,Z,m-Z- d dl.m/Z/m0Z0m1Z1  e-dd          \  Z2Z3Z4Z5Z6Z7Z8 ede7e7          Z9 ede7e7          Z: ede7e7          Z; ede7e7          Z< ede7e7          Z= ede7e7          Z> e
e=e>gg          Z? e
e=ge>gg          Z@d ZAd ZBd ZCd ZDd ZEd ZFd ZGd ZHd ZId ZJd  ZKd! ZLd" ZMd# ZNed$             ZOd% ZPd& ZQd' ZRd( ZSd) ZTd* ZUd+ ZVd, ZWd- ZXd. ZYd/ ZZd0 Z[d1 Z\d2 Z]d3 Z^d4 Z_d5S )6    )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tracedet
ZeroMatrix	OneMatrix)Inverse)MatPow)	Transpose)NonInvertibleMatrixError)MatrixImmutableMatrixImmutableSparseMatrixzeros)TupleExprSFunction)Symbolsymbols)	transposeimrezi:n, pT)integerABCDGHc                      t          t          t          z  t          z  t          z            t          t          t          z  t          z  t          t          z  t          z  z   t          z  gg          k    sJ d S N)r   r/   b1b2r.   r
        m/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pytest_bc_matmulr7      sT    QrT"WQY;!A#a%!A#a%-1B0C/D#E#EEEEEEEr5   c                      t          t          t          t          gg          t          t          t          gg          z             t          t          t          z   t          t          z   gg          k    sJ d S r1   )r   r
   r.   r/   r4   r5   r6   test_bc_mataddr9       se    [1a&**[1a&-B-BBCC!A#qs%%& & & & & &r5   c            	         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 r1   )r   r   r
   r*   r+   r,   r-   Tr4   r5   r6   test_bc_transposer<   $   sh    	+1v1v.>"?"?@@AA!#qsac13Z0112 2 2 2 2 2r5   c                  H   t          dt          t                    } t          dt          t                    }t          dt          t                    }t	          | ||          }t          ||z                                 t	          d| z  d|z  d|z                      sJ d S )Nr*   r+   r,      )r   nmlr	   r   equals)r*   r+   r,   Xs       r6   test_bc_dist_diagrD   (   s    S!QAS!QAS!QA1a  A1Q3<<qsAaC1==>>>>>>>r5   c                  8   t          dt          t                    } t          dt          t                    }t          dt          t                    }t          dt          t                    }t          | |g||gg          }t          dt          t          z   t          t          z             }t	          |t          t          t          z             z   |z             t          t          t                    t          t                              |z   |z   k    sJ d S )Nr*   r+   r,   r-   Z)r   r?   r@   r
   r   r   r	   )r*   r+   r,   r-   rC   rF   s         r6   test_block_plus_identrG   0   s    S!QAS!QAS!QAS!QAaVaV$%%AS!a%Q''Aq8AE??2Q677HQKK!559A=> > > > > >r5   c                  h   t          dt          t                    } t          dt          t                    }t          dt          t                    }t          dt          t                    }t          dt          t          z   t
                    }t          dt          t          z   t          t          z             }t          t          | |g||gg                    } |j        |j	         |k    sJ t          dt          t                    }t          | d|z  z             | d|z  z   k    sJ t          d	t          t                    }t          |j        | z  |z            |j        | z  |z  k    sJ |j        t          t          z   t          t          z   fk    sJ |j        d
k    sJ t          |          t          t          | j        |j        g|j        |j        gg                    k    sJ t          |          j        |j        d d d         k    sJ ||z  j        sJ |                    |          j        sJ ||z  j        t          t          z   t
          fk    sJ ||z   j        sJ |                    |          j        sJ ||z   j        |j        k    sJ t          dt          d          }t          d	t          d          }t          t          |g|gg                    }	||	z  j        t          t          z   dfk    sJ t          ||	z            j        d         | |z  ||z  z   k    sJ t          ||	z            j        d         ||z  ||z  z   k    sJ t          t          ||	z                      t          t          ||	z                      k    sJ t          t)          ||	z  d|z                      t          ||	z            t          d|z            fk    sJ t          | gg          }
t          dg| j        R  }t          |
|z             | |z   k    sJ d S )Nr*   r+   r,   r-   MNEr>   Fr>   r>      )r   r   )rO   r   rF   )r   r?   r@   krA   pr
   r   	__class__argsr   r;   shape
blockshaper&   	is_MatMul	_blockmul	is_MatAdd	_blockaddblocksr    )r*   r+   r,   r-   rI   rJ   rC   rK   rL   YAbrF   s               r6   test_BlockMatrixr]   :   s   S!QAS!QAS!QAS!QAS!a%##AS!a%Q''AFQFQF+,,--A1;1$$$$ 	S!QA!ac'""a!A#g----S!QA!#a%'""ac!eAg----7q1ua!en$$$$<6!!!!Q<<;vQSzAC:.F'G'GHHHHHHQ<<2.... aC?;;q>>####aC;1q5!*$$$$E;;q>>####E=AG####S!QAS!QAFQC!:&&''AaC;1q5!*$$$$!A#%d+qsQqSy8888!A#%d+qsQqSy8888 )AaC..))Y~ac7J7J-K-KKKKK%!QqS//**qs^AaC00/2 2 2 2 2 
qcU		BS#17###A"q&!!QU******r5   c                      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    sJ d S NrO   r>         )r   r   r
   r   r*   s    r6   %test_block_collapse_explicit_matricesrc   k   s    AA  A+se,,--22221v1v.//A+se,,--222222r5   c                  0   t          ddd          } t          dd          }t          | |g||gg          }t          ||z            t          | dz  |g||gg          k    sJ t          ||z  |z            t          | dz  |g||gg          k    sJ d S )Nar>   r`   )r   r   r
   r   )re   zbs      r6   test_issue_17624rh   r   s    S!QA1aAaVaV$%%A!a%  K!Q$QF0C$D$DDDDD!a%!)$$adAYA4G(H(HHHHHHHr5   c                  z    t          g dg dg dg          } | t          t          |                     k    sJ d S )N)rO   r>   r`   )ra         )      	   )r   r	   rb   s    r6   test_issue_18618ro   y   sI    			999iii011Aq))********r5   c                  ,   d dD             \  } }}}t          | |g||gg          }t          |          t          |           t          |          z   k    sJ t          t          t          t          t                    g                    dk    sJ d S )Nc                 0    g | ]}t          |d d           S r`   r   .0ss     r6   
<listcomp>z*test_BlockMatrix_trace.<locals>.<listcomp>~   $    888A,q!Q''888r5   ABCDr   )r
   r   r   r?   r*   r+   r,   r-   rC   s        r6   test_BlockMatrix_tracer{   }   s    88888JAq!QaVaV$%%A88uQxx%((*****jA../0011Q666666r5   c                     d dD             \  } }}}t          | |g||gg          }ddlm} ddlm}  ||                    |                     5  t          |          t          |           t          |                    d                    z  k    sJ 	 d d d            n# 1 swxY w 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                 0    g | ]}t          |d d           S rr   rs   rt   s     r6   rw   z0test_BlockMatrix_Determinant.<locals>.<listcomp>   rx   r5   ry   r   )Q)assumingr*   )r
   sympy.assumptions.askr~   sympy.assumptions.assumer   
invertibler   schur
isinstancer!   r   r?   )r*   r+   r,   r-   rC   r~   r   s          r6   test_BlockMatrix_Determinantr      s|   88888JAq!QaVaV$%%A''''''111111	!,,q//	"	" 4 41vvQ#aggcll"3"33333334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 c!ffd#####{A3  CFF****{Jq!,,-..//1444444s   AB$$B(+B(c            	         t          dt          t                    } t          dt          t                    }t          dt          t                    }t          dt          t                    }t          | |g||gg          }t          | gg          }|j        sJ |t          t          t          z             z   }t          |          t          | t          t                    z   |g||t          t                    z   gg          k    sJ |t          dt          t          z   t          t          z             z   j        sJ |t          dt          t          z   t          t          z             z  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-   r~   )r   r?   r@   r
   	is_squarer   r   rX   rV   Ir   inverser   is_Identity)r*   r+   r,   r-   rC   r[   r~   rF   s           r6   test_squareBlockMatrixr      s   S!QAS!QAS!QAS!QAaVaV$%%AaSEA;	HQUOOA1a(1++oq)Aq8A;;+?@AAB B B B S!a%Q///::::S!a%Q///::::!#!#%%%%aiikk7+++++}hqkk1%1v.//A}r5   c            
      Z   t          dt          t                    } t          dt          t          t          z
            }t          dt          t          z
  t                    }t          dt          t          z
  t          t          z
            }t	          | |g||gg          }|j        r|j        t          t          fk    sJ 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	        |z  |                    d          j	        z  |z  | j	        z  z   | j	         |z  |                    d          j	        z  g|                    d          j	         |z  | j	        z  |                    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	         |z  |j	        z  |                    d          j	        g|j	        |j	        | z  |                    d          j	        z  |z  |j	        z  z   |j	         | z  |                    d          j	        z  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	         |z  |                    d          j	        z  |j	        |j	        |z  |                    d          j	        z  | z  |j	        z  z   g|                    d          j	        |                    d          j	         | z  |j	        z  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	         |z  |j	        z  g|j	         |z  |                    d          j	        z  |j	        |j	        |z  |                    d          j	        z  |z  |j	        z  z   gg          k    sJ d S Nr*   r+   r,   r-   )r   r?   r@   rP   r
   r   rT   r   r   r   r   r   r   r   rz   s        r6   %test_BlockMatrix_2x2_inverse_symbolicr      s   S!QAS!QU##AS!a%##AS!a%Q''AaVaV$%%A;,17q!f,,,,nQS))733333 	S!QAS!QAS!QA1aAaVaV$%%A!))++&&+	
qsQw'!+ac1	1AC4!8aggclln3LM
''#,,.1	qs	"AGGCLLN37 + +     	S!QAS!QA1aAS!QAaVaV$%%A!))++&&+
''#,,.1	qs	"AGGCLLN3	
qsQw'!+ac1	1AC4!8aggclln3LM7 + +     	S!QA1aAS!QAS!QAaVaV$%%A!))++&&+
#AGGCLLN	"AC!#'AGGCLLN*BQ*F*L$LM	
!''#,,.1,qs237 + +     	1aAS!QAS!QAS!QAaVaV$%%A!))++&&+	
!''#,,.1,qs23
#AGGCLLN	"AC!#'AGGCLLN*BQ*F*L$LM7 + +      r5   c                     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          }|                                |                                cxk    r|                                cxk    rdk    sn J ||z                                   ||z                                   cxk    r"||z                                   cx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 formulasrO   r>   r`   ra   rn      N)r   rankr
   r   invas_explicit)rI   D1D2D3Ks        r6   $test_BlockMatrix_2x2_inverse_numericr      s   AA  A	!Q!Q 	!	!B	!Q!Q 	!	!B	!Q!R!	"	"B7799		3333RWWYY3333!333333G>>R~~//HHHHBG>>3C3CHHHHqHHHHHH 	aWr2h'((A!%%''""..00AMMOO4G4G4I4IIIIIb!Wr2h'((A!%%''""..00AMMOO4G4G4I4IIIIIb"X2w'((A!%%''""..00AMMOO4G4G4I4IIIIIb"XAw'((A!%%''""..00AMMOO4G4G4I4IIIIIIIr5   c                      t           t          t          f} t          t          t           ft          fd| D                       }t	          |j                  }t          |t                    sJ d S )Nc                 .    g | ]fd D             S )c                 <    g | ]}t          d ||          S )rI   rs   )ru   colsrowss     r6   rw   z<test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>.<listcomp>   s0    TTTdtt,dD	9	9TTTr5   r4   )ru   r   colblocksizess    @r6   rw   z1test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>   s?        	UTTTmTTT  r5   )r?   r@   rP   r
   r   r   r   )rowblocksizesr   collapser   s      @r6   test_BlockMatrix_3x3_symbolicr      s}     1IM1IM    !   	 	A ac""Hh,,,,,,,r5   c                     t          dt          t                    t          dt          t                    t          dt          t                    t          dt          t          z   t          z   t          t          z   t          z             } t	                    t	          dz  dz            }j        d         k    sJ j        t          t          z   t          z   t          t          z   t          z   fk    sJ t          fdt          d          D                       sJ  j	        j
         k    sJ                                 fk    sJ t          t          j        z            t                    sJ t!          z            t	          z  z  z            k    sJ t          z            t	          z  z  z            k    sJ t          z                                 t	          dz  dz  dz                      sJ t          |z            t	          z  dz  z  dz  z            k    sJ t          |z             t	          dz  dz  d	z            k    sJ d| z  z  j        sJ d| z  z   j        sJ                     |           j        sJ                     |           j        sJ d S )
Nr*   r+   r,   rI   r>   r`   )rO   rO   c              3      K   | ]D}t          d           D ]2}||k    rj        ||f         j        nj        ||f         fv V  3EdS )r`   N)rangerZ   is_ZeroMatrix)ru   ijr*   r+   r,   rC   s      r6   	<genexpr>z'test_BlockDiagMatrix.<locals>.<genexpr>  s       1 1uQxx1 1"# 01Avvqx1~++18AqD>aQRTUY;V 1 1 1 1 1 1 1r5   ra   )r   r?   r@   rA   r	   rZ   rT   allr   rR   rS   get_diag_blocksr   r   r   r   r   rB   rV   rX   rW   rY   )rI   r[   r*   r+   r,   rC   s     @@@@r6   test_BlockDiagMatrixr     s   S!QAS!QAS!QAS!a%!)QUQY//A1a  A1Q3!$$A8D>Q7q1uqy!a%!),,,,, 1 1 1 1 1 1 11XX1 1 1 1 1 1 1 11;1$$$$1a)++++nQS1W--x88888QqS>>_QqS!A#qs;;;;;;!A#/!A#qsAaC"@"@@@@@!a%  ''!QqS!A#(F(FGGGGG!A#/!A#qs1uac!e"D"DDDDD!a%  OAaC1ac$B$BBBBB qsG1I    KKNN%%%%KKNN%%%%%%r5   c                  *   t          dt          t                    t          dt          t                    } t          |           }|j        t          t          z   t          t          z   fk    sJ |j        t          t          z   t          t          z   fk    sJ |j        t          t          gk    sJ |j        t          t          gk    sJ t          dt          t                    t          dt          t                    }t          |          }t          ||z             t          z   | |z             k    sJ t          ||j
        z            t          j
        z  | |j
        z            k    sJ t          t          fd           d S )Nr*   r+   r,   r-   c                  R    t           j                                                  S r1   )r	   r;   r   )r*   r,   s   r6   <lambda>z0test_BlockDiagMatrix_nonsquare.<locals>.<lambda>2  s    _Q-D-D-L-L-N-N r5   )r   r?   r@   rP   rA   r	   rT   r   r   r   r;   r   r   )r+   rC   r-   r[   r*   r,   s       @@r6   test_BlockDiagMatrix_nonsquarer   %  sZ   S!QAS!QA1A7q1ua!en$$$$7q1ua!en$$$$?q!f$$$$?q!f$$$$S!QAS!QA1A!a%  OAE1q5$A$AAAAA!ac'""oa!#gq13w&G&GGGGG
#%N%N%N%N%NOOOOOr5   c                  D   t          dt          t                    } t          dt          t                    }t          t	                                dk    sJ t          t	          |                     t          |           k    sJ t          t	          | |                    t          |           t          |          z  k    sJ t          dt          t                    }t          dt          t                    }t          t	          ||                    dk    sJ d S )Nr*   r+   rO   r,   r-   r   )r   r?   r@   r   r	   r*   r+   r,   r-   s       r6    test_BlockDiagMatrix_determinantr   4  s    S!QAS!QA  !!Q&&&&q!!""c!ff,,,,q!$$%%Q#a&&8888 	S!QAS!QAq!$$%%******r5   c                     t          t                                dk    sJ t          t          t          t          t                                        dk    sJ t	          dt          t                    } t          t          |                     t          |           k    sJ t	          dt
          t
                    }t          t          | |                    t          |           t          |          z   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   r?   r   r@   r   r   r   s       r6   test_BlockDiagMatrix_tracer   @  s   ""##q((((Aq!1!12233q8888S!QA##$$a0000S!QAA&&''588eAhh+>>>>> 	S!QAS!QAeOAq1122E:::::::r5   c                     t          dt          t                    } t          dt          t                    }t          t                                t                      k    sJ t          t          |                     t          | j                  k    sJ t          t          | |                    t          | j        |j                  k    sJ d S )Nr*   r+   )r   r?   r@   rP   rA   r&   r	   r;   )r*   r+   s     r6   test_BlockDiagMatrix_transposer   M  s    S!QAS!QA_&&''?+<+<<<<<_Q''((OAC,@,@@@@@_Q**++qsAC/H/HHHHHHHr5   c                     t          t          t          g          t          t          g                    } t          t          t          g          t          t
          g                    }t          | |z             t          t          t          t          z   g          t          t          t
          z   g                    k    sJ d S r1   )r	   r   r   r   rP   rA   r   )bdm1bdm2s     r6   test_issue_2460r   T  s    61#;;s44D61#;;s44D$+&&/&!a%//6STWXSXRY??*[*[[[[[[[r5   c            	         t          dt          t                    } t          | t          dz  t          dz  ft          dz  t          dz  f          }|t	          | d t          dz  d t          dz  f         | d t          dz  t          dz  d f         g| t          dz  d d t          dz  f         | t          dz  d t          dz  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*   r>   ra   r   rM   )rO   r`   )r   rO   r`   )r   r?   r@   r   r
   r   r   rZ   )r*   r+   rI   s      r6   test_blockcutr   Y  sZ   S!QAQqS!A#J1ac
++Aa1dqsd
mQt!tQqSTTz];!dqsd
mQqsttQqSTTz];= > > > > > > 	1eBii((AFF##A""""""FF##A18D>**o1vh.G.GGGGGGGr5   c                  4   t          d t          d          D                       } | j        j        dk    sJ t	          |           }|j        j        dk    sJ | j        |j        k    sJ |                                 |                                k    sJ d S )Nc                 F    g | ]fd t          d          D             S )c                 <    g | ]}t          d |fz  dd          S )A_%d%dr>   rs   ru   r   r   s     r6   rw   z/test_reblock_2x2.<locals>.<listcomp>.<listcomp>g  s=     / / / ! #8QqE>1a88 / / /r5   r`   r   ru   r   s    @r6   rw   z$test_reblock_2x2.<locals>.<listcomp>g  sP     / / / !/ / / /%*1XX/ / / / / /r5   r`   )r`   r`   rM   )r
   r   rZ   rT   r   r   )r+   BBs     r6   test_reblock_2x2r   f  s     / /%*1XX/ / / 	0 	0A 8>V####	QB9?f$$$$7bh==??bnn........r5   c                      t          d t          d          D                       } t          t          |                     | k    sJ d S )Nc                 F    g | ]fd t          d          D             S )c                 P    g | ]"}t          d |fz  t          t                    #S )r   )r   r?   r   s     r6   rw   z+test_deblock.<locals>.<listcomp>.<listcomp>s  s=     ' ' ' #8QqE>1a88 ' ' 'r5   ra   r   r   s    @r6   rw   z test_deblock.<locals>.<listcomp>s  sP     ' ' '' ' ' '"1XX' ' ' ' ' 'r5   ra   )r
   r   r   r   )r+   s    r6   test_deblockr   r  sZ     ' '"1XX' ' ' 	( 	(A ;q>>""a''''''r5   c                     t          t          dg          t          dg                    } t          t          dg          t          dg                    }| j        j        t           k    sJ t	          | |z
            j        t           k    sJ t	          t          |                     j        t           k    sJ t	          t          |                     j        t           k    sJ t          t          |                     j        t           k    sJ t          t          |                     j        t           k    sJ d S r_   )	r	   r   r;   rR   r   r   r   r   r   )bm1bm2s     r6   test_block_collapse_typer   y  s   
/1#..0D0D
E
EC
/1#..0D0D
E
EC5?o----#)$$./AAAA'#,,''1_DDDD)C..))3FFFF	#''1_DDDDgcll##-@@@@@@r5   c                      t          t          d            t          t          d            t          t          d            t          t          d            d S )Nc                  Z    t          t          d          t          d          gg          S )Nr>   rj   )r
   r   r4   r5   r6   r   z+test_invalid_block_matrix.<locals>.<lambda>  s)    {	!hqkk",     r5   c                  n    t          t          t                    t          t                    gg          S r1   )r
   r   r?   r@   r4   r5   r6   r   z+test_invalid_block_matrix.<locals>.<lambda>  s)    {	!hqkk",     r5   c            	          t          t          t          t                    t          t          t                    gt          t          t          dz
            t          t          t          dz             gg          S NrO   r
   r   r?   r4   r5   r6   r   z+test_invalid_block_matrix.<locals>.<lambda>  sU    {	Aq		:a++,	Aq1u		z!QU334,     r5   c                      t          t          t          dz
  t                    t          t          t                    gt          t          dz   t                    t          t          t                    gg          S r   r   r4   r5   r6   r   z+test_invalid_block_matrix.<locals>.<lambda>  sU    {	AE1		z!Q//0	AE1		z!Q//0,     r5   )r   
ValueErrorr4   r5   r6   test_invalid_block_matrixr     s    
:      :      :      :       r5   c                  2   t          dt          t                    } t          dt          t                    }t          dt          t                    }t          dt          t                    }t          | |g||gg          }|                                \  }}}t          ||z  |z            |k    sJ |                                \  }}}t          ||z  |z            |k    sJ |                                \  }}t          ||z            |k    sJ d S r   )r   r?   r@   r
   LDUdecompositionr   UDLdecompositionLUdecomposition)r*   r+   r,   r-   rC   LUs          r6   test_block_lu_decompositionr     s   S!QAS!QAS!QAS!QAaVaV$%%A   ""GAq!!A#a%  A%%%%   ""GAq!!A#a%  A%%%% DAq!A#!######r5   c            	      (   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   r   )r?   r   Or*   AinvAinvTs         r6   test_issue_21866r     s    	A	!A	Aq		A	QQ(QQ(QQ(QQ(* 
+ 
+A !%%''""DAA+QQ(QQ(a!a)+ , ,E 5======r5   c            	         t          d          } t          dd          }t          dd          }t          d          }t          | |g||gg          }t          | t          j        |z  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          z  |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 )Nr`   r>   )	r   r   r   r
   r"   ImaginaryUnitadjointr(   r'   )r*   r+   r,   r-   rC   X2s         r6   !test_adjoint_and_special_matricesr     sw   A!QA1aAAaVaV$%%A	q!/!+,q!f5	6	6B99;;+:a+;+;'<yAPQ>R&STTTTTTa55A::::::<<;Jq!,<,<(=@PQZ[\^_Q`Q`@`bc?d'effffffb66[:a#3#3Yq!__"E
STVWHXHXZdefhiZjZjGk!lmmmmmmmmr5   c                     t          d          t          ddfdt          d          D                       } t          | d dd df         | d ddf         g| dd df         | dd df         gg          }t          |                                        |                               z
  t          dd          k    sJ d S )Nxr`   c                 F    g | ]} t          d |                     S )re   )r#   )ru   r   r   s     r6   rw   z0test_block_matrix_derivative.<locals>.<listcomp>  s2    ===q'hw1ww''**===r5   rn   r>   )r%   r   r   r
   diffr   )r*   bcr   s     @r6   test_block_matrix_derivativer     s    Aq!====E!HH===>>A	q!RaRy!BQBE(+a2A2h!""a%-AB	C	CB"''!**q		)U1a[[888888r5   c                  |   t          d          } t          |           }t          | |           }t          ||g||gg          }t	          |                                                                          |k    sJ t	          |                                                                          |k    sJ t	          t          |                                d                    t          |d          k    sJ t	          t          |d                                                    t          |d          k    sJ d S )Nr?   )r$   r   r   r
   r   r&   r   r   )r?   r   rF   r*   s       r6   test_transpose_inverse_commuter     s	   sAA1aAaVaV$%%A!++--//1122a7777!))++//1122a7777&3344q"EEEE&B--113344q"EEEEEEr5   N)` sympy.matrices.expressions.tracer   sympy.testing.pytestr   r   &sympy.matrices.expressions.blockmatrixr   r   r   r	   r
   r   r   r   r   r   r   r   sympy.matrices.expressionsr   r   r   r   r   r   "sympy.matrices.expressions.inverser   !sympy.matrices.expressions.matpowr   $sympy.matrices.expressions.transposer   sympy.matrices.exceptionsr   sympy.matricesr   r   r   r   
sympy.corer    r!   r"   r#   sympy.core.symbolr$   r%   sympy.functionsr&   r'   r(   r   r   rP   rA   r@   r?   rQ   r*   r+   r,   r-   r.   r/   r2   r3   r7   r9   r<   rD   rG   r]   rc   rh   ro   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r5   r6   <module>r      s   2 2 2 2 2 2 - - - - - - - -$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6 6 6 6 6 6 4 4 4 4 4 4 : : : : : : > > > > > >; ; ; ; ; ; ; ; ; ; ; ; / / / / / / / / / / / / - - - - - - - - - - - - - - - - - -gh555 1aAq!LaLaLaLaLaLa[1a&[1#sF F F& & &2 2 2? ? ?> > >/+ /+ /+b3 3 3I I I+ + +7 7 7
5 
5 
5  63 3 3lJ J J0 	- 	- 	-& & &@P P P
+ 
+ 
+; ; ;I I I\ \ \
H H H
/ 
/ 
/( ( (	A 	A 	A   $ $ $&   
n 
n 
n9 9 9
F 
F 
F 
F 
Fr5   