o
    Ņ@ögćT  ć                   @   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/ Z4e j5 6d0d1d2g”e j5 6d3eg d4¢g d5¢g d6¢ged7d8g d9¢feg d4¢g d5¢g d6¢ged8d:gd7d;gd<d=ggfed:d:e
d>ed:d8e
d?fg”d@dA Z7e j5 6dBd1efeefg”dCdD Z8dEdF Z9dS )Gé    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    śh/var/www/html/development/chatbot/venv/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>)Ś
iszerofunc)r   r   ŚLUsolve)r   ŚbŚis_zero_funcŚ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%   é   é   ©r1   é   r%   ©é   r1   r4   r1   r   ©r1   é   r2   ©r   é’’’’r%   ©r2   é
   r8   ©r6   r1   r   ©r:   r%   r2   r%   r   )r1   r   r   )r1   r   r%   c                      ó
      ”S ©N©r*   r    ©ŚAr+   r    r!   r(   g   ó   
 ztest_LUsolve.<locals>.<lambda>)r%   r   éü’’’)r:   r%   r   c                      r?   r@   rA   r    rB   r    r!   r(   u   rD   r   c                 S   s   | dkrd| | d  S dS )Nr1   r   r   r    )ŚiŚjr    r    r!   r(   w   s    c                      r?   r@   rA   r    rB   r    r!   r(   y   rD   )r   r*   r   Ś
ValueErrorŚNotImplementedErrorŚzerosr   ©r   Śsolnr    rB   r!   Śtest_LUsolveT   sN   ž
ž
ū
rM   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 )Nr0   r3   r5   r1   r   r7   r%   r   r2   r4   r9   r;   r=   r>   r8   r6   é	   r<   é   é   )r   ŚQRsolve)rC   r   r+   rL   r    r    r!   Śtest_QRsolve|   s0   ž

ž

rR   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%   r1   r   )r   r*   r    r    r    r!   r(      ó     ztest_errors.<locals>.<lambda>)r   r
   r    r    r    r!   Śtest_errors   s   rT   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 )Nr0   r3   r5   r1   r   r7   r9   r;   r=   r>   ))r   r2   )r2   r   )r   éż’’’rN   rU   r2   ©éž’’’r   r%   r:   za00, a01, a11, b0, b1)r   r#   r   r   r   r	   )	rC   r   r+   rL   Śa00Śa01Śa11Śb0Śb1r    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 )Nr0   r3   r5   r1   r   r7   r9   r;   r=   r>   rN   rU   r2   rV   r%   r:   ))rN   r1   )r1   rN   )r   r   )éū’’’rU   rE   )rU   ił’’’r8   r6   r8   rW   c                      r?   r@   )ŚLDLsolver    rB   r    r!   r(   ć   rD   ztest_LDLsolve.<locals>.<lambda>)r   r_   r   r   r   rI   rK   r    rB   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 rc   rd   r    r    r    r!   r(   ė   rS   c                   S   ó*   t ddgddgg t ddgddgg”S ©Nr%   r   r   rd   r    r    r    r!   r(   ķ   ó    ’r   r   r   r6   r%   rN   )r   r   r
   rH   r   r   r   re   ©rC   ŚBŚCr    r    r!   Śtest_lower_triangular_solveę   ó   ’’’rn   c                  C   ra   )Nc                   S   rb   rc   ©r   Śupper_triangular_solver    r    r    r!   r(   ū   rf   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   rg   rc   rp   r    r    r    r!   r(   ż   rS   c                   S   rh   ri   rp   r    r    r    r!   r(   ’   rj   r   r   r%   r   r1   r6   )r   r   r
   Ś	TypeErrorr   r   r   rq   rk   r    r    r!   Śtest_upper_triangular_solveų   ro   rs   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@   )rt   r    ©rC   rl   r    r!   r(     rD   )r   rr   r   r   r   rt   r    r    ru   r!   Śtest_diagonal_solve
  s   rv   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   r2   r8   rN   rP   é   z-43/26z71/26)rP   rw   é   )é   é   é   )iß’’’iŪ’’’i×’’’)éE   éK   éQ   é   )r   r   r   )r   r   r   Św0_0r1   Św1_0Św2_0r   r   )r1   r%   r   )	r   Ś
