U
    9%eQ8  ć                   @   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 ddddgddddgddddgdd	ddgg} |  ” \}}}|jsHt|jsRt||  |d
”|  tdksrtt d	dddgddd	dgddddgddd	dgg} |  ” \}}}|jsŗt|jsÄt||  |d
”|  tdksätt dddgddd	gdddgdddgg} | jdd\}}}|js*t|js6t||  |d
”|  tddksZtt dddgddd	gddd	gg} | jdd\}}}|jst|js¤t||  |d
”|  tdksĘtt dtdfdtdftdt	ff   ” \}}}|js t|jst||  |d
”  tdks.tt d}|jdksFt|jdksVtt d}|jdksnt|jdks~tt dddgddd	gdddgg   
” \}}}}|  || ”  | ksĢtt ddddgddddgddddgd	dddgg   
” \}}}}|  || ”  | ks*tt dddgdddgdddgg   
” \}}}}|  || ”  | ksxtt dddgddd	gdddgg tt fdd d S )Nr   é   é   é   é   é   é   éž’’’é   Zbackwardé   i÷’’’é	   é
   é   é   F©Z	rankcheck)©r   r   r   )r   r   r   T))r   r   r   )r   r   r   é’’’’c                      s    j ddS )NTr"   )ŚLUdecomposition_Simple© ©ŚMr&   śg/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/matrices/tests/test_decompositions.pyŚ<lambda>b   ó    ztest_LUdecomp.<locals>.<lambda>)r   ŚLUdecompositionŚis_lowerŚAssertionErrorŚ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    


ż

 


ż

 
ż$
ž" "
ž


ż
žž’r6   c               	   C   sź  t ddgddgg} |  ” \}}}|| |j | ks8t|j| t|jksPt|j| t|jkshtt ddgg}| ” \}}}|| |j |kst|j| t|jks²t|j| t|jksŹtt dddddgdddddgdddddgdddddgg}| ” \}}}|| |j |ks(t|j| t|jksBt|j| t|jks\tt tddtdgdtddgg}| ” \}}}t|j| t|jks¬tt|j| t|jksŹtt|| |j |ksętd S )Nr   r   r   r   r   )	r   Zsingular_value_decompositionŚTr.   r   Ścolsr   r   r	   )ŚAr3   r   ŚVŚBŚCŚDr&   r&   r)   Ś"test_singular_value_decompositionDd   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st|t d|dd dd|dd  gd|dd |dd ggksÜt|| | ksģt|j| tdkstt dddgdddgdddgg} |  ” \}}|j| t|jksJt|jsVt| || kshtt d	dd
gdddgdddgg} |  ” \}}|j| t|jks®t|jsŗt| || ksĢttd}t |g} |  ” \}}|t |t	| gkst|t t	|gkstt |dgd|gg} |  ” \}}||t	| t ddgddgg ksht|t	|t ddgddgg kstd S )Nr   r   r   r   r$   r   r   r   r!   iĶ’’’r   é§   éü’’’é   r   )
r   ŚQRdecompositionr   r.   r7   r   r8   r/   r   r   )r9   ŚQr   ŚRr   r&   r&   r)   Śtest_QR   s:    .4žF  
*rE   c                  C   s>  t dddgdddgdddgdddgg} |  ” \}}|j| t|jksLt|jsVt| || ksftt dd	dgddd
gdddgdd	dgg} |  ” \}}|j| t|jks²t|js¼t| || ksĢtt ddddg} |  ” \}}|j| t|jkst|jst| || ks tt dddgdddgg} |  ” \}}|j| t|jks^t|jsjt| || ks|tt ddddgddddgddddgg} |  ” \}}|j| t|jksČt|jsŌt| || ksętt ddddg} |  ” \}}|j| t|jkst|js(t| || ks:td S )Nr   r   é   r!   éł’’’r   éż’’’r   r$   r   r   r   r   r   é   r   é   é@   ©r   rB   r7   r   r8   r.   r/   ©r9   rC   rD   r&   r&   r)   Śtest_QR_non_square©   s<    (
(
&rN   c                  C   sH  t dddgdddgddd	gg} |  ” \}}|j| t|jksDt|jsNt| || ks^tt dddgdddgdddgdddgg} |  ” \}}|j| t|jksŖt|js“t| || ksÄtt dddgdddgdddgdddggj} |  ” \}}|j| t|jkst|js t| || ks2tt d
d
d
gg} |  ” \}}|j| t|jksht|jstt| || kstt d
d
d
ggj} |  ” \}}|j| t|jks¾t|jsŹt| || ksÜtt d
d
d
gd
d
d
gg} |  ” \}}|j| t|jkst|js&t| || ks8tt d
d
d
gd
d
d
ggj} |  ” \}}|j| t|jksxt|jst| || kstt d
d
d
gdddggj} |  ” \}}|j| t|jksÖt|jsāt| || ksōtt d
d
d
d
gddddgd
d
d
d
ggj} |  ” \}}|j| t|jksBt|jsNt| || ks`tt d
d
d
d
gddddgd
d
d
d
gddddggj} |  ” \}}|j| t|jksøt|jsÄt| || ksÖtt d
d
d
gd
d
d
gd
d
d
gdddggj} |  ” \}}|j| t|jks&t|js2t| || ksDtd S )Nr   r   r   r   r   r   r   r   r   r   rL   rM   r&   r&   r)   Śtest_QR_trivialŠ   sn     
(
*(2*rO   c                  C   sŠ   t ddgddgg} |  ” \}}t|| | s2tt||j t  d”sLtt|j| t  d”sftt ddgddgg} |  ” \}}t|| | stt||j t  d”s²tt|j| t  d”sĢtd S )Nr   g)\Āõ(š?r   gj¼tš?)r   rB   r   r.   r7   r   rM   r&   r&   r)   Śtest_QR_float  s    rP   c               
      s|   d  fdd} z$t ddgddggj| d\}}W n: tk
rn } z |jd ksXtW Y ¢d S d }~X Y nX dsxtd S )NśI got passed in!c                    s   t  d S ©N©r1   ©Śvalue©Zmagic_stringr&   r)   Śgoofyiszero)  s    z;test_LUdecomposition_Simple_iszerofunc.<locals>.goofyiszeror   r   ©Z
iszerofuncF)r   r%   r1   Śargsr.   )rW   Zlur4   Śerrr&   rV   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 n: tk
rp } z |jd ksZtW Y ¢d S d }~X Y nX dsztd S )NrQ   c                    s   t  d S rR   rS   rT   rV   r&   r)   rW   8  s    z4test_LUdecomposition_iszerofunc.<locals>.goofyiszeror   r   rX   F)r   r,   r1   rY   r.   )rW   ŚlŚur4   rZ   r&   rV   r)   Śtest_LUdecomposition_iszerofunc4  s    &r^   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stttd
} |  ” \}}|| |j | kst|jsØt|tdddgtddddgtddtdddggksāt| 	” sīt|tdddgdddgdddggkst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st| ” tdddgt
d ddgtjt
d  ddggks¼t| ” tdksŅt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sHttd
} |  ” \}}|| |j | kstt|jst|tdddgtddddgtddtdddggks¼t| 	” sŹt|tdddgdddgdddggksōt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s\t|tdt
d ddftjt
d  ddffkst|tdks td S )Nc                   S   s   t d ” S ©N©r   r   ©r   ŚLDLdecompositionr&   r&   r&   r)   r*   D  r+   z'test_LDLdecomposition.<locals>.<lambda>c                   S   s   t d ” S ©N©r`   )r   r   ra   r&   r&   r&   r)   r*   E  r+   c                   S   s   t dt dfdf ” S ©Nr   r   )r   r   )r   r   rb   r&   r&   r&   r)   r*   F  r+   c                   S   s   t d ” S ©N©)r   r   )r   r   ra   r&   r&   r&   r)   r*   G  r+   c                   S   s   t djddS ©Nrd   F©Z	hermitianra   r&   r&   r&   r)   r*   H  r+   rg   Fri   ))é   é   éū’’’)rk   é   r   )rl   r   r    r   r   r   r   r$   rj   r   r   r   r   r    ))r   r   r   )r   r   r   )r   r   r   c                   S   s   t d ” S r_   ©r   rb   r&   r&   r&   r)   r*   Y  r+   c                   S   s   t d ” S rc   rn   r&   r&   r&   r)   r*   Z  r+   c                   S   s   t dt dfdf ” S re   )r   r   rb   r&   r&   r&   r)   r*   [  r+   c                   S   s   t d ” S rf   rn   r&   r&   r&   r)   r*   \  r+   c                   S   s   t djddS rh   rn   r&   r&   r&   r)   r*   ]  r+   r#   )r   r
   r1   r   rb   r7   r.   r-   r   Zis_diagonalr   r   ŚHŚexpandr   ZHalfr   )r9   r2   r=   r&   r&   r)   Śtest_LDLdecompositionC  sP    
