o
    *ήc`D                     @   s  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	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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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z= eddd\Z>Z?Z@ZAZBedZCe,de>e?ZDe,de?e@ZEe,de>e>ZFe,de>e>ZGe,de?e>ZHe,de>dZIdd ZJdd ZKd d! ZLd"d# ZMd$d% ZNd&d' ZOd(d) ZPd*d+ ZQd,d- ZRd.d/ ZSd0d1 ZTd2d3 ZUd4d5 ZVd6d7 ZWd8d9 ZXd:d; ZYd<d= ZZd>d? Z[d@dA Z\dBdC Z]dDdE Z^dFdG Z_dHdI Z`dJdK ZadLdM Zbe=dNdO ZcdPdQ ZddRdS ZedTdU ZfdVdW ZgdXdY Zhe=dZd[ Zid\d] Zjd^d_ Zkd`da Zldbdc Zmddde Zndfdg Zodhdi Zpdjdk ZqdlS )m    )Sum)	gcd_terms)diffexpand)Eq)DummySymbolStr)KroneckerDelta)zeros)factor)SsymbolsAddMulSympifyErrorRationalFunction)sincostansqrtcbrtexp)simplify)ImmutableMatrixInverseMatAddMatMulMatPowMatrix
MatrixExprMatrixSymbol
ShapeErrorSparseMatrix	TransposeAdjointNonSquareMatrixError	MatrixSet)Determinantdet)MatrixElement)
ZeroMatrixIdentity)raisesXFAILz	n m l k pTintegerxABCDEw   c                      s   t dddsJ t dddsJ ttdd  ttdd  ttdd  ttdd  ttd	d  ttd
d  td t d  sFJ tddd tt fdd tddd tt fdd d S )Nr3      r   c                   S      t dddS )Nr3   r:   r"    r>   r>   T/tmp/pip-target-vg8gfxp4/lib/python/sympy/matrices/expressions/tests/test_matexpr.py<lambda>$       z-test_matrix_symbol_creation.<locals>.<lambda>c                   S   r;   )Nr3          @r:   r=   r>   r>   r>   r?   r@   %   rA   c                   S   r;   )Nr3                  @r:   r=   r>   r>   r>   r?   r@   &   rA   c                   S   r;   )Nr3   r:   r<   r=   r>   r>   r>   r?   r@   '   rA   c                   S   r;   )Nr3   r:   rB   r=   r>   r>   r>   r?   r@   (   rA   c                   S   r;   )Nr3   r:   rC   r=   r>   r>   r>   r?   r@   )   rA   nFr0   c                         t d  S Nr3   r=   r>   rD   r>   r?   r@   .   rA   T)negativec                      rE   rF   r=   r>   rG   r>   r?   r@   0   rA   )r"   r.   
ValueErrorr   r>   r>   rG   r?   test_matrix_symbol_creation!   s   rJ   c                   C   sr   t jttfks	J t t jttfksJ ttdd  t d jdks$J t d j	t ks-J t d j	j
dks7J d S )Nc                   S   s   t t S N)r4   r3   r>   r>   r>   r?   r@   6       z)test_matexpr_properties.<locals>.<lambda>r   r9   r   r   r3   )r3   shaperD   mr4   lr.   r#   indicessymbolnamer>   r>   r>   r?   test_matexpr_properties3   s   rU   c                   C   s^   t t jtjks
J t t jtksJ dt t t ttj ks"J tt jttfks-J d S Nr:   )	r2   r3   rO   	__class__r   r,   r4   rD   rQ   r>   r>   r>   r?   test_matexpr<   s   rX   c                     s  t dtt} t dtt}t dtt}| ttjttfksJ | | ||| | ks-J | | ttjs8J t ddd t dddt dd	dt d
tdksZJ td}td|j|ddfksnJ d   d ks|J t	t
fdd d d ksJ  d  d ksJ t	t
 fdd t	t
 fdd td	dgddgg} td	dgddgg}t dddt ddd}}|| || ||it| |ksJ d S )Nr3   r4   r5   W   Xr:   Yr9   Zyr9   r9   c                          d   S )Nr_   subsr>   )r[   r\   r>   r?   r@   [       z#test_matexpr_subs.<locals>.<lambda>rM   r:   r9   c                      r`   )Nr:   r:   ra   r>   )rY   r]   r>   r?   r@   b   rc   c                      s    d   tdS )Nre   r:   )rb   r   r>   )rY   r>   r?   r@   d   s       r6   )r"   rD   rP   rQ   rb   rO   	is_squarer	   argsr.   
