o
    3Ih'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 j67d2d3d4ge j67d5e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 j67dDd3e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    a/home/air/sanwanet/gpt-api/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sJ 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 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)commutativeb:2)r   r   )r   r   r:   )r   r   r*   expand)a0a1a2a3b0b1rC   checkr    r    r!   test_LUsolve_noncommutative|   s   D2rY   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sJ 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   



r^   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   r`   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sJ t dt dfdt dff} t ddt  df}| | }| |}t||ksJ td\}}}}}t ||f||ff} t ||f}| |}t| | |ksJ d S )Nr0   r3   r5   r1   r   r7   r9   r;   r=   r>   ))r   r2   )r2   r   )r   rZ   ra   r2   r   r%   r:   za00, a01, a11, b0, b1)r   r#   r   r   r   r	   )	rC   r   r+   rL   a00a01a11rV   rW   r    r    r!   test_cholesky_solve   sH   





rg   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sJ t d t d}  |   }t|| ksJ 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>   rZ   ra   r2   rb   r%   r:   ))rZ   r1   )r1   rZ   )r   r   )ra   rE   )ra   ir8   r6   r8   rc   c                      r?   r@   )LDLsolver    rB   r    r!   r(      rD   ztest_LDLsolve.<locals>.<lambda>)r   ri   r   r   r   rI   rK   r    rB   r!   test_LDLsolve   sF   




rj   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 rm   rn   r    r    r    r!   r(      r_   c                   S   *   t ddgddggt ddgddggS Nr%   r   r   rn   r    r    r    r!   r(          r   r   r   r6   r%   rZ   )r   r   r
   rH   r   r   r   ro   rC   BCr    r    r!   test_lower_triangular_solve      rx   c                  C   rk   )Nc                   S   rl   rm   r   upper_triangular_solver    r    r    r!   r(   	  rp   z-test_upper_triangular_solve.<locals>.<lambda>c                   S   rq   rm   rz   r    r    r    r!   r(     r_   c                   S   rr   rs   rz   r    r    r    r!   r(     rt   r   r   r%   r   r1   r6   )r   r   r
   	TypeErrorr   r   r   r{   ru   r    r    r!   test_upper_triangular_solve  ry   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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@   )r~   r    rC   rv   r    r!   r(     rD   )r   r|   r   r   r   r~   r    r    r   r!   test_diagonal_solve  s   r   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sJ 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sJ | |   | |ksJ 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   rZ   r\      z-43/26z71/26)r\   r      )         )iii)E   K   Q      )r   r   r   )r   r   r   w0_0r1   w1_0w2_0r   r   )r1   r%   r   )	r   
pinv_solver#   ri   r   pinvatomsr   name)rC   rv   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sJ |j|ksJ qWt ddgddgg}t ddg}||}|t }|jdksJ |t d|gksJ ||  | |ksJ t ddg}||}|t }|jdksJ |t d|gksJ ||  | |ksJ 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ApArv   r   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sJ |t |d ggksJ |dgksJ 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sJ 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sJ |t |d g|d g|d ggksJ 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sJ 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sJ |t |d ggksJ 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sJ |tddg ksJ | jtksJ |jtksJ 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   rZ   r:   r%   r   r   r1   )r   r%   r1   r   )r2   r4   r8   r6   )rZ   r<   r[   r\   r   )r8   r6   rZ   T)freevartau0rc   r4   r6   rZ   r\   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   rZ   )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    r   r    r!   r(     rD   c                      r?   r@   r   r    r   r    r!   r(     rD   )r%   r<   r4   )r1   r   rZ   ra   r2   )r   r   r   r   c                      r?   r@   r   r    rB   r    r!   r(     rD   )rZ   r<   r   r\   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   rv   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sJ 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   rv   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   rN   rP   c                 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_solveM  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;   rc   r   c                      s    j dS r   )r   r    rC   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   r1   c                      r?   r@   solver    rB   r    r!   r(   e  rD   ztest_solve.<locals>.<lambda>r6   c                      r?   r@   r   r    rB   r    r!   r(   g  rD   )r   r   rH   r    r    rB   r!   
test_solveb  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   rY   r^   r`   rg   rj   rx   r}   r   r   r   r   r   markparametrizer   r   r   r    r    r    r!   <module>   s^     (%)	!) ):(
