U
    L?hãT  ã                   @   s0  d dl Z 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 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'„ Z0d(d)„ Z1d*d+„ Z2d,d-„ Z3d.d/„ Z4e j5 6d0d1d2g¡e j5 6d3ed4d5d6gd5d7d4gd8d5d7ggƒed5d9d5d:d6gƒfed4d5d6gd5d7d4gd8d5d7ggƒed9d4gd5d;gd6d7ggƒfed4d4e
d<ƒƒed4d9e
d=ƒƒfg¡d>d?„ ƒƒZ7e j5 6d@d1efeefg¡dAdB„ ƒZ8dCdD„ Z9dS )Eé    N)Ú
expand_mul)ÚIÚRational)ÚS)ÚSymbolÚsymbols)Úsympify)Úsimplify)Ú
ShapeErrorÚNonSquareMatrixError)ÚImmutableMatrixÚMatrixÚeyeÚonesÚImmutableDenseMatrixÚdotprodsimp)Ú_det_laplace)Úraises)ÚNonInvertibleMatrixError)ÚDMShapeError)Ú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!   úS/var/www/html/venv/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t  d  tgtdggƒ} t ddgƒ}dd„ }t dt dtd  dt  td d  d t  t gƒ}|| j||d t ddgƒks t‚d S )Nr   é   r   c                 S   s   |   ¡ rdS dS )NFT)Ú_random)Úer!   r!   r"   Ú<lambda>@   ó    z)test_LUsolve_iszerofunc.<locals>.<lambda>)Z
iszerofunc)r   r   ÚLUsolver   )r    ÚbZis_zero_funcZx_expr!   r!   r"   Útest_LUsolve_iszerofunc;   s
    0: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   r+   r   r   r   r!   r!   r"   Ú%test_issue_17247_expression_blowup_32G   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 )Nr&   é   é   é   é   r   é   r   éÿÿÿÿé
   r   c                      s
   ˆ   ˆ¡S ©N©r+   r!   ©ÚAr,   r!   r"   r)   g   r*   ztest_LUsolve.<locals>.<lambda>éüÿÿÿc                      s
   ˆ   ˆ¡S r6   r7   r!   r8   r!   r"   r)   u   r*   c                 S   s   | dkrd| | d  S dS )Nr/   r   r   r!   )ÚiÚjr!   r!   r"   r)   w   r*   c                      s
   ˆ   ˆ¡S r6   r7   r!   r8   r!   r"   r)   y   r*   )r   r+   r   r   Ú
ValueErrorÚNotImplementedErrorÚzerosr   ©r   Úsolnr!   r8   r"   Útest_LUsolveT   sN    
þ

þ

û
rB   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/   r0   r1   r2   r   r3   r   r   r4   r5   é	   é   é   )r   ZQRsolver   )r9   r   r,   rA   r!   r!   r"   Útest_QRsolve|   s0    
þ


þ

rF   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"   r)   –   r*   ztest_errors.<locals>.<lambda>)r   r
   r!   r!   r!   r"   Útest_errors•   s    rG   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/   r0   r1   r2   r   r3   r   r4   r5   r   ))r   r0   )r0   r   )r   éýÿÿÿrC   rH   ©éþÿÿÿr   za00, a01, a11, b0, b1)r   r$   r   r   r   r   r	   )	r9   r   r,   rA   Za00Za01Za11Zb0Úb1r!   r!   r"   Útest_cholesky_solve˜   sH    
þ

þ




rL   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/   r0   r1   r2   r   r3   r   r4   r5   r   rC   rH   rI   ))rC   r/   )r/   rC   )r   r   éûÿÿÿr:   iùÿÿÿrJ   c                      s
   ˆ   ˆ¡S r6   )ÚLDLsolver!   r8   r!   r"   r)   ã   r*   ztest_LDLsolve.<locals>.<lambda>)r   rN   r   r   r   r   r>   r@   r!   r8   r"   Útest_LDLsolve½   sF    
þ

þ



rO   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"   r)   é   r*   z-test_lower_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggƒ t dgƒ¡S rP   rQ   r!   r!   r!   r"   r)   ë   r*   c                   S   s*   t ddgddggƒ t ddgddggƒ¡S ©Nr&   r   r   rQ   r!   r!   r!   r"   r)   í   s   ÿr   r   r   r2   r&   rC   )	r   r   r
   r=   r   r   r   rR   r   ©r9   ÚBÚCr!   r!   r"   Útest_lower_triangular_solveæ   s    ÿÿÿrW   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 rP   ©r   Úupper_triangular_solver!   r!   r!   r"   r)   û   r*   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   s    t ddgddggƒ t dgƒ¡S rP   rX   r!   r!   r!   r"   r)   ý   r*   c                   S   s*   t ddgddggƒ t ddgddggƒ¡S rS   rX   r!   r!   r!   r"   r)   ÿ   s   ÿr   r   r&   r   r/   r2   )	r   r   r
   Ú	TypeErrorr   r   r   rY   r   rT   r!   r!   r"   Útest_upper_triangular_solveø   s    ÿÿÿr[   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"   r)     r*   z%test_diagonal_solve.<locals>.<lambda>r   r   r&   c                      s
   ˆ   ˆ¡S r6   )r\   r!   ©r9   rU   r!   r"   r)     r*   )r   rZ   r   r   r   r\   r   r!   r!   r]   r"   Útest_diagonal_solve
  s    r^   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   r0   r3   rC   rE   é   z-43/26z71/26é   é   é   é   ißÿÿÿiÛÿÿÿi×ÿÿÿéE   éK   éQ   é   r   Zw0_0r/   Úw1_0Zw2_0r   r&   )