IndexErrorr$   r    r   )r3   r4   r5   r^   r6   r>   )rY   r[   r\   r]   r?   test_matexpr_subsC   s.    (rj   c                      s   t dtt t dttt  tsJ   j jksJ t   d  ts,J tt fdd tt	 fdd tt	 fdd tt	 fdd  t
tt   t
ttksaJ tt	 t
tttj  W d    d S 1 syw   Y  d S )	Nr3   r4   r:   c                      s
    j  S rK   )Tr>   r3   r4   r>   r?   r@   u   s   
 ztest_addition.<locals>.<lambda>c                      s    d S Nr9   r>   r>   r3   r>   r?   r@   v   rL   c                      s   d  S N   r>   r>   rn   r>   r?   r@   w   rL   c                      s   d  S ro   r>   r>   rn   r>   r?   r@   x   rL   )r"   rD   rP   
isinstancer   rO   r   r.   r#   	TypeErrorr,   r   Zeror>   r>   rl   r?   test_additionm   s    
"rt   c                     sl  t dtt t dttt dtt} d   jttfksJ  d  tttks,J tt fdd d  j jks@J  ttt  tttksPJ | tt | j	 ttks_J d t
j ksjJ ttfdd t dtt t dtttt     ksJ  d    d	 ksJ  d  j	d	   j	ksJ  d	  j	d   ksJ d S )
Nr3   r4   r5   r:   r   c                      s     S rK   r>   r>   rl   r>   r?   r@      rL   z%test_multiplication.<locals>.<lambda>c                      s   d  S rV   r>   r>   r4   r>   r?   r@      rL   rZ   )r"   rD   rP   rQ   rO   r,   r.   r#   r-   Ir   HalfNotImplementedErrorr5   r>   rl   r?   test_multiplication   s"    rz   c                  C   s   t dtt} t| d}|jdksJ |j| ksJ | t jtks"J | d ttks,J | d | ks4J | d |ks<J | d t| ksFJ | d d | ksPJ | d d | d ks\J | tj t	| ksgJ | t
dd t| kstJ ttdd	  d S )
Nr3   r:   r   r9   r<   rZ      c                   S   s   t dddd S )Nr4   rZ   r:   r=   r>   r>   r>   r?   r@      rc   ztest_MatPow.<locals>.<lambda>)r"   rD   r   r   baser-   r   r   rw   r   r   r   r.   r'   )r3   AAr>   r>   r?   test_MatPow   s   
r~   c                     sV   t d\ td } | j fksJ tt fdd |  | ks)J d S )Nzn,m,tr[   c                      s   t d S )Nr[   r=   r>   rP   rD   tr>   r?   r@      rc   z#test_MatrixSymbol.<locals>.<lambda>)r   r"   rO   r.   rr   doitr[   r>   r   r?   test_MatrixSymbol   s
   r   c                      sP   t ddd t tdd fddksJ t tdd fddks&J d S )Nr[   r:   c                        | |f S rK   r>   ijr   r>   r?   r@      rA   z'test_dense_conversion.<locals>.<lambda>c                    r   rK   r>   r   r   r>   r?   r@      rA   )r"   r   r    r>   r>   r   r?   test_dense_conversion   s    $r   c                   C   s   t t jt thksJ d S rK   )r5   r6   free_symbolsr>   r>   r>   r?   test_free_symbols   s   r   c                   C   s    t tjtddd tsJ d S )Nr[   r:   )rq   r   rs   r"   r!   r>   r>   r>   r?   test_zero_matmul   s    r   c                  C   P   t ddd} tt| tttd ttd  ggt| tdggks&J d S Nr3   r9   r:   )r"   r   r   r   r   r2   r   r    rn   r>   r>   r?   test_matadd_simplify      (r   c                  C   r   r   )r"   r   r   r   r   r2   r   r    rn   r>   r>   r?   test_matmul_simplify   r   r   c                  C   s   t dtt} t dtt}t dtt}ttttt| t| |t| | t| t	| t
|t|dt|dt|dg}|D ]}||j|j ksGJ q;d S )Nr3   r4   r[   r:   r<   r   )r"   rD   rP   rQ   r-   r,   r   r   r%   r&   r   r   rW   rh   )r3   r4   r[   objsobjr>   r>   r?   test_invariants   s    "r   c                  C   sp   t dtt} | d  | ttf  | td td f  t ddd} tddD ]}tddD ]}| ||f  q,q%d S )Nr3   r9   r:   r9   r:   r<   )r"   rD   rP   rQ   krange)r3   r   r   r>   r>   r?   test_matexpr_indexing   s   r   c                      s   t ddd  d  d ksJ  td  d ksJ  d  d ks&J t d dd df  d  d  d  d gksBJ tt fd	d
 tt fdd
 t dttttfdd
 t dtdd d kssJ d S )Nr3   r:   rZ   r9   rM   r9   r   rN   r_   c                          d S )Nr{   r>   r>   rn   r>   r?   r@      rL   z&test_single_indexing.<locals>.<lambda>c                      s    t  S rK   rG   r>   rn   r>   r?   r@      rL   r4   c                      r   rm   r>   r>   ru   r>   r?   r@      rL   )r"   intlistr.   ri   rD   rP   r>   r>   rl   r?   test_single_indexing   s   8r   c                   C   s(   t d t d  t d t d  ksJ d S )NrM   r   rn   r>   r>   r>   r?   test_MatrixElement_commutative   s   (r   c                  C   sj  t ddd} |   | d | d  | d  | d  | d | d  | d  | d   | d | d	  | d
  | d   | d | d	  | d  | d   | d | d  | d
  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d	  | d  | d   | d | d	  | d  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d
  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d
  | d   | d | d  | d
  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d  | d  | d   | d | d	  | d  | d   | d | d	  | d
  | d   ksJ t ddd}t| |  t| |   kr| |  ksJ  J d S )Nr3   rf   rN   r_   re   )rZ   rZ   )r:   rZ   )rZ   r:   r   rd   )rZ   r9   )r9   rZ   rM   r   )r:   r   rZ   r   r   r:   )r   rZ   r4   )r"   as_explicitr*   r)   r   rl   r>   r>   r?   test_MatrixSymbol_determinant   sd   (		

