o
    8Va                     @   s  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mZmZ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 d dl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+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z>m?Z?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZF G dd de"e#e$ZGdd ZHdd ZIG dd de"e#e%ZJdd ZKdd  ZLG d!d" d"e"e#e&ZMd#d$ ZNd%d& ZOG d'd( d(e"e#e'ZPd)d* ZQd+d, ZRG d-d. d.e"e#e(ZSG d/d0 d0e"e#e+ZTd1d2 ZUd3d4 ZVd5d6 ZWd7d8 ZXd9d: ZYd;d< ZZd=d> Z[d?d@ Z\dAdB Z]dCdD Z^dEdF Z_dGdH Z`dIdJ ZadKdL ZbdMdN ZcdOdP ZddQdR ZedSdT ZfdUdV ZgdWdX ZhdYdZ Zid[d\ Zjd]d^ Zkd_d` Zldadb Zmdcdd Zndedf Zodgdh Zpdidj Zqdkdl Zrdmdn Zsdodp Ztdqdr Zudsdt Zvdudv Zwdwdx Zxdydz Zyd{d| Zzd}d~ Z{dd Z|dd Z}dd Z~dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Ze?dd Zdd Zdd Zdd ZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ ZdS )    )Q)Expr)Add)Function)
NumberKindUndefinedKind)IIntegeroopiRational)S)Symbolsymbols)Abs)exp)sqrt)cossin)

ShapeErrorNonSquareMatrixError_MinimalMatrix_CastableMatrixMatrixShapingMatrixPropertiesMatrixOperationsMatrixArithmeticMatrixSpecial
MatrixKind)MatrixCalculus)Matrixdiageyematrix_multiply_elementwiseoneszerosSparseMatrixbandedMutableDenseMatrixMutableSparseMatrixImmutableDenseMatrixImmutableSparseMatrix)Poly)flatten)raisesXFAILwarns_deprecated_sympy)Array)xyzc                   @      e Zd ZdS )ShapingOnlyMatrixN__name__
__module____qualname__ r;   r;   H/usr/lib/python3/dist-packages/sympy/matrices/tests/test_commonmatrix.pyr6          r6   c                 C      t | | dd S )Nc                 S      t | |kS Nintijr;   r;   r<   <lambda>"       zeye_Shaping.<locals>.<lambda>r6   nr;   r;   r<   eye_Shaping!      rK   c                 C   r>   )Nc                 S      dS Nr   r;   rC   r;   r;   r<   rF   &       zzeros_Shaping.<locals>.<lambda>rH   rI   r;   r;   r<   zeros_Shaping%   rL   rP   c                   @   r5   )PropertiesOnlyMatrixNr7   r;   r;   r;   r<   rQ   )   r=   rQ   c                 C   r>   )Nc                 S   r?   r@   rA   rC   r;   r;   r<   rF   .   rG   z eye_Properties.<locals>.<lambda>rQ   rI   r;   r;   r<   eye_Properties-   rL   rS   c                 C   r>   )Nc                 S   rM   rN   r;   rC   r;   r;   r<   rF   2   rO   z"zeros_Properties.<locals>.<lambda>rR   rI   r;   r;   r<   zeros_Properties1   rL   rT   c                   @   r5   )OperationsOnlyMatrixNr7   r;   r;   r;   r<   rU   5   r=   rU   c                 C   r>   )Nc                 S   r?   r@   rA   rC   r;   r;   r<   rF   :   rG   z eye_Operations.<locals>.<lambda>rU   rI   r;   r;   r<   eye_Operations9   rL   rW   c                 C   r>   )Nc                 S   rM   rN   r;   rC   r;   r;   r<   rF   >   rO   z"zeros_Operations.<locals>.<lambda>rV   rI   r;   r;   r<   zeros_Operations=   rL   rX   c                   @   r5   )ArithmeticOnlyMatrixNr7   r;   r;   r;   r<   rY   A   r=   rY   c                 C   r>   )Nc                 S   r?   r@   rA   rC   r;   r;   r<   rF   F   rG   z eye_Arithmetic.<locals>.<lambda>rY   rI   r;   r;   r<   eye_ArithmeticE   rL   r[   c                 C   r>   )Nc                 S   rM   rN   r;   rC   r;   r;   r<   rF   J   rO   z"zeros_Arithmetic.<locals>.<lambda>rZ   rI   r;   r;   r<   zeros_ArithmeticI   rL   r\   c                   @   r5   )SpecialOnlyMatrixNr7   r;   r;   r;   r<   r]   M   r=   r]   c                   @   r5   )CalculusOnlyMatrixNr7   r;   r;   r;   r<   r^   Q   r=   r^   c                  C   sr  t ddg d} | jdksJ | jdksJ | d dksJ | d dks&J t| g dks0J t| dd d f g dks@J t| d d df ddgksPJ t| d d d d f t| ksbJ | d d d d f | kspJ t | | ksxJ t g dg dg| ksJ t g dg df| ksJ t ddg| ksJ t d	| ksJ t ddgdd
gddgg| krJ d S )N      )   r_   r`            ra   ra   rc   ra   rb   rc   rd   ra   r_   r`   )rg   rf   rb   rd   )r   rowscolslistr2   r;   r;   r<   test__MinimalMatrixU   s      $&rl   c                   C   s   t ddgddggjttksJ t ddgddggjttks"J t ddg jttks/J t tggjttks<J t dt dggggjttksNJ tdggjttks[J tdt dggggjttksmJ d S )Nra   r_   r`   rb   r   )r    kindr   r   r2   r   r&   r;   r;   r;   r<   	test_kindh   s   ""$(rn   c                  C   sL   t ddg d} |  }|jdksJ tdD ]}|| |d ks#J qd S )Nr_   )ra   r`   r_   rb   ra   rb   )r6   Zvecri   range)mZm_vecrD   r;   r;   r<   test_vecs   s   rq   c                  C   s   t d\} }}}t| |g||gg}t| |g||gg}t| |g||gg}t| |g||gg}| |   krR|   krR|   krR| |||dksUJ  J d S )Nza:d)r   r   r   ra   ra   r   re   )r   r(   r*   r)   r+   Ztodok)abcdm1m2m3Zm4r;   r;   r<   
test_todok{   s   0r|   c                  C   s   t jt jtt t jgttttd gtt j tt dgg} t jt jtt t jttttd tt j tt dg}tdd|}| | ksCJ d S )Nr_   r`   rb   )	r   OneHalfr2   r3   ZZeror4   r6   tolist)ZlstZflat_lstrp   r;   r;   r<   test_tolist   s   82r   c                  C   sR   t ddtjdgdtjgtdgg} dtjidtjidtid}|  |ks'J d S )Nr`   r_   r   ra   r   ra   r_   )r6   r   r}   r~   r2   Ztodod)rp   dictr;   r;   r<   
test_todod   s   "r   c                      sH  t ddg d tt fdd tt fdd tt fdd tt fdd  d d	  krEtg d
g dgksHJ  J  d d	  krdtddgddgddggksgJ  J  d d  krtg d
g dgksJ  J  d d  krtddgddgddggksJ  J d S )Nr`   	ra   r_   r`   rb   rc   rd         	   c                      
     dS Nrc   row_delr;   er;   r<   rF         
 z"test_row_col_del.<locals>.<lambda>c                      r   Nr   r;   r   r;   r<   rF      r   c                      r   r   col_delr;   r   r;   r<   rF      r   c                      r   r   r   r;   r   r;   r<   rF      r   r_   rg   rf   ra   rb   rc   r   r   r   r   r   rd   r   )r6   r.   
