o
    jgæ                     @   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   h/var/www/html/zoom/venv/lib/python3.10/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   -       )r?   	TypeErrorrG   rG   rG   rH   test_input_format+   s   rQ   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   rS   c                   C   sH   t td td d  ddhksJ t td td  ddhks"J d S )N      rT   rU   r   rJ   rG   rG   rG   rH   test_univariate6   s   $$rY   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s:J ttt t tttgtt d
td
idfksRJ 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swJ 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sJ 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s!J ttd td  td  tttgtd d
td d
td d
idfksFJ d S )Nc                   S   s   t td d d S )NrU   rN   rT   )r+   rJ   rG   rG   rG   rH   rK   <       z$test_classify_diop.<locals>.<lambda>c                   S      t dS NrT   r+   rG   rG   rG   rH   rK   =       c                   S   s   t tt t t d S r\   )r+   wrJ   yzrG   rG   rG   rH   rK   >   s    c                   S   s    t td td  td  d S )NrN      Z   )r+   rJ   r`   ra   rG   rG   rG   rH   rK   ?           rU      *   rT   i
univariateinhomogeneous_ternary_quadraticinhomogeneous_general_quadratichomogeneous_general_quadratic
cubic_thuerb   b   igeneral_sum_of_even_powers$homogeneous_ternary_quadratic_normal)	r?   rP   
ValueErrorNotImplementedErrorr+   rJ   r`   ra   r_   rG   rG   rG   rH   test_classify_diop;   s>   

&
(
"


($rr   c                   C   s  t tdksJ t dt dksJ t dt dksJ t td dks&J t dt d dks2J t dt d dks>J t tt tt fksKJ t tt d	 tt fksZJ t tt d	 tt fksiJ t d	t t d
 dkswJ t dt dt  d
 dt d
 dt d
 fksJ t dt dt  d
 dt d
 dt d
 fksJ 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s6J t dt dt  dt  d
 tdt dt  d
 dt dt  d
 fks^J t dt dt  dt  d
 d dkstJ t dt dt  dt  d
 dksJ 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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   rT   rN   )rU   rD   rb   )r      )rt         )NN   )r   ru   ru   NNN      	         c                   S   s   t td S NrU   rX   rG   rG   rG   rH   rK   o   rL   ztest_linear.<locals>.<lambda>)