@r   c                   C   s*   t d t d  t d t d ksJ d S )Nr   rN   )r3   r   r>   r>   r>   r?   test_MatrixElement_diff  s   *r   c                  C   s<   t ddd} tddg}| d | | |d ksJ d S )Nur:   r9   rZ   rp   rN   )r"   r   rb   r   )r   vr>   r>   r?   test_MatrixElement_doit  s   $r   c                  C   s   t t} t| d | d ksJ | t | ksJ t| d | d ks&J | d | ks.J t| d | d ks;J t d}t|d |t ksLJ t|d |ksWJ t|d |d ksdJ t|d |d ksqJ d S )NrZ   r   r:   r   rf   )r-   rD   r   r   )MNr>   r>   r?   test_identity_powers  s   r   c                      s   t tt  d  ksJ tt fdd  d ttks J t d  d ks-J tt fdd t ddtd d ksHJ ttfdd d td ks^J d tdkshJ ttfd	d d S )
Nrf   c                          d S Nr   r>   r>   z1r>   r?   r@   '  rL   z!test_Zero_power.<locals>.<lambda>r   r:   c                         t  d S r   r   r   r>   r   r>   r?   r@   *      rZ   c                      r   )Nr>   r>   z2r>   r?   r@   -  rL   c                      r   Nr<   r   r>   r   r>   r?   r@   0  r   )r,   rD   r.   rI   r-   r   r   r>   r>   )r   r   r?   test_Zero_power$  s   

r   c               	   C   s   t tt tdf ttdf } tttf  tttf dks J tttf  td tdtdtd ftdtd ks=J td}| t	t|tdtd ftt|f  |dtd fs^J | 
 tttf ksjJ d S )Nr   r9   rN   _i_1)r   r6   r8   r   pr
   rD   r   dummy_eqr   r   )dexprr   r>   r>   r?   test_matrixelement_diff3  s   "::r   c                     s`  t d\} }}}t| |g||gg t d\} |f }t|ts%J tddgddgg}||f }t|ts<J dD ]&\}}	||||	i ||	f ksSJ ||||	i|||	f ksdJ q>tddd}
|
d	 |
 | kswJ |
|f |
  |f ksJ  |f  |
|
|f ksJ t d d |f tsJ  d d |f d
|di d ksJ t df tsJ  df d d	 ksJ  df d
 d ksJ  |f | td
