o
    à8VaO  ã                   @   s  d dl mZmZmZmZmZmZmZ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'„ Z+d(S ))é    )ÚIÚRationalÚSÚSymbolÚsimplifyÚsymbolsÚsympifyÚ
expand_mul)Ú
ShapeErrorÚNonSquareMatrixError)ÚImmutableMatrixÚMatrixÚeyeÚonesÚImmutableDenseMatrixÚdotprodsimp)Úraises)ÚNonInvertibleMatrixError)Úlinsolve)ÚxÚyc                  C   sf   t tdƒƒ} tdƒ |  tddƒ¡t tdƒƒt ddg ƒfks!J ‚W d   ƒ d S 1 s,w   Y  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   ©ÚM© r   úC/usr/lib/python3/dist-packages/sympy/matrices/tests/test_solvers.pyÚ%test_issue_17247_expression_blowup_29   s   

ü"ÿr    c                  C   sZ   t tdƒƒ} tdƒ |  tddƒ¡t tdƒƒksJ ‚W d   ƒ d S 1 s&w   Y  d S )Nr   Tr   r   r   )r   r   r   Úcholesky_solver   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ƒ5 |  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sYJ ‚W d   ƒ d S 1 sdw   Y  d S )Nr   r   Tr   )r   r   r   ÚLUsolver   r   r   r   r   Ú%test_issue_17247_expression_blowup_323   s   ü
ü"ÿr$   c                     s¶  t g d¢g d¢g d¢gƒ‰ t ddg d¢ƒ} ˆ |  ‰ˆ  ˆ¡}|| ks$J ‚t g d¢g d¢g d	¢gƒ‰ t ddg d
¢ƒ} ˆ |  ‰ˆ  ˆ¡}|| ksHJ ‚t ddgddgddggƒ‰ t g d¢ƒ‰ˆ  ˆ¡t ddgƒkshJ ‚t g d¢ƒ‰tt‡ ‡fdd„ƒ t g d¢g d¢g d	¢g d¢g d¢g d¢gƒ‰ t g d¢ƒ} ˆ |  ‰ˆ  ˆ¡}|| ks£J ‚t g d¢g d¢gƒ‰ t g d¢ƒ} ˆ |  ‰tt‡ ‡fdd„ƒ t dddd„ ƒ‰ t  dd¡‰tt‡ ‡fdd„ƒ d S )N©é   é   é   ©r'   é   r&   ©é   r'   r*   r'   r   ©r'   é   r(   ©r   éÿÿÿÿr&   ©r(   é
   r.   ©r,   r'   r   ©r0   r&   r(   r&   r   )r'   r   r   )r'   r   r&   c                      ó
   ˆ   ˆ¡S ©N©r#   r   ©ÚAÚbr   r   Ú<lambda>S   ó   
 ztest_LUsolve.<locals>.<lambda>)r&   r   éüÿÿÿ)r0   r&   r   c                      r5   r6   r7   r   r8   r   r   r;   a   r<   r   c                 S   s   | dkrd| | d  S dS )Nr'   r   r   r   )ÚiÚjr   r   r   r;   c   s    c                      r5   r6   r7   r   r8   r   r   r;   e   r<   )r   r#   r   Ú
ValueErrorÚNotImplementedErrorZzerosr   ©r   Úsolnr   r8   r   Útest_LUsolve@   sN   þ
þ
û
rD   c                  C   s  t g d¢g d¢g d¢gƒ} t ddg d¢ƒ}| | }|  |¡}||ks$J ‚t ddgddgd	d
ggƒ}| | }|  |¡}||ks@J ‚t g d¢g d¢g d¢gƒ} t ddg d¢ƒ}| | }|  |¡}||ksdJ ‚t ddgddgddggƒ}| | }|  |¡}||ks€J ‚d S )Nr%   r)   r+   r'   r   r-   r&   r   r(   r*   r/   r1   r3   r4   r.   r,   é	   r2   é   é   )r   ZQRsolve)r9   r   r:   rC   r   r   r   Útest_QRsolveh   s0   þ

þ

rH   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;   ‚   ó     ztest_errors.<locals>.<lambda>)r   r
   r   r   r   r   Útest_errors   s   rJ   c            	      C   sª  t g d¢g d¢g d¢gƒ} t ddg d¢ƒ}| | }|  |¡}||ks$J ‚t g d¢g d¢g d	¢gƒ} t ddg d