:*@<<*@2rq   c                  C   sĢ   t ddddddgddd	d	d
dgddddddgddddddgddddddgddddddggg} | D ]d}|jdd}|| }|| }t|| |kstt|| |ksŖt|j|ksøt|j|ksbtqbd S )Né=   éY   é7   é   éG   r   é>   é`   éU   rI   éE   é8   é   r   é6   r   é[   é)   r   é   é0   éZ   ZRD)Śmethod)r   Zpinvr	   r.   ro   )ZAsr9   ZA_pinvZAApZApAr&   r&   r)   Ś1test_pinv_succeeds_with_rank_decomposition_methodn  s     śr   c                  C   s°  t ddg } |  ” \}}|js"t|j|j  kr>|  ” ksDn t|| | ksTtt dddg} |  ” \}}|jsxt|j|j  kr|  ” ksn t|| | ksŖtt dddddddddddg	} |  ” \}}|jsŽt|j|j  krü|  ” ksn t|| | kstt dddddddgdddddddgddd	d
d
ddgddddd	ddgg} |  ” \}}|jstt|j|j  kr|  ” ksn t|| | ks¬td S )Nr   r   r   r   r   rl   r$   rG   r   rH   r   )r   Zrank_decompositionZ
is_echelonr.   r8   Ś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\tt|j| t|jksxt|j	stt|| |j | kstt dddgdddgdd	d
gg}| ” \}}t||j t|jksätt|j| t|jkst|j	stt|| |j |ks*tt dtdddgddddgdddtdgddddgg}| ” \}}t||j t|jkstt|j| t|jksŖt|j	s¶tt|| |j |ksŅtt dddgdddgdddgg}| ” \}}t||j t|jkstt|j| t|jks:t|j	sFtt|| |j |ksbtt ddddgddddgddddgddddgg}| ” \}}t||j t|jks¼tt|j| t|jksŚt|j	sętt|| |j |kstd S )Nr   r   r   r   r   r   r   r   r!   é"   rH   r   ių’’’r   )
r   r   r   Zupper_hessenberg_decompositionr	   ro   r   r8   r.   Zis_upper_hessenberg)r9   ro   r5   r;   r<   r=   Ś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.matricesr
   Zsympy.matricesr   r   r   r   Z	sympy.abcr   r   r   Zsympy.testing.pytestr   r   Zsympy.testing.matricesr   r6   r>   rE   rN   rO   rP   r[   r^   rq   r   r   r   r&   r&   r&   r)   Ś<module>   s0   U"#'G+