a
    {d                     @   s  d dl mZ d dlmZ d dl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 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m Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZLmMZM d dlNmOZO eddd\ZPZQZRZSZTZUZVZWZXZYZZZ[Z\Z]Z^Z_eddd\Z`ZaZbZcZdZeZfeddd\ZgZhZiedddZjdd Zkdd Zldd Zmdd Zndd  Zod!d" Zpd#d$ Zqd%d& Zrd'd( Zsd)d* Ztd+d, Zud-d. Zvd/d0 ZweKd1d2 Zxd3d4 Zyd5d6 Zzd7d8 Z{d9d: Z|d;d< Z}d=d> Z~d?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj ZeMdkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx ZeMdydz Zd{d| Zd}d~ Zdd Zdd ZdS )    )Add)Mul)Rationaloopi)Eq)S)symbols)Matrix)	factorint)powsimp)_mexpand)default_sort_keyordered)sin)diophantine),diop_DN
diop_solvediop_ternary_quadratic_normaldiop_general_pythagoreandiop_ternary_quadraticdiop_lineardiop_quadraticdiop_general_sum_of_squaresdiop_general_sum_of_even_powersdescent
diop_bf_DN	divisible
equivalentfind_DNldescentlengthreconstruct	partitionpower_representationprime_as_sum_of_two_squaressquare_factorsum_of_four_squaressum_of_three_squarestransformation_to_DNtransformation_to_normalclassify_diopbase_solution_linear
cornacchia
sqf_normalgaussian_reduceholzercheck_paramparametrize_ternary_quadraticsum_of_powerssum_of_squares_diop_ternary_quadratic_normal_nint_or_floor_odd_even_remove_gcd_can_do_sum_of_squaresDiophantineSolutionSetGeneralPythagoreanBinaryQuadratic)slowraisesXFAIL)signed_permutationsz.a, b, c, d, p, q, x, y, z, w, t, u, v, X, Y, ZT)integerzt_:7zm1:4n1c                 C   s   t tt | S N)r   r   eq rG   y/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pydiop_simplify'   s    rI   c                   C   s    t tdd  t tdd  d S )Nc                   S   s   t ttS rD   )r   r   xrG   rG   rG   rH   <lambda>,       z#test_input_format.<locals>.<lambda>c                   S   s   t tt d S N   )r   rJ   r   rG   rG   rG   rH   rK   -   rL   )r?   	TypeErrorrG   rG   rG   rH   test_input_format+   s    rP   c                   C   s,   t dt ksJ t tdt ks(J d S rM   )r   setr   rG   rG   rG   rH   test_nosols0   s    rR   c                   C   sH   t td td d  ddhks$J t td td  ddhksDJ d S )N      rS   rT   r   rJ   rG   rG   rG   rH   test_univariate6   s    $rX   c                
   C   s  t tdd  t tdd  t tdd  t tdd  tdtd  dt  d	 tgd
dtdtd didfkstJ ttt t tttgtt d
td
idfksJ ttt t t td  ttttgtt d
td
td d
td
idfksJ ttt tt  td  d
 tttgtt d
tt d
td d
d
d
idfks@J ttt t t d	 ttttgtt d
td
d
d	td
idfksJ ttt tt  ttttgtt d
tt d
idfksJ tttd  d
 ttgttd  d
d
d
idfksJ ttd td  td  d tttgd
dtd d
td d
td d
idfksJJ ttd td  td  tttgtd d
td d
td d
idfksJ d S )Nc                   S   s   t td d d S )NrT   rN   rS   )r+   rJ   rG   rG   rG   rH   rK   <   rL   z$test_classify_diop.<locals>.<lambda>c                   S   s   t dS NrS   r+   rG   rG   rG   rH   rK   =   rL   c                   S   s   t tt t t d S rY   )r+   wrJ   yzrG   rG   rG   rH   rK   >   rL   c                   S   s    t td td  td  d S )NrN      Z   )r+   rJ   r\   r]   rG   rG   rG   rH   rK   ?   rL      rT      *   rS   iZ
univariateZinhomogeneous_ternary_quadraticZinhomogeneous_general_quadraticZhomogeneous_general_quadraticZ
cubic_thuer^   b   iZgeneral_sum_of_even_powersZ$homogeneous_ternary_quadratic_normal)	r?   rO   
ValueErrorNotImplementedErrorr+   rJ   r\   r]   r[   rG   rG   rG   rH   test_classify_diop;   s>    

&
("($rf   c                   C   s
  t tdksJ t dt dks$J t dt dks8J t td dksLJ t dt d dksdJ t dt d dks|J t tt tt fksJ t tt d	 tt fksJ t tt d	 tt fksJ t d	t t d
 dksJ t dt dt  d
 dt d
 dt d
 fks$J t dt dt  d
 dt d
 dt d
 fksZJ t dt dt  d
 dt d
 dt d
 fksJ t dt d
t  d
t dt fksJ t dt dt  dt t fksJ t dt dt  d dt d dt d fksJ t dt dt  d dks:J t d	t dt  dt  d
 dt d
 dt d
 fksxJ t dt dt  dt  d
 tdt dt  d
 dt dt  d
 fksJ t dt dt  dt  d
 d dksJ t dt dt  dt  d
 dksJ t d
t dt  dt  d tdt dt  d dt dt  d fksnJ t dt dt  dt  d dt d tdt  tfksJ t dt dt  dt  t tttt dt dt  dt  fksJ tt	dd  d S )N)r   rS   rN   )rT   rD   r^   )r      )rh         )NN   )r   ri   ri   NNN      	         c                   S   s   t td S NrT   rW   rG   rG   rG   rH   rK   o   rL   ztest_linear.<locals>.<lambda>)
r   rJ   r\   t_0r]   t_1r[   t_2r?   rO   rG   rG   rG   rH   test_linearT   s2    666*(6">P,*P@Jr{   c                   C   sb  t dt t dt  dt  d ddhks0J t dt t dt  dt  d t ks^J t d	t t dt  d
t  d dhksJ t dt t dt  dt  d dhksJ t dt t dt  dt  d h dksJ t dt t dt  dt  d t ksJ t tt t t d dtftdfhksHJ tdt t s^J d S )NrN   "   rs   rS   )i{)ri   irm   rT   r^   6   )   r      )rg   ri   8   rk   >   )i   rh   )irk   rS   )i)r   @   )i)i_rp   )iirt   rg   0   )r   rJ   r\   rQ   tr   rG   rG   rG   rH   %test_quadratic_simple_hyperbolic_caser   s    "...00.r   c                   C   s6  t dtd  dt t  dtd   dt  dt  d dhksFJ t d	td  d
td   dt  dt  d t ksJ t td td  dt  dt  d dhksJ t dtd  dt t  dtd   dt  dt  d dhksJ t dtd  dt t  dtd   d h dks2J d S )Nrb   rT   rn   ra         i3  )r}   rg   r^   rN   ri      rs   rg   rg   rt   r`   V  )rm   
   r|      r   rS   rS   )rg   rT   rS   rh   )r   rJ   r\   rQ   rG   rG   rG   rH   test_quadratic_elliptical_case   s    F:2F*r   c                   C   s  t dtd  dt t  dtd   dt  dt  d s@J t dtd  dt t  dtd   dt  d	t  d sJ t dtd  dt t  dtd   d
