o
    *Ī®c.  ć                   @   s0  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	 d dl
mZ d dlmZmZ d dlmZ d d	l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 d dl m!Z! d dl"m#Z# dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+d d! Z,d"d# Z-d$d% Z.d&d' Z/d(S ))é    )ŚAdd)Ś	unchanged)ŚMul)Śsymbols)ŚEq)ŚSum)ŚimŚre)Ś	Piecewise)ŚNonSquareMatrixErrorŚ
ShapeError)ŚImmutableDenseMatrix)ŚMatrixSymbol)ŚMatAdd)Ś
ZeroMatrixŚGenericZeroMatrixŚIdentityŚGenericIdentityŚ	OneMatrix)ŚMatMul)Śraisesc                      sĢ   t tddsJ t t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 t  sFJ td
dd tt fdd td
dd tt fdd d S )Né   r   c                   S   ó
   t ddS ©Né’’’’r   ©r   © r   r   śT/tmp/pip-target-vg8gfxp4/lib/python/sympy/matrices/expressions/tests/test_special.pyŚ<lambda>   ó   
 z+test_zero_matrix_creation.<locals>.<lambda>c                   S   r   ©Nē       @r   r   r   r   r   r   r      r   c                   S   r   ©Nł               @r   r   r   r   r   r   r      r   c                   S   r   ©Nr   r   r   r   r   r   r   r      r   c                   S   r   ©Nr   r!   r   r   r   r   r   r      r   c                   S   r   ©Nr   r#   r   r   r   r   r   r      r   ŚnF©Śintegerc                      ó
   t   S ©Nr   r   ©r'   r   r   r       r   T©Śnegativec                      r*   r+   r   r   r,   r   r   r   "   r   )r   r   r   Ś
ValueErrorr   r   r   r,   r   Śtest_zero_matrix_creation   s   r0   c                     s²   t   tddd} td| | }  ksJ  |ksJ | ks!J  js&J tt fdd tt fdd tt fdd t  ksHJ t |t|ksSJ t  d S )	Nr'   Tr(   ŚAc                      ó    j S r+   ©Śshaper   ©Śzr   r   r   0   ó    z*test_generic_zero_matrix.<locals>.<lambda>c                      r2   r+   ©Śrowsr   r5   r   r   r   1   r7   c                      r2   r+   ©Ścolsr   r5   r   r   r   2   r7   )r   r   r   Śis_ZeroMatrixr   Ś	TypeErrorr   Śhash©r'   r1   r   r5   r   Śtest_generic_zero_matrix%   s   
r@   c                      s   t dsJ t dsJ ttdd  ttdd  ttdd  td t  s+J tddd	 tt fd
d tddd tt fdd d S )Nr   r   c                   S   ó   t dS )Nr   ©r   r   r   r   r   r   =   ó    z/test_identity_matrix_creation.<locals>.<lambda>c                   S   rA   )Nr!   rB   r   r   r   r   r   >   rC   c                   S   rA   )Nr#   rB   r   r   r   r   r   ?   rC   r'   Fr(   c                      ó   t  S r+   rB   r   r,   r   r   r   D   rC   Tr-   c                      rD   r+   rB   r   r,   r   r   r   F   rC   )r   r   r/   r   r   r   r,   r   Śtest_identity_matrix_creation:   s   rE   c                     sĀ   t   tddd} td| | }  ksJ  |ksJ | ks!J  js&J  d  ks.J tt fdd tt fdd tt fd	d t  ksPJ t |t|ks[J t  d S )
Nr'   Tr(   r1   r   c                      r2   r+   r3   r   ©ŚIr   r   r   U   r7   z'test_generic_identity.<locals>.<lambda>c                      r2   r+   r8   r   rF   r   r   r   V   r7   c                      r2   r+   r:   r   rF   r   r   r   W   r7   )r   r   r   Śis_Identityr   r=   r   r>   r?   r   rF   r   Śtest_generic_identityI   s   
rI   c                      sŽ   t ddsJ t ddsJ tt ddt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   sOJ tddd tt fdd tddd tt fdd d S )Nr   r   é   c                   S   r   r   ©r   r   r   r   r   r   c   r   z*test_one_matrix_creation.<locals>.<lambda>c                   S   r   r    rK   r   r   r   r   r   d   r   c                   S   r   r"   rK   r   r   r   r   r   e   r   c                   S   r   r$   rK   r   r   r   r   r   f   r   c                   S   r   r%   rK   r   r   r   r   r   g   r   c                   S   r   r&   rK   r   r   r   r   r   h   r   r'   Fr(   c                      r*   r+   rK   r   r,   r   r   r   m   r   Tr-   c                      r*   r+   rK   r   r,   r   r   r   o   r   )r   r   r   r   r/   r   r   r   r,   r   Śtest_one_matrix_creation_   s   rL   c                  C   s¬  t ddd\} }td| |}t| |}|| |ksJ ||j t| | ks'J ||j t| | ks3J || t|j ks>J |sBJ | ” t|| ksMJ | ” |ksUJ | ” t|| ks`J t||kshJ t	||kspJ t| | d t
| ks}J tt |d  W d    n1 sw   Y  tt |d  W d    n1 sØw   Y  tt |d  W d    n1 sĄw   Y  tdd ” t dd”ksŌJ d S )	Nśn mTr(   r1   r   rJ   r   é   )r   r   r   ŚTr4   Ś	transposeŚ	conjugateŚadjointr	   r   r   r   r   Śas_explicitr   Śzeros)r'   Śmr1   ŚZr   r   r   Śtest_ZeroMatrixs   s0   


