U
    —9%e¢O  ã                   @   s8  d dl mZ d dl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mZ 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 d dlmZ d dlmZ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+d#d$„ Z,d%d&„ Z-d'd(„ Z.d)d*„ Z/d+d,„ Z0d-S ).é    )Ú
expand_mul)ÚIÚRational)ÚS)ÚSymbolÚsymbols)Úsympify)Úsimplify)Ú
ShapeErrorÚNonSquareMatrixError)ÚImmutableMatrixÚMatrixÚeyeÚonesÚImmutableDenseMatrixÚdotprodsimp)Úraises)ÚNonInvertibleMatrixError)Úlinsolve)ÚxÚyc               	   C   sP   t tdƒƒ} tdƒ2 |  tddƒ¡t tdƒƒt ddg ƒfksBt‚W 5 Q R X d S )Ná  [
        [             -3/4,       45/32 - 37*I/16,                   0,                     0],
        [-149/64 + 49*I/32, -177/128 - 1369*I/128,                   0, -2063/256 + 541*I/128],
        [                0,         9/4 + 55*I/16, 2473/256 + 137*I/64,                     0],
        [                0,                     0,                   0, -177/128 - 1369*I/128]]Té   é   á¡  [
            [                          -32549314808672/3306971225785 - 17397006745216*I/3306971225785],
            [                               67439348256/3306971225785 - 9167503335872*I/3306971225785],
            [-15091965363354518272/21217636514687010905 + 16890163109293858304*I/21217636514687010905],
            [                                                          -11328/952745 + 87616*I/952745]]r   )r   r   r   Úgauss_jordan_solver   ÚAssertionError©ÚM© r   ú`/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/matrices/tests/test_solvers.pyÚ%test_issue_17247_expression_blowup_29   s
    

ür!   c               	   C   sD   t tdƒƒ} tdƒ& |  tddƒ¡t tdƒƒks6t‚W 5 Q R X d S )Nr   Tr   r   r   )r   r   r   Úcholesky_solver   r   r   r   r   r    Ú%test_issue_17247_expression_blowup_30   s    
r#   c               	   C   sÀ   t td dt ddgdt td dtd gddt td dgdddtd ggƒ} tdƒ^ |  tddƒ¡t td dt  gtd dt  gtd dt  gdtd  ggƒks²t‚W 5 Q R X d S )Nr   r   Tr   )r   r   r   ÚLUsolver   r   r   r   r   r    Ú%test_issue_17247_expression_blowup_327   s    ü
ür%   c               	      sà  t dddgdddgdddggƒ‰ t dddddgƒ} ˆ |  ‰ˆ  ˆ¡}|| ksPt‚t dd	dgdd
dgdddggƒ‰ t ddd	ddgƒ} ˆ |  ‰ˆ  ˆ¡}|| ks t‚t ddgddgddggƒ‰ t dddgƒ‰ˆ  ˆ¡t ddgƒksât‚t dddgƒ‰tt‡ ‡fdd„ƒ t dd	dgdd
dgdddgdddgdddgdddggƒ‰ t dddgƒ} ˆ |  ‰ˆ  ˆ¡}|| ksjt‚t dd	dgdd
dggƒ‰ t d	ddgƒ} ˆ |  ‰tt‡ ‡fdd„ƒ t dddd„ ƒ‰ t  dd¡‰tt‡ ‡fdd„ƒ d S )Né   é   é   é   é   r   é   r   éÿÿÿÿé
   r   c                      s
   ˆ   ˆ¡S ©N©r$   r   ©ÚAÚbr   r    Ú<lambda>W   ó    ztest_LUsolve.<locals>.<lambda>éüÿÿÿc                      s
   ˆ   ˆ¡S r.   r/   r   r0   r   r    r3   e   r4   c                 S   s   | dkrd| | d  S dS )Nr'   r   r   r   )ÚiÚjr   r   r    r3   g   r4   c                      s
   ˆ   ˆ¡S r.   r/   r   r0   r   r    r3   i   r4   )r   r$   r   r   Ú
ValueErrorÚNotImplementedErrorZzerosr   ©r   Úsolnr   r0   r    Útest_LUsolveD   sN    
þ

þ

û
r<   c                  C   s  t dddgdddgdddggƒ} t dddddgƒ}| | }|  |¡}||ksPt‚t ddgddgddggƒ}| | }|  |¡}||ksˆt‚t d	d
dgdddgdddggƒ} t ddd
ddgƒ}| | }|  |¡}||ksØt‚t ddgddgddggƒ}| | }|  |¡}||kst‚d S )Nr&   r'   r(   r)   r*   r   r+   r   r   r,   r-   é	   é   é   )r   ZQRsolver   )r1   r   r2   r;   r   r   r    Útest_QRsolvel   s0    
þ


þ

r@   c                   C   s   t tdd„ ƒ d S )Nc                   S   s    t dgƒ t ddgddggƒ¡S )Nr   r&   r'   r   )r   r$   r   r   r   r    r3   †   r4   ztest_errors.<locals>.<lambda>)r   r
   r   r   r   r    Útest_errors…   s    rA   c            	      C   sÀ  t dddgdddgdddggƒ} t dddddgƒ}| | }|  |¡}||ksPt‚t dd	dgdd
dgdddggƒ} t ddd	ddgƒ}| | }|  |¡}||ks t‚t dƒ} t dƒ}| | }|  |¡}||ksÎt‚t ddt fdt dffƒ} t dƒ}| | }|  |¡}t|ƒ|kst‚t dt dfdt dffƒ} t ddt  d	fƒ}| | }|  |¡}t|ƒ|ksjt‚tdƒ\}}}}}t ||f||ffƒ} t ||fƒ}|  |¡}t| | ƒ|ks¼t‚d S )Nr&   r'   r(   r)   r*   r   r+   r   r,   r-   r   ))r   r(   )r(   r   )r   éýÿÿÿr=   rB   ©éþÿÿÿr   za00, a01, a11, b0, b1)r   r"   r   r   r   r   r	   )	r1   r   r2   r;   Za00Za01Za11Zb0Úb1r   r   r    Útest_cholesky_solveˆ   sH    
þ

þ




rF   c                     sº  t dddgdddgdddggƒ‰ t dddddgƒ} ˆ |  ‰ˆ  ˆ¡}|| ksPt‚t dd	dgdd
dgdddggƒ‰ t ddd	ddgƒ} ˆ |  ‰ˆ  ˆ¡}|| ks t‚t ddt fdt dffƒ‰ t dƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| ksæt‚t dt dfdt dffƒ‰ t ddt  d	fƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| ks:t‚t dƒ‰ t dƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| ksnt‚t dddgdddggƒ‰ t dgdgdggƒ} ˆ |  ‰tt‡ ‡fdd„ƒ d S )Nr&   r'   r(   r)   r*   r   r+   r   r,   r-   r   r=   rB   rC   ))r=   r'   )r'   r=   )r   r   éûÿÿÿr5   iùÿÿÿrD   c                      s
   ˆ   ˆ¡S r.   )ÚLDLsolver   r0   r   r    r3   Ó   r4   ztest_LDLsolve.<locals>.<lambda>)r   rH   r   r   r   r   r9   r:   r   r0   r    Útest_LDLsolve­   sF    
þ

þ



rI   c                  C   sŽ   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tddgddggƒ} tttgttggƒ}tddgd	d
ggƒ}|  |¡|ksxt‚|  |¡|ksŠt‚d S )Nc                   S   s   t ddgƒ t ddgƒ¡S ©Nr   r   ©r   Úlower_triangular_solver   r   r   r    r3   Ù   r4   z-test_lower_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggƒ t dgƒ¡S rJ   rK   r   r   r   r    r3   Û   r4   c                   S   s*   t ddgddggƒ t ddgddggƒ¡S ©Nr&   r   r   rK   r   r   r   r    r3   Ý   s   ÿr   r   r   r*   r&   r=   )	r   r   r
   r8   r   r   r   rL   r   ©r1   ÚBÚCr   r   r    Útest_lower_triangular_solveÖ   s    ÿÿÿrQ   c                  C   sŽ   t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tddgddggƒ} tttgttggƒ}tddgd	d
ggƒ}|  |¡|ksxt‚|  |¡|ksŠt‚d S )Nc                   S   s   t ddgƒ t ddgƒ¡S rJ   ©r   Úupper_triangular_solver   r   r   r    r3   ë   r4   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggƒ t dgƒ¡S rJ   rR   r   r   r   r    r3   í   r4   c                   S   s*   t ddgddggƒ t ddgddggƒ¡S rM   rR   r   r   r   r    r3   ï   s   ÿr   r   r&   r   r'   r*   )	r   r   r
   Ú	TypeErrorr   r   r   rS   r   rN   r   r   r    Útest_upper_triangular_solveè   s    ÿÿÿrU   c                      s|   t tdd„ ƒ tddgddggƒd ‰ tttgttggƒ‰ˆ  ˆ¡ˆd ksPt‚tddgddggƒ‰ t t‡ ‡fdd„ƒ d S )Nc                   S   s   t ddgƒ t dgƒ¡S )Nr   )r   Údiagonal_solver   r   r   r    r3   û   r4   z%test_diagonal_solve.<locals>.<lambda>r   r   r&   c                      s
   ˆ   ˆ¡S r.   )rV   r   ©r1   rO   r   r    r3     r4   )r   rT   r   r   r   rV   r   r   r   rW   r    Útest_diagonal_solveú   s    rX   c                  C   sl  t ddgddggƒ} t ddgƒ}|  |¡|  |¡ks8t‚|  |¡|  |¡ksPt‚|  |¡t tdƒtdƒgƒksrt‚| |  ¡  | |ksŠt‚t ddd	gd
ddggƒ}|  |¡|  |¡ksºt‚|  |¡|  |¡ksÒt‚|  |¡t dddgdddggƒd ksüt‚| |  ¡  | |kst‚t dddgdddggƒ} t ddgƒ}|  |¡}i }| t¡D ]}|||j	< qR|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gƒksðt‚| |  ¡  | |ks
t‚t ddgddgddggƒ} t dddgƒ}|  |¡t ddgƒksNt‚| |  ¡  | |ksht‚d S )Nr   r(   r+   r=   r?   é   z-43/26z71/26é   é   é   é   ißÿÿÿiÛÿÿÿi×ÿÿÿéE   éK   éQ   é   r   Zw0_0r'   Úw1_0Zw2_0r   r&   )
r   Ú
pinv_solver"   r   rH   r   ÚpinvÚatomsr   Úname)r1   rO   ÚsolutionÚwÚsr   r   r    Útest_pinv_solve  s4    "*
,(*þrj   c                  C   sú  t dddgdddggƒt ddgddggƒt ddgddgddggƒg} | D ]d}|jdd}|| }|| }t|| ƒ|ks|t‚t|| ƒ|kst‚|j|ksžt‚|j|ksHt‚qH| D ]f}|jd	d}|| }|| }t|| ƒ|ksæt‚t|| ƒ|ksút‚|j|ks
t‚|j|ks²t‚q²t ddgddggƒ}t ddgƒ}| |¡}| t¡ ¡ }|j	d
ksbt‚|t d|gƒksxt‚|| ¡  | |ks’t‚t ddgƒ}| |¡}| t¡ ¡ }|j	d
ksÆt‚|t d|gƒksÜt‚|| ¡  | |ksöt‚d S )Nr   r&   r   r   r'   r)   ZRD)ÚmethodZEDrb   )
r   rd   r	   r   ÚHrc   re   r   Úpoprf   )ZAsr1   ZA_pinvZAApZApArO   rg   Zw1r   r   r    Útest_pinv_rank_deficient$  sB    þ

rn   c            
   	      s  t dddgdddgddd	ggƒ‰ t ddd
gƒ‰ˆ  ˆ¡\} }| t dgdgdggƒksXt‚|t ddg ƒkslt‚tdƒ‰ t ddddgddddgd
d	ddggƒ‰ˆ  ˆ¡\} }| ˆks´t‚|t ddg ƒksÈt‚t dddgdddgddd
ggƒ‰ t ddd
gƒ‰ˆ jˆdd\} }}i }|  t¡D ]}|||j< q| t |d d gd|d  d g|d ggƒks`t‚|t |d ggƒkszt‚|dgksŠt‚t dddgdddgddd
ggƒ‰ t ddgddgd
dggƒ‰ˆ jˆdd\} }}i }|  t¡D ]}|||j< qæ| t |d d |d tddƒ gd|d  d d|d  tddƒ g|d |d ggƒksXt‚|t |d |d ggƒksxt‚|dgksˆt‚t dddgdddgddd
ggƒ‰ t dddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qÒ| t d|d  d|d   g|d g|d ggƒkst‚|t |d g|d ggƒks@t‚t dddgdddgdddggƒ‰ t dddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qŠ| t |d g|d g|d ggƒksÆt‚|t |d g|d g|d ggƒksðt‚t dddgdddgddd
ggƒ‰ t dddgƒ‰tt	‡ ‡fdd„ƒ t dddgdddgddd
gdddggƒ‰ t ddddgƒ‰ˆ  ˆ¡\} }| t tddƒgdgtddƒggƒks¢t‚|t ddg ƒks¸t‚t dddgdddgddd
gdddggƒ‰ t ddgddgddgddggƒ‰ˆ  ˆ¡\} }| t tddƒtddƒgddgtddƒtddƒggƒksJt‚|t ddg ƒks`t‚t dddgdddgddd
gdddggƒ‰ t ddddgƒ‰tt	‡ ‡fdd„ƒ t dddgdddgddd
gdddggƒ‰ t ddgddgddgddggƒ‰tt	‡ ‡fdd„ƒ t dddgdddgddd
gdddggƒ‰ t ddgddgddgddggƒ‰tt	‡ ‡fdd„ƒ t dddgdd	dgddd
gdddggƒ‰ t ddddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< q¸| t d|d  d gdg|d ggƒksøt‚|t |d ggƒkst‚t dddgdd	dgddd
gdddggƒ‰ t ddddgƒ‰tt	‡ ‡fdd„ƒ t ddddgddddgd
d	ddggƒ‰ t dddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< q®| t d|d  d gd|d  d gdg|d ggƒksþt‚|t |d ggƒkst‚t ddddgddddgddddggƒ‰ t dddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qh| t |d d|d   t
j gd|d  d|d   tddƒ g|d g|d ggƒksØt‚|t |d g|d ggƒksút‚tdƒ\}}}}t ddddddgddddd|ggƒ}	|	d d …d d…f ‰ |	d d …dd …f ‰ˆ  ˆ¡\} }|t dd|||gƒk	s€t‚| t dd|d|||gƒk	s t‚t ddddgddddgddddggƒ‰ t dddgƒ‰tt	‡ ‡fdd„ƒ tddgddggƒ‰ tddgƒ‰ˆ  ˆ¡\} }| tddgƒk
s,t‚|tddg ƒk
sBt‚| jtk
sRt‚|jtk
sbt‚t ddddgddddggƒ‰ t ddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< 
q¦| t dg|d g|d gdggƒk
sât‚|t |d g|d ggƒkst‚d S )Nr   r&   r'   r   r(   r)   r+   r*   r-   r=   r,   r   r>   r?   T)ÚfreevarÚtau0rD   Útau1Útau2c                      s
   ˆ   ˆ¡S r.   ©r   r   r0   r   r    r3     r4   z)test_gauss_jordan_solve.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r.   rs   r   r0   r   r    r3   ¢  r4   c                      s
   ˆ   ˆ¡S r.   rs   r   rW   r   r    r3   §  r4   c                      s
   ˆ   ˆ¡S r.   rs   r   rW   r   r    r3   ¬  r4   r[   rB   c                      s
   ˆ   ˆ¡S r.   rs   r   r0   r   r    r3   »  r4   z_tau0 _tau1 _tau2 tau1c                      s
   ˆ   ˆ¡S r.   rs   r   r0   r   r    r3   ß  r4   )r   r   r   r   re   r   rf   r   r   r8   r   ZHalfr   r   Ú	__class__r   )
ÚsolÚparamsro   rh   ri   Zx0Úx1Zx2Z_x0r   r   )r1   rO   r2   r    Útest_gauss_jordan_solveM  s    & 6  $þ   ÿ" ** (*( <(( ( (.(&(ÿ&" þ"$ &*rx   c                  C   sp  t ddddddddddddddgddddddddddddddgddddddddddddddgddddddddddddddgddddddddddddddgddddddddddddddgddddddddddddddgddddddddddddddggƒ} t ddddddddgƒ}|  |¡\}}i }| t¡D ]}|||j< q,|t |d g|d g|d g|d g|d g|d	 ggƒks€t‚|t dd|d   g|d gdd|d   |d  g|d g|d |d  gd
|d  d|d   d|d   gdd|d   g|d g|d g|d g|d gdd|d	   g|d	 gdggƒksJt‚ddlm}m} t dddddddddg	dd
dd
dd
dd
| g	dddddddd|g	gƒ} t t	t
| ƒƒd ƒ}tdƒ\}	}
}}}|t | | |	 | | d g||
 | | g|	g|
g|| | | g|g|g|ggƒks&t‚| d d …d d
…f | | d d …d
f  }|t dgdgdggƒkslt‚d S )Nr   r   r&   rp   rq   rr   Útau3Útau4Ztau5r,   )r7   Úfztau:5)r   r   re   r   rf   r   Ú	sympy.abcr7   r{   Úlistr   r   )r1   rO   ru   rv   rh   ri   r7   r{   Zsol_1rp   rq   rr   ry   rz   Zsol_2r   r   r    Ú4test_linsolve_underdetermined_AND_gauss_jordan_solveõ  sj     ù  ÿ$óýù
(r~   c                      s`   t ddgddggƒ‰ t dgdggƒ‰tt‡ ‡fdd„ƒ t dgdggƒ‰tt‡ ‡fdd„ƒ d S )	Nr   r&   r   r'   c                      s
   ˆ   ˆ¡S r.   ©Zsolver   r0   r   r    r3   2  r4   ztest_solve.<locals>.<lambda>r*   c                      s
   ˆ   ˆ¡S r.   r   r   r0   r   r    r3   4  r4   )r   r   r8   r   r   r0   r    Ú
test_solve/  s
    r€   N)1Zsympy.core.functionr   Zsympy.core.numbersr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Zsympy.core.sympifyr   Zsympy.simplify.simplifyr	   Zsympy.matrices.matricesr
   r   Zsympy.matricesr   r   r   r   r   r   Zsympy.testing.pytestr   Zsympy.matrices.commonr   Zsympy.solvers.solvesetr   r|   r   r   r!   r#   r%   r<   r@   rA   rF   rI   rQ   rU   rX   rj   rn   rx   r~   r€   r   r   r   r    Ú<module>   s8    (%)	!) ):