t  dt  d sJ t dtd  d
t t  td  dt  d sJ t td dt t  td  dt  dt  d s.J t td dt t  td  dt  dt  d shJ t td dt  d sJ d S )Nrn   rT      rr   ri   rk      rm   rs   r^   rN   rS   )   (   check_solutionsrJ   r\   rG   rG   rG   rH   test_quadratic_parabolic_case   s    @@@4::r   c                   C   s   t dt t sJ t dtd  dt t  td  d s@J t dtd  dt t  dtd   dt  dt  d sJ t d	td  d
t t  dtd   dt  dt  d	 sJ t dtd  dt t  dtd   dt  d
t  d sJ t dtd  dt t  dt  dt  d s8J t dt t dtd   dt  dt  d snJ t td td  dt  dt  sJ t td dtd   dt  dt  sJ t dtd  dtd   dt  d	t  d sJ d S )Nr   r^   rT   ri   rh   rN   r      rs      rn   r       r   r   rt   rm   r   rG   rG   rG   rH   test_quadratic_perfect_square   s    ,@@B66*.r   c                   C   s   t td dt  dtd   s$J t dtd  dtd   dt  dt  sTJ t td tt  td  dt  s|J t td dtd   dt  dt  sJ ttd td  dt  dt  d  dhksJ d S )NrT   ri   rN   rt   rm   r   )r   rJ   r\   r=   solverG   rG   rG   rH   !test_quadratic_non_perfect_square   s
    $0(,r   c                  C   s^   ddt  dt  d   tdt d   } t tf}t| D ] }t| tt||r8J q8d S )NirT   rN   rS   rJ   r\   r   rI   ZxreplacedictziprF   vZsolrG   rG   rH   test_issue_9106   s    (r   c                  C   sJ   t d t  td  } t tf}t| D ] }t| tt||r$J q$d S rw   r   r   rG   rG   rH   test_issue_18138   s    r   c                   C   s   t dtd  dt t  dtd   dt  dt  d s@J t dtd  dt t  dtd   d	t  d sxJ t d