r   rJ   r`   t_0ra   t_1r_   t_2r?   rP   rG   rG   rG   rH   test_linearT   s2   444($6">P,*P@Jr   c                   C   s\  t dt t dt  dt  d ddhksJ 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sFJ t dt t dt  dt  d dhks]J t dt t dt  dt  d h dksuJ t dt t dt  dt  d t ksJ t tt t t d dtftdfhksJ tdt t sJ d S )NrN   "   r   rT   )i{)ru   iry   rU   rb   6   )   r      )rs   ru   8   rw   >   i_r|   iiiiirw   i   rt   r   @   rT   r   rs   0   )r   rJ   r`   rR   tr   rG   rG   rG   rH   %test_quadratic_simple_hyperbolic_caser   s   "...0.,r   c                   C   s4  t dtd  dt t  dtd   dt  dt  d dhks#J t d	td  d
td   dt  dt  d t ks@J t td td  dt  dt  d dhksYJ t dtd  dt t  dtd   dt  dt  d dhks|J t dtd  dt t  dtd   d h dksJ d S )Nrg   rU   rz   rf         i3  )r   rs   rb   rN   ru      r   rs   rs   r   re   V  )ry   
   r      rs   rU   rT   rT   rT   rt   r   )r   rJ   r`   rR   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 s@J t dtd  dt t  dtd   d
t  dt  d s`J t dtd  d
t t  td  dt  d szJ t td dt t  td  dt  dt  d sJ t td dt t  td  dt  dt  d sJ t td dt  d sJ d S )Nrz   rU      r~   ru   rw      ry   r   rb   rN   rT   )   (   check_solutionsrJ   r`   rG   rG   rG   rH   test_quadratic_parabolic_case   s   @@@488 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 s@J 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t  d sJ t dt t dtd   dt  dt  d sJ 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   rb   rU   ru   rt   rN   r      r      rz   r       r   r   r   ry   r   rG   rG   rG   rH   test_quadratic_perfect_square   s   ,@@@44(,8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  s*J t td tt  td  dt  s>J t td dtd   dt  dt  sTJ ttd td  dt  dt  d  dhksoJ d S )NrU   ru   rN   r   ry   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||r,J qd S )NirU   rN   rT   rJ   r`   r   rI   xreplacedictziprF   v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 r   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 s<J t d
t dtd   t dt t  dtd   sXJ t ddt  dtd   dt  tt  dtd   svJ d S )Nrz   rU   r   r   r   r   r|   rw   ru   r   rb   rN   rT   r   rG   rG   rG   rH   test_quadratic_non_perfect_slow   s   @88@r   c                   C   st  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s'J t ddg ks0J t ddg ks9J t dddtfgksEJ t dddt tfgksSJ t ddg ks\J t dddgksfJ t dddgkspJ t dddgkszJ t ddddgksJ t ddg d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!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'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sJ t d.dg ksJ t dd/g d0ksJ td1dd2d3dd/d4ks,J t dd5g d6ks8J tt d7d8h d9ksFJ t dd:d;gksQJ t d<d=g ks[J t ddd>d?gksgJ t d@dAdBgksrJ t d@dCg ks|J t dDdCdEgksJ tdFddGddDdCsJ t dDdHdIdJgksJ t ddtdtfgksJ t ddtg ksJ d S )KNrN   r   r   r   rv   ir   rU   rT   r   r   r   r   ru   r   r   r      )r~   rb   iL)r   ry   rw   rs   rT   rU      ))r   ru   )ru   r   )r   r   )r   r   rT   )i  r   i  )i  ix  i  )l   INd? l   j\i  )i  i"  i  )l   WRlQ]>I2l   AAJtWjU^	 )!   rz      )   '   )r~   ru   r   )r   ru   i"  )r   rT   	S  l   !K2l   uGoX r   r   )rN   rT   )  m   $   r   r|   r   r   Tr   ))   =   r   r   )      r   rN      r   >   iX i  ipi"'Mi)  iS  l   )fMOl   ?_l   ;>x< i|r   rT   r   )i  i     r~   )r   rT   )ry   rT      rU   r   rt   {   )r   rT   r   r   i)rT   )r   rT   )r   r   r   rR   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s)J t ddddgks4J t dddgks>J t dddgksHJ t ddtdgksSJ t ddtdtfgks`J t ddtdt tfdt tfgkstJ t ddtdgksJ t d	dtg ksJ d S )Nr   r   )r   )r|   rT   r   r   )r   )r   rN   r   )ir   r   rt     rT   )l   uL" l   EY   r}   r   rT   r   r   rs   r   iT  )i  r   r   r   rb   rU   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s(J t dd
ddks2J t ddddks<J d S )NrU   rT   r   rt   rb   ru   rN   rv   r   r   ry   rw   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 rH dS q=td td dfD ]}|| vr^d||< qR|td  dkrt|td  |td  o~t|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   rT   c                 S   s   g | ]}t |jttg qS rG   )reversedas_independentXY.0r   rG   rG   rH   
<listcomp>9      z-is_pell_transformation_ok.<locals>.<listcomp>FrU   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
 sLJ t td  dtd   d	 s]J t dtd  dt t  dtd   dt  dt  d s}J t dtd  dt t  td  dt  dt  d sJ t 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 d S )Nr   rU   rw   re   r   r   ru   r   r   r   r   -   r      r   rN   r      r   rf   r   r   )r   rJ   r`   rG   rG   rG   rH   test_transformation_to_pellJ  s   <@"@<<Dr  c                   C   sH  t td dt  td  dksJ t td dtd   d dks$J t td dt t  dtd   d dks<J t dtd  d	t t  td  d
 dksTJ t dtd  dt t  td  d dkslJ t dtd  dt t  td  dksJ t dtd  dt t  td  dt  dt  d dksJ d S )NrU   r   rN   ru   )rN   ru   rb   rw   )ru   rw   rz   r   )r   r   r   )rz   T   r|   )rT   r   r   re   )e   i)r   rJ   r`   rG   rG   rG   rH   test_find_DNU  s   $$000,Dr  c                  C   sr   g d} | D ]\}}t ||\}}}||d  ||d   |d ks$J qt ddd u s.J t ddd u s7J d S )N)r   r   rN   r   r   i)rb   rx   )rx   rb   [   r|   r   rT   rs   )rb   r   r   r   i) rT   r   irU   rs   ry   )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  s(J t dtd  dtd   td  s<J t dtd  d	td   dtd   sRJ t td dtd   td  sdJ t dtd  dtd   td  sxJ t td td  td  sJ t d
td  td  dtd   sJ t d	t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 t dtd  dtd   dtd   sJ d S )N   rU   A  r   ih  ru   rb   rN   ry   r   r   r   r   r   r   r   i-  |   r   1  r   rJ   r`   ra   rG   rG   rG   rH   "test_diop_ternary_quadratic_normalj  s   (((,$( ((,,0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 rD dS q9dS )Nc                    s    g | ]}t |j g qS rG   )r   r   r   r   r   ZrG   rH   r   ~  rd   z/is_normal_transformation_ok.<locals>.<listcomp>FT)r*   r
   rJ   r`   ra   rI   r   r   r   r   r   )rF   r   r   r   r   rG   r  rH   is_normal_transformation_oky  s    r  c                   C   s  t td dtd   td  dt t  dt t  dt t  s$J t td dtd   dtd   s8J t td dt t  sFJ t dtd  dtd   dt t  s\J t td dt t  dt t  dt t  svJ t td dt t  dt t  tt  sJ t td td  td  tt  tt  tt  sJ 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 )	NrU   rN   r   r   r   d   r   r   )r  rJ   r`   ra   rG   rG   rG   rH   test_transformation_to_normal  s   H(,408(($r  c                  C   s  t dtd  td  td  dt t  sJ t td td  td  tt  tt  s0J t dtd  tt  tt  tt  sFJ t td tt  tt  sVJ t dtd  dt t  tt  sjJ t dtd  dtd   tt  s~J t dtd  dtd   td  dt t  dt t  dt t  sJ t dtd  dt t  sJ 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  sOJ t td dtd   td  d
t t  dt t  dt t  stJ t tt dt t  d
t t  sJ ttd td  td  dksJ ttd td  d u sJ 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s@J ttt dt t  dt
 t t t
d  t
d  t
t fkscJ d S )NrU   rb   rN   ru   rw   rz   r   r   1   r   rc   r   r   r{   c                
   S   s0   t tttftt dtd dtd dtd diS )NrT   rU   rN   r   )r5   rJ   r`   ra   rG   rG   rG   rH   rK     s   