¢ƒ}| | }|  |¡}||ksHJ ‚t dƒ} t dƒ}| | }|  |¡}||ks_J ‚t ddt fdt dffƒ} t dƒ}| | }|  |¡}t|ƒ|ks‚J ‚t dt dfdt dffƒ} t ddt  dfƒ}| | }|  |¡}t|ƒ|ks«J ‚tdƒ\}}}}}t ||f||ffƒ} t ||fƒ}|  |¡}t| | ƒ|ksÓJ ‚d S )Nr%   r)   r+   r'   r   r-   r/   r1   r3   r4   ))r   r(   )r(   r   )r   éýÿÿÿrE   rK   r(   ©éþÿÿÿr   r&   r0   za00, a01, a11, b0, b1)r   r!   r   r	   r   r   )	r9   r   r:   rC   Za00Za01Za11Zb0Zb1r   r   r   Útest_cholesky_solve„   sH   þ
þ




rN   c                     s¢  t g d¢g d¢g d¢gƒ‰ t ddg d¢ƒ} ˆ |  ‰ˆ  ˆ¡}|| ks$J ‚t g d¢g d¢g d	¢gƒ‰ t ddg d
¢ƒ} ˆ |  ‰ˆ  ˆ¡}|| ksHJ ‚t ddt fdt dffƒ‰ t dƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| kskJ ‚t dt dfdt dffƒ‰ t ddt  dfƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| ks”J ‚t dƒ‰ t dƒ} ˆ |  ‰ˆ  ˆ¡}t|ƒ| ks­J ‚t g d¢g d¢gƒ‰ t dgdgdggƒ} ˆ |  ‰tt‡ ‡fdd„ƒ d S )Nr%   r)   r+   r'   r   r-   r/   r1   r3   r4   rE   rK   r(   rL   r&   r0   ))rE   r'   )r'   rE   )r   r   )éûÿÿÿrK   r=   )rK   iùÿÿÿr.   r,   r.   rM   c                      r5   r6   )ÚLDLsolver   r8   r   r   r;   Ï   r<   ztest_LDLsolve.<locals>.<lambda>)r   rP   r   r	   r   rA   rB   r   r8   r   Útest_LDLsolve©   sF   þ
þ



