U
    L?h	H                     @   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/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 d dl8m9Z9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ eddd\ZAZBZCZDZEedZFe,deAeBZGe,deBeCZHe,deAeAZIe,deAeAZJe,deBeAZKe,deAdZLdd ZMd d! ZNd"d# ZOd$d% ZPd&d' ZQd(d) ZRd*d+ ZSd,d- ZTd.d/ ZUd0d1 ZVd2d3 ZWd4d5 ZXd6d7 ZYd8d9 ZZd:d; Z[d<d= Z\d>d? Z]d@dA Z^dBdC Z_dDdE Z`dFdG ZadHdI ZbdJdK ZcdLdM ZddNdO Zee=dPdQ ZfdRdS ZgdTdU ZhdVdW ZidXdY ZjdZd[ Zkd\d] Zld^d_ Zme=d`da Zndbdc Zoddde Zpdfdg Zqdhdi Zrdjdk Zsdldm Ztdndo Zudpdq ZvdrS )s    )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SparseMatrix	TransposeAdjoint	MatrixSet)NonSquareMatrixError)Determinantdet)MatrixElement)
ZeroMatrixIdentity)raisesXFAILskip)versionz	n m l k pTintegerxABCDEw   c                      s   t dddstt ddds t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  sttddd tt fdd tddd tt fdd d S )Nr4      r   c                   S   s   t dddS )Nr4   r;   r"    r>   r>   _/var/www/html/venv/lib/python3.8/site-packages/sympy/matrices/expressions/tests/test_matexpr.py<lambda>%       z-test_matrix_symbol_creation.<locals>.<lambda>c                   S   s   t dddS )Nr4          @r;   r=   r>   r>   r>   r?   r@   &   rA   c                   S   s   t dddS )Nr4                  @r;   r=   r>   r>   r>   r?   r@   '   rA   c                   S   s   t dddS )Nr4   r;   r<   r=   r>   r>   r>   r?   r@   (   rA   c                   S   s   t dddS )Nr4   r;   rB   r=   r>   r>   r>   r?   r@   )   rA   c                   S   s   t dddS )Nr4   r;   rC   r=   r>   r>   r>   r?   r@   *   rA   nFr1   c                      s   t d  S Nr4   r=   r>   rD   r>   r?   r@   /   rA   T)negativec                      s   t d  S rE   r=   r>   rF   r>   r?   r@   1   rA   )r"   AssertionErrorr-   
ValueErrorr   r>   r>   rF   r?   test_matrix_symbol_creation"   s    rJ   c                   C   sd   t jttfkstt t jttfks(tt d jdks:tt d jt ksLtt d jj	dks`td S )Nr   r:   r   r   r4   )
r4   shaperD   mrH   r5   lindicessymbolnamer>   r>   r>   r?   test_matexpr_properties4   s
    rS   c                   C   s^   t t jtjkstt t jtks&tdt t t ttj ksDttt jtt	fksZtd S Nr;   )