"z-test_diop_ternary_quadratic.<locals>.<lambda>rt   ry   )rw   rU   r   )rT   r   rU   r   rv   r}   )r   rJ   ra   r`   r   r?   rp   r   rC   r2   pqr   rE   rG   rG   rH   test_diop_ternary_quadratic  s>   00, ((L 4<F:FJ*&<"

08
Jr!  c                   C   s  t dt d  krdksJ  J t ddksJ t dt d  kr)dks,J  J t dt d  kr;dks>J  J t d	t d
  krMdksPJ  J t ddksXJ t ddks`J t ddkshJ t ddkspJ t ddksxJ t td
dksJ d S )NrT   rs   r   ru   rv   rb   r   rU   r   r   ry   r~   rN   4   r  rw   i  re   )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  s"J t dtd  dtd   td  s6J t dtd  dtd   td  dt t  dt t  dt t  s\J t td td  td  slJ t td dtd   td  dt t  d	t t  sJ t d	t t td  sJ t d
td  dtd   dtd   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 t  dt t  dt t  sJ t d
td  dtd   dtd   s	J d S )NrU   r  r  rN   ru   rw   r  r   rz   r  r   r        r   r   rc   r  rG   rG   rG   rH   "test_parametrize_ternary_quadratic  s    $(L <,DD2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  s*J t dt t dt t  s:J t tt tt  tt  sJJ t dt t dt t  dt t  s`J d S )NrU   rN      iY  r   r   r   r  rG   rG   rG   rH    test_no_square_ternary_quadratic  s
   (,  0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  rU   c                   S   
   t ddS )Nrs   r|   r   rG   rG   rG   rH   rK        
 ztest_descent.<locals>.<lambda>c                   S   r)  )Nr   rN   r*  rG   rG   rG   rH   rK     r+  c                   S   r)  )Nrb   rN   r*  rG   rG   rG   rH   rK     r+  )r   r?   rP   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   s$J t tdt  dt  td td  td   s>J t td dtd   d sNJ t td dt t  s\J t td dt t  td  snJ t ttd td  d  s~J t tdt dt  d  sJ t td dtd   d td td  d  sJ 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 sJ 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sBJ td td  td  d } dh}t| |ks\J t	t