IndexErrorr   r    r   r;   r;   r   r<   test_row_col_del   s   8>8Br   c                  C   s   t ddgddgg} t dtgtdgg}t dtdgtdtgtttgg}|  | gks-J | |gks6J | |gks?J d S Nra   r_   r`   )r    r2   r3   r4   get_diag_blocks)ru   rv   rw   r;   r;   r<   test_get_diag_blocks1   s    r   c                  C   s  t ddgddgg} t dtgtdgg}t dtdgtdtgtttgg}t| ||t| ||t| ||t|||f\}}}}t|j|j|}t|j|j|}t|j|j|}t|j|j|}| | ||gksiJ | | ||gkstJ | | ||gksJ | |||gksJ d S r   )	r    r2   r3   r4   r!   r6   rh   ri   r   )ru   rv   rw   ABCDr;   r;   r<   test_get_diag_blocks2   s    4r   c                  C   s   t ddddg} | jdk d S )Nra   r_   r   ra   r_   )r6   shaperp   r;   r;   r<   
test_shape   s   r   c                  C   sh   t d} | ddtdddksJ tdddd }|ddtdks&J |d	d
tdks2J d S )Nr`   ra   r   )	ra   r   r   r   ra   r   r   r   ra   rb   c                 S   s   | | S r@   r;   rC   r;   r;   r<   rF          ztest_reshape.<locals>.<lambda>)r   r`   ra   r_   )r`   rb   r_   r`   rb   rc   r_   rd   ))r   ra   r_   r`   ra   r_   )r`   rb   r_   r`   rb   rc   )rK   Zreshaper    r6   m0ry   r;   r;   r<   test_reshape   s   r   c                  C   sP   t ddg d} | dtddg dksJ | dtddg dks&J d S )Nr`   r   r   ra   rg   )ra   rb   r   )r6   rowr    colr   r;   r;   r<   test_row_col   s   "r   c                   C   s8   t dtg dtg dg dg dgksJ d S )Nr`   r   r   r   )ra   r   r   r   )r   ra   r   r   )r   r   ra   r   )rK   Zrow_joinr    r;   r;   r;   r<   test_row_join   s   r   c                   C   s@   t dtg dgtg dg dg dg dgksJ d S )Nr`   r   ra   r   r   )r   ra   r   )r   r   ra   )rK   Zcol_joinr    r;   r;   r;   r<   test_col_join   s   r   c                  C   s\   t g dg} tddD ]}g d}||d ttd|| d |ks+J qd S )Nrb   rb   rb   rc   r   rb   r`   r   )r    ro   insertr-   rK   Z
row_insertr   r   )Zr4rD   lr;   r;   r<   test_row_insert   s   (r   c                  C   s   t g d} tddD ]}g d}||d ttd|| d |ks*J qtddt d	d	gd	d	gd	d	gd	d	gd	d	gd	d	ggt g d
g dg dg dg dg dgks_J d S )Nr   r   rc   r   r   r   rb   r`   r   rd   r_   )ra   r   r   r_   r_   r   r   r   )r   ra   r   r_   r_   r   r   r   )r   r   ra   r_   r_   r   r   r   )r   r   r   r_   r_   ra   r   r   )r   r   r   r_   r_   r   ra   r   )r   r   r   r_   r_   r   r   ra   )	r    ro   r   r-   rP   Z
col_insertr   r   rK   )Zc4rD   r   r;   r;   r<   test_col_insert   s   (6r   c                      s   t dddd   g dddgtddg d	ksJ  ddgg d
tddg dks0J  tdtd ks>J tt fdd tt fdd d S )Nrb   r`   c                 S      | d | S Nr`   r;   rC   r;   r;   r<   rF      rG   ztest_extract.<locals>.<lambda>)r   ra   r`   r   ra   r_   )r   ra   r`   rb   r   
   r   r   r_   )r   r   r_   r   r      c                           dgdgS )Nrb   r   extractr;   r   r;   r<   rF          c                      r   )Nr   r`   r   r;   r   r;   r<   rF      r   )r6   r   r    ro   r.   r   r;   r;   r   r<   test_extract   s   ((r   c                     s   t dddd  t dddd    ksJ     t      kr<tg dg dg dg d	gks?J  J tt fd
d t t ksRJ tdd} tdd}tdd}tdd}t | |||  jdkr| jdks~J d S )Nrb   r`   c                 S   r   r   r;   rC   r;   r;   r<   rF      rG   ztest_hstack.<locals>.<lambda>c                 S   r   r   r;   rC   r;   r;   r<   rF      rG   )	r   ra   r_   r   ra   r_   r   ra   r_   )	r`   rb   rc   r`   rb   rc   r`   rb   rc   )	rd   r   r   rd   r   r   rd   r   r   )	r   r   r   r   r   r   r   r   r   c                            S r@   )hstackr;   rp   rz   r;   r<   rF     rG   r   ra   r_   rd   )r6   r   r    r.   r   r%   rh   ri   )M1M2ZM3ZM4r;   r   r<   test_hstack   s"   "r   c                      s   t dddd  t dddd    ksJ     t      krTtg dg dg dg d	g dg dg dg d	g dg dg dg d	gksWJ  J tt fd
d t t ksjJ d S )Nrb   r`   c                 S   r   r   r;   rC   r;   r;   r<   rF     rG   ztest_vstack.<locals>.<lambda>c                 S   r   r   r;   rC   r;   r;   r<   rF     rG   r   r   )rd   r   r   )r   r   r   c                      r   r@   )vstackr;   r   r;   r<   rF   !  rG   )r6   r   r    r.   r   r;   r;   r   r<   test_vstack  s&   "r   c               	   C   sT   t ddddtddt  g} |  tjtdtjthksJ | tthks(J d S Nr_   ra   )rQ   r2   Zatomsr   r}   ZNegativeOner   r   r;   r;   r<   
test_atoms&  s    r   c                   C   s    t tgdggjthksJ d S rN   )rQ   r2   Zfree_symbolsr;   r;   r;   r<   test_free_symbols,  s    r   c                  C   s\   t ttfdf} | tsJ | trJ | tsJ t dtfdf} | tr,J d S )N)r_   r`   r_   )rQ   r2   r3   Zhasr4   r   r   r;   r;   r<   test_has0  s   r   c                  C   s  t d} tddddg du sJ tddd| d d|   d t| d d  d| t t |  t dg	}| du s<J |jdddu sFJ |jd	d
 ddu sRJ tdddd |D }|jdddu sgJ tdddd tjgt|dd   D }| du sJ d S )Nr2   r_   ra   Fr`   r   Tsimplifyc                 S   s   | S r@   r;   rk   r;   r;   r<   rF   @  rO   z(test_is_anti_symmetric.<locals>.<lambda>c                 S      g | ]}|  qS r;   expand.0r2   r;   r;   r<   
<listcomp>B      z*test_is_anti_symmetric.<locals>.<listcomp>c                 S   r   r;   r   r   r;   r;   r<   r   D  r   )r   rQ   Zis_anti_symmetricr3   r   r}   rj   )r2   rp   r;   r;   r<   test_is_anti_symmetric:  s   D*r   c                  C   s`  t ddg d} |  rJ |  sJ | jddsJ t ddg d} |  s*J t ddtddd} |  s:J |  s@J t ddg d} | tdddksRJ t ddtdd} |  raJ |  sgJ t d	} |  sqJ t d
} |  s{J tdddtd dt  d ttd d ddtddg	} |  sJ | jddrJ |  jddsJ d S )Nr_   r   ra   ra   r   Fr   ra   r   r   ra   r`   ra   )	ra   r   r   r   r_   r   r   r   r`   ))rc   r   r   rd   rr   ))rc   r   r   )r   rd   r   r   )	rQ   Zis_diagonalis_symmetricr!   r%   r    r2   r3   r   r   r;   r;   r<   test_diagonal_symmetricalH  s,   6r   c                  C   s   t dtgt dgg} | jsJ t dt tgt dgg} | jdu s$J t ttgt dgg} | jd u s6J t tdgt dgg} | jdu sHJ d S )Nra   r_   F)rQ   r   Zis_hermitianr2   ru   r;   r;   r<   test_is_hermitianh  s   
r   c                   C   sJ   t djsJ ttdjrJ ttdjrJ tg dgjr#J d S )Nr`   r   )rS   Zis_IdentityrQ   r%   r$   r;   r;   r;   r<   test_is_Identitys  s   r   c                  C   s   t ttgttgg} |  du sJ t g dg dg} |  du s$J t g dddtdgg} |  du s8J t dtd	gg} |  du sHJ t g d
g} |  du sWJ t dgtgd	gg} |  du siJ t dgdgd	gg} |  du s{J d S )NTra   r_   r`   rb   rc   rd   r   r   Frc   rd   r   ra   r`   rg   r_   )rQ   r2   Zis_symbolicr   r;   r;   r<   test_is_symbolic{  s   r   c                  C   B   t g dg} | jdu sJ t dgdgdgg} | jdu sJ d S )Nrg   Tra   r_   r`   F)rQ   Zis_upperr   r;   r;   r<   test_is_upper     r   c                  C   r   )Nrg   Fra   r_   r`   T)rQ   Zis_lowerr   r;   r;   r<   test_is_lower  r   r   c                  C   s<   t dgdgg} t ddgddgg}| jrJ |jsJ d S Nra   r_   )rQ   Z	is_squarer   r;   r;   r<   test_is_square  s   
r   c                  C   s<   t ddg d} |  sJ t ddg d} |  rJ d S )Nr_   r   )r   ra   r   ra   )rQ   r   r   r;   r;   r<   test_is_symmetric  s   r   c                  C   s   t g dg dg dg} | jsJ t ddg d} | jsJ t ddg d} | jdu s.J | jdu s5J t g dg dg dg} | jrGJ d S )	N)r`   rb   ra   )r_   rb   rc   r   r`   )	r`   r_   r   rb   rb   ra   ra   rc   r_   )	r`   r_   r   rb   rb   ra   ra   rc   r_   Fr   )rQ   Zis_upper_hessenbergZis_lower_hessenbergr   r;   r;   r<   test_is_hessenberg  s   