r3   r4   rM   rH   	__class__r   r+   r5   rD   rO   r>   r>   r>   r?   test_matexpr<   s    rV   c                     s  t dtt} t dtt}t dtt}| ttjttfks>t| | ||| | ksZt| | ttjsptt ddd t dddt dd	dt d
tdksttd}td|j	|ddfkstd   d kstt
tfdd d d ks*t d  d ksHt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std S )Nr4   r5   r6   W   Xr;   Yr:   Zyr:   r:   c                      s    d   S )Nr]   subsr>   )rY   rZ   r>   r?   r@   [   rA   z#test_matexpr_subs.<locals>.<lambda>rK   r;   r:   c                      s    d   S )Nr;   r;   r^   r>   )rW   r[   r>   r?   r@   b   rA   c                      s    d   tdS )Nra   r;   )r_   r   r>   )rW   r>   r?   r@   d   rA      r7   )r"   rD   rN   rO   r_   rM   rH   Z	is_squarer	   argsr-   
IndexErrorr#   r    r   )r4   r5   r6   r\   r7   r>   )rW   rY   rZ   r[   r?   test_matexpr_subsC   s.     re   c                     s   t dtt t dtt} t |  ts*t |  j jks>tt   d|   tsXttt	 fdd tt	 fdd tt	 fdd  t
tt   t
ttksttt	dd  d S )	Nr4   r5   r;   c                      s    d S Nr:   r>   r>   r4   r>   r?   r@   u   rA   ztest_addition.<locals>.<lambda>c                      s   d  S N   r>   r>   rg   r>   r?   r@   v   rA   c                      s   d  S rh   r>   r>   rg   r>   r?   r@   w   rA   c                   S   s   t tttj S N)r+   rD   rN   r   Zeror>   r>   r>   r?   r@   z   rA   )r"   rD   rN   
isinstancer   rH   rM   r   r-   	TypeErrorr+   r5   r>   rg   r?   test_additionm   s     ro   c                     s`  t dtt} t dtt t dtt}d|    jttfks>t| d   tttksXtd|  j| jkslt| ttt   tttkst|tt |j ttkst d t	j
  ksttt fdd t dtt} t dtt tt|    |   kst| d |  | d ks"t| d | jd  | jks@t| d | jd  | ks\td S )	Nr4   r5   r6   r;   r   c                      s   d  S rT   r>   r>   rn   r>   r?   r@      rA   z%test_multiplication.<locals>.<lambda>rX   )r"   rD   rN   rO   rM   rH   r+   r,   Ir   Halfr-   NotImplementedError)r4   r6   r>   rn   r?   test_multiplication}   s      rs   c                  C   s   t dtt} t| d}|jdks$t|j| ks2t| t jtksDt| d ttksXt| d | ksht| d |ksxt| d t| kst| d d | kst| d d | d kst| tj	 t
| kst| tdd t| kstttdd	  d S )
Nr4   r;   r   r:   r<   rX      c                   S   s   t dddd S )Nr5   rX   r;   r=   r>   r>   r>   r?   r@      rA   ztest_MatPow.<locals>.<lambda>)r"   rD   r   r   rH   baser,   r   r   rq   r   r   r   r-   r'   )r4   ZAAr>   r>   r?   test_MatPow   s    
rv   c                     sV   t d\ td } | j fks,ttt fdd |  | ksRtd S )Nzn,m,trY   c                      s   t d S )NrY   r=   r>   rN   rD   tr>   r?   r@      rA   z#test_MatrixSymbol.<locals>.<lambda>)r   r"   rM   rH   r-   rm   doitrY   r>   rw   r?   test_MatrixSymbol   s
    r{   c                      sP   t ddd t tdd fddks,tt tdd fddksLtd S )NrY   r;   c                    s    | |f S rj   r>   ijrz   r>   r?   r@      rA   z'test_dense_conversion.<locals>.<lambda>c                    s    | |f S rj   r>   r|   rz   r>   r?   r@      rA   )r"   r   rH   r    r>   r>   rz   r?   test_dense_conversion   s     r   c                   C   s   t t jt thkstd S rj   )r6   r7   Zfree_symbolsrH   r>   r>   r>   r?   test_free_symbols   s    r   c                   C   s    t tjtddd tstd S )NrY   r;   )rl   r   rk   r"   r!   rH   r>   r>   r>   r?   test_zero_matmul   s    r   c                  C   sP   t ddd} tt| tttd ttd  ggt| tdggksLtd S Nr4   r:   r;   )	r"   r   r   r   r   r3   r   r    rH   rg   r>   r>   r?   test_matadd_simplify   s    (r   c                  C   sP   t ddd} tt| tttd ttd  ggt| tdggksLtd S r   )	r"   r   r   r   r   r3   r   r    rH   rg   r>   r>   r?   test_matmul_simplify   s    (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svtqvd S )Nr4   r5   rY   r;   r<   r   )r"   rD   rN   rO   r,   r+   r   r   r$   r%   r   r   rU   rc   rH   )r4   r5   rY   Z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  qXqJd S )Nr4   r:   r;   r:   r;   r<   )r"   rD   rN   rO   krange)r4   r}   r~   r>   r>   r?   test_matexpr_indexing   s    r   c                      s   t ddd  d  d ks t td  d ks8t d  d ksLtt d dd df  d  d  d  d gkst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std S )Nr4   r;   rX   r:   rK   r:   r   rL   r]   c                      s    d S )Nrt   r>   r>   rg   r>   r?   r@      rA   z&test_single_indexing.<locals>.<lambda>c                      s    t  S rj   rF   r>   rg   r>   r?   r@      rA   r5   c                      s    d S rf   r>   r>   rn   r>   r?   r@      rA   )r"   rH   intlistr-   rd   rD   rN   r>   r>   r4   r5   r?   test_single_indexing   s    8r   c                   C   s(   t d t d  t d t d  ks$td S )NrK   r   )r4   rH   r>   r>   r>   r?   test_MatrixElement_commutative   s    r   c                  C   sh  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stt ddd}t| |  t| |   kr^| |  ksdn td S )Nr4   rb   rL   r]   ra   )rX   rX   )r;   rX   )rX   r;   r   r`   )rX   r:   )r:   rX   rK   r   )r;   r   rX   r   r   r;   )r   rX   r5   )r"   as_explicitr)   rH   r(   ry   r   r>   r>   r?   test_MatrixSymbol_determinant   sd    (		