dgddgg|f ksJ tt	 fdd tt	 fdd tt	 fdd tt	 fdd d S )Nzx y z wzi, jr:   rZ   rf   rp   )rN   rM   r   r_   r3   rN   r9   r   r   rM   c                          df S rV   r>   r>   r   r   r>   r?   r@   V  rA   z0test_MatrixElement_with_values.<locals>.<lambda>c                      r   r   r>   r>   r   r>   r?   r@   W  rA   c                          df S rV   r>   r>   r   r>   r?   r@   X  rA   c                      r   r   r>   r>   r   r>   r?   r@   Y  rA   )
r   r    rq   r+   r$   rb   r"   r   r.   rI   )r2   r^   zr8   r   MijMsmsijoiojr3   r>   r   r?   test_MatrixElement_with_values=  s2   "$$$.  4r   c                  C   s   t ddd} |  | d ksJ t ddd }| td|d  ggks(J t ddd }|d |d  |d	 |d
   }t|d |d	  g|d
  |d gg| }| |ks^J d S )Nr4   rZ   r<   r[   r9   rN   r:   r_   rM   r   )r"   invr   r    )r4   r[   detXinvXr>   r>   r?   test_inv\  s     r   c                  C   s   t dtt} t dtt}| | tt  }| t |t  | t  |t  }||ks*J t||ks2J t||ks:J |d | d |d  | d t |d   d  | d  }tt}t||t |d | d |t  |d  d  | d  fv szJ d S )Nr3   r4   r<   )r"   rD   r5   r6   r   r   r-   )r3   r4   expr1expr2exprrv   r>   r>   r?   test_factor_expandk  s    8Dr   c                  C   sh   t ddd} | j|  j t| j|  jd | j|  jd g| j|  jd | j|  jd ggks2J d S )Nr3   rp   r:   rN   rM   r   r_   )r"   rk   rv   r   r    rn   r>   r>   r?   test_issue_2749{  s   .r   c                  C   s:   t ddd} | j|   d t| d d ggksJ d S )Nr2   r9   r<   rN   r   )r"   rk   r   r    )r2   r>   r>   r?   test_issue_2750  s   .r   c                  C   sp   t ddd} t ddd}t| |dksJ t| d |d jtu s#J tdd} tdd}t| |dks6J d S )	Nr3   rZ   r9   r4   r:   Fr   T)r"   r   funcr,   rl   r>   r>   r?   test_issue_7842  s   

r   c                  C   s   t d} td| }|| }t|t||  }t|t|||   }t|t|  || |  }t|g|g|gg}t||g||g||gg}|||ks\J d S )Nr   r2   )r   r   r   r   r   r   r    )r   r2   dxexp1exp2exp3r3   r4   r>   r>   r?   test_issue_21195  s   
 &r   c                  C   s  t d} tdd}td| t| d  kr| |fv sJ  J tddgddgg}ttdt gdt dt gg}tt|t|t  krJ|ksMJ  J tddd}t||t||ks_J t||t||kskJ tt||}t|t|}t||t}||  kr|  krt||ksJ  J tt||}t|t|}t||t}||  kr|  krt||ksJ  J t|||d ksJ t|||t||d ksJ t|||t|d |ksJ t|||t|||ksJ t|t||tt||d ksJ d S Nr:   r   r9   rZ   rf   r3   )r   r,   r   r    r2   r"   r   )r   r   r   Mxr3   abcr>   r>   r?   test_MatMul_postprocessor  s,   