pinv_solver#   r_   r   ŚpinvŚatomsr   Śname)rC   rl   Ś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   r1   r4   ŚRD)ŚmethodŚEDr   )	r   r   r	   ŚHr   r   r   Śpopr   )ŚAsrC   ŚA_pinvŚAApŚApArl   r   Św1r    r    r!   Śtest_pinv_rank_deficient4  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%   r1   )r   r2   r4   )r8   r6   r<   )r1   r4   rN   r:   r%   r   r   r1   )r   r%   r1   r   )r2   r4   r8   r6   )rN   r<   rO   rP   r   )r8   r6   rN   T)ŚfreevarŚtau0rW   r4   r6   rN   rP   Śtau1)r%   r   r4   )r   r   r   Śtau2)r   r   r   c                      r?   r@   ©r   r    rB   r    r!   r(     rD   z)test_gauss_jordan_solve.<locals>.<lambda>)r   r2   r1   )r%   r   r4   )r   r8   rN   )r   r   r1   )r   r   r   r   )r   r   r   r   c                      r?   r@   r   r    rB   r    r!   r(   ²  rD   c                      r?   r@   r   r    ru   r    r!   r(   ·  rD   c                      r?   r@   r   r    ru   r    r!   r(   ¼  rD   )r%   r<   r4   )r1   ry   rN   rU   r2   )r   r   r   r   c                      r?   r@   r   r    rB   r    r!   r(   Ė  rD   )rN   r<   r   rP   r   )r%   r   r4   r6   )r   r   r   z_tau0 _tau1 _tau2 tau1)r   r   r   r   r   r   c                      r?   r@   r   r    rB   r    r!   r(   ļ  rD   )r   r   r   r   )r   r   r   r   r   r   r   r   rH   r   ŚHalfr   r   Ś	__class__r   )
ŚsolŚparamsr   r   r   Śx0Śx1Śx2Ś_x0r   r    )rC   rl   r+   r!   Śtest_gauss_jordan_solve]  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   r:   r   )rG   Śf)	r   r   r   r   r   r   r   r   r   ztau:5)r   r   r   r   r   Ś	sympy.abcrG   rØ   Ślistr   r   )rC   rl   r   r   r   r   rG   rØ   Śsol_1r   r   r   r„   r¦   Śsol_2r    r    r!   Ś4test_linsolve_underdetermined_AND_gauss_jordan_solve  sf   ł’$óżł(
"r­   Ś
det_methodŚbirdŚlaplacezM, rhsr0   r3   r5   r1   r   r7   r%   r   r2   r4   za:4zb:2c                 C   s4   t |j|| d| |” t |j|j”ksJ d S ©N)r®   )r	   Ścramer_solver*   r   rJ   ŚrowsŚcols)r®   r   Śrhsr    r    r!   Śtest_cramer_solve?  s   ’r¶   zdet_method, errorc                    s:   t g d¢g d¢g t ddgt| fdd d S )Nr9   r;   rW   ry   c                      s    j dS r±   )r²   r    ©rC   r+   r®   r    r!   r(   Q  s    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   r1   c                      r?   r@   ©Śsolver    rB   r    r!   r(   W  rD   ztest_solve.<locals>.<lambda>r6   c                      r?   r@   rŗ   r    rB   r    r!   r(   Y  rD   )r   r   rH   r    r    rB   r!   Ś
test_solveT  s
   r¼   ):ŚpytestŚsympy.core.functionr   Śsympy.core.numbersr   r   Śsympy.core.singletonr   Śsympy.core.symbolr   r   Śsympy.core.sympifyr   Śsympy.simplify.simplifyr	   Śsympy.matrices.exceptionsr
   r   Śsympy.matricesr   r   r   r   r   r   Śsympy.matrices.determinantr   Śsympy.testing.pytestr   r   Śsympy.polys.matrices.exceptionsr   Śsympy.solvers.solvesetr   r©   r   r   r"   r$   r.   r/   rM   rR   rT   r]   r`   rn   rs   rv   r   r   r¤   r­   ŚmarkŚparametrizer¶   r¹   r¼   r    r    r    r!   Ś<module>   s\     (%)	!) ):(’ü’