r   c                  C   s   t ddg js	J t ddgddggjsJ t tddjs J t tdjr)J t tdgddggjd ks8J t tdgddggjdksGJ tddd} t | dgddggjdks\J d S )	Nr   r`   rb   ra   Fru   T)Znonzero)rQ   Zis_zero_matrixr%   r"   r2   r   r   r;   r;   r<   test_is_zero  s   "r   c                  C   s\   t tddg d h dksJ tddd} t tdd| dddg | dhks,J d S )	Nr_   )r   ra   r_   r`   >   ra   r_   r`   r2   Trealr   ra   )setrQ   valuesr   rk   r;   r;   r<   test_values  s   r   c                  C   sb   t td} | dd tdd ksJ | dd tdks"J | dd tdks/J d S )Nr`   c                 S   s   d|  S Nr_   r;   rk   r;   r;   r<   rF     r   z test_applyfunc.<locals>.<lambda>r_   c                 S   rM   rN   r;   rk   r;   r;   r<   rF     rO   c                 S   rM   Nra   r;   rk   r;   r;   r<   rF     rO   )rU   r"   Z	applyfuncr%   r$   )r   r;   r;   r<   test_applyfunc  s   r   c                  C   s>   dt gddgg} tddgt  dgg}| t| ksJ d S )Nr   ra   )r   rU   Zadjointr    )ZdatZansr;   r;   r<   test_adjoint  s   r   c               	   C   sp   t ddg d} t dddtj ddtj  ddtj  ddtj  g}| \}}|| ks0J || ks6J d S )Nr_   r   ra   r`   rb   )rU   r   ZImaginaryUnitZas_real_imag)ry   r{   ru   rv   r;   r;   r<   test_as_real_imag  s   r   c                  C   s   t dtdgg dg} | jtddgtdgddggksJ | jtdt dgg dgks.J | j|  ks7J | j| jjks@J | jtddgt dgddggksSJ d S )Nr   rc   ra   r_   r   ra   r_   )rU   r   Tr    r   	conjugateHMr;   r;   r<   test_conjugate  s    
r   c                  C   sJ   t tttddgg} | d dt ksJ |  tdt ggks#J d S )NF)Zevaluater   r_   )rU   r   r2   Zdoitr    r   r;   r;   r<   	test_doit  s    r   c                      sr   t ddtddg t fddtdD sJ t fddtdD s(J t fddtdD s7J d S )	Nr_   ra   rc   rd   c                 3   s(    | ]}   |  |   kV  qd S r@   Zevalfr   rD   r   r;   r<   	<genexpr>  s   & ztest_evalf.<locals>.<genexpr>c                 3   ,    | ]}  d |  |  d kV  qdS r_   Nr   r   r   r;   r<   r       * c                 3   r  r  rI   r   r   r;   r<   r    r  )rU   r   allro   r;   r;   r   r<   
test_evalf  s   "r  c                  C   s   t ttt  dgtt t t ttttt    gg} |  }|ttt td  dgttd  ttd   tt ttd   td  ggksJJ tddd}t ddtt| gjddtt|tt	|  gksnJ d S )Nr_   r`   ru   Tr   ra   )complex)
rU   r2   r3   r   r    r   r   r   r   r   )r   ry   ru   r;   r;   r<   test_expand   s   8F
r  c                  C   s@  t ttd ttd gttd ttd  ttd ttd  gg} | tttt@ }|ttd ttgtd tt td tt ggksQJ | t	tt	t@ }|ttd tgttd  td t ggksvJ | t
tt
t@ }|ttd t gt td  td  t ggksJ d S r   )rU   r   r2   r   r3   Zrefiner   r   r    Zpositivenegativer   r;   r;   r<   test_refine  s   .<0:r
  c                     sT   t dtd\ tddfdd} tdd fdd}| }|| ks(J d S )NF, Gclsr_   c                        | | S r@   r;   rC   )Gr;   r<   rF     rG   ztest_replace.<locals>.<lambda>c                    r  r@   r;   rC   Fr;   r<   rF     rG   r   r   rU   replace)Kr   Nr;   )r  r  r<   test_replace  s
   r  c               
      s   t dtd\ } tdd| d d| dif| d d| dif| d d| dif| d d| difg}tdd fdd}| | d}||ksQJ d S )	Nr  r  r_   r   ra   c                    r  r@   r;   rC   r  r;   r<   rF   &  rG   z"test_replace_map.<locals>.<lambda>Tr  )r  r  r   r  r;   r  r<   test_replace_map"  s   >r  c                  C   s   t ddgddgg} | | d  kr| dksJ  J | d| d  kr9| d  kr9t dks<J  J | d| d	  krW| d
  krWt dksZJ  J |  | d  krt| d  krtt dkswJ  J d S )Nra   r_   r`   rb   r   r   rd   ))rb   r`   r_   ra   r   r   ))r_   rb   ra   r`   i)r`   ra   )rb   r_   )r    Zrot90r   r;   r;   r<   