t dtd   t dt t  dtd   sJ t ddt  dtd   dt  tt  dtd   sJ d S )Nrn   rT   r   r   r   r   rp   rk   ri   r   r^   rN   rS   r   rG   rG   rG   rH   test_quadratic_non_perfect_slow   s    @88r   c                   C   s  t dddgksJ t ddg ks&J t dddgks:J t d	d
dgksNJ t ddg ks`J t ddg ksrJ t dddtfgksJ t dddt tfgksJ t ddg ksJ t dddgksJ t dddgksJ t dddgksJ t ddddgksJ t ddg dks$J t dddgks:J t dddgksPJ t dddgksfJ t d dd!gks|J t d"dd#gksJ t d
dd$gksJ t d%dd&gksJ t ddd'gksJ t d"dg ksJ t d(dd)gksJ t d*dd+gksJ t d,dd-gks*J t d.dg ks>J t dd/g d0ksVJ td1dd2d3dd/d4ksrJ t dd5g d6ksJ tt d7d8h d9ksJ t dd:d;gksJ t d<d=g ksJ t ddd>d?gksJ t d@dAdBgksJ t d@dCg ksJ t dDdCdEgks(J tdFddGddDdCs@J t dDdHdIdJgksXJ t ddtdtfgkstJ t ddtg ksJ d S )KNrN   r   r   r   rj   ir   rT   rS   r~   r   r   r   ri   rt   r   r      )rr   r^   iL)rs   rm   rk   rg   rS   rT      ))rs   ri   )ri   rs   )r   r   )r   r   rS   )i  r   i  )i  ix  i  )l   INd? l   j\i  )i  i"  i  )l   WRlQ]>I2l   AAJtWjU^	 )!   rn      )   '   )rr   ri   r   )r   ri   i"  )r   rS   	S  l   !K2l   uGoX r   r   )rN   rS   )  m   $   r   rp   r   r   Tr   ))   =   r   r   )      rs   rN      rs   >   )l   ;>x< i|r   rS   )ipi"'M)l   )fMOl   ?_)iX i  )i)  iS  r   )i  i     rr   )r   rS   )rm   rS      rT   r   rh   {   )r   rS   r   r}   i)rS   )r   rS   )r   r   r   rQ   rG   rG   rG   rH   test_DN   sR    r   c                   C   s  t ddg dksJ t ddg dks,J t ddg ks>J t dd	d
gksRJ t ddddgkshJ t dddgks|J t dddgksJ t ddtdgksJ t ddtdtfgksJ t ddtdt tfdt tfgksJ t ddtdgksJ t d	dtg ksJ d S )Nr   r   )r   )rp   rS   r   r   )r   )r   rN   r   )ir   r   rh     rS   )l   uL" l   EY   rq   rt   rS   r   r   rg   r   iT  )i  r   r   r   r^   rT   rN   )r   r   rG   rG   rG   rH   test_bf_pell  s    (r   c                   C   s|   t ddddksJ t ddddks(J t ddd	dks<J t ddd
dksPJ t dd
ddksdJ t ddddksxJ d S )NrT   rS   r   rh   r^   ri   rN   rj   r   r   rm   rk   r   r   )r!   rG   rG   rG   rH   test_length#  s    r   c                 C   s  t | \}}|tttg | d }|tttg | d }t| tttf||f}t	dd |j
D }tt ttfD ]}|| v rz dS qztd td dfD ]}|| vrd||< q|td  dkrt|td  |td  ot|d |td  S dS )a9  
    Test whether X*Y, X, or Y terms are present in the equation
    after transforming the equation using the transformation returned
    by transformation_to_pell(). If they are not present we are good.
    Moreover, coefficient of X**2 should be a divisor of coefficient of
    Y**2 and the constant term.
    r   rS   c                 S   s   g | ]}t |jttg qS rG   )reversedas_independentXY.0r   rG   rG   rH   
<listcomp>9  rL   z-is_pell_transformation_ok.<locals>.<listcomp>FrT   T)r)   r
   r   r   rI   subsr   rJ   r\   r   argskeysr   )rF   ABur   
simplifiedcoefftermrG   rG   rH   is_pell_transformation_ok,  s     
r   c                   C   s  t dtd  dt t  td  dt  dt  d s<J t dtd  dt t  dtd   dt  dt  d	 s|J t td td  d
 sJ t td  dtd   d	 sJ t dtd  dt t  dtd   dt  dt  d sJ t dtd  dt t  td  dt  dt  d s8J t td dt t  dtd   dt  d	t  d svJ t dtd  dt t  dtd   d	t  dt  d sJ d S )Nr~   rT   rk   r`   r   r   ri   r   r   r   r   -   r      r   rN   r      r   ra   rt   r   )r   rJ   r\   rG   rG   rG   rH   test_transformation_to_pellJ  s    <@"@>>r   c                   C   sL  t td dt  td  dks$J t td dtd   d dksHJ t td dt t  dtd   d dksxJ t dtd  d	t t  td  d
 dksJ t dtd  dt t  td  d dksJ t dtd  dt t  td  dksJ t dtd  dt t  td  dt  dt  d dksHJ d S )NrT   r   rN   ri   )rN   ri   r^   rk   )ri   rk   rn   rt   )ru   r   rs   )rn   T   rp   )rS   r   r~   r`   )e   i)r   rJ   r\   rG   rG   rG   rH   test_find_DNU  s    $$000.r   c                  C   s`   g d} | D ]<\}}t ||\}}}||d  ||d   |d ksJ qt ddd u s\J d S )N)r   r   rN   r}   r   i)r^   rl   )rl   r^   [   rp   r   rS   rg   )r^   r   r   r   i) rS   r   irT   rg   )r    r   abr[   rJ   r\   rG   rG   rH   test_ldescent_  s
    &r   c                   C   s  t dtd  dtd   td  s(J t dtd  dtd   td  sPJ t dtd  dtd   td  sxJ t dtd  d	td   dtd   sJ t td dtd   td  sJ t dtd  dtd   td  sJ t td td  td  sJ t d
td  td  dtd   s<J t d	td  td  dtd   sfJ t dtd  dtd   dtd   sJ t dtd  dtd   dtd   sJ t dtd  dtd   dtd   sJ d S )N   rT   A  r   ih  ri   r^   rN   rm   r   r   r   r   rs   rt   r|   i-  |   r   1  r   rJ   r\   r]   rG   rG   rG   rH   "test_diop_ternary_quadratic_normali  s    (((,$("**..r   c                    s   t | }|ttttg \ t| ttttf f}t fdd|j	D }     fD ]}||
 v rr dS qrdS )Nc                    s    g | ]}t |j g qS rG   )r   r   r   r   r   ZrG   rH   r   }  rL   z/is_normal_transformation_ok.<locals>.<listcomp>FT)r*   r
   rJ   r\   r]   rI   r   r   r   r   r   )rF   r   r   r   r   rG   r   rH   is_normal_transformation_okx  s     r   c                   C   s  t td dtd   td  dt t  dt t  dt t  sHJ t td dtd   dtd   spJ t td dt t  sJ t dtd  dtd   dt t  sJ t td dt t  dt t  dt t  sJ t td dt t  dt t  tt  sJ t td td  td  tt  tt  tt  sXJ t td dt t  dtd   sJ t tt dt t  dt t  sJ t dt t dt t  sJ d S )	NrT   rN   r   r   rs   d   r   r|   )r   rJ   r\   r]   rG   rG   rG   rH   test_transformation_to_normal  s    H(,42:**r  c                  C   s  t dtd  td  td  dt t  s0J t td td  td  tt  tt  s`J t dtd  tt  tt  tt  sJ t td tt  tt  sJ t dtd  dt t  tt  sJ t dtd  dtd   tt  sJ t dtd  dtd   td  dt t  dt t  dt t  sJJ t dtd  dt t  slJ t dtd  dtd   dt t  td  sJ t td d	td   td  d
t t  dt t  sJ t dtd  dtd   dt t  dt t  dt t  s&J t td dtd   td  tt  dt t  s`J t td dtd   td  tt  dt t  dt t  sJ t td dtd   td  d
t t  dt t  dt t  sJ t tt dt t  d
t t  sJ ttd td  td  dks@J ttd td  d u s^J ttdd  dt t dt t  dtd   dt t  dtd   } t| dksJ tdtd  dtd   td  dksJ ttt dt t  ddtfksJ dt t dt t  dt t  dtd   } t	| dt
d  dt
 t  dt
 t dtd   dt
 t fksJ ttt dt t  dt
 t t t
