a
    kº”hS8  ã                   @   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                     s^  t g d¢g d¢g d¢g d¢gƒ} |  ¡ \}}}|js8J ‚|jsBJ ‚||  |d¡|  tdƒksbJ ‚t g d¢g d¢g d	¢g d
¢gƒ} |  ¡ \}}}|jsšJ ‚|js¤J ‚||  |d¡|  tdƒksÄJ ‚t g d¢g d¢g d¢g d¢gƒ} | jdd\}}}|jsJ ‚|jsJ ‚||  |d¡|  tddƒks2J ‚t g d¢g d¢g d¢gƒ} | jdd\}}}|jsjJ ‚|jsvJ ‚||  |d¡|  tdƒks˜J ‚t dtdfdtdftdtffƒ‰ ˆ  ¡ \}}}|jsÒJ ‚|jsÞJ ‚||  |d¡ˆ  tdƒks J ‚t dƒ}|jdu sJ ‚|jdu s(J ‚t dƒ}|jdu s@J ‚|jdu sPJ ‚t g d¢g d¢g d¢gƒ‰ ˆ  	¡ \}}}}|ˆ  || 
¡  | ks˜J ‚t g d¢g d¢g d¢g d¢gƒ‰ ˆ  	¡ \}}}}|ˆ  || 
¡  | ksæJ ‚t g d ¢g d!¢g d"¢gƒ‰ ˆ  	¡ \}}}}|ˆ  || 
¡  | ks.J ‚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   )i÷ÿÿÿr   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+   úV/var/www/auris/lib/python3.9/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s8J ‚|j| t|jƒksPJ ‚|j| t|jƒkshJ ‚t ddggƒ}| ¡ \}}}|| |j |ksšJ ‚|j| t|jƒks²J ‚|j| t|jƒksÊJ ‚t g d¢g d¢g d¢g d¢gƒ}| ¡ \}}}|| |j |ksJ ‚|j| t|jƒks*J ‚|j| t|jƒksDJ ‚t tddƒtdƒgdtdd	ƒggƒ}| ¡ \}}}t|j| ƒt|jƒks”J ‚t|j| ƒt|jƒks²J ‚t|| |j ƒ|ksÎJ ‚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   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s–J ‚|t d|ddƒ dd|ddƒ  gd|dƒd |ddƒ ggƒksÜJ ‚|| | ksìJ ‚|j| tdƒksJ ‚t g d¢g d	¢g d
¢gƒ} |  ¡ \}}|j| t|jƒksDJ ‚|jsPJ ‚| || ksbJ ‚t g d¢g d¢g d¢gƒ} |  ¡ \}}|j| t|jƒks¢J ‚|js®J ‚| || ksÀJ ‚tdƒ}t |gƒ} |  ¡ \}}|t |t|ƒ gƒksúJ ‚|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s‚J ‚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sDJ ‚|jsNJ ‚| || ks^J ‚t g d¢g d¢g d¢g d¢gƒ} |  ¡ \}}|j| t|jƒks¢J ‚|js¬J ‚| || ks¼J ‚t d	d
d
d	gƒ} |  ¡ \}}|j| t|jƒksðJ ‚|jsúJ ‚| || ksJ ‚t g d¢g d¢gƒ} |  ¡ \}}|j| t|jƒksFJ ‚|jsRJ ‚| || ksdJ ‚t g d¢g d¢g d¢gƒ} |  ¡ \}}|j| t|jƒks¤J ‚|js°J ‚| || ksÂJ ‚t d
d	d
d	gƒ} |  ¡ \}}|j| t|jƒksøJ ‚|jsJ ‚| || 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sHJ ‚| || ksXJ ‚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} |  ¡ \}}|j| t|jƒksüJ ‚|jsJ ‚| || ksJ ‚t g d¢gƒ} |  ¡ \}}|j| t|jƒksNJ ‚|jsZJ ‚| || kslJ ‚t g d¢gƒj} |  ¡ \}}|j| t|jƒks¢J ‚|js®J ‚| || ksÀJ ‚t g d¢g d¢gƒ} |  ¡ \}}|j| t|jƒksúJ ‚|jsJ ‚| || ksJ ‚t g d¢g d¢gƒj} |  ¡ \}}|j| t|jƒksTJ ‚|js`J ‚| || ksrJ ‚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 d	¢gƒj} |  ¡ \}}|j| t|jƒksJ ‚|jsJ ‚| || ks,J ‚t g d	¢g d
¢g d	¢g d¢gƒj} |  ¡ \}}|j| t|jƒkstJ ‚|js€J ‚| || ks’J ‚t g d¢g d¢g d¢g d¢gƒj} |  ¡ \}}|j| t|jƒksÚJ ‚|jsæJ ‚| || ksøJ ‚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|| | ƒs2J ‚t||j t  d¡ƒsLJ ‚t|j| t  d¡ƒsfJ ‚t ddgddggƒ} |  ¡ \}}t|| | ƒs˜J ‚t||j t  d¡ƒs²J ‚t|j| t  d¡ƒsÌJ ‚d S )Nr   g)\Âõ(ð?r   gj¼t“ð?)r   rG   r   r;   r   rR   r+   r+   r.   Útest_QR_float  s    rU   c               
      sz   d‰ ‡ fdd„} z$t ddgddggƒj| d\}}W n8 tyl } z ˆ |jd ksVJ ‚W Y d }~d S d }~0 0 dsvJ ‚d S )NúI got passed in!c                    s   t ˆ ƒ‚d S ©N©r5   ©Úvalue©Zmagic_stringr+   r.   Úgoofyiszero)  s    z;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszeror   r   ©Z
iszerofuncF)r   r*   r5   Úargs)r\   Zlur8   Úerrr+   r[   r.   Ú&test_LUdecomposition_Simple_iszerofunc%  s    $r`   c               
      s|   d‰ ‡ fdd„} z&t ddgddggƒj| d\}}}W n8 tyn } z ˆ |jd ksXJ ‚W Y d }~d S d }~0 0 dsxJ ‚d S )NrV   c                    s   t ˆ ƒ‚d S rW   rX   rY   r[   r+   r.   r\   8  s    z4test_LUdecomposition_iszerofunc.<locals>.goofyiszeror   r   r]   F)r   r1   r5   r^   )r\   ÚlÚur8   r_   r+   r[   r.   Útest_LUdecomposition_iszerofunc4  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stJ ‚td
ƒ} |  ¡ \}}|| |j | ksžJ ‚|js¨J ‚|tg d¢tddƒddgtddƒtddƒdggƒksàJ ‚| ¡ sìJ ‚|tg d¢g d¢g d¢gƒksJ ‚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sxJ ‚| ¡ tg d¢t	d ddgtjt	d  ddggƒks²J ‚| ¡ tdƒksÈJ ‚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sjJ ‚|jsvJ ‚|tg d¢tddƒddgtddƒtddƒdggƒks°J ‚| ¡ s¾J ‚|tg d¢g d¢g d¢gƒksâJ ‚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sJJ ‚|tdt	d ddftjt	d  ddffƒks|J ‚|tdƒksŽJ ‚d S )Nc                   S   s   t dƒ ¡ S ©N©r   r   ©r   ÚLDLdecompositionr+   r+   r+   r.   r/   D  r0   z'test_LDLdecomposition.<locals>.<lambda>c                   S   s   t dƒ ¡ S ©N©re   )r   r   rf   r+   r+   r+   r.   r/   E  r0   c                   S   s   t dt dfdfƒ ¡ S ©Nr   r   )r   r   )r   r   rg   r+   r+   r+   r.   r/   F  r0   c                   S   s   t dƒ ¡ S ©N©)r   r   )r   r   rf   r+   r+   r+   r.   r/   G  r0   c                   S   s   t dƒjddS ©Nri   F©Z	hermitianrf   r+   r+   r+   r.   r/   H  r0   rl   Frn   ))é   é   éûÿÿÿ)rp   é   r   )rq   r   r#   r&   r   r   r   r   r)   )ro   r   r   )r   r!   r   ©r   r   r!   r   r   r   r#   ))r   r   r   )r   r   r   rs   c                   S   s   t dƒ ¡ S rd   ©r   rg   r+   r+   r+   r.   r/   Y  r0   c                   S   s   t dƒ ¡ S rh   rt   r+   r+   r+   r.   r/   Z  r0   c                   S   s   t dt dfdfƒ ¡ S rj   )r   r   rg   r+   r+   r+   r.   r/   [  r0   c                   S   s   t dƒ ¡ S rk   rt   r+   r+   r+   r.   r/   \  r0   c                   S   s   t dƒjddS rm   rt   r+   r+   r+   r.   r/   ]  r0   )r   r
   r5   r   rg   r;   r2   r   Zis_diagonalr   r   ÚHÚexpandr   ZHalfr   )r=   r6   rA   r+   r+   r.   Útest_LDLdecompositionC  sP    
