o
    8Va6                     @   s   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 d dlmZmZmZ d dlmZ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!edd Z"dS )     )RationalI
expand_mulSsimplifysqrt)NonSquareMatrixError)MatrixzeroseyeSparseMatrix)xyz)raisesslow)allclosec                     sL  t g dg dg dg dg} |  \}}}|jsJ |js!J || |d|  tdks1J t g dg dg d	g d
g} |  \}}}|jsMJ |jsRJ || |d|  tdksbJ t g dg dg dg dg} | jdd\}}}|jsJ |jsJ || |d|  tddksJ t g dg dg dg} | jdd\}}}|jsJ |jsJ || |d|  tdksJ t dtdfdtdftdtff   \}}}|jsJ |jsJ || |d  tdksJ t d}|jdu sJ |jdu sJ t d}|jdu sJ |jdu sJ t g dg dg dg  	 \}}}}|  ||
  | ksCJ t g dg dg dg dg  	 \}}}}|  ||
  | ksjJ t g d g d!g d"g  	 \}}}}|  ||
  | ksJ t g dg dg dg tt fd#d$ d S )%N)r            )r   r         )   r   r   r   )   r   r   Zbackwardr   )r   r   r   r   )r   r   r   r   )   r   r   r   )ir   r   r   r   r   r   r   r   r   r   r   	   )
         FZ	rankcheckr   )r   r   r   r   r   r   )r   r   r   r   r   r   T)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   c                      s    j ddS )NTr#   )LUdecomposition_Simple Mr)   J/usr/lib/python3/dist-packages/sympy/matrices/tests/test_decompositions.py<lambda>\       ztest_LUdecomp.<locals>.<lambda>)r	   LUdecompositionis_loweris_upperZpermute_rowsr
   r   r   r   ZLUdecompositionFFinvr   
ValueError)ZtestmatLUpZmLZmUPZDeer)   r*   r,   test_LUdecomp	   s   

 

 

"

  

 r8   c                  C   s  t ddgddgg} |  \}}}|| |j | ksJ |j| t|jks(J |j| t|jks4J t ddgg}| \}}}|| |j |ksMJ |j| t|jksYJ |j| t|jkseJ t g dg dg dg dg}| \}}}|| |j |ksJ |j| t|jksJ |j| t|jksJ t tddtdgdtdd	gg}| \}}}t|j| t|jksJ t|j| t|jksJ t|| |j |ksJ d S )
Nr   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	   Zsingular_value_decompositionTr   colsr   r   r   )Ar5   r   VBCDr)   r)   r,   "test_singular_value_decompositionD^   s2   $r@   c               	   C   s  t ddgddgg} |  \}}t}|t d|dd |dd |dd |dd  gdd|dd  |d d |dd |dd  ggksKJ |t d|dd dd|dd  gd|dd |dd ggksnJ || | ksvJ |j| tdksJ t g dg d	g d
g} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ d S )Nr   r   r   r   r'   r   r   r   r   r   )r   r   r   )r   r   r   )r"   r   i)r   r      )r      )r	   QRdecompositionr   r9   r   r:   r1   )r;   Qr   Rr)   r)   r,   test_QR   s(   .4F

rH   c                  C   s  t g dg dg dg dg} |  \}}|j| t|jks"J |js'J | || ks/J t g dg dg dg dg} |  \}}|j| t|jksQJ |jsVJ | || ks^J t d	d
d
d	g} |  \}}|j| t|jksxJ |js}J | || ksJ t g dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t d
d	d
d	g} |  \}}|j| t|jksJ |jsJ | || ksJ d S )N)r   r      )r"   r   )r   r   r   )r   rK   )r   r'   r   )r   r   r   )r   r   r   )r   r'   r   r   r   r   r   r&   )r   r   r      )r   r      @   r	   rE   r9   r   r:   r1   r;   rF   rG   r)   r)   r,   test_QR_non_square   s<    
 




rQ   c                  C   s  t g dg dg dg} |  \}}|j| t|jksJ |js$J | || ks,J t g dg dg dg dg} |  \}}|j| t|jksNJ |jsSJ | || ks[J t g dg dg dg dgj} |  \}}|j| t|jks~J |jsJ | || ksJ t g dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dgj} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dgj} |  \}}|j| t|jks J |js&J | || ks/J t g dg dgj} |  \}}|j| t|jksMJ |jsSJ | || ks\J t g d	g d
g d	gj} |  \}}|j| t|jks}J |jsJ | || ksJ t g d	g d
g d	g dgj} |  \}}|j| t|jksJ |jsJ | || ksJ t g dg dg dg dgj} |  \}}|j| t|jksJ |jsJ | || ksJ d S )Nr   r   r   rA   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r&   )r   r   r   r   rO   rP   r)   r)   r,   test_QR_trivial   sn   
 
"



""rR   c                  C   s   t ddgddgg} |  \}}t|| | sJ t||j t ds&J t|j| t ds3J t ddgddgg} |  \}}t|| | sLJ t||j t dsYJ t|j| t dsfJ d S )Nr   g)\(?r   gjt?)r	   rE   r   r9   r   rP   r)   r)   r,   test_QR_float  s   rS   c               
      sr   d  fdd} zt ddgddggj| d\}}W n ty6 } z |jd ks+J W Y d }~d S d }~ww J )NI got passed in!c                       t  Nr3   valueZmagic_stringr)   r,   goofyiszero     z;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszeror   r   Z