d  t
d  t
t fksJ d S )NrT   r^   rN   ri   rk   rn   rs   r   1   r   r_   r   r   ro   c                
   S   s0   t tttftt dtd dtd dtd diS )NrS   rT   rN   r   )r5   rJ   r\   r]   rG   rG   rG   rH   rK     s    
"z-test_diop_ternary_quadratic.<locals>.<lambda>rh   rm   )rk   rT   r   )rS   r   rT   r   rj   rq   )r   rJ   r]   r\   r   r?   rd   r   rC   r2   pqr   rE   rG   rG   rH   test_diop_ternary_quadratic  s>    00, ((N"6>F:FJ*&<"

08
r  c                   C   s   t dt d  krdks"n J t ddks2J t dt d  krNdksTn J t dt d  krpdksvn J t d	t d
  krdksn J t ddksJ t ddksJ t ddksJ t ddksJ t ddksJ t td
dksJ d S )NrS   rg   r   ri   rj   r^   r   rT   rs   r   rm   rr   rN   4   r  rk   i  r`   )r&   r   rG   rG   rG   rH   test_square_factor  s    """"r  c                   C   s   t td td  td  s J t td dt t  td  sDJ t dtd  dtd   td  slJ t dtd  dtd   td  dt t  dt t  dt t  sJ t td td  td  sJ t td dtd   td  dt t  d	t t  sJ t d	t t td  s4J t d
td  dtd   dtd   sbJ t dtd  dtd   dt t  dt t  dt t  sJ t dtd  dtd   dt t  dt t  dt t  sJ t d
td  dtd   dtd   sJ d S )NrT   r   r   rN   ri   rk   r  r   rn   r   r   r         r   r   r_   r   rG   rG   rG   rH   "test_parametrize_ternary_quadratic  s     $(L >.FFr
  c                   C   s   t dt t tt  dt t  s(J t dt t dt t  dt t  sTJ t dt t dt t  stJ t tt tt  tt  sJ t dt t dt t  dt t  sJ d S )NrT   rN      iY  rs   r   r|   r   rG   rG   rG   rH    test_no_square_ternary_quadratic  s
    (,  r  c                  C   sx   g d} | D ]<\}}t ||\}}}||d  ||d   |d ksJ qttdd  ttdd  ttdd  d S )N)	r   r   r   r   r   r   r   r   r   rT   c                   S   s
   t ddS )Nrg   rp   r   rG   rG   rG   rH   rK     rL   ztest_descent.<locals>.<lambda>c                   S   s
   t ddS )Nr   rN   r  rG   rG   rG   rH   rK     rL   c                   S   s
   t ddS )Nr^   rN   r  rG   rG   rG   rH   rK     rL   )r   r?   rO   ZeroDivisionErrorr   rG   rG   rH   test_descent  s    &r  c                  C   s  t tt tt  tt  s J t tt td td  td   sHJ t tdt  dt  td td  td   s|J t td dtd   d sJ t td dt t  sJ t td dt t  td  sJ t ttd td  d  sJ t tdt dt  d  sJ t td dtd   d td td  d  sTJ t td dtd   d tdt   sJ t td td  td  tdt  dt  dt   sJ t td dt t  dt t  sJ t td dt  d sJ ttt ttttks(J td td  d } t| d	d
t|  d	d
ks\J tdt t dt t  dt dt fhksJ td td  td  d } dh}t| |ksJ t	t
| }t| d	d
|ksJ ttd ttdd  d t	 ksJ dtd  dtd   td  } |  }ttttf|dhksXJ t| dtd  dtd   dtd  dt t  dtd   dtd  dt t  dtd   fhksJ dtd  dtd   td  } |  }ttttf|dhks
J t| dtd  td  dtd  dt t  td  dtd  dt t  dtd   fhkspJ dtd  dtd   dtd   } |  }ttttf|dhksJ t| dtd  dtd   dtd  d t t  d!td   d"td  d#t t  d$td   fhks&J d%td  d&td   d'td   } |  }ttttf|d(hksnJ t| d)td  d*td   d+td  d,t t  d-td   d.td  d/t t  d0td   fhksJ td dtd   d1td   } |  }ttttf|d2hks J t| d3t t dtd  d3td   td d1td   fhksfJ ttd4d5  tdt t	 ksJ tdt dt  tj h d6ksJ ttd td  dt  d d	d
h d7ksJ ttd td  d8 d9 ttfd	d:h d;ksJ ttd td  d8 d9 ttfd	d:h d;ksNJ t td t sdJ t td t szJ ttd t tttd fhksJ ttd t ttd t fhksJ d S )<NrT   rN   rk   rS   ra   ri   r^   a   Tpermuter`   rS   rT   rN   \   c   )rt   rk   3   i{  rt   iKf   i  ij  r  )rS   rS   rT   rh   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r        i	  i>  iipE i* i',  i  i  rs   )r   rT   rS   r   c                   S   s   t ttd  d S )NrT   rS   r   rJ   r\   rG   rG   rG   rH   rK   ,  rL   z"test_diophantine.<locals>.<lambda>>   )r^   r^   )rh   rS   r   )rN   rm   )rm   rN   >   )r   rg   )r   rS   r   )rg   rS   r   r   )r^   rg   )r^   rS   r   Q   )symsr  >   )rp   rh   )rN   rh   )rT   rp   )rh   rp   rT   rN   )rh   rN   )rp   rT   rN   rT   )r   rJ   r\   r]   r[   r   r   r   rx   rQ   rA   popr   Zas_coefficients_dictr5   r  r  r?   re   r   ZHalfr   )rF   base_solcomplete_solnr   rG   rG   rH   test_diophantine  s     (4 $ "6.>*  4* 
8" 
0"$
,
"
$
8"
 