| }t| d	d
|ksoJ ttd ttdd  d t	 ksJ dtd  dt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sJ dtd  dtd   td  } |  }ttttf|dhksJ 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s2J dtd  dtd   dtd   } |  }ttttf|dhksVJ 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   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  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s-J ttd4d5  tdt t	 ks@J tdt dt  tj h d6ksTJ ttd td  dt  d d	d
h d7ksmJ ttd td  d8 d9 ttfd	d:h d;ksJ ttd td  d8 d9 ttfd	d:h d;ksJ t td t sJ t td t sJ 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 )<NrU   rN   rw   rT   rf   ru   rb   a   Tpermutere   rT   rU   rN   \   c   )r   rw   3   i{  r   iKf   i  ij  r4  )rT   rT   rU   rt   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r        i	  i>  iipE i* i',  i  i  r   )r   rU   rT   r   c                   S   s   t ttd  d S )NrU   rT   r   rJ   r`   rG   rG   rG   rH   rK   -  rZ   z"test_diophantine.<locals>.<lambda>>   rN   ry   rb   rb   ry   rN   rt   rT   r   >   rb   rT   rb   rs   r   rT   r   rs   rs   rT   r   r  r   r   Q   )symsr0  >   rU   r|   rN   rt   r|   rU   r|   rt   rt   rN   rt   r|   rU   rN   rN   rU   )r   rJ   r`   ra   r_   r   r   r   r   rR   rA   popr   as_coefficients_dictr5   r  r   r?   rq   r   Halfr   )rF   base_solcomplete_solnr   rG   rG   rH   test_diophantine  s    (4 $  4,<(  4* 
8" 
0"$
,
"
$
8"
 
