o
    GZhS8                     @   s  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 d dl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 )&    )
expand_mul)IRational)S)Symbol)sqrt)Abs)simplify)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+   W/var/www/auris/lib/python3.10/site-packages/sympy/matrices/tests/test_decompositions.py<lambda>b       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   

 

 

"

  

 r:   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	   )Ar7   r   VBCDr+   r+   r.   "test_singular_value_decompositionDd   s2   $rB   c               	   C   sv  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 td}t |g} |  \}}|t |t| gksJ |t t|gksJ t |dgd|gg} |  \}}||t| t ddgddgg ks&J |t|t ddgddgg ks9J 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   )	r   QRdecompositionr   r;   r   r<   r3   r   r   )r=   Qr   Rr   r+   r+   r.   test_QR   s:   .4F


**rJ   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   rM   )r   r)   r   )r   r   r   )r   r   r   )r   r)   r   r   r   r   r   r(   )r   r   r!      )r   r      @   r   rG   r;   r   r<   r3   r=   rH   rI   r+   r+   r.   test_QR_non_square   s<    
 




rS   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    rC   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   r(   )r   r   r   r   rQ   rR   r+   r+   r.   test_QR_trivial   sn   
 
"



""rT   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   rG   r   r;   r   rR   r+   r+   r.   test_QR_float  s   rU   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r5   valueZmagic_stringr+   r.   goofyiszero)     z;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszeror   r   Z
iszerofunc)r   r*   r5   args)r]   Zlur8   errr+   r\   r.   &test_LUdecomposition_Simple_iszerofunc%  s   $rb   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 )NrV   c                    rW   rX   rY   rZ   r\   r+   r.   r]   8  r^   z4test_LUdecomposition_iszerofunc.<locals>.goofyiszeror   r   r_   )r   r1   r5   r`   )r]   lur8   ra   r+   r\   r.   test_LUdecomposition_iszerofunc4  s   &re   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/   D  r0   z'test_LDLdecomposition.<locals>.<lambda>c                   S   rf   Nrh   )r   r   ri   r+   r+   r+   r.   r/   E  r0   c                   S      t dt dfdf S Nr   r   )r   r   )r   r   rj   r+   r+   r+   r.   r/   F      c                   S   rf   N)r   r   )r   r   ri   r+   r+   r+   r.   r/   G  r0   c                   S      t djddS Nrl   FZ	hermitianri   r+   r+   r+   r.   r/   H      rq   Frt   ))      )rw      r   )rx   r   r#   r&   r   r   r   r   r)   )rv   r   r   )r   r!   r   r   r   r!   r   r   r   r#   ))r   r   r   )r   r   r   rz   c                   S   rf   rg   r   rj   r+   r+   r+   r.   r/   Y  r0   c                   S   rf   rk   r{   r+   r+   r+   r.   r/   Z  r0   c                   S   rm   rn   )r   r   rj   r+   r+   r+   r.   r/   [  ro   c                   S   rf   rp   r{   r+   r+   r+   r.   r/   \  r0   c                   S   rr   rs   r{   r+   r+   r+   r.   r/   ]  ru   )r   r
   r5   r   rj   r;   r2   r   Zis_diagonalr   r   Hexpandr   ZHalfr   )r=   r6   rA   r+   r+   r.   test_LDLdecompositionC  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   rN   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	   r|   )ZAsr=   ZA_pinvZAApZApAr+   r+   r.   1test_pinv_succeeds_with_rank_decomposition_methodn  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   rx   r   )r)   r   r   r   r   rL   r   )r   r   r   rM   rM   r   rx   )r)   r   r   r)   r   r   r   )r   Zrank_decompositionZ
is_echelonr<   rowsZrank)acfr+   r+   r.   test_rank_decomposition  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   )rM   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	   r|   r   r<   Zis_upper_hessenberg)r=   r|   r9   r?   r@   rA   Er+   r+   r.   #test_upper_hessenberg_decomposition  sh   


 r   N)+Zsympy.core.functionr   Zsympy.core.numbersr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   Z(sympy.functions.elementary.miscellaneousr   Z$sympy.functions.elementary.complexesr   Zsympy.simplify.simplifyr	   Zsympy.matrices.exceptionsr
   Zsympy.matricesr   r   r   r   Z	sympy.abcr   r   r   Zsympy.testing.pytestr   r   Zsympy.testing.matricesr   r:   rB   rJ   rS   rT   rU   rb   re   r~   r   r   r   r+   r+   r+   r.   <module>   s2    U"#'G+