6
("
$
$
&r$  c                  C   s  ddl m} m}m}m}m} t| d |d  |d  |d  sDJ t| d d|d   d|d   |d  stJ td| d  d|d   d|d   |d  sJ td| d  d|d   d|d   d|d   sJ td| d  d|d   d|d   d|d   sJ t|d  d| d   d|d   d|d   d|d   s^J td| d  |d  d|d   |d  d|d   sJ t| d |d  |d  |d  jt	t
tgdt	d t
d  td  dt	 t dt
 t t	d t
d  td  fhksJ d S )	Nr   r   r   cderT   r^   rt   r   r   
parameters)	sympy.abcr   r   r&  r'  r(  r   r<   r   rJ   r\   r]   r%  rG   rG   rH   test_general_pythagoreanB  s    (048:D>0Dr,  c                     s  t ddD ]*} ttdd td|  D |  s
J q
ttd td  d d u sVJ ttd td  td  d t ksJ td td  td  d  t dhksJ t	d t
d  td  td  td  d	  tt ddksJ td
tdddf }tdd |D  d  h d}t |ks6J tt dddksPJ tdtd  td  td  dhks|J td td  td  td  d  tt fdd d S )NrN   r   c                 s   s   | ]}|d  V  qdS rT   NrG   r   irG   rG   rH   	<genexpr>S  rL   z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>z:%irT   r`   r  i!  z:56Tnegativec                 S   s   g | ]}|d  qS rV   rG   r.  rG   rG   rH   r   ^  rL   z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>p   >   )r   r   r^   r^   r^   rq   )rS   rS   rS   rN   rm   rq   )rS   rT   rN   rN   ri   rq   )rS   rS   rT   rN   r^   r   )r   rS   ri   ri   ri   r   )r   rS   rS   ri   rm   rl   )r   rN   rN   rN   rm   rl   )r   rS   rS   rT   ri   r   )r   r   rT   rm   rm   r   )rS   rS   rN   r^   rm   rl   )r   rS   rT   rN   rk   rl   )rT   rT   r^   r^   rm   r   )rS   rN   r^   ri   ri   r   )rT   rN   rN   r^   ri   rl   )r   rS   rS   rS   rN   r   )r   rT   rT   rT   rm   rq   )r   rT   rN   rN   rN   r   )r   r   rT   rT   rT   r   )r   rT   rN   ri   ri   rl   r  i  rs   )rT   rT   rT   r^   c                      s
   t   S rD   rZ   rG   rE   rG   rH   rK   n  rL   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>)ranger   sumr	   r   rJ   r\   r]   rQ   r   r   lenr   r   r   r   r&  r'  r?   re   )r/  var	base_solnrG   rE   rH   &test_diop_general_sum_of_squares_quickQ  s$    ( *,,$r:  c                  C   s8   t d td  td  d } h d}t| |ks4J d S )NrT   i@B >   )r   r     )r   `  i  )  X    )r   r?  r   )r   r?  i  )r   r=  iX  )        )r   r>     )  @  r   )   r=  `  )r   rD  rB  )r<  h  rG  )i  r=  r   )rH  r=  rC  )rA  r>  r   )`   rH  i  )r@  rE  rC  )rI  r=  ih  )rJ   r\   r]   r   )rF   r9  rG   rG   rH   test_issue_23807q  s    rJ  c                  C   s   dD ]4} t ddD ]$}t| |D ]}t||ks J q qqttddg ksPJ dd tdddD g dg d	g d