6
("
$
$
&*rS  c                  C   s  ddl m} m}m}m}m} t| d |d  |d  |d  s"J t| d d|d   d|d   |d  s:J td| d  d|d   d|d   |d  sTJ td| d  d|d   d|d   d|d   spJ td| d  d|d   d|d   d|d   sJ t|d  d| d   d|d   d|d   d|d   sJ 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erU   rb   r   r   r   
parameters)	sympy.abcr  r  rU  rV  rW  r   r<   r   rJ   r`   ra   rT  rG   rG   rH   test_general_pythagoreanC  s   (0488B<0Dr[  c                     s  t ddD ]} ttdd td|  D |  sJ qttd td  d d u s+J ttd td  td  d t ks@J td td  td  d  t dhksWJ t	d t
d  td  td  td  d	  tt ddksxJ td
tdddf }tdd |D  d  h d}t |ksJ tt dddksJ tdtd  td  td  dhksJ td td  td  td  d  tt fdd d S )NrN   r   c                 s       | ]}|d  V  qdS rU   NrG   r   irG   rG   rH   	<genexpr>T      z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>z:%irU   re   r1  i!  z:56Tnegativec                 S   s   g | ]}|d  qS rW   rG   r^  rG   rG   rH   r   _  rZ   z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>p   >   r   r   rU   rU   rU   r   r   r   rU   ry   ry   r   r   r   rb   rb   rb   r}   r   rT   rT   rT   rN   r   r   rT   rT   rU   ru   r   r   rT   rT   ru   ry   rx   r   rT   rU   rN   rw   rx   r   rT   ru   ru   ru   r   r   rU   rU   rU   ry   r}   r   rU   rN   rN   rN   r   r   rU   rN   ru   ru   rx   r   rN   rN   rN   ry   rx   rT   rT   rT   rN   ry   r}   rT   rT   rU   rN   rb   r   rT   rT   rN   rb   ry   rx   rT   rU   rN   rN   ru   r}   rT   rN   rb   ru   ru   r   rU   rU   rb   rb   ry   r   rU   rN   rN   rb   ru   rx   r/  i  r   )rU   rU   rU   rb   c                      s
   t   S rD   r]   rG   rE   rG   rH   rK   o  r+  z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>)ranger   sumr	   r   rJ   r`   ra   rR   r   r   lenr   r   r  r  rU  rV  r?   rq   )r_  var	base_solnrG   rE   rH   &test_diop_general_sum_of_squares_quickR  s$   ( *,*$r~  c                  C   s8   t d td  td  d } h d}t| |ksJ d S )NrU   i@B >   i    r   r   r     r       r   X     r   `  i  r     r   r  @  r   `   h  i  r  r  ih  r  r  `  r  r  r     r  r     r  r  r     r  r   r  i  r   r  iX  r  r  r   r  r  r  )rJ   r`   ra   r   )rF   r}  rG   rG   rH   test_issue_23807r  s   r  c                  C   s   dD ]} t ddD ]}t| |D ]
}t||ksJ qq	qttddg ks(J dd tdddD g dg d	g d
gks@J ttddgksKJ ttdddgksWJ dd tdD g dddgdggkslJ d S )N)rz   r   rT   rz   rN   ru   c                 S      g | ]}t |qS rG   list)r   r  rG   rG   rH   r     rZ   z'test_diop_partition.<locals>.<listcomp>)r   r   r   r   rN   )r   r   r   rT   rU   )r   r   rT   rT   rT   r   rG   c                 S   r  rG   r  r^  rG   rG   rH   r     rZ   )rT   rT   rT   rU   )ry  r#   r{  r  )nkr  rG   rG   rH   test_diop_partition}  s   
.r  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 s1J d S )N)
ru   r   r   r   %   r   i%	  i  i  iY  rU   rw   i5 )i  i  r   )r%   typeint)r_  r  r  ansrG   rG   rH    test_prime_as_sum_of_two_squares  s    r  c                  C   s   dD ]} t | \}}}|d |d  |d  | ksJ |dks!J qttdd  t dd u s1J t dd u s9J t dd	ksAJ t d
dksIJ d S )N)r   rT   rU   r   r   l   my l   85Jdl   8l9_	 r  i!  i"  i#  i$  i%  i&  rU   r   c                   S   r[   Nrs   )r(   rG   rG   rG   rH   rK     r^   z+test_sum_of_three_squares.<locals>.<lambda>rw   i <  r   )r   r   ru   rb   r   r   rU   )r(   r?   rp   )r_  r  r  rU  rG   rG   rH   test_sum_of_three_squares  s    r  c                  C   s   ddl m}  | dd}tdd t|D |ksJ ttdd  td	D ]0}t|}t|d
ks3J tdd |D s>J tdd |D |ksKJ t	|t
|ksUJ q%d S )Nr   )randintrT   l    @ k c                 s   r\  r]  rG   r^  rG   rG   rH   r`    ra  z+test_sum_of_four_squares.<locals>.<genexpr>c                   S   r[   r  )r'   rG   rG   rG   rH   rK     r^   z*test_sum_of_four_squares.<locals>.<lambda>r  rb   c                 s   s    | ]}|d kV  qdS r   NrG   r   rrG   rG   rH   r`    ra  c                 s   r\  r]  rG   r  rG   rG   rH   r`    ra  )sympy.core.randomr  rz  r'   r?   rp   ry  r{  allr  sorted)r  r  resultrG   rG   rH   test_sum_of_four_squares  s   
r  c               	   C   s  g d} | D ]:}|\}}}t |||}	 z!t|}t||ks!J d}|D ]}|||  }q%||ks4J W n	 ty>   Y nw qqtt ddddddgksPJ ttd	d
  ttdd
  ttdd
  tt dddg ksqJ tt ddddgks~J tt dddg ksJ tt ddddgksJ tt dddd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 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sJ d}	dD ]}
tt|	d|	|
 g ksJ qd S )N))r   rN   rU   )r  rU   rb   )rU   rT   rU   )rN   rT   rN   )ru   rU   rU   )i@0  rU   rb   )i  rU   rN   Tr   r   rU   rb   )rT   rT   rN   rN   )r   r   rU   rb   c                   S   s   t tdddS )Ng333333?rU   r  r$   rG   rG   rG   rH   rK     rO   z+test_power_representation.<locals>.<lambda>c                   S   s   t tdddS NrU   r   r  rG   rG   rG   rH   rK     rO   c                   S   s   t tdddS r  r  rG   rG   rG   rH   rK     rO   rs   rT   rV   rN   rW   rD  ry   )zeros)rT   rU   rU   rU   rU   rU   )r   r   r   r   r   rN   ru   Frt   r   r   i  pi   @)r   r   rw   ru   rb   rU   rT   )r$   nextr{  StopIterationr  r?   rp   r3   )teststestr  r  r  flchk_suml_ibigr_  rG   rG   rH   test_power_representation  sP   
 r  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   positiverU   i  >   i  rT   ru   r   r   r   _   ru   y   rb      rU   za bFrN   ry   >   r   r|   r   r   rx   rv   r   r   rv   r}   r   r   N)r	   r   )mr  diofr  r  rG   rG   rH   test_assumptions  s    r  c                 C   sf   t | }t| }t| j}|jtd |r1| }|D ]}t|	t
||dkr, nqdS |s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   	make_argsr  free_symbolssortr   rN  rI   r   r   )rF   sfactorsr|  solutionr  rG   rG   rH   r     s   

r   c                  C   s  dt  t d d } t| tdt d fhksJ 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sJJ tt td  d td  d tfhks`J tt t d tdt fkspJ td	ddd d
dks|J dt d dt d f}tdddt|ksJ tdddd d
tdd |D ksJ t	dddt
 ksJ 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rtd td  td  dt t dt t td td  td  fksJ  J tttdt d  tdt d  tdt gd	ks;J tttddtdt  tdt gd	ksSJ tttdt  tddtdt gd	kskJ tdddksuJ tdtd   krdksJ  J td	td	   krdksJ  J tddddksJ 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 )%NrU   rT   rt   ry   r   rb   r~   rN   r   r   r   rz   c                 s   s    | ]	}| td V  qdS r  )r   r   )r   _rG   rG   rH   r`    s    z$test_diopcoverage.<locals>.<genexpr>r   ru   r   r   rM  c                   S   s   t dddS )Nrb   r   rT   )r"   rG   rG   rG   rH   rK     rL   z#test_diopcoverage.<locals>.<lambda>r   r   r   TFr1  c                   S   r[   )N)rU   rb   ry   )r9   rG   rG   rG   rH   rK   /  r^   rc   n   i6  )r   rT   ru   c                   S   s,   t td td  tt  dt t  d S )NrU   r   r   rJ   r`   ra   rG   rG   rG   rH   rK   4  s   , c                   S   s   t td td  S )NrN   rU   r:  rG   rG   rG   rH   rK   5  rZ   rD  >   rT   r   rT   r   r   rs   r   rs   rs   r   rs   r   r   r   )rJ   r`   r   r   r   r   r   r,   tupler-   rR   r?   rp   r/   r_   ra   r   m1m2m3r{  r1   r   r   r6   r7   r8   r9   rP   r.   rq   )rF   r  rG   rG   rH   test_diopcoverage  sN   8*, &"
  :00**

r  c                   C   sF   t dddddddksJ t dddd	d	d
dksJ ttdd  d S )NrU   rw   r   rb   O   r   rU   rw   r   ry   rT   r   )rU   ry   rU   c                   S   s   t ddddddS )NrU   rw   re   rb   r  r   )r0   rG   rG   rG   rH   rK   C  s    ztest_holzer.<locals>.<lambda>)r0   r?   rp   rG   rG   rG   rH   test_holzer:  s   r  c            
         s    fdd} d\ d \}}}}d \}}}}| | dks#J | | dks+J t  |d  |d  |d     ksEJ t  |d  |d  |d     ks_J t||| }	|	|ksnJ d S )Nc                    s$    | d  |d   |d   S r   rG   )rJ   r`   ra   r  r  rU  rG   rH   rK   H  s   $ z"test_fail_holzer.<locals>.<lambda>)rb   r  r   )   rT   r   r  r   rU   )maxr0   )