’

’

’"rW   c                  C   ób   t ddd} tt| | dd| }t|jtsJ | ” td|  | ks%J t| ” jts/J d S ©Nr'   Tr(   F)Śevaluater   )r   r   r   Ś
isinstancer9   Śdoitr   )r'   ŚZnnr   r   r   Śtest_ZeroMatrix_doit   ó
   r^   c                  C   sŅ  t ddd\} }td| |}td| d}t| |}|j| |fks"J t|| ts+J | ” t|| ks6J | ” |ks>J | ” t|| ksIJ t	||ksQJ t
|t| |ks\J t| | d t| ksiJ tt |d  W d    n1 s|w   Y  tt |d  W d    n1 sw   Y  tt |d  W d    n1 s¬w   Y  tt ||  W d    n1 sÄw   Y  t| | }|d	 dksÖJ tdd
}| ” t dd
”ksēJ d S )NrM   Tr(   r1   ŚarJ   r   r   )rJ   r   rN   )r   r   r   r4   r[   r   rP   rQ   rR   r	   r   r   r   r   r   r   rS   r   Śones)r'   rU   r1   r`   ŚUr   r   r   Śtest_OneMatrix   s8   


’

’

’

’

rc   c                  C   rX   rY   )r   r   r   r[   r9   r\   r   )r'   ŚUnnr   r   r   Śtest_OneMatrix_doit·   r_   re   c                  C   sx   t ddd\} }}td| d}t| |t|| t| || ks"J |tdd |ks-J tdd|j |jks:J d S )Nzn m kTr(   ŚwrJ   )r   r   r   rO   )r'   rU   Śkrf   r   r   r   Śtest_OneMatrix_mulæ   s
   &rh   c                  C   s,  t ddd\} }td| |}t d\}}t| }t|}|| |ks$J || |ks,J | ” |ks4J | ” |ks<J | ” |ksDJ | ” |ksLJ t||ksTJ t|t	| | ks_J |||f dksiJ t
|||f |d| d f|d| d f | d” ” dksJ t
t
|||f |d| d f|d| d f | d” ” dks§J t
|||f |d| d f}| ” dks½J t
|||f |d| d	 f}| ”  td|dk|| d	 k@ fd
”sįJ t
|||f |d| d f}| ”  td|dk|| d k@ fd
”sJ td ” t d”ksJ d S )NrM   Tr(   r1   zi jr   rJ   rN   r   )r   T)r   r   r   rP   ŚinverserQ   rR   r	   r   r   r   Śsubsr\   Śdummy_eqr
   rS   r   Śeye)r'   rU   r1   ŚiŚjŚInŚImŚexprr   r   r   Śtest_IdentityĒ   sB   <@ž’ž
’ rr   c                  C   s^   t ddd} tt| | dd}t|jtsJ | ” td|  ks#J t| ” jts-J d S rY   )r   r   r   r[   r9   r\   r   )r'   ŚInnr   r   r   Śtest_Identity_doitń   s
   rt   N)0Śsympy.core.addr   Śsympy.core.exprr   Śsympy.core.mulr   Śsympy.core.symbolr   Śsympy.core.relationalr   Śsympy.concrete.summationsr   Ś$sympy.functions.elementary.complexesr   r	   Ś$sympy.functions.elementary.piecewiser
   Śsympy.matrices.commonr   r   Śsympy.matrices.immutabler   Ś"sympy.matrices.expressions.matexprr   Ś!sympy.matrices.expressions.mataddr   Ś"sympy.matrices.expressions.specialr   r   r   r   r   Ś!sympy.matrices.expressions.matmulr   Śsympy.testing.pytestr   r0   r@   rE   rI   rL   rW   r^   rc   re   rh   rr   rt   r   r   r   r   Ś<module>   s6    *