gksJ ttddgksJ ttdddgksJ dd tdD g dddgdggksJ d S )N)rn   r   rS   rn   rN   ri   c                 S   s   g | ]}t |qS rG   list)r   r  rG   rG   rH   r     rL   z'test_diop_partition.<locals>.<listcomp>)r   r   r   r   rN   )r   r   r   rS   rT   )r   r   rS   rS   rS   r   rG   c                 S   s   g | ]}t |qS rG   rK  r.  rG   rG   rH   r     rL   )rS   rS   rS   rT   )r5  r#   r7  rL  )nkr  rG   rG   rH   test_diop_partition|  s    
rO  c                  C   sf   dD ](} t | \}}|d |d  | ksJ qt dd u s>J t d}|dkr^t|d tu sbJ d S )N)
ri   r   r   rv   %   r   i%	  i  i  iY  rT   rk   i5 )i  i  r   )r%   typeint)r/  r   r   ansrG   rG   rH    test_prime_as_sum_of_two_squares  s    rT  c                  C   s|   dD ]2} t | \}}}|d |d  |d  | ksJ qt dd u sHJ t dd u sXJ t ddkshJ t ddksxJ d S )	N)r   rS   rT   r|   r   l   my l   85Jdl   8l9_	 rC  i!  i"  i#  i$  i%  i&  rT   rk   i <  r   )ri   r   r   r^   r   r   rT   )r(   )r/  r   r   r&  rG   rG   rH   test_sum_of_three_squares  s    "rV  c                  C   s   ddl m}  | dd}tdd t|D |ks4J tddksDJ tdd	ksTJ td
dksdJ tddkstJ tddksJ tddksJ d S )Nr   )randintrS   l    @ k c                 s   s   | ]}|d  V  qdS r-  rG   r.  rG   rG   rH   r0    rL   z+test_sum_of_four_squares.<locals>.<genexpr>)r   r   r   r   r`   )r   rS   rT   rN   ra   )rS   rS   rT   rN   rr   )rS   rT   rT   rN   r   )r   rS   rN   rN   r   )r   r^   r^   r^   )Zsympy.core.randomrW  r6  r'   )rW  rM  rG   rG   rH   test_sum_of_four_squares  s    
rX  c               	   C   s4  g d} | D ]v}|\}}}t |||}zBt|}t||ks@J d}|D ]}|||  }qH||ksfJ W q& ty~   Y qY q&0 q&qtt ddddddgksJ ttd	d
  ttdd
  ttdd
  tt dddg ksJ tt ddddgksJ tt dddg ksJ tt ddddgks4J tt dddddddgksVJ tt dddddg kstJ tt ddddgksJ tt dddg ksJ tt dddddgksJ tt ddddg ksJ ttt ddddksJ d}	dD ]$}
tt|	d|	|
 g ks
J q
d S )N))r   rN   rT   )r   rT   r^   )rT   rS   rT   )rN   rS   rN   )ri   rT   rT   )i@0  rT   r^   )i  rT   rN   r   ru   rT   r^   T)rS   rS   rN   rN   )r   r   rT   r^   c                   S   s   t tdddS )Ng333333?rT   rL  r$   rG   rG   rG   rH   rK     rL   z+test_power_representation.<locals>.<lambda>c                   S   s   t tdddS NrT   r   rY  rG   rG   rG   rH   rK     rL   c                   S   s   t tdddS rZ  rY  rG   rG   rG   rH   rK     rL   rg   rS   rU   rN   rV   r  rm   )zeros)rS   rT   rT   rT   rT   rT   )r   r   r   r   r   rN   ri   Frh   r   r   i  pi   @)r   r   rk   ri   r^   rT   rS   )r$   nextr7  StopIterationrL  r?   rd   r3   )teststestrM  r  rN  flZchk_sumZl_ibigr/  rG   rG   rH   test_power_representation  sF    

rc  c                  C   s   t dddd\} }t|d | |  d }|h dks:J t dddd\}}t|| d|  d	|  d
 }|h dks|J dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rB   ZpositiverT   i  >   )y   r^   )r   r   )ri   ru   )   rT   )_   ri   )i  rS   za bFrN   rm   >   )rl   rj   )r   rp   )r   r   )r   r   )r   r   )rj   rq   N)r	   r   )mrM  Zdiofr   r   rG   rG   rH   test_assumptions  s     rh  c                 C   sd   t | }t| }t| j}|jtd |r`| }|D ] }t|	t
||dkr8 q(q8dS q(dS )z
    Determines whether solutions returned by diophantine() satisfy the original
    equation. Hope to generalize this so we can remove functions like check_ternay_quadratic,
    check_solutions_normal, check_solutions()
    )keyr   FT)r   r   Z	make_argsrL  free_symbolssortr   r!  rI   r   r   )rF   sZfactorsr8  solutionr`  rG   rG   rH   r     s    

r   c                  C   s  dt  t d d } t| tdt d fhks2J dt d  dt  t  dt   dtd   dt  d } t| tt d fdt d t fhksJ tt td  d td  d t fhksJ tt t d tdt fksJ td	ddd d
dksJ dt d dt d f}tdddt|ks,J tdddd d
tdd |D ksTJ t	dddd u sjJ t	ddddhksJ t	ddddhksJ t
tdd  tddddksJ td  t d  td  td  } t| t|    krBtd td  td  dt t dt t td td  td  fksHn J tttdt d  tdt d  tdt gd	ksJ tttddtdt  tdt gd	ksJ tttdt  tddtdt gd	ksJ tdddksJ tdtd   krdksn J td	td	   kr@dksFn J tddddks\J t
tdd  tdddd ksJ t
td!d  t
td"d  tt d td  d d# h d$ksJ d S )%NrT   rS   rh   rm   rs   r^   rr   rN   r   r   r   rn   c                 s   s   | ]}| td V  qdS )r   N)r   r   )r   _rG   rG   rH   r0    rL   z$test_diopcoverage.<locals>.<genexpr>ru   ri   r   r   r   c                   S   s   t dddS )Nr^   ru   rS   )r"   rG   rG   rG   rH   rK     rL   z#test_diopcoverage.<locals>.<lambda>r   r   r   TFr  c                   S   s   t dS )N)rT   r^   rm   )r9   rG   rG   rG   rH   rK   $  rL   r_   n   i6  )r   rS   ri   c                   S   s,   t td td  tt  dt t  d S )NrT   rs   r   rJ   r\   r]   rG   rG   rG   rH   rK   )  rL   c                   S   s   t td td  S )NrN   rT   r  rG   rG   rG   rH   rK   *  rL   r  >   )r   rg   r   )rg   r   )rS   r   )rg   rt   )rt   rg   r   )rS   rt   )rJ   r\   r   rx   r   r   r   r,   tupler-   r?   rd   r/   r[   r]   r   m1m2m3r7  r1   r   r   r6   r7   r8   r9   rO   r.   re   )rF   rS  rG   rG   rH   test_diopcoverage   sN    8,. ("
  :00((

rv  c                   C   sF   t dddddddksJ t dddd	d	d
dks4J ttdd  d S )NrT   rk   r   r^   O   r   rT   rk   r   rm   rS   r   )rT   rm   rT   c                   S   s   t ddddddS )NrT   rk   r`   r^   rw  r   )r0   rG   rG   rG   rH   rK   8  rL   ztest_holzer.<locals>.<lambda>)r0   r?   rd   rG   rG   rG   rH   test_holzer/  s    ry  c            
         s    fdd} d\ d \}}}}d \}}}}| | dksFJ | | dksVJ t  |d  |d  |d     ksJ t  |d  |d  |d     ksJ t||| }	|	|ksJ d S )Nc                    s$    | d  |d   |d   S rw   rG   )rJ   r\   r]   r   r   r&  rG   rH   rK   =  rL   z"test_fail_holzer.<locals>.<lambda>)r^   rw  r   )   rS   r   rx  r   rT   )maxr0   )