r   Ú
pinv_solver$   r   rN   r   ÚpinvÚatomsr   Úname)r9   rU   ÚsolutionÚwÚsr!   r!   r"   Útest_pinv_solve  s4    "*
,(*þrp   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/   r1   ZRD)ÚmethodZEDrh   )
r   rj   r	   r   ÚHri   rk   r   Úpoprl   )ZAsr9   ZA_pinvZAApZApArU   rm   Zw1r!   r!   r"   Útest_pinv_rank_deficient4  sB    þ

rt   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   r0   r1   r3   r2   r5   rC   r4   r   rD   rE   T)ÚfreevarÚtau0rJ   Útau1Útau2c                      s
   ˆ   ˆ¡S r6   ©r   r!   r8   r!   r"   r)   Ÿ  r*   z)test_gauss_jordan_solve.<locals>.<lambda>c                      s
   ˆ   ˆ¡S r6   ry   r!   r8   r!   r"   r)   ²  r*   c                      s
   ˆ   ˆ¡S r6   ry   r!   r]   r!   r"   r)   ·  r*   c                      s
   ˆ   ˆ¡S r6   ry   r!   r]   r!   r"   r)   ¼  r*   ra   rH   c                      s
   ˆ   ˆ¡S r6   ry   r!   r8   r!   r"   r)   Ë  r*   z_tau0 _tau1 _tau2 tau1c                      s
   ˆ   ˆ¡S r6   ry   r!   r8   r!   r"   r)   ï  r*   )r   r   r   r   rk   r   rl   r   r   r=   r   ZHalfr   r   Ú	__class__r   )
ÚsolÚparamsru   rn   ro   Zx0Úx1Zx2Z_x0r    r!   )r9   rU   r,   r"   Útest_gauss_jordan_solve]  s    & 6  $þ   ÿ" ** (*( <(( ( (.(&(ÿ&" þ"$ &*r~   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&   rv   rw   rx   Útau3Útau4Ztau5r4   )r<   Úfztau:5)r   r   rk   r   rl   r   Ú	sympy.abcr<   r   Úlistr   r   )r9   rU   r{   r|   rn   ro   r<   r   Zsol_1rv   rw   rx   r   r€   Zsol_2r!   r!   r"   Ú4test_linsolve_underdetermined_AND_gauss_jordan_solve  sj     ù  ÿ$óýù
(r„   Ú
det_methodÚbirdZlaplacezM, rhsr&   r/   r0   r1   r2   r   r3   r   za:4zb:2c                 C   s4   t |j|| d| |¡ ƒt |j|j¡ks0t‚d S ©N)r…   )r	   Úcramer_solver+   r   r?   ÚrowsÚcolsr   )r…   r    Úrhsr!   r!   r"   Útest_cramer_solve?  s    ÿrŒ   zdet_method, errorc                    s>   t dddgdddggƒ‰ t ddgƒ‰t|‡ ‡‡fd	d
„ƒ d S )Nr   r4   r&   r0   r5   r3   rJ   ra   c                      s   ˆ j ˆˆdS r‡   )rˆ   r!   ©r9   r,   r…   r!   r"   r)   Q  r*   z*test_cramer_solve_errors.<locals>.<lambda>)r   r   )r…   Úerrorr!   r   r"   Útest_cramer_solve_errorsK  s    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 r6   ©Zsolver!   r8   r!   r"   r)   W  r*   ztest_solve.<locals>.<lambda>r2   c                      s
   ˆ   ˆ¡S r6   r   r!   r8   r!   r"   r)   Y  r*   )r   r   r=   r!   r!   r8   r"   Ú
test_solveT  s
    r‘   ):ZpytestZ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.exceptionsr
   r   Zsympy.matricesr   r   r   r   r   r   Zsympy.matrices.determinantr   Zsympy.testing.pytestr   r   Zsympy.polys.matrices.exceptionsr   Zsympy.solvers.solvesetr   r‚   r   r   r#   r%   r-   r.   rB   rF   rG   rL   rO   rW   r[   r^   rp   rt   r~   r„   ÚmarkZparametrizerŒ   r   r‘   r!   r!   r!   r"   Ú<module>   s\    (%)	!) ):0ÿü ÿ