r   c                   C   s*   t d t d  t d t d ks&td S )Nr   rL   )r4   r   rH   r>   r>   r>   r?   test_MatrixElement_diff  s    r   c                  C   s<   t ddd} tddg}| d | | |d ks8td S )Nur;   r:   rX   ri   rL   )r"   r   r_   ry   rH   )r   vr>   r>   r?   test_MatrixElement_doit  s    r   c                  C   s   t t} t| d | d ks"t| t | ks2tt| d | d ksLt| d | ks\tt| d | d ksvtt d}t|d |t kstt|d |kstt|d |d kstt|d |d kstd S )NrX   r   r;   r   rb   )r,   rD   r   ry   rH   )MNr>   r>   r?   test_identity_powers  s    r   c                      s   t tt  d  ksttt fdd  d ttks@tt d  d ksZttt fdd t ddtd d kstttfdd d td kstd tdkstttfd	d d S )
Nrb   c                      s    d S Nr   r>   r>   z1r>   r?   r@   "  rA   z!test_Zero_power.<locals>.<lambda>r   r;   c                      s   t  d S r   r   ry   r>   r   r>   r?   r@   %  rA   rX   c                      s    d S )Nr>   r>   z2r>   r?   r@   (  rA   c                      s   t  d S Nr<   r   r>   r   r>   r?   r@   +  rA   )r+   rD   rH   r-   rI   r,   r   ry   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@ttttf  td tdtdtd ftdtd kszttd}| 	t
t|tdtd ftt|f  |dtd fst|  tttf kstd S )Nr   r:   rL   _i_1)r   r7   r9   r   prH   r
   rD   r   Zdummy_eqr   ry   )Zdexprr   r>   r>   r?   test_matrixelement_diff.  s    "::r   c                     sn  t d\} }}}t| |g||gg t d\} |f }t|tsJttddgddgg}||f }t|tsxtdD ]L\}}	||||	i ||	f kst||||	i|||	f ks|tq|tddd}
|
d	 |
 | kst|
|f |
  |f kst |f  |
|
|f ks:tt d d |f tsZt d d |f d
|di d kstt df tst df d d	 kst df d
 d kst |f | td
