o
    *Î®c¢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   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   úH/tmp/pip-target-vg8gfxp4/lib/python/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_327   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>W   ó   
 ztest_LUsolve.<locals>.<lambda>)r&   r   éüÿÿÿ)r0   r&   r   c                      r5   r6   r7   r   r8   r   r   r;   e   r<   r   c                 S   s   | dkrd| | d  S dS )Nr'   r   r   r   )ÚiÚjr   r   r   r;   g   s    c                      r5   r6   r7   r   r8   r   r   r;   i   r<   )r   r#   r   Ú
ValueErrorÚNotImplementedErrorÚzerosr   ©r   Úsolnr   r8   r   Útest_LUsolveD   sN   þ
þ
û
rE   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   ÚQRsolve)r9   r   r:   rD   r   r   r   Útest_QRsolvel   s0   þ

þ

rJ   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   rL   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   éýÿÿÿrF   rM   r(   ©éþÿÿÿr   r&   r0   za00, a01, a11, b0, b1)r   r!   r   r   r   r	   )	r9   r   r:   rD   Úa00Úa01Úa11Úb0Úb1r   r   r   Útest_cholesky_solveˆ   sH   þ
þ




rU   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   rF   rM   r(   rN   r&   r0   ))rF   r'   )r'   rF   )r   r   )éûÿÿÿrM   r=   )rM   iùÿÿÿr.   r,   r.   rO   c                      r5   r6   )ÚLDLsolver   r8   r   r   r;   Ó   r<   ztest_LDLsolve.<locals>.<lambda>)r   rW   r   r   r   rA   rC   r   r8   r   Útest_LDLsolve­   sF   þ
þ



rX   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 r[   r\   r   r   r   r   r;   Û   rK   c                   S   ó*   t ddgddggƒ t ddgddggƒ¡S ©Nr&   r   r   r\   r   r   r   r   r;   Ý   ó    ÿr   r   r   r,   r&   rF   )r   r   r
   r@   r   r   r   r]   ©r9   ÚBÚCr   r   r   Útest_lower_triangular_solveÖ   ó   ÿÿÿrf   c                  C   rY   )Nc                   S   rZ   r[   ©r   Úupper_triangular_solver   r   r   r   r;   ë   r^   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   r_   r[   rh   r   r   r   r   r;   í   rK   c                   S   r`   ra   rh   r   r   r   r   r;   ï   rb   r   r   r&   r   r'   r,   )r   r   r
   Ú	TypeErrorr   r   r   ri   rc   r   r   r   Útest_upper_triangular_solveè   rg   rk   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   )rl   r   ©r9   rd   r   r   r;     r<   )r   rj   r   r   r   rl   r   r   rm   r   Útest_diagonal_solveú   s   rn   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.   rF   rH   é   z-43/26z71/26)rH   ro   é   )é   é   é   )ißÿÿÿiÛÿÿÿi×ÿÿÿ)éE   éK   éQ   é   )r   r   r   )r   r   r   Úw0_0r'   Úw1_0Úw2_0r   r   )r'   r&   r   )	r   Ú
pinv_solver!   rW   r   ÚpinvÚatomsr   Úname)r9   rd   ÚsolutionÚwÚsr   r   r   Útest_pinv_solve  s4   "&
,(*þr‚   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*   ÚRD)ÚmethodÚEDry   )	r   r|   r	   ÚHr{   r}   r   Úpopr~   )ÚAsr9   ÚA_pinvÚAApÚApArd   r   Ú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*   rF   r0   r&   r   r   r'   )r   r&   r'   r   )r(   r*   r.   r,   )rF   r2   rG   rH   r   )r.   r,   rF   T)ÚfreevarÚtau0rO   r*   r,   rF   rH   Ú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.   rF   )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   rm   r   r   r;   §  r<   c                      r5   r6   r“   r   rm   r   r   r;   ¬  r<   )r&   r2   r*   )r'   rq   rF   rM   r(   )r   r   r   r   c                      r5   r6   r“   r   r8   r   r   r;   »  r<   )rF   r2   r   rH   rƒ   )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   r}   r   r~   r   r   r@   r   ÚHalfr   r   Ú	__class__r   )
ÚsolÚparamsr   r€   r   Úx0Úx1Úx2Ú_x0r   r   )r9   rd   r:   r   Útest_gauss_jordan_solveM  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Útau4Útau5r   r0   r   )r?   Úf)	r   r   r   r   r   r   r   r   r   ztau:5)r   r   r}   r   r~   Ú	sympy.abcr?   r    Úlistr   r   )r9   rd   r–   r—   r€   r   r?   r    Úsol_1r   r‘   r’   r   rž   Ú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   ©Úsolver   r8   r   r   r;   2  r<   ztest_solve.<locals>.<lambda>r,   c                      r5   r6   r¦   r   r8   r   r   r;   4  r<   )r   r   r@   r   r   r8   r   Ú
test_solve/  s
   r¨   N)1Úsympy.core.functionr   Úsympy.core.numbersr   r   Úsympy.core.singletonr   Úsympy.core.symbolr   r   Úsympy.core.sympifyr   Úsympy.simplify.simplifyr	   Úsympy.matrices.matricesr
   r   Úsympy.matricesr   r   r   r   r   r   Úsympy.testing.pytestr   Úsympy.matrices.commonr   Úsympy.solvers.solvesetr   r¡   r   r   r    r"   r$   rE   rJ   rL   rU   rX   rf   rk   rn   r‚   rŽ   rœ   r¥   r¨   r   r   r   r   Ú<module>   s:     (%)	!) ):