, (,,(r   c                  C   s(   t d} t| tjttj| ksJ d S rV   )r   r   r   NaN)r   r>   r>   r?   test_MatAdd_postprocessor_xfail  s    r   c                  C   s  t d} td| t| d  kr| ksJ  J ttj| }|t| tjks(J t|ts/J |jtj| fks9J ttj| }|t| tjksIJ t|tsPJ |jtj| fksZJ t| tj}t|tsgJ |jtj| fksqJ tddgddgg}tt	|}|t|t	ksJ t|tsJ |jt	|fksJ t
ddd}t||t||  kr|| ksJ  J tt	||}|t|t	|  krt||t	  krtt	||  krt|t	|  krt||t	ksJ  J t|tsJ |jt	|| fksJ t||d| ks
J t|||t|||  kr-t|||  kr-|d|  ks0J  J t|t	||t	}t|ts@J |jdt	 |d|  fksPJ d S r   )r   r   r   Infinityrq   rh   ComplexInfinityr   r    r2   r"   )r   r   r   r3   r>   r>   r?   test_MatAdd_postprocessor  s:   (
,bL$r   c                  C   sr   t ttt tt  tksJ tdt t dt t  } t | tks&J | jdt t dt t fks7J d S )Nr:   rf   )typer   r5   r6   r   rh   )r   r>   r>   r?    test_simplify_matrix_expressions  s    &r   c                  C   st   t ddd} t ddd}t| t| }t|t|  }||ks"J || dks*J t|tr1J t|tr8J d S )Nr3   r:   r4   r   )r"   r   rq   )r3   r4   r   r   r>   r>   r?   test_exp  s   r   c                   C   s   t tdd  d S )Nc                   S   r;   )Nr9   r:   r3   r=   r>   r>   r>   r?   r@     rA   z#test_invalid_args.<locals>.<lambda>)r.   r   r>   r>   r>   r?   test_invalid_args  s   r   c                  C   sX   t ddd} t| dd}| }|dd}|j|jksJ |jd |jd ks*J d S )Nr3   T)complexr:   rZ   r   )r   r"   r   rb   rh   )A_labelr3   A_1A_2r>   r>   r?   test_matrixsymbol_from_symbol  s   r   c                  C   sZ   t ddd} |  t| d | d | d g| d | d | d	 ggks$J ttd
d  d S )Nr]   r:   rZ   rN   rM   r   r   r_   r   c                   S   s   t  S rK   )r3   r   r>   r>   r>   r?   r@     rL   z"test_as_explicit.<locals>.<lambda>)r"   r   r   r.   rI   )r]   r>   r>   r?   test_as_explicit  s   r   c                     sP  t ddtjd  jdksJ  jtjksJ tddgddgg v s'J tdd v s2J tt fdd tt fd	d t t	t
tjd t v sRJ tt fd
d tt fdd t ddh dd tddgddggtddgg}  v tjksJ |  v tjksJ ttdd  ttdd  ttdd  d S )Nr:   )setre   r9   rZ   rf   c                         t  v S rK   rn   r>   r   r>   r?   r@   #  rL   z test_MatrixSet.<locals>.<lambda>c                      s   d v S rm   r>   r>   r   r>   r?   r@   $  rL   c                      r   rK   ry   r>   r   r>   r?   r@   '  rL   c                      s    v S rK   r>   r>   r   r[   r>   r?   r@   (  rL   >   r9   r:   rZ   c                   S      t ddtjS )Nr:   r   r(   r   Realsr>   r>   r>   r?   r@   .  r   c                   S   r   )Ng333333@r<   r   r>   r>   r>   r?   r@   /  r   c                   S   s   t dddS )Nr:   )r9   r:   rZ   )r(   r>   r>   r>   r?   r@   0  rA   )r(   r   r   rO   r   r    r,   r.   rr   rD   rP   r3   falserI   )r\   r>   r   r?   test_MatrixSet  s*   
r   c                  C   s  t ddd} t ddd}tdd}|  |  |  | |ksJ |  |  |  |  |ks/J |  |  |  |  |ks?J |  |  |  | |  |ksQJ |  |  |  | |  |kscJ | | |  || j|j    | d | |  || j  ||j  ksJ d S )Nr3   r:   r4   )r"   r,   r   r   rk   )r3   r4   r]   r>   r>   r?   test_matrixsymbol_solving3  s   
  $$Lr   N)rsympy.concrete.summationsr   sympy.core.exprtoolsr   sympy.core.functionr   r   sympy.core.relationalr   sympy.core.symbolr   r   r	   (sympy.functions.special.tensor_functionsr
   sympy.matrices.denser   sympy.polys.polytoolsr   
sympy.corer   r   r   r   r   r   r   sympy.functionsr   r   r   r   r   r   sympy.simplifyr   sympy.matricesr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   &sympy.matrices.expressions.determinantr)   r*   "sympy.matrices.expressions.matexprr+   "sympy.matrices.expressions.specialr,   r-   sympy.testing.pytestr.   r/   rD   rP   rQ   r   r   r2   r3   r4   r5   r6   r7   r8   rJ   rU   rX   rj   rt   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   r>   r>   r?   <module>   s    $ @	*



/	