rF   rJ   r`   ra   xyzr   r   r  r  hrG   r  rH   test_fail_holzerF  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s%J d S )Nry   r   r   r   )r   r_   r`   rJ   ra   r   r   r   rG   rG   rG   rH   test_issue_9539T  s   $r  c                   C   sJ   t dtd td  td   dtt tt  tt    dhks#J d S )NrN   rU   re   r   r   r   r  rG   rG   rG   rH   test_issue_8943Y  s
   6r  c                     s   t d td  td  d  t ddhksJ t dddhks#J tt fdd tdd	d
} t d td  | d  d  t dhksIJ tt d td  d t	 ksZJ tt d td  d ddt	 ksmJ d S )Nrb   iq
  )rN   ry   ry   )rU   rb   rw   rU   c                      s   t   dS r   )r   rG   rE   rG   rH   rK   c  rL   z.test_diop_sum_of_even_powers.<locals>.<lambda>negTrc  )r|   ry   ry   r   )limit)
rJ   r`   ra   r   r   r?   rq   r	   r   rR   )r  rG   rE   rH   test_diop_sum_of_even_powers_  s   "*r  c                     sT  h d} t d td  td  td  td  d }t|t}t|dks'J || ks-J tt	dd  t
tdddgks@J t
tddg ksKJ t
tddd	d
gksXJ t
tddg kscJ t
tddg ksnJ t
tddd	dgks{J 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sJ t
tddd	ddgksJ t
tdddgksJ dd tdD g dksJ dd tdD g dksJ tdD ]. tt dd	}|rt fd d!|D sJ tt d}t fd"d!|D sJ qtt	d#d  tt	d$d  t
td%ddd&gks1J t
td%ddg ks>J t
tddddgksLJ t
tdddd	d'd(gks\J t
tdddd	g d)kslJ t
td*ddg ksyJ 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sJ d S )/N>   r   r   rT   rT   r   r   r   ru   rw   rw   r   rT   rN   rw   rz   r   rT   rb   ru   r   r   rN   rb   rw   rw   r   rN   ru   ru   rz   rT   rT   rU   ry   r   rT   rT   ry   ry   rw   rT   rU   rN   rN   r   rT   rN   rb   rb   r   rT   ru   ru   ry   ry   rU   rU   rN   ru   r   rU   rN   ru   ry   rw   rN   rN   rb   ru   rz   rU   r   re   c                   S   s   t tddS )Nr   rs   )r  r4   rG   rG   rG   rH   rK   t      z,test_sum_of_squares_powers.<locals>.<lambda>rT   rV   T)r   rT   r   rN   r   r  rb   rW   ru   2   )ru   ru   )rT   rw   r   )rT   rT   rT   rU   rU   )r   r   rT   rT   rN   rz   )rT   rT   rT   rT   rT   rT   rT   rT   c                 S   s    g | ]}t tt|d dqS )ru   Tr{  r  r4   r^  rG   rG   rH   r     rd   z.test_sum_of_squares_powers.<locals>.<listcomp>r   )rT   rT   rT   rT   rU   rU   rT   rT   rU   rU   rU   rU   rU   rN   rU   rT   rN   rN   rN   rN   rb   rN   rN   rU   rU   rb   rb   rb   rb   ru   c                 S   s   g | ]}t tt|d qS )ru   r  r^  rG   rG   rH   r     r   )r   r   r   r   r   rT   r   r   rT   r   r   rT   r   rT   rT   r   rT   rT   r   rT   rU   rT   rT   rT   rT   rT   rT   rT   rT   rN   c                 3   &    | ]}t d d |D  kV  qdS )c                 s   r\  r]  rG   r   jrG   rG   rH   r`    ra  7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>Nrz  r   r_  rG   rH   r`       $ z-test_sum_of_squares_powers.<locals>.<genexpr>c                 3   r  )c                 s   r\  r]  rG   r  rG   rG   rH   r`    ra  r  Nr  r   r  rG   rH   r`    r  c                   S      t tdddS )NrU   rs   rT   r  r3   rG   rG   rG   rH   rK     rO   c                   S   r  )NrU   rT   rs   r  rG   rG   rG   rH   rK     rO   rt   r   r  )r   rT   rT   ))r   ru   )rT   rb   rL  ry      i  )r   r  )r   r   rJ   r`   ra   r   r   r{  r?   rp   r  r4   ry  rR   r  r3   )trurF   r  s1s2rG   r  rH   test_sum_of_squares_powersk  sL   ,

  &"r  c                   C   sr   t dddu s	J t dddu sJ t ddsJ t dds J t dds'J t dds.J t dddu s7J d S )	NrN   rs   Fr|   rT   r   rb   rU   )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s#J tt|	 }t|dd|ks5J | d |d  |d  |d  |d  d	 }t