iszerofunc)r	   r(   r3   args)r[   Zlur6   errr)   rZ   r,   &test_LUdecomposition_Simple_iszerofunc  s   $r`   c               
      st   d  fdd} zt ddgddggj| d\}}}W n ty7 } z |jd ks,J W Y d }~d S d }~ww J )NrT   c                    rU   rV   rW   rX   rZ   r)   r,   r[   '  r\   z4test_LUdecomposition_iszerofunc.<locals>.goofyiszeror   r   r]   )r	   r/   r3   r^   )r[   lur6   r_   r)   rZ   r,   test_LUdecomposition_iszerofunc#  s   &rc   c                  C   s  t tdd  t tdd  t tdd  t tdd  t tdd  td} | jdd	\}}|| |j | ks:J td
} |  \}}|| |j | ksOJ |jsTJ |tg dtddddgtddtdddggkspJ | svJ |tg dg dg dgksJ tddt	 ddt	  fdt	 ddt	 fddt	  dt	 dff} |  \}}t
|| |j | ksJ | tg dt	d ddgtjt	d  ddggksJ | tdksJ t tdd  t tdd  t tdd  t tdd  t tdd  td} | jdd	\}}|| |j | ksJ td
} |  \}}|| |j | ks1J |js7J |tg dtddddgtddtdddggksTJ | s[J |tg dg dg dgksmJ tddt	 ddt	  fdt	 ddt	 fddt	  dt	 dff} |  \}}t
|| |j | ksJ |tdt	d ddftjt	d  ddffksJ |tdksJ d S )Nc                   S      t d S Nr   r   r	   LDLdecompositionr)   r)   r)   r,   r-   3  r.   z'test_LDLdecomposition.<locals>.<lambda>c                   S   rd   Nrf   )r   r   rg   r)   r)   r)   r,   r-   4  r.   c                   S      t dt dfdf S Nr   r   )r   r   )r	   r   rh   r)   r)   r)   r,   r-   5      c                   S   rd   N)r   r   )r   r   rg   r)   r)   r)   r,   r-   6  r.   c                   S      t djddS Nrj   FZ	hermitianrg   r)   r)   r)   r,   r-   7      ro   Frr   ))      )ru      r   )rv   r   r!   r$   r   r   r   r   r'   )rt   r   r   )r   r   r   r   r   r   r   r   r   r!   ))r   r   r   )r   r   r   rx   c                   S   rd   re   r   rh   r)   r)   r)   r,   r-   H  r.   c                   S   rd   ri   ry   r)   r)   r)   r,   r-   I  r.   c                   S   rk   rl   )r   r   rh   r)   r)   r)   r,   r-   J  rm   c                   S   rd   rn   ry   r)   r)   r)   r,   r-   K  r.   c                   S   rp   rq   ry   r)   r)   r)   r,   r-   L  rs   )r   r   r3   r	   rh   r9   r0   r   Zis_diagonalr   r   Hexpandr   ZHalfr   )r;   r4   r?   r)   r)   r,   test_LDLdecomposition2  sP   
8"@8:$@2r|   c                  C   s   t g dg dg dg dg dg dgg} | D ]2}|jdd}|| }|| }t|| |ks3J t|| |ks=J |j|ksDJ |j|ksKJ qd S )	N)=   Y   7      G   r   )>   `   U   r   rL   r   )E   8      r   6   r   )r    r   [   )   r   r   )r      r    0   Z   r   )r   r   r   r   r   r   ZRD)method)r	   Zpinvr   rz   )ZAsr;   ZA_pinvZAApZApAr)   r)   r,   1test_pinv_succeeds_with_rank_decomposition_method]  s"   r   c                  C   sv  t ddg } |  \}}|jsJ |j|j  kr |  ks#J  J || | ks+J t dddg} |  \}}|js=J |j|j  krL|  ksOJ  J || | ksWJ t ddg d} |  \}}|jsjJ |j|j  kry|  ks|J  J || | ksJ t g dg dg dg d	g} |  \}}|jsJ |j|j  kr|  ksJ  J || | ksJ d S )
Nr   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   rv   r   )r'   r   r   r   r   rJ   r   )r   r   r   rK   rK   r   rv   )r'   r   r   r'   r   r   r   )r	   Zrank_decompositionZ
is_echelonr:   ZrowsZrank)acfr)   r)   r,   test_rank_decompositiono  s2   
$
$
$
$r   c                  C   s  t ddtdgtdtdddgdtdddgg} |  \}}t||j t|jks.J t|j| t|jks<J |jsAJ t|| |j | ksNJ t g dg dg dg}| \}}t||j t|jksoJ t|j| t|jks}J |jsJ t|| |j |ksJ t dtdddgg d	dddtd
gg dg}| \}}t||j t|jksJ t|j| t|jksJ |jsJ t|| |j |ksJ t g dg dg dg}| \}}t||j t|jksJ t|j| t|jksJ |jsJ t|| |j |ksJ t g dg dg dg dg}| \}}t||j t|jksDJ t|j| t|jksSJ |jsYJ t|| |j |ksgJ d S )Nr   r   r   r   r   )r   r   r    )r   r   r   )r   r"   "   )r   r   r   r   r   )r   r   r   r   r   )rK   r   r   )r   ir   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )	r	   r   r   Zupper_hessenberg_decompositionr   rz   r   r:   Zis_upper_hessenberg)r;   rz   r7   r=   r>   r?   Er)   r)   r,   #test_upper_hessenberg_decomposition  sh   


 r   N)#Zsympyr   r   r   r   r   r   Zsympy.matrices.matricesr   Zsympy.matricesr	   r
   r   r   Z	sympy.abcr   r   r   Zsympy.testing.pytestr   r   Zsympy.testing.matricesr   r8   r@   rH   rQ   rR   rS   r`   rc   r|   r   r   r   r)   r)   r)   r,   <module>   s&     U#'G+