test_rot90+  s
   (<<>r  c               
   C   sJ  t d} td}tdt dt  ttt  t g|tt|t  |t dd|  t| t |    t gg}| ttt tt  dt gdt dddtt|    t|    ggks`J dt d }t|gg}| t|ggksxJ |jt	dt|jt	dggksJ tddgddgg}d|
   tdd	ksJ d S )
NrJ   fra   r_   )Zratio   r`   rb   "   )r   r   rU   r2   r3   r   r   r   r    r
   tracer   )rJ   r  r   eqrp   r;   r;   r<   test_simplify2  s    :&$"r"  c                   C   s@  t dtgtdggtdtddgddggksJ t tdgtt dggtdgtdggtddgddggks;J t tdgtt dggtdftdfgtddgddggks\J t tdgtt dggtdtditddgddggks{J t tt ggjttd ttd idd	ttd td  ggksJ d S )
Nra   rb   rc   r_   r   r   r  T)Zsimultaneous)rU   r2   subsr    r3   r;   r;   r;   r<   	test_subsD  s   4(($(r$  c                  C   s.   t g dg dg dg} |  dksJ d S )Nr   )r   rc   r   )r   r   r      )rU   r   r   r;   r;   r<   
test_traceP  s
   r&  c                   C   sx   t dtgtdggtditddgddggksJ t tdgtt dggtdtditddgddggks:J d S )Nra   rb   rc   r_   r   r   r  )rU   r2   Zxreplacer    r3   r;   r;   r;   r<   test_xreplaceW  s   $r'  c                     s  t ddg d tt fdd tt fdd  ddgdd	gg}  ddgdd	gg|   krDtg d