t|d
ksUJ t
t|dddksaJ h d}tdtd  dt t  dtd   d dd|ksJ d S )Nr   rT  rb   r.  rL  Tr/  rU   r  #   i0  r   r   r   r   )rZ  r  r  rU  rV  rW  r   rR   rA   rN  r{  rJ   r`   )	r  r  rU  rV  rW  rF   rQ  rR  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sJ d S )NrU   rb   rT   rD  rE  r   )rT   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sJ tt fdd d S )NrN   rU   r   c                      s   t  tthdS )Nr   )r   r`   rJ   rG   rE   rG   rH   rK     rO   z!test_issue_9538.<locals>.<lambda>)rJ   r`   r   r   r?   rP   rG   rG   rE   rH   test_issue_9538  s   &r"  c                  C   sB  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sXJ t td dtd   dtd   } | d| | |d d|d   |d d|d   fhksJ 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sYJ 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sJ d S )NrU   rt   rb   rN   H   r   r   r   ry   rz   ru   rw   r  r   r  i~i i
  ix  i:
 ii  ib<  )r   rJ   r`   ra   r   r   r  r2   )r  r  r   r  rG   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sJ tt fdd t  g ks/J t tt	gt
tgjtt	fksAJ jt
tfksJJ ttfdd d tdhksaJ ddtf tddtfhksuJ tt fdd t tdt	titdt	d	igksJ t tt	tgt
tgtjd
ksJ 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sJ dtd dt dfhks&J tdt
d
 d t
d dfhks;J d dt
d
 d t
d dfhksOJ t
d
tdidhks^J d
ddhksiJ t
dtdidhksxJ dddhksJ 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                      
     dS )NrV   r%  rG   )r  rG   rH   rK     r+  )rN   rb   rs   c                      s
     S rD   )updaterG   )r  r  rG   rH   rK     r+  rN   rb   rU   rT   rw   rz   )r6  rs   rT   ru   r   r|   )r   r   rT   )   rz   rT   c                      s    j ddS )NrT   )rJ   r   rG   s3rG   rH   rK     rL   c                      s     dddS NrT   rU   rN   r*  rG   r+  rG   rH   rK   	  r  c                      r&  )NrG   r'  rG   r+  rG   rH   rK   
  r+  c                      r&  )N)rT   rU   rN   rb   r'  rG   r+  rG   rH   rK     r+  c                      r&  )Nr   r'  rG   r+  rG   rH   rK     r+  c                      s    dddS r-  rG   rG   r+  rG   rH   rK     rL   c                      s
    ddS )NrT   r  rG   rG   r+  rG   rH   rK     r+  r   r)  r   r   )r;   rR   r	   rY  r?   rp   r  dict_iteratorrJ   r`   r   r   r%  r(  ra   r{  r   rP   )s4rG   )r  r  r,  rH   test_diophantine_solution_set  sV   

($$ ("*(r0  c                  C   sd   dt  t dtd   } t| jttgd}|tdt ftdt fhks&J |dddhks0J d S )	NirN   rU   rX  r   ir   r   )rJ   r`   r=   r   r   r   )rF   r  rG   rG   rH    test_quadratic_parameter_passing  s    r1  N)sympy.core.addr   sympy.core.mulr   sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.singletonr   sympy.core.symbolr	   sympy.matrices.denser
   sympy.ntheory.factor_r   sympy.simplify.powsimpr   sympy.core.functionr   sympy.core.sortingr   r   (sympy.functions.elementary.trigonometricr   sympy.solvers.diophantiner   %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=   sympy.testing.pytestr>   r?   r@   sympy.utilities.iterablesrA   r  r  rU  rV  r  r   rJ   r`   ra   r_   r   r   r   r   r   r  r   r   r   t_3t_4t_5t_6r  r  r  rC   rI   rQ   rS   rY   rr   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r!  r#  r&  r(  r-  rS  r[  r~  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r!  r"  r$  r0  r1  rG   rG   rG   rH   <module>   s    &
	K	
$Y 	-/
9

1