dgddgg|f kst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;   rX   rb   ri   )rL   rK   r   r]   r4   rL   r:   r   r   rK   c                      s    df S rT   r>   r>   r   r}   r>   r?   r@   Q  rA   z0test_MatrixElement_with_values.<locals>.<lambda>c                      s    df S r   r>   r>   r   r>   r?   r@   R  rA   c                      s    df S rT   r>   r>   r   r>   r?   r@   S  rA   c                      s    df S r   r>   r>   r   r>   r?   r@   T  rA   )r   r    rl   r*   rH   r#   r_   r"   r   r-   rI   )r3   r\   zr9   r~   ZMijZMsZmsijZoiZojr4   r>   r   r?   test_MatrixElement_with_values8  s2    "$&& 0""4r   c                  C   s   t ddd} |  | d ks tt ddd }| td|d  ggksPtt ddd }|d |d  |d	 |d
   }t|d |d	  g|d
  |d gg| }| |kstd S )Nr5   rX   r<   rY   r:   rL   r;   r]   rK   r   )r"   invrH   r   r    )r5   rY   ZdetXZinvXr>   r>   r?   test_invW  s      r   c                  C   s   t dtt} t dtt}| | tt  }| t |t  | t  |t  }||ksTtt||ksdtt||kstt|d | d |d  | d t |d   d  | d  }tt}t||t |d | d |t  |d  d  | d  fkstd S )Nr4   r5   r<   )r"   rD   r6   r7   rH   r   r   r,   )r4   r5   expr1expr2exprrp   r>   r>   r?   test_factor_expandf  s     8r   c                     s   zddl mm}  W n tk