g dg dgksGJ  J  ddgdd	gg}  jddgdd	ggdd|   krstg dg dg dgksvJ  J  jddgdd	ggdd}  jddgdd	ggddd|   krtg dg dg dgksJ  J  g dtg d
g dg dgksJ ddlm	}  |g dtg d
g dg dgksJ d S )Nr`   rb   )ra   r_   r`   rb   rc   rd   r   r   r   r   r      c                      s     ddggS )Nr   rc   )permuter;   r   r;   r<   rF   a  r   ztest_permute.<locals>.<lambda>c                      s     tdS )Nr2   )r)  r   r;   r   r;   r<   rF   b  s    r   r_   ra   r   )r   r   r   r(  r   ri   )orientation)r_   r`   ra   rb   )rd   r   rc   r   )r   r   r   r(  Zbackward)	direction)r*  r+  )r`   ra   r_   rb   )r   rc   rd   r   )r   r   r   r(  )ra   r_   r   r`   )Permutation)
rU   r.   r   
ValueErrorZpermute_rowsr)  r    Zpermute_colsZsympy.combinatoricsr,  )rv   r,  r;   r   r<   test_permute^  sH    "$r.  c                  C   s   t g dg dg dg dg} | d}|t g dg dg dg dgks)J | d}|t g dg dg dg dgksBJ |  }|t g dg dg dg dgksZJ d S )Nra   ra   ra   ra   r_   )r   r   ra   ra   )r   r   r   ra   r   r   r   r   r   )r   ra   ra   ra   )rU   Zupper_triangular)r   Rr;   r;   r<   test_upper_triangular  s6   

r2  c                  C   s   t g dg dg dg dg} |  }|tg dg dg dg dgks(J | d}|tg dg dg dg dgksAJ | d}|tg dg dg dg dgksZJ d S )Nr/  )ra   r   r   r   )ra   ra   r   r   )ra   ra   ra   r   r_   r   r0  )rU   Zlower_triangularrY   )r   Lr;   r;   r<   test_lower_triangular  s6   

r4  c                  C   s@   t ddgttgg} t| t ddgttttggksJ d S )Nra   r   r_   )rY   r2   r3   absr   r   r;   r;   r<   test_abs  s   ,r6  c                      s   t g dtttgdt dtt gg    t g ddt dt dt gdt ddt t ggks4J t ddddgtt fdd	 d S )
Nrg   r_   i)r_   rb   rd   rb   ira   c                           S r@   r;   r;   rp   rJ   r;   r<   rF     r   ztest_add.<locals>.<lambda>)rY   r2   r3   r4   r.   r   r;   r;   r8  r<   test_add  s   &Br9  c                     s
  t d t dtt fdd tt fdd   } | d dks'J | d d	ks/J | d
 dks7J | d dks?J | d dksGJ | d dksOJ ztd W n	 ty^   Y n1w | d dksgJ | d d	ksoJ | d
 dkswJ | d dksJ | d dksJ | d dksJ  | }|t | ksJ |d dksJ |d dksJ |d
 dksJ |d dksJ |d dksJ |d dksJ tt fdd td } t	| t sJ | d t
ksJ | d d	t
 ksJ | d
 dt
 ksJ | d dks
J t
 }| |ksJ d } t	| t s!J | d dks*J | d dks3J | d
 dks<J | d dksEJ ztd W n tyV   Y d S w t	| t s_J | d dkshJ | d dksqJ | d
 dkszJ | d dksJ d S )N)r   r  r   )r   )r`   r   c                           S r@   r;   r;   ru   rv   r;   r<   rF     r   z%test_multiplication.<locals>.<lambda>c                      s    i  S r@   r;   r;   r   r;   r<   rF     r   rr   r   rs   r_   rt   rd   re   )r_   r      r  r   z	c = a @ brb   c                      s
     S r@   )multiply_elementwiser;   r;  r;   r<   rF     r   r2   r`   rc   r      z	c = 5 @ b)rY   r.   r   	TypeErrorevalSyntaxErrorr=  r#   r   
isinstancer2   )rw   hc2r;   r;  r<   test_multiplication  sn   
rE  c                  C   s   t ddgddgg} | dtksJ | dtksJ ztd W n ty+   Y n	 ty3   Y nw ztd W d S  tyE   Y d S  tyN   Y d S w )Nra   r_   r`   rb   z2 @ aza @ 2)r    
__matmul__NotImplemented__rmatmul__r@  rA  r?  r   r;   r;   r<   test_matmul  s"   rI  c                  C   s   G dd dt } tddgddgg}|  }|| t|d| gd| d| ggks+J || t|d| gd| d| ggksAJ dS )zd
    Test that if explicitly specified as non-matrix, mul reverts
    to scalar multiplication.
    c                   @   s   e Zd ZdZdZdZdS )ztest_non_matmul.<locals>.fooFre   N)r8   r9   r:   Z	is_MatrixZis_MatrixLiker   r;   r;   r;   r<   foo8  s    rJ  ra   r_   r`   rb   N)r   r    )rJ  r   rv   r;   r;   r<   test_non_matmul3  s
   ,0rK  c                  C   s  t tdd  tddgddgg} | d d d  dksJ tg dg d	g d
g} | d d d  dks6J | d tdks@J | d | ksHJ tdggd d dd ksXJ tddgddggtd tddgddggksrJ tddgddgg} | jddd| jdddksJ d S )Nc                   S   s   t dd S )Nr   r_   )r    r;   r;   r;   r<   rF   D  rG   ztest_power.<locals>.<lambda>r_   r`   rb   rc   )i  i  i,*  i7  )r_   ra   r`   )rb   r_   rb   )rd   r(  ra   )	i"  i     i  i  ip  i  i  i  r   ra   d   rr   r   r   r>        Zcayley)methodZmultiply)r.   r   rY   r"   r	   r    powr   r;   r;   r<   
test_powerC  s    4$rR  c                  C   s.   t ddddg} |  t ddddgksJ d S )Nra   r_   r   r   rZ   rI   r;   r;   r<   test_negQ  s   rS  c                  C   s0   t ddddg} | |  t ddddgksJ d S )Nra   r_   r   rZ   rI   r;   r;   r<   test_subV  s    rT  c                  C   s:   t ddddg} | d t ddtjtdd gksJ d S r   )rY   r   r~   rI   r;   r;   r<   test_div[  s   *rU  c                   C   sj   t tddg dksJ t tdg dksJ ttdtks&J ttjdtdtks3J d S )Nr_   r   r  )rj   r]   r"   typer    r;   r;   r;   r<   test_eye`  s   rW  c                   C      t tddg dksJ t tdg dksJ tddtg dg dgks-J ttdtks8J ttjdtdtksEJ d S )Nr_   r/  r`   ra   ra   ra   r  )rj   r]   r$   r    rV  r;   r;   r;   r<   	test_onesg  
   $rZ  c                   C   rX  )Nr_   r0  r`   r   r  )rj   r]   r%   r    rV  r;   r;   r;   r<   