rQ   c                  C   óŽ   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s<J ‚|  |¡|ksEJ ‚d S )Nc                   S   ó   t ddgƒ t ddgƒ¡S ©Nr   r   ©r   Úlower_triangular_solver   r   r   r   r;   Õ   ó    z-test_lower_triangular_solve.<locals>.<lambda>c                   S   ó    t ddgddggƒ t dgƒ¡S rT   rU   r   r   r   r   r;   ×   rI   c                   S   ó*   t ddgddggƒ t ddgddggƒ¡S ©Nr&   r   r   rU   r   r   r   r   r;   Ù   ó    ÿr   r   r   r,   r&   rE   )r   r   r
   r@   r   r   r   rV   ©r9   ÚBÚCr   r   r   Útest_lower_triangular_solveÒ   ó   ÿÿÿr_   c                  C   rR   )Nc                   S   rS   rT   ©r   Úupper_triangular_solver   r   r   r   r;   ç   rW   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   rX   rT   ra   r   r   r   r   r;   é   rI   c                   S   rY   rZ   ra   r   r   r   r   r;   ë   r[   r   r   r&   r   r'   r,   )r   r   r
   Ú	TypeErrorr   r   r   rb   r\   r   r   r   Útest_upper_triangular_solveä   r`   rd   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s(J ‚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;   ÷   s    z%test_diagonal_solve.<locals>.<lambda>r   r   r&   c                      r5   r6   )re   r   ©r9   r]   r   r   r;   ý   r<   )r   rc   r   r   r   re   r   r   rf   r   Útest_diagonal_solveö   s   rg   c                  C   sV  t ddgddggƒ} t ddgƒ}|  |¡|  |¡ksJ ‚|  |¡|  |¡ks(J ‚|  |¡t tdƒtdƒgƒks9J ‚| |  ¡  | |ksEJ ‚t g d	¢g d
¢gƒ}|  |¡|  |¡ks[J ‚|  |¡|  |¡ksgJ ‚|  |¡t g d¢g d¢gƒd kszJ ‚| |  ¡  | |ks†J ‚t g d¢g d¢gƒ} t ddgƒ}|  |¡}i }| t¡D ]}|||j< q¢|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ïJ ‚| |  ¡  | |ksûJ ‚t ddgddgddggƒ} t g d¢ƒ}|  |¡t ddgƒksJ ‚| |  ¡  | |ks)J ‚d S )Nr   r(   r.   rE   rG   é   z-43/26z71/26)rG   rh   é   )é   é   é   )ißÿÿÿiÛÿÿÿi×ÿÿÿ)éE   éK   éQ   é   )r   r   r   )r   r   r   Zw0_0r'   Úw1_0Zw2_0r   r   )r'   r&   r   )	r   Ú
pinv_solver!   rP   r   ÚpinvÚatomsr   Úname)r9   r]   ÚsolutionÚwÚsr   r   r   Útest_pinv_solveÿ   s4   "&
,(*þry   c                  C   sè  t g d¢g d¢gƒt ddgddggƒt ddgddgddggƒg} | D ]2}|jd	d
}|| }|| }t|| ƒ|ks<J ‚t|| ƒ|ksFJ ‚|j|ksMJ ‚|j|ksTJ ‚q"| D ]2}|jdd
}|| }|| }t|| ƒ|ksqJ ‚t|| ƒ|ks{J ‚|j|ks‚J ‚|j|ks‰J ‚qWt ddgddggƒ}t ddgƒ}| |¡}| t¡ ¡ }|jdks­J ‚|t d|gƒks·J ‚|| ¡  | |ksÃJ ‚t ddgƒ}| |¡}| t¡ ¡ }|jdksÜJ ‚|t d|gƒksæJ ‚|| ¡  | |ksòJ ‚d S )N©r   r   r   )r&   r&   r&   r   r   r&   r   r'   r*   ZRD)ÚmethodZEDrq   )	r   rs   r   ÚHrr   rt   r   Úpopru   )ZAsr9   ZA_pinvZAApZApAr]   rv   Zw1r   r   r   Útest_pinv_rank_deficient   sB   þ

r~   c            
   	      sB
  t g d¢g d¢g d¢gƒ‰ t g d¢ƒ‰ˆ  ˆ¡\} }| t dgdgdggƒks(J ‚|t ddg ƒks2J ‚td	ƒ‰ t g d
¢g d¢g d¢gƒ‰ˆ  ˆ¡\} }| ˆksPJ ‚|t ddg ƒksZJ ‚t g d¢g d¢g d¢gƒ‰ t g d¢ƒ‰ˆ jˆdd\} }}i }|  t¡D ]}|||j< q~| t |d d gd|d  d g|d ggƒks J ‚|t |d ggƒks¬J ‚|dgks³J ‚t g d¢g d¢g d¢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sJ ‚|t |d |d ggƒks&J ‚|dgks.J ‚t g d¢g d¢g d¢gƒ‰ t g d¢ƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qO| t d|d  d	|d   g|d g|d ggƒksuJ ‚|t |d g|d ggƒks†J ‚t g d¢g d¢g d¢gƒ‰ t g d¢ƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< q§| t |d g|d g|d ggƒksÅJ ‚|t |d g|d g|d ggƒksÚJ ‚t g d¢g d¢g d¢gƒ‰ t g d¢ƒ‰tt‡ ‡fdd„ƒ t g d¢g d¢g d ¢g d!¢gƒ‰ t g d"¢ƒ‰ˆ  ˆ¡\} }| t tddƒgdgtddƒggƒks)J ‚|t ddg ƒks4J ‚t g d¢g d¢g d ¢g d!¢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syJ ‚|t ddg ƒks„J ‚t g d¢g d¢g d ¢g d!¢gƒ‰ t g d#¢ƒ‰tt‡ ‡fd$d„ƒ t g d¢g d¢g d ¢g d!¢gƒ‰ t ddgddgddgddggƒ‰tt‡ ‡fd%d„ƒ t g d¢g d¢g d ¢g d!¢gƒ‰ t ddgddgddgddggƒ‰tt‡ ‡fd&d„ƒ t g d¢g d'¢g d(¢g d!¢gƒ‰ t g d#¢ƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< q| t d)|d  d* gdg|d ggƒks<J ‚|t |d ggƒksIJ ‚t g d¢g d'¢g d(¢g d!¢gƒ‰ t g d+¢ƒ‰tt‡ ‡fd,d„ƒ t g d
¢g d¢g d-¢gƒ‰ t g d.¢ƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qŠ| t d|d  d gd)|d  d gdg|d ggƒks²J ‚|t |d ggƒks¿J ‚t g d
¢g d¢g d/¢gƒ‰ t g d0¢ƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qà| t |d d|d   t	j
 gd|d  d	|d   tddƒ g|d g|d ggƒksJ ‚|t |d g|d ggƒks)J ‚td1ƒ\}}}}t g d2¢ddddd|ggƒ}	|	d d …d d…f ‰ |	d d …dd …f ‰ˆ  ˆ¡\} }|t d	d|||gƒkshJ ‚| t d*d|d|||gƒksxJ ‚t g d
¢g d¢g d/¢gƒ‰ t g d.¢ƒ‰tt‡ ‡fd3d„ƒ tddgddggƒ‰ tddgƒ‰ˆ  ˆ¡\} }| tddgƒks·J ‚|tddg ƒksÂJ ‚| jtksÊJ ‚|jtksÒJ ‚t g d4¢g d#¢gƒ‰ t ddgƒ‰ˆ  ˆ¡\} }i }|  t¡D ]}|||j< qð| t dg|d g|d gdggƒksJ ‚|t |d g|d ggƒksJ ‚d S )5N)r   r&   r'   )r   r(   r*   )r.   r,   r2   )r'   r*   rE   r0   r&   r   r   r'   )r   r&   r'   r   )r(   r*   r.   r,   )rE   r2   rF   rG   r   )r.   r,   rE   T)ÚfreevarÚtau0rM   r*   r,   rE   rG   Útau1)r&   r   r*   )r   r   r   Útau2)r   r   r   c                      r5   r6   ©r   r   r8   r   r   r;   ‹  r<   z)test_gauss_jordan_solve.<locals>.<lambda>)r   r(   r'   )r&   r   r*   )r   r.   rE   )r   r   r'   )r   r   r   r   )r   r   r   r   c                      r5   r6   rƒ   r   r8   r   r   r;   ž  r<   c                      r5   r6   rƒ   r   rf   r   r   r;   £  r<   c                      r5   r6   rƒ   r   rf   r   r   r;   ¨  r<   )r&   r2   r*   )r'   rj   rE   rK   r(   )r   r   r   r   c                      r5   r6   rƒ   r   r8   r   r   r;   ·  r<   )rE   r2   r   rG   rz   )r&   r   r*   r,   )r   r   r   z_tau0 _tau1 _tau2 tau1)r   r   r   r   r   r   c                      r5   r6   rƒ   r   r8   r   r   r;   Û  r<   )r   r   r   r   )r   r   r   rt   r   ru   r   r   r@   r   ZHalfr   r   Ú	__class__r   )
ÚsolÚparamsr   rw   rx   Zx0Zx1Zx2Z_x0r   r   )r9   r]   r:   r   Útest_gauss_jordan_solveI  s   4 $þ ÿ"** *  <      . (ÿ"þ" *&r‡   c                  C   s  t g d¢g d¢g d¢g d¢g d¢g d¢g d¢g d¢gƒ} t g d	¢ƒ}|  |¡\}}i }| t¡D ]}|||j< q0|t |d
 g|d g|d g|d g|d g|d ggƒksXJ ‚|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s¼J ‚ddlm}m} t g d¢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#J ‚| d d …d d…f | | d d …df  }|t dgdgdggƒksFJ ‚d S )N)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   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   )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   r   r   r   r   r   r   r   )r   r&   r   r   r   r   r   r&   r€   r   r‚   Útau3Útau4Ztau5r   r0   r   )r?   Úf)	r   r   r   r   r   r   r   r   r   ztau:5)r   r   rt   r   ru   Ú	sympy.abcr?   rŠ   Úlistr   r   )r9   r]   r…   r†   rw   rx   r?   rŠ   Zsol_1r€   r   r‚   rˆ   r‰   Zsol_2r   r   r   Ú4test_linsolve_underdetermined_AND_gauss_jordan_solveñ  sf   ùÿ$óýù(
"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                      r5   r6   ©Zsolver   r8   r   r   r;   .  r<   ztest_solve.<locals>.<lambda>r,   c                      r5   r6   rŽ   r   r8   r   r   r;   0  r<   )r   r   r@   r   r   r8   r   Ú
test_solve+  s
   r   N),Zsympyr   r   r   r   r   r   r   r	   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$   rD   rH   rJ   rN   rQ   r_   rd   rg   ry   r~   r‡   r   r   r   r   r   r   Ú<module>   s0   (  (%)	!) ):