o
    GZŽh'W  ã                   @   s*  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/„ Z4d0d1„ Z5e j6 7d2d3d4g¡e j6 7d5eg d6¢g d7¢g d8¢gƒed9d:g d;¢ƒfeg d6¢g d7¢g d8¢gƒed:d<gd9d=gd>d?ggƒfed<d<e
d@ƒƒed<d:e
dAƒƒfg¡dBdC„ ƒƒZ8e j6 7dDd3efeefg¡dEdF„ ƒZ9dGdH„ Z:dS )Ié    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   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    úP/var/www/auris/lib/python3.10/site-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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sPJ ‚d S )Nr   é   r   c                 S   s   |   ¡ rdS dS )NFT)Ú_random)Úer    r    r!   Ú<lambda>@   s    z)test_LUsolve_iszerofunc.<locals>.<lambda>)Z
iszerofunc)r   r   ÚLUsolve)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ƒ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   r)   r   r   r    r    r!   Ú%test_issue_17247_expression_blowup_32G   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.   r1   r.   r   ©r.   é   r/   ©r   éÿÿÿÿr%   ©r/   é
   r5   ©r3   r.   r   ©r7   r%   r/   r%   r   )r.   r   r   )r.   r   r%   c                      ó
   ˆ   ˆ¡S ©N©r)   r    ©ÚAr*   r    r!   r(   g   ó   
 ztest_LUsolve.<locals>.<lambda>)r%   r   éüÿÿÿ)r7   r%   r   c                      r<   r=   r>   r    r?   r    r!   r(   u   rA   r   c                 S   s   | dkrd| | d  S dS )Nr.   r   r   r    )ÚiÚjr    r    r!   r(   w   s    c                      r<   r=   r>   r    r?   r    r!   r(   y   rA   )r   r)   r   Ú
ValueErrorÚNotImplementedErrorÚzerosr   ©r   Úsolnr    r?   r!   Útest_LUsolveT   sN   þ
þ
û
rJ   c                  C   sì   t ddd\} }}}t ddd\}}t| |g||ggƒ}|| t||gƒ¡ }|d  ¡ |ks1J ‚|d || d  | | | d  | | d  | | d  | |  |  || | d  | | d  | | d  | |   kstJ ‚d S )Núa:4F)Zcommutativeúb:2)r   r   )r   r   r7   )r   r   r)   Úexpand)Za0Za1Za2Úa3Úb0Úb1r@   Úcheckr    r    r!   Útest_LUsolve_noncommutative|   s   D2ÿÿrR   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-   r0   r2   r.   r   r4   r%   r   r/   r1   r6   r8   r:   r;   r5   r3   é	   r9   é   é   )r   ZQRsolve)r@   r   r*   rI   r    r    r!   Útest_QRsolveŠ   s0   þ

þ

rV   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   rX   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-   r0   r2   r.   r   r4   r6   r8   r:   r;   ))r   r/   )r/   r   )r   éýÿÿÿrS   rY   r/   ©éþÿÿÿr   r%   r7   za00, a01, a11, b0, b1)r   r#   r   r   r   r	   )	r@   r   r*   rI   Za00Za01Za11rO   rP   r    r    r!   Útest_cholesky_solve¦   sH   þ
þ




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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-   r0   r2   r.   r   r4   r6   r8   r:   r;   rS   rY   r/   rZ   r%   r7   ))rS   r.   )r.   rS   )r   r   )éûÿÿÿrY   rB   )rY   iùÿÿÿr5   r3   r5   r[   c                      r<   r=   )ÚLDLsolver    r?   r    r!   r(   ñ   rA   ztest_LDLsolve.<locals>.<lambda>)r   r^   r   r   r   rF   rH   r    r?   r!   Útest_LDLsolveË   sF   þ
þ