8$@::$@2rw   c                  C   sœ   t g d¢g d¢g d¢g d¢g d¢g d¢gƒg} | D ]d}|jdd}|| }|| }t|| ƒ|ksfJ ‚t|| ƒ|kszJ ‚|j|ksˆJ ‚|j|ks2J ‚q2d 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	   ru   )ZAsr=   ZA_pinvZAApZApAr+   r+   r.   Ú1test_pinv_succeeds_with_rank_decomposition_methodn  s     úrŠ   c                  C   sx  t ddg ƒ} |  ¡ \}}|js"J ‚|j|j  kr>|  ¡ ksDn J ‚|| | ksTJ ‚t dddgƒ} |  ¡ \}}|jsxJ ‚|j|j  kr”|  ¡ ksšn J ‚|| | ksªJ ‚t ddg d¢ƒ} |  ¡ \}}|jsÐJ ‚|j|j  krì|  ¡ ksòn J ‚|| | ksJ ‚t g d¢g d¢g d¢g d	¢gƒ} |  ¡ \}}|js<J ‚|j|j  kr\|  ¡ ksbn J ‚|| | kstJ ‚d S )
Nr   r   r   r   )	r   r   r   r   r   r   r   r   r   )r   r   r   r   r   rq   r   )r)   r   r   r   r   rL   r   )r   r   r   rM   rM   r   rq   )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sxJ ‚|js‚J ‚t|| |j ƒ| ksœJ ‚t g d¢g d¢g d¢gƒ}| ¡ \}}t||j ƒt|jƒksÞJ ‚t|j| ƒt|jƒksúJ ‚|jsJ ‚t|| |j ƒ|ks"J ‚t dtdƒddgg d	¢dddtd
ƒgg d¢gƒ}| ¡ \}}t||j ƒt|jƒks|J ‚t|j| ƒt|jƒksšJ ‚|js¦J ‚t|| |j ƒ|ksÂJ ‚t g d¢g d¢g d¢gƒ}| ¡ \}}t||j ƒt|jƒksJ ‚t|j| ƒt|jƒks$J ‚|js0J ‚t|| |j ƒ|ksLJ ‚t g d¢g d¢g d¢g d¢gƒ}| ¡ \}}t||j ƒt|jƒks–J ‚t|j| ƒt|jƒks´J ‚|jsÀJ ‚t|| |j ƒ|ksÜJ ‚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   iøÿÿÿr!   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )	r   r   r   Zupper_hessenberg_decompositionr	   ru   r   r<   Zis_upper_hessenberg)r=   ru   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   r`   rc   rw   rŠ   r   r’   r+   r+   r+   r.   Ú<module>   s0   U"#'G+