rF   rJ   r\   r]   Zxyzr   r   r   rS  hrG   rz  rH   test_fail_holzer;  s    
44r~  c                   C   sN   t dt dt  dt  t tttt dt dt  dt  fhksJJ d S )Nrm   rt   ru   rv   )r   r[   r\   rJ   r]   rx   ry   rz   rG   rG   rG   rH   test_issue_9539I  s    $r  c                   C   sJ   t dtd td  td   dtt tt  tt    dhksFJ d S )NrN   rT   r`   r   r   r   rq  rG   rG   rG   rH   test_issue_8943N  s
    6r  c                     s   t d td  td  d  t ddhks0J t dddhksFJ tt fdd tdd	d
} t d td  | d  d  t dhksJ tt d td  d t	 ksJ tt d td  d ddt	 ksJ d S )Nr^   iq
  )rN   rm   rm   )rT   r^   rk   rT   c                      s   t   dS rw   )r   rG   rE   rG   rH   rK   X  rL   z.test_diop_sum_of_even_powers.<locals>.<lambda>negTr2  )rp   rm   rm   r   )limit)
rJ   r\   r]   r   r   r?   re   r	   r   rQ   )r  rG   rE   rH   test_diop_sum_of_even_powersT  s    "r  c                     s  h d} t d td  td  td  td  d }t|t}t|dksNJ || ksZJ tt	dd  t
tddg ks~J t
tddg ksJ t
td	dd
dgksJ t
td	dg ksJ t
tdddgksJ t
tddg ksJ t
tddddgksJ t
tddd
ddgks,J t
tdddgksFJ dd tdD g dksfJ dd tdD g dksJ tdD ]b tt dd
}|rt fdd|D sJ tt d}t fd d|D sJ qtt	d!d  tt	d"d  t
td#ddd$gks*J t
td#ddg ksDJ t
tddddgks`J t
tdddd
d%d&gksJ t
tdddd
g d'ksJ t
td(ddg ksJ t
td)ddg ksJ t
td*ddd+gkrd*d*ksJ t
tdd, ddg ksJ d S )-N>   )rT   rN   ri   rm   rk   )r   rS   r^   ri   rt   )r   r   rS   rS   r   )r   r   ri   rk   rk   )r   rN   ri   ri   rn   )rS   rT   rN   rN   r   )r   rS   rN   rk   rn   )rS   ri   ri   rm   rm   )r   rN   r^   rk   rk   )rT   rT   rN   ri   rt   )rS   rS   rT   rm   rt   )rS   rS   rm   rm   rk   )rS   rN   r^   r^   rt   )rN   rN   r^   ri   rn   rT   r   r`   c                   S   s   t tddS )Nr   rg   )rL  r4   rG   rG   rG   rH   rK   i  rL   z,test_sum_of_squares_powers.<locals>.<lambda>r   rN   r   Tr  r^   rS   rV   ri   2   )ri   ri   )rS   rk   r   )rS   rS   rS   rT   rT   )r   r   rS   rS   rN   rn   )rS   rS   rS   rS   rS   rS   rS   rS   c                 S   s    g | ]}t tt|d dqS )ri   Tr7  rL  r4   r.  rG   rG   rH   r   u  rL   z.test_sum_of_squares_powers.<locals>.<listcomp>r   )rS   rS   rS   rS   rT   rT   rS   rS   rT   rT   rT   rT   rT   rN   rT   rS   rN   rN   rN   rN   r^   rN   rN   rT   rT   r^   r^   r^   r^   ri   c                 S   s   g | ]}t tt|d qS )ri   r  r.  rG   rG   rH   r   |  rL   )r   r   r   r   r   rS   r   r   rS   r   r   rS   r   rS   rS   r   rS   rS   r   rS   rT   rS   rS   rS   rS   rS   rS   rS   rS   rN   c                 3   s$   | ]}t d d |D  kV  qdS )c                 s   s   | ]}|d  V  qdS r-  rG   r   jrG   rG   rH   r0    rL   7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>Nr6  r   r/  rG   rH   r0    rL   z-test_sum_of_squares_powers.<locals>.<genexpr>c                 3   s$   | ]}t d d |D  kV  qdS )c                 s   s   | ]}|d  V  qdS r-  rG   r  rG   rG   rH   r0    rL   r  Nr  r   r  rG   rH   r0    rL   c                   S   s   t tdddS )NrT   rg   rS   rL  r3   rG   rG   rG   rH   rK     rL   c                   S   s   t tdddS )NrT   rS   rg   r  rG   rG   rG   rH   rK     rL   rh   r   rU  )r   rS   rS   ))r   ri   )rS   r^   r  rm      i  )rt   r;  )r   r   rJ   r\   r]   r   r   r7  r?   rd   rL  r4   r5  rQ   allr3   )ZtrurF   rS  s1s2rG   r  rH   test_sum_of_squares_powers`  sF    ,
  "   &r  c                   C   sr   t dddu sJ t dddu s$J t dds2J t dds@J t ddsNJ t dds\J t dddu snJ d S )	NrN   rg   Frp   rS   r   r^   rT   )r:   rG   rG   rG   rH   test__can_do_sum_of_squares  s    r  c            	      C   s  ddl m} m}m}m}m} | d |d  d }dh}t||ksFJ tt|	 }t|dd|ksjJ | d |d  |d  |d  |d  d	 }t