r_   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 rb   rc   r    r    r    r!   r(   ù   rW   c                   S   ó*   t ddgddggƒ t ddgddggƒ¡S ©Nr%   r   r   rc   r    r    r    r!   r(   û   ó    ÿr   r   r   r3   r%   rS   )r   r   r
   rE   r   r   r   rd   ©r@   ÚBÚCr    r    r!   Útest_lower_triangular_solveô   ó   ÿÿÿrm   c                  C   r`   )Nc                   S   ra   rb   ©r   Úupper_triangular_solver    r    r    r!   r(   	  re   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   rf   rb   ro   r    r    r    r!   r(     rW   c                   S   rg   rh   ro   r    r    r    r!   r(     ri   r   r   r%   r   r.   r3   )r   r   r
   Ú	TypeErrorr   r   r   rp   rj   r    r    r!   Útest_upper_triangular_solve  rn   rr   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                      r<   r=   )rs   r    ©r@   rk   r    r!   r(     rA   )r   rq   r   r   r   rs   r    r    rt   r!   Útest_diagonal_solve  s   ru   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/   r5   rS   rU   é   z-43/26z71/26)rU   rv   é   )é   é   é   )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#   r^   r   ÚpinvÚatomsr   Úname)r@   rk   Ú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.   r1   ZRD)ÚmethodZEDr   )	r   r   r	   ÚHr€   r‚   r   Úpoprƒ   )ZAsr@   ZA_pinvZAApZApArk   r„   Zw1r    r    r!   Útest_pinv_rank_deficientB  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/   r1   )r5   r3   r9   )r.   r1   rS   r7   r%   r   r   r.   )r   r%   r.   r   )r/   r1   r5   r3   )rS   r9   rT   rU   r   )r5   r3   rS   T)ÚfreevarÚtau0r[   r1   r3   rS   rU   Útau1)r%   r   r1   )r   r   r   Útau2)r   r   r   c                      r<   r=   ©r   r    r?   r    r!   r(   ­  rA   z)test_gauss_jordan_solve.<locals>.<lambda>)r   r/   r.   )r%   r   r1   )r   r5   rS   )r   r   r.   )r   r   r   r   )r   r   r   r   c                      r<   r=   r‘   r    r?   r    r!   r(   À  rA   c                      r<   r=   r‘   r    rt   r    r!   r(   Å  rA   c                      r<   r=   r‘   r    rt   r    r!   r(   Ê  rA   )r%   r9   r1   )r.   rx   rS   rY   r/   )r   r   r   r   c                      r<   r=   r‘   r    r?   r    r!   r(   Ù  rA   )rS   r9   r   rU   rˆ   )r%   r   r1   r3   )r   r   r   z_tau0 _tau1 _tau2 tau1)r   r   r   r   r   r   c                      r<   r=   r‘   r    r?   r    r!   r(   ý  rA   )r   r   r   r   )r   r   r   r‚   r   rƒ   r   r   rE   r   ZHalfr   r   Ú	__class__r   )
ÚsolÚparamsr   r…   r†   Zx0Úx1Zx2Z_x0r   r    )r@   rk   r*   r!   Útest_gauss_jordan_solvek  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   r7   r   )rD   Úf)	r   r   r   r   r   r   r   r   r   ztau:5)r   r   r‚   r   rƒ   Ú	sympy.abcrD   r™   Úlistr   r   )r@   rk   r“   r”   r…   r†   rD   r™   Zsol_1rŽ   r   r   r—   r˜   Zsol_2r    r    r!   Ú4test_linsolve_underdetermined_AND_gauss_jordan_solve  sf   ùÿ$óýù(
"rœ   Ú
det_methodÚbirdZlaplacezM, rhsr-   r0   r2   r.   r   r4   r%   r   r/   r1   rK   rL   c                 C   s4   t |j|| d| |¡ ƒt |j|j¡ksJ ‚d S ©N)r   )r	   Úcramer_solver)   r   rG   ÚrowsÚcols)r   r   Úrhsr    r    r!   Útest_cramer_solveM  s   ÿr¤   zdet_method, errorc                    s:   t g d¢g d¢gƒ‰ t ddgƒ‰t|‡ ‡‡fdd„ƒ d S )Nr6   r8   r[   rx   c                      s   ˆ j ˆˆdS rŸ   )r    r    ©r@   r*   r   r    r!   r(   _  s    z*test_cramer_solve_errors.<locals>.<lambda>)r   r   )r   Úerrorr    r¥   r!   Útest_cramer_solve_errorsY  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                      r<   r=   ©Zsolver    r?   r    r!   r(   e  rA   ztest_solve.<locals>.<lambda>r3   c                      r<   r=   r¨   r    r?   r    r!   r(   g  rA   )r   r   rE   r    r    r?   r!   Ú
test_solveb  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,   rJ   rR   rV   rX   r\   r_   rm   rr   ru   r‡   rŒ   r–   rœ   ÚmarkZparametrizer¤   r§   r©   r    r    r    r!   Ú<module>   s^     (%)	!) ):(ÿüÿ
