
    RieO=                        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
          \  Z*Z+Z,Z-Z.Z/Z0 ede/e/          Z1 ede/e/          Z2 ede/e/          Z3 ede/e/          Z4 ede/e/          Z5 ede/e/          Z6 e
e5e6gg          Z7 e
e5ge6gg          Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd ZCd ZDd ZEd ZFed              ZGd! ZHd" ZId# ZJd$ ZKd% ZLd& ZMd' ZNd( ZOd) ZPd* ZQd+ ZRd, ZSd- ZTd. ZUd/S )0    )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                      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
        Qlib/python3.11/site-packages/sympy/matrices/expressions/tests/test_blockmatrix.pytest_bc_matmulr3      sT    QrT"WQY;!A#a%!A#a%-1B0C/D#E#EEEEEEEr1   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 r-   )r   r
   r*   r+   r0   r1   r2   test_bc_mataddr5      se    [1a&**[1a&-B-BBCC!A#qs%%& & & & & &r1   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 r-   )r   r   r
   r&   r'   r(   r)   Tr0   r1   r2   test_bc_transposer8       sh    	+1v1v.>"?"?@@AA!#qsac13Z0112 2 2 2 2 2r1   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       r2   test_bc_dist_diagr@   $   s    S!QAS!QAS!QA1a  A1Q3<<qsAaC1==>>>>>>>r1   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)   r?   rB   s         r2   test_block_plus_identrC   ,   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=> > > > > >r1   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   )rK   r   rB   )r   r;   r<   kr=   pr
   r   	__class__argsr   r7   shape
blockshaper"   	is_MatMul	_blockmul	is_MatAdd	_blockaddblocksr   )r&   r'   r(   r)   rE   rF   r?   rG   rH   YAbrB   s               r2   test_BlockMatrixrY   6   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******r1   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 NrK   r:         )r   r   r
   r   r&   s    r2   %test_block_collapse_explicit_matricesr_   g   s    AA  A+se,,--22221v1v.//A+se,,--222222r1   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   )ra   zbs      r2   test_issue_17624rd   n   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Hr1   c                  z    t          g dg dg dg          } | t          t          |                     k    sJ d S )N)rK   r:   r\   )r]         )      	   )r   r	   r^   s    r2   test_issue_18618rk   u   sI    			999iii011Aq))********r1   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     r2   
<listcomp>z*test_BlockMatrix_trace.<locals>.<listcomp>z   $    888A,q!Q''888r1   ABCDr   )r
   r   r   r;   r&   r'   r(   r)   r?   s        r2   test_BlockMatrix_tracerw   y   s    88888JAq!QaVaV$%%A88uQxx%((*****jA../0011Q666666r1   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 rn   ro   rp   s     r2   rs   z0test_BlockMatrix_Determinant.<locals>.<listcomp>   rt   r1   ru   r   )Q)assumingr&   )r
   sympy.assumptions.askrz   sympy.assumptions.assumer{   
invertibler   schur
isinstancer    r   r;   )r&   r'   r(   r)   r?   rz   r{   s          r2   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)   rz   )r   r;   r<   r
   	is_squarer   r   rT   rR   Ir   inverser   is_Identity)r&   r'   r(   r)   r?   rW   rz   rB   s           r2   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}r1   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<   rL   r
   r   rP   r   r   r   r   r   r   r   rv   s        r2   %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 + +      r1   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 formulasrK   r:   r\   r]   rj      N)r   rankr
   r   invas_explicit)rE   D1D2D3Ks        r2   $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Ir1   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 )rE   ro   )rq   colsrowss     r2   rs   z<test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>.<listcomp>   s0    TTTdtt,dD	9	9TTTr1   r0   )rq   r   colblocksizess    @r2   rs   z1test_BlockMatrix_3x3_symbolic.<locals>.<listcomp>   s?        	UTTTmTTT  r1   )r;   r<   rL   r
   r   r   r   )rowblocksizesr   collapser   s      @r2   test_BlockMatrix_3x3_symbolicr      s}     1IM1IM    !   	 	A ac""Hh,,,,,,,r1   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(   rE   r:   r\   )rK   rK   c              3      K   | ]D}t          d           D ]2}||k    rj        ||f         j        nj        ||f         fv V  3EdS )r\   N)rangerV   is_ZeroMatrix)rq   ijr&   r'   r(   r?   s      r2   	<genexpr>z'test_BlockDiagMatrix.<locals>.<genexpr>  s       1 1uQxx1 1"# 01Avvqx1~++18AqD>aQRTUY;V 1 1 1 1 1 1 1r1   r]   )r   r;   r<   r=   r	   rV   rP   allr   rN   rO   get_diag_blocksr   r   r   r   r   r>   rR   rT   rS   rU   )rE   rW   r&   r'   r(   r?   s     @@@@r2   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%%%%%%r1   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 r-   )r	   r7   r   )r&   r(   s   r2   <lambda>z0test_BlockDiagMatrix_nonsquare.<locals>.<lambda>.  s    _Q-D-D-L-L-N-N r1   )r   r;   r<   rL   r=   r	   rP   r   r   r   r7   r   r   )r'   r?   r)   rW   r&   r(   s       @@r2   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Or1   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'   rK   r(   r)   r   )r   r;   r<   r   r	   r&   r'   r(   r)   s       r2    test_BlockDiagMatrix_determinantr   0  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!$$%%******r1   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       r2   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:::::::r1   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<   rL   r=   r"   r	   r7   )r&   r'   s     r2   test_BlockDiagMatrix_transposer   I  s    S!QAS!QA_&&''?+<+<<<<<_Q''((OAC,@,@@@@@_Q**++qsAC/H/HHHHHHHr1   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 r-   )r	   r   r   r   rL   r=   r   )bdm1bdm2s     r2   test_issue_2460r   P  s    61#;;s44D61#;;s44D$+&&/&!a%//6STWXSXRY??*[*[[[[[[[r1   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:   r]   r   rI   )rK   r\   )r   rK   r\   )r   r;   r<   r   r
   r   r   rV   )r&   r'   rE   s      r2   test_blockcutr   U  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Gr1   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:   ro   rq   r   r   s     r2   rs   z/test_reblock_2x2.<locals>.<listcomp>.<listcomp>c  s=     / / / ! #8QqE>1a88 / / /r1   r\   r   rq   r   s    @r2   rs   z$test_reblock_2x2.<locals>.<listcomp>c  sP     / / / !/ / / /%*1XX/ / / / / /r1   r\   )r\   r\   rI   )r
   r   rV   rP   r   r   )r'   BBs     r2   test_reblock_2x2r   b  s     / /%*1XX/ / / 	0 	0A 8>V####	QB9?f$$$$7bh==??bnn........r1   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     r2   rs   z+test_deblock.<locals>.<listcomp>.<listcomp>o  s=     ' ' ' #8QqE>1a88 ' ' 'r1   r]   r   r   s    @r2   rs   z test_deblock.<locals>.<listcomp>o  sP     ' ' '' ' ' '"1XX' ' ' ' ' 'r1   r]   )r
   r   r   r   )r'   s    r2   test_deblockr   n  sZ     ' '"1XX' ' ' 	( 	(A ;q>>""a''''''r1   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   r7   rN   r   r   r   r   r   )bm1bm2s     r2   test_block_collapse_typer   u  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##-@@@@@@r1   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:   rf   )r
   r   r0   r1   r2   r   z+test_invalid_block_matrix.<locals>.<lambda>  s)    {	!hqkk",     r1   c                  n    t          t          t                    t          t                    gg          S r-   )r
   r   r;   r<   r0   r1   r2   r   z+test_invalid_block_matrix.<locals>.<lambda>  s)    {	!hqkk",     r1   c            	          t          t          t          t                    t          t          t                    gt          t          t          dz
            t          t          t          dz             gg          S NrK   r
   r   r;   r0   r1   r2   r   z+test_invalid_block_matrix.<locals>.<lambda>  sU    {	Aq		:a++,	Aq1u		z!QU334,     r1   c                      t          t          t          dz
  t                    t          t          t                    gt          t          dz   t                    t          t          t                    gg          S r   r   r0   r1   r2   r   z+test_invalid_block_matrix.<locals>.<lambda>  sU    {	AE1		z!Q//0	AE1		z!Q//0,     r1   )r   
ValueErrorr0   r1   r2   test_invalid_block_matrixr     s    
:      :      :      :       r1   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)   r?   LUs          r2   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#!######r1   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         r2   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======r1   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)   r?   X2s         r2   !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mr1   N)V 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   r   r   sympy.matrices.commonr   sympy.matricesr   r   r   
sympy.corer   r   r    r!   sympy.functionsr"   r#   r$   r   r   rL   r=   r<   r;   rM   r&   r'   r(   r)   r*   r+   r.   r/   r3   r5   r8   r@   rC   rY   r_   rd   rk   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r1   r2   <module>r      sO   2 2 2 2 2 2 - - - - - - - -$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? : : : : : :4 4 4 4 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 
n 
nr1   