test_zeroso  r[  r\  c                      s  t jtddgddgg tdtgtdggtdtdgtdtgtttgg tg dg ddddtddgddtdddgdddddtgddddtdggksUJ  tg dg ddddtdddgddtddddgdddddtdgddddtdtgddddtttggksJ  tg dg ddddtdddgddtdtddgddtttddgddddddtgdddddtdggksJ ttttg tddgdd	ggtd
dgg dttdddddgtdddddgtdddddgg dg dg dg dgksJ tt fdd dtdggks)J dddtddgddggks<J dddtddgddggksOJ ddddtddgddgddggksfJ ddg tddgddggksyJ tddgtdgdggksJ dddgd	gdddgddgd	ggdd  krtddgddgd	dggksJ  J tdt ksJ tdtdtksJ tg dtdddksJ tjg dddj	dksJ tg dgj	dksJ tjg dgddj	dksJ tg dggj	dks J tt
ddddtg dg dgks7J tt
ddddtddgddgddgddggksTJ d S )Nra   r_   r`   )ra   r_   r   r   r   r   )r_   r`   r   r   r   r   r   )ra   r_   r   r   r   r   r   )r_   r`   r   r   r   r   r   rb   rc   rd   r   )r   r   r   r   r   r   )r   r   ra   r_   r   r   )r   r   r`   rb   r   r   )r   r   r   r   rc   rd   c                      s    dddS )Nr   rc   rh   r;   r;   ru   rv   rw   r!   r;   r<   rF         z test_diag_make.<locals>.<lambda>r]  )ri   )rh   ri   F)unpackr  rg   r  r  )r   r   ra   r   )r   r   r   r_   )r]   r!   r    r2   r3   r4   r.   r-  rV  r   r$   r;   r;   r^  r<   test_diag_makew  s    		&&.
" ra  c                     s@  t ddtd } | dksJ t| dksJ tddks(J tddks3J td	d
ks>J t tksJJ tddddi}t| t|ks^J tt|kshJ ttfdd ttfdd ttfdd td	d t	 fddtd j
  jD  ksJ d S )Nr`   r   r   )r   rb   r   ra   )ra   rc   r   )r`   r   r_   )r_   re   c                      r   r   diagonalr;   r   r;   r<   rF     r   ztest_diagonal.<locals>.<lambda>c                      r   )Nr  rb  r;   r   r;   r<   rF     r   c                      s
     tS r@   )rc  r   r;   r   r;   r<   rF     r   c                    s   i | ]
}|t  |qS r;   )rj   rc  r   r   r;   r<   
<dictcomp>  s    z!test_diagonal.<locals>.<dictcomp>)r    ro   rc  tuplerV  r&   r.   r-  r$   r'   rh   ri   )rx   sr;   )r   rp   r<   test_diagonal  s(   
rg  c                   C   sT  t ddt jddd  kr?t jddd  kr?t jdddd  kr?t jdddd  kr?tg dg d	g d
gksBJ  J t jddddtg dg dg dgksYJ ttdd  ttdd  ttdd  ttdd  t  t jdddt dddksJ W d    n1 sw   Y  t  t jdddt dddksJ W d    n1 sw   Y  t $ t ddt jddd  krt jdddksJ  J W d    n1 sw   Y  t # t jddddtg dg d	g d
g dgksJ W d    n	1 sw   Y  t jdddt jdddks(J d S )Nr`   r_   
eigenvalue)sizeri  upper)Zband)rj  eigenvalri  )r_   ra   r   )r   r_   ra   r   lower)r_   r   r   r   r   c                   S   
   t dS r   r]   jordan_blockr;   r;   r;   r<   rF     r   z#test_jordan_block.<locals>.<lambda>c                   S   s   t ddS )Ng      @r_   ro  r;   r;   r;   r<   rF     rG   c                   S   s   t jddS )Nr_   rh  ro  r;   r;   r;   r<   rF     rG   c                   S   s   t jdddS )Nr_   rb   )ri  rl  ro  r;   r;   r;   r<   rF     s    )ri   ri  )	r_   ra   r   r   r_   ra   r   r   r_   )rh   ri  rb   )rh   ri   ri  r   )rj  rl  )r]   rp  r    r.   r-  r0   r;   r;   r;   r<   test_jordan_block  st   






rq  c                     s  t ddgddgg} | t dgdggt dgdgggks J | jt dgdggddt dtd d gtdd gggksBJ | t dgdggt dgdggt dgdggt td	dgtd
dgggkslJ | t dgdggt dgdggt dgdgggksJ | t dgdggg ksJ t g dg dg dg}t dgdggt dgdggt dgdggg |j  t dgdggt tddgtddgggksJ t g dt g dt g dg tt fdd t g dt g dt g dg tt fdd d S )Nra   r_   r`   rb   T)	normalizerc   r   ird   r   )r   ra   r   )r`   rd   r   )r   rc   r_   r   r         r   rg   )ra   rb   rc   c                         t j ddiS NZ	rankcheckTr    orthogonalizer;   Zvecsr;   r<   rF   !  r   z$test_orthogonalize.<locals>.<lambda>rf   r   c                      ru  rv  rw  r;   ry  r;   r<   rF   $  r   )r    rx  r   r   r.   r-  r8  r;   ry  r<   test_orthogonalize  s*   ,$"*".*""rz  c               
   C   s   t d\} }| t g dg dg dgksJ |t g dg dg dgks)J t d\} }| t g dg dg d	g d
g dg dg dgksMJ |t g dg dg dg d
g dg dg dgksjJ d S )Nra   )r   ra   r   )ra   r   ra   )r   ra   ra   )ra   ra   r   r`   )r  ra   r   r   r   r   r   )ra   r   ra   r   r   r   r   )r   ra   r   ra   r   r   r   )r   r   ra   r   ra   r   r   )r   r   r   ra   ra   ra   r   )r   r   r   r   ra   r_   ra   )r   r   r   r   r   ra   r`   )r`   ra   r   r   r   r   r   )ra   r_   ra   r   r   r   r   )r   ra   ra   ra   r   r   r   )r    Z	wilkinson)ZwminusZwplusr;   r;   r<   test_wilkinson&  s<   
r{  c                  C   s>   t d\} }tdd| |g}|| tddddgksJ d S )Nx yr_   ra   r   )r   r^   Zdiffr    r2   r3   rp   r;   r;   r<   	test_diffH  s   "r~  c                  C   sJ   t d\} }tdd| |g}|| tdd| d d ||  gks#J d S )Nr|  r_   ra   )r   r^   Z	integrater    r}  r;   r;   r<   test_integrateP  s   .r  c                     s   t d\} }tdd| t| | t| | d g}tdd| |g}tt||  t| gt|| t| gd|  dgg}|||ksFJ tddg d tddg dtt fdd	 tt fd
d	 d S )Nzrho,phir`   ra   r_   r   r   rb   c                      s     tddgS r   )jacobianr    r;   r   r;   r<   rF   c  r_  z test_jacobian2.<locals>.<lambda>c                      s
     S r@   )r  r;   r   r;   r<   rF   d  r   )r   r^   r   r   r    r  r.   r?  )ZrhoZphiXYJr;   r   r<   test_jacobian2V  s   &
r  c                  C   sJ   t d\} }tddd|  |g}|| dtddtdd|gks#J d S )Nr|  r_   ra   rc   )r   r^   limitr    r   r}  r;   r;   r<   
test_limitg  s   *r  c                      sN   t g dg dg dg g dtt fdd tt fdd d S )Nrg   rf   r   rY  c                      s     S r@   r;   r;   r   vr;   r<   rF   p  r   z"test_issue_13774.<locals>.<lambda>c                      r:  r@   r;   r;   r  r;   r<   rF   q  r   )r    r.   r?  r;   r;   r  r<   test_issue_13774m  s   r  c                     s   t d t dttdd  tt fdd tt fdd tt fdd td\} }}ttd	| g t|  gksDJ ttd	|| g td
|  gd	| ggks]J ttd	||| g td
d
|  gd	d
| gd
d	| ggks~J d S )Nr2   r3   c                   S   rn  r   )r    	companionr;   r;   r;   r<   rF   v  r   z test_companion.<locals>.<lambda>c                      s   t tdg S r   r    r  r,   r;   rk   r;   r<   rF   w  r_  c                      s   t tddg S r   r  r;   rk   r;   r<   rF   x  r   c                      s   t t   gS r@   r  r;   r2   r3   r;   r<   rF   y  s    zc0:3ra   r   )r   r.   r-  r   r    r  r,   )Zc0Zc1rD  r;   r  r<   test_companions  s   $$r  c                  C   s   t d\} }}t| ||g}|t| ||gg d}|tdgdgdggks)J t| | | | | g| | | | | g| | | | | gg}|t| gdg}|tg dg dg dgksZJ d S )Nzx, y zrg   ra   r_   r`   )ra   ra   ra   ra   ra   )r   r    r#  zip)r2   r3   r4   r   r   r;   r;   r<   test_issue_10589  s   ,&r  c                  C   sf   G dd dt } tddg d}| ddg d}|| }t|| s#J |tddgddggks1J d S )	Nc                   @   s   e Zd Zejd ZdS )ztest_rmul_pr19860.<locals>.Foog{Gz?N)r8   r9   r:   r(   Z_op_priorityr;   r;   r;   r<   Foo  s    r  r_   r   r   r   r>  rN  )r*   r    rB  )r  ru   rv   rw   r;   r;   r<   test_rmul_pr19860  s    r  c                      sT   t ddgddgg tddgddggtt fdd tt fdd d S )Nra   r_   r`   rb   c                      s     S r@   r;   r;   r   r   r;   r<   rF     r   z"test_issue_18956.<locals>.<lambda>c                      r7  r@   r;   r;   r  r;   r<   rF     r   )r1   r    r.   r?  r;   r;   r  r<   test_issue_18956  s   r  N)Zsympy.assumptionsr   Zsympy.core.exprr   Zsympy.core.addr   Zsympy.core.functionr   Zsympy.core.kindr   r   Zsympy.core.numbersr   r	   r
   r   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Z$sympy.functions.elementary.complexesr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   r   Zsympy.matrices.commonr   r   r   r   r   r   r   r   r   r   Zsympy.matrices.matricesr   Zsympy.matricesr    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   Zsympy.polys.polytoolsr,   Zsympy.utilities.iterablesr-   Zsympy.testing.pytestr.   r/   r0   Zsympyr1   Z	sympy.abcr2   r3   r4   r6   rK   rP   rQ   rS   rT   rU   rW   rX   rY   r[   r\   r]   r^   rl   rn   rq   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
  r  r  r  r"  r$  r&  r'  r.  r2  r4  r6  r9  rE  rI  rK  rR  rS  rT  rU  rW  rZ  r\  ra  rg  rq  rz  r{  r~  r  r  r  r  r  r  r  r  r;   r;   r;   r<   <module>   s    08
			
 		$!!JO6"