t|d
ksJ t
t|dddksJ h d}tdtd  dt t  dtd   d dd|ksJ d S )Nr   r%  r^   r  r  Tr  rT   r   #   i0  r   r   rs   r|   )r+  r   r   r&  r'  r(  r   rQ   rA   r!  r7  rJ   r\   )	r   r   r&  r'  r(  rF   r"  r#  ZsolnrG   rG   rH   test_diophantine_permute_sign  s    ,r  c                  C   s8   t d td  d d } t| t tgdddhks4J d S )NrT   r^   rS   r  r  r   )rS   rN   )rJ   r\   r   rE   rG   rG   rH   test_not_implemented  s    r  c                      sL   t dt  d  t tt gdtdt d fhks6J tt fdd d S )NrN   rT   r  c                      s   t  tthdS )Nr  )r   r\   rJ   rG   rE   rG   rH   rK     rL   z!test_issue_9538.<locals>.<lambda>)rJ   r\   r   rx   r?   rO   rG   rG   rE   rH   test_issue_9538  s    &r  c                  C   sF  t dtd  td  dtd   } tt| j\}}}| |d d|d   d|d  d| |  d| |  d|d   |d d| |  d|d   d| |  fhksJ t td dtd   dtd   } | d| | |d d|d   |d d|d   fhksJ t dtd  dtd   td  } | d|d  |d  d|d  d| |  |d  d|d  d| |  d|d   fhksJ t dtd  dtd   dtd   } | d|d  d|d   d	| | d
|d  d|d   fhksJ tdtd  dtd   td  dt t  dt t  dt t  d|d  d| |  |d  d|d  d| |  |d  d|d  d| |  d|d   fksJ tdtd  dtd   dtd   d|d  d|d   d|d  d| |  d|d   d|d  d| |  d|d   fksBJ d S )NrT   rh   r^   rN   H   r   r   rt   rm   rn   ri   rk   r   r   r   i~i i
  ix  i:
 ii  ib<  )r   rJ   r\   r]   r   r   rj  r2   )rl  r  r  rrG   rG   rH   test_ternary_quadratic  sD    $.*$>$2"(FBF


",
"r  c                     s  t g g  t t ksJ  jdks*J  jdks8J tt fdd t  g ks^J t tt	gt
tgjtt	fksJ jt
tfksJ ttfdd d tdhksJ ddtf tddtfhksJ tt fdd t tdt	titdt	d	igks(J t tt	tgt
tgtjd
ksPJ t
d
 t t
t df tt
d
 t t
t dfhksJ t
d
td	 d
t dfhksJ d
td	 d
t dfhksJ t
dtdidhksJ dddhksJ t
ditd dt dfhks6J dtd dt dfhksXJ tdt
d
 d t
d dfhksJ d dt
d
 d t
d dfhksJ t
d
tdidhksJ d
ddhksJ t
dtdidhksJ dddhksJ ttfdd ttfdd ttfdd ttfdd ttfdd ttfdd ttfdd t tt	gt
tg} | t
dt
 f | t
 dt
 f | dddhksJ d S )NrG   c                      s     tfS rD   )addrJ   rG   )r  rG   rH   rK     rL   z/test_diophantine_solution_set.<locals>.<lambda>c                      s
     dS )NrU   r  rG   )r  rG   rH   rK     rL   )rN   r^   rg   c                      s
     S rD   )updaterG   )r  r  rG   rH   rK     rL   rN   r^   rT   rS   rk   rn   )r  rg   rS   ri   r   rp   )rs   r   rS   )   rn   rS   c                      s    j ddS )NrS   )rJ   r   rG   s3rG   rH   rK     rL   c                      s     dddS NrS   rT   rN   r  rG   r  rG   rH   rK     rL   c                      s
     dS )NrG   r  rG   r  rG   rH   rK     rL   c                      s
     dS )N)rS   rT   rN   r^   r  rG   r  rG   rH   rK     rL   c                      s
     dS )Nr   r  rG   r  rG   rH   rK     rL   c                      s    dddS r  rG   rG   r  rG   rH   rK     rL   c                      s
    ddS )NrS   rn  rG   rG   r  rG   rH   rK      rL   r   r  r   r   )r;   rQ   r	   r*  r?   rd   rL  Zdict_iteratorrJ   r\   r   r   r  r  r]   r7  r   rO   )Zs4rG   )r  r  r  rH   test_diophantine_solution_set  sV    

*&&"("*(r  c                  C   sf   dt  t dtd   } t| jttgd}|tdt ft dt fhksNJ |dddhksbJ d S )	NirN   rT   r)  r   r  r   r   )rJ   r\   r=   r   r   r   )rF   rm  rG   rG   rH    test_quadratic_parameter_passing  s    "r  N)Zsympy.core.addr   Zsympy.core.mulr   Zsympy.core.numbersr   r   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr	   Zsympy.matrices.denser
   Zsympy.ntheory.factor_r   Zsympy.simplify.powsimpr   Zsympy.core.functionr   Zsympy.core.sortingr   r   Z(sympy.functions.elementary.trigonometricr   Zsympy.solvers.diophantiner   Z%sympy.solvers.diophantine.diophantiner   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Zsympy.testing.pytestr>   r?   r@   Zsympy.utilities.iterablesrA   r   r   r&  r'  r  r  rJ   r\   r]   r[   r   r   r   r   r   r   rx   ry   rz   Zt_3Zt_4Zt_5Zt_6rs  rt  ru  rC   rI   rP   rR   rX   rf   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r$  r,  r:  rJ  rO  rT  rV  rX  rc  rh  r   rv  ry  r~  r  r  r  r  r  r  r  r  r  r  r  rG   rG   rG   rH   <module>   s   &
	K	

$Y 	-/
6

1