r0   td Y nX tddd t ddt ddgt ddt ddgg}|  |st|  dd|sttt	d	
d
d dkrtt fdd d S )Nr   )arrayarray_equalz?NumPy must be available to test creating matrices from ndarraysr4   r;   r:   Tcopynumpy.c                      s    ddS )NFr   r>   r>   r4   r   r>   r?   r@     rA   z'test_numpy_conversion.<locals>.<lambda>)r   r   r   ImportErrorr/   r"   r*   rH   r   r0   splitr-   rm   )r   Znp_arrayr>   r   r?   test_numpy_conversionu  s    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sdtd S )Nr4   ri   r;   rL   rK   r   r]   )r"   Trp   r   r    rH   rg   r>   r>   r?   test_issue_2749  s    .r   c                  C   s:   t ddd} | j|   d t| d d ggks6td S )Nr3   r:   r<   rL   r   )r"   r   r   r    rH   )r3   r>   r>   r?   test_issue_2750  s    r   c                  C   sp   t ddd} t ddd}t| |dks*tt| d |d jtksFttdd} tdd}t| |dksltd S )	Nr4   rX   r:   r5   r;   Fr   T)r"   r   rH   funcr+   r   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std S )Nrx   r3   )r   r   r   r   r   r   r    rH   )rx   r3   ZdxZexp1Zexp2Zexp3r4   r5   r>   r>   r?   test_issue_21195  s    
 &r   c                  C   s   t ddd} t ddd}| | }t| }t ddd}|| | t|  }|d |d  |d |d   |d	 |d
   }|d t|kstt|d t |kstd S )Nr4   r;   rX   r5   r   rK   r   r]   r`   r   rL   )r"   r    Zadjugater_   r3   r   rH   ry   )r4   r5   JZJinvr   ZJkexpectedr>   r>   r?   test_issue_24859  s    0r   c                  C   s  t d} tdd}td| t| d  kr6| |fks<n ttddgddgg}ttdt gdt dt gg}tt|t|t  kr|ksn ttddd}t||t||kstt||t||ksttt||}t|t|}t||t}||  kr |  kr t||ks&n ttt||}t|t|}t||t}||  krt|  krtt||kszn tt|||d kstt|||t||d kstt|||t|d |kstt|||t|||kstt|t||tt||d kstd S Nr;   r   r:   rX   rb   r4   )r   r+   r   rH   r    r3   r"   r   )r   r   r   ZMxr4   abcr>   r>   r?   test_MatMul_postprocessor  s,    
* &00  r   c                  C   s(   t d} t| tjttj| ks$td S rT   )r   r   r   NaNrH   )r   r>   r>   r?   test_MatAdd_postprocessor_xfail  s    r   c                  C   s  t d} td| t| d  kr(| ks.n tttj| }|t| tjksNtt|ts\t|jtj| fksptttj| }|t| tjkstt|tst|jtj| fkstt| tj}t|tst|jtj| fkstt	ddgddgg}tt
|}|t|t
kstt|ts"t|jt
|fks6ttddd}t||t||  krj|| kspn ttt
||}|t|t
|  krt||t
  krtt
||  krt|t
|  krt||t
ksn tt|tst|jt
|| fkstt||d| ks&tt|||t|||  krjt|||  krj|d|  kspn tt|t
||t
}t|tst|jdt
 |d|  fkstd S r   )r   r   rH   r   Infinityrl   rc   ZComplexInfinityr   r    r3   r"   )r   r   r   r4   r>   r>   r?   test_MatAdd_postprocessor  s:    &
.jJr   c                  C   sr   t ttt tt  tks ttdt t dt t  } t | tksLt| jdt t dt t fksntd S )Nr;   rb   )typer   r6   r7   r   rH   rc   )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sDt|| dksTtt|trbtt|trptd S )Nr4   r;   r5   r   )r"   r   rH   rl   )r4   r5   r   r   r>   r>   r?   test_exp  s    r   c                   C   s   t tdd  d S )Nc                   S   s   t dddS )Nr:   r;   r4   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<t|jd |jd ksTtd S )Nr4   T)complexr;   rX   r   )r   r"   ry   r_   rc   rH   )ZA_labelr4   ZA_1Z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sHtttd
d  d S )Nr[   r;   rX   rL   rK   r   r   r]   r   c                   S   s   t  S rj   )r4   r   r>   r>   r>   r?   r@   ,  rA   z"test_as_explicit.<locals>.<lambda>)r"   r   r   rH   r-   rI   )r[   r>   r>   r?   test_as_explicit&  s    r   c                     sV  t ddtjd  jdkst jtjks.ttddgddgg ksNttdd ksdttt	 fdd tt	 fd	d t t
ttjd t ksttt	 fd
d tt	 fdd t dddddhd tddgddggtddgg}  ktjkst|  ktjks(tttdd  ttdd  tt	dd  d S )Nr;   )setra   r:   rX   rb   c                      s   t  kS rj   rg   r>   r   r>   r?   r@   7  rA   z test_MatrixSet.<locals>.<lambda>c                      s   d kS rf   r>   r>   r   r>   r?   r@   8  rA   c                      s   t  kS rj   )r6   r>   r   r>   r?   r@   ;  rA   c                      s    kS rj   r>   r>   r   rY   r>   r?   r@   <  rA   c                   S   s   t ddtjS )Nr;   r   r&   r   Realsr>   r>   r>   r?   r@   B  rA   c                   S   s   t ddtjS )Ng333333@r<   r   r>   r>   r>   r?   r@   C  rA   c                   S   s   t dddS )Nr;   )r:   r;   rX   )r&   r>   r>   r>   r?   r@   D  rA   )r&   r   r   rM   rH   r   r    r+   r-   rm   rD   rN   r4   falserI   )rZ   r>   r   r?   test_MatrixSet/  s*    
r   c                  C   s  t ddd} t ddd}tdd}|  |  |  | |ks>t|  |  |  |  |ks^t|  |  |  |  |ks~t|  |  |  | |  |kst|  |  |  | |  |kst| | |  || j|j    | d | |  || j  ||j  kstd S )Nr4   r;   r5   )r"   r+   rH   r   r   r   )r4   r5   r[   r>   r>   r?   test_matrixsymbol_solvingG  s    
  $$r   N)wZsympy.concrete.summationsr   Zsympy.core.exprtoolsr   Zsympy.core.functionr   r   Zsympy.core.relationalr   Zsympy.core.symbolr   r   r	   Z(sympy.functions.special.tensor_functionsr
   Zsympy.matrices.denser   Zsympy.polys.polytoolsr   Z
sympy.corer   r   r   r   r   r   r   Zsympy.functionsr   r   r   r   r   r   Zsympy.simplifyr   Zsympy.matricesr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Zsympy.matrices.exceptionsr'   Z&sympy.matrices.expressions.determinantr(   r)   Z"sympy.matrices.expressions.matexprr*   Z"sympy.matrices.expressions.specialr+   r,   Zsympy.testing.pytestr-   r.   r/   importlib.metadatar0   rD   rN   rO   r   r   r3   r4   r5   r6   r7   r8   r9   rJ   rS   rV   re   ro   rs   rv   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>   r?   <module>   s   $ 8*



/	