o
    GZhG                     @   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 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 rH   _/var/www/auris/lib/python3.10/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pydiop_simplify'   s   rJ   c                   C   s    t tdd  t tdd  d S )Nc                   S   s   t ttS rE   )r   r   xrH   rH   rH   rI   <lambda>,       z#test_input_format.<locals>.<lambda>c                   S   s   t tt d S N   )r   rK   r   rH   rH   rH   rI   rL   -       )r?   	TypeErrorrH   rH   rH   rI   test_input_format+   s   rR   c                   C   s,   t dt ks	J t tdt ksJ d S rN   )r   setr   rH   rH   rH   rI   test_nosols0   s   rT   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      rU   rV   r   rK   rH   rH   rH   rI   test_univariate6   s   $$rZ   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 )NrV   rO   rU   )r+   rK   rH   rH   rH   rI   rL   <       z$test_classify_diop.<locals>.<lambda>c                   S      t dS NrU   r+   rH   rH   rH   rI   rL   =       c                   S   s   t tt t t d S r]   )r+   wrK   yzrH   rH   rH   rI   rL   >   s    c                   S   s    t td td  td  d S )NrO      Z   )r+   rK   ra   rb   rH   rH   rH   rI   rL   ?           rV      *   rU   iZ
univariateZinhomogeneous_ternary_quadraticZinhomogeneous_general_quadraticZhomogeneous_general_quadraticZ
cubic_thuerc   b   iZgeneral_sum_of_even_powersZ$homogeneous_ternary_quadratic_normal)	r?   rQ   
ValueErrorNotImplementedErrorr+   rK   ra   rb   r`   rH   rH   rH   rI   test_classify_diop;   s>   

&
(
"


($rl   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   rU   rO   )rV   rE   rc   )r      )rn         )NN   )r   ro   ro   NNN      	         c                   S   s   t td S NrV   rY   rH   rH   rH   rI   rL   o   rM   ztest_linear.<locals>.<lambda>)
r   rK   ra   t_0rb   t_1r`   t_2r?   rQ   rH   rH   rH   rI   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 )NrO   "   ry   rU   )i{)ro   irs   rV   rc   6   )   r      )rm   ro   8   rq   >   )i   rn   )irq   rU   )i)r   @   )i)i_rv   )iirz   rm   0   )r   rK   ra   rS   tr   rH   rH   rH   rI   %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 )Nrh   rV   rt   rg         i3  )r   rm   rc   rO   ro      ry   rm   rm   rz   rf   V  )rs   
   r      r   rU   rU   )rm   rV   rU   rn   )r   rK   ra   rS   rH   rH   rH   rI   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 )Nrt   rV      rx   ro   rq      rs   ry   rc   rO   rU   )   (   check_solutionsrK   ra   rH   rH   rH   rI   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   rc   rV   ro   rn   rO   r      ry      rt   r       r   r   rz   rs   r   rH   rH   rH   rI   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 )NrV   ro   rO   rz   rs   r   )r   rK   ra   r=   solverH   rH   rH   rI   !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 )NirV   rO   rU   rK   ra   r   rJ   ZxreplacedictziprG   vsolrH   rH   rI   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   rH   rH   rI   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 )Nrt   rV   r   r   r   r   rv   rq   ro   r   rc   rO   rU   r   rH   rH   rH   rI   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 )KNrO   r   r   r   rp   ir   rV   rU   r   r   r   r   ro   rz   r   r      )rx   rc   iL)ry   rs   rq   rm   rU   rV      ))ry   ro   )ro   ry   )r   r   )r   r   rU   )i  r   i  )i  ix  i  )l   INd? l   j\i  )i  i"  i  )l   WRlQ]>I2l   AAJtWjU^	 )!   rt      )   '   )rx   ro   r   )r   ro   i"  )r   rU   	S  l   !K2l   uGoX r   r   )rO   rU   )  m   $   r   rv   r   r   Tr   ))   =   r   r   )      ry   rO      ry   >   )l   ;>x< i|r   rU   )ipi"'M)l   )fMOl   ?_)iX i  )i)  iS  r   )i  i     rx   )r   rU   )rs   rU      rV   r   rn   {   )r   rU   r   r   i)rU   )r   rU   )r   r   r   rS   rH   rH   rH   rI   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   )rv   rU   r   r   )r   )r   rO   r   )ir   r   rn     rU   )l   uL" l   EY   rw   rz   rU   r   r   rm   r   iT  )i  r   r   r   rc   rV   rO   )r   r   rH   rH   rH   rI   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 )NrV   rU   r   rn   rc   ro   rO   rp   r   r   rs   rq   r   r   )r!   rH   rH   rH   rI   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   rU   c                 S   s   g | ]}t |jttg qS rH   )reversedas_independentXY.0r   rH   rH   rI   
<listcomp>9      z-is_pell_transformation_ok.<locals>.<listcomp>FrV   T)r)   r
   r   r   rJ   subsr   rK   ra   r   argskeysr   )rG   ABur   
simplifiedcoefftermrH   rH   rI   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   rV   rq   rf   r   r   ro   r   r   r   r   -   r      r   rO   r      r   rg   rz   r   )r   rK   ra   rH   rH   rH   rI   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 )NrV   r   rO   ro   )rO   ro   rc   rq   )ro   rq   rt   rz   )r{   r   ry   )rt   T   rv   )rU   r   r   rf   )e   i)r   rK   ra   rH   rH   rH   rI   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   rO   r   r   i)rc   rr   )rr   rc   [   rv   r   rU   rm   )rc   r   r   r   i) rU   r   irV   rm   rs   )r    r   abr`   rK   ra   rH   rH   rI   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   rV   A  r   ih  ro   rc   rO   rs   r   r   r   r   ry   rz   r   i-  |   r   1  r   rK   ra   rb   rH   rH   rH   rI   "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 rH   )r   r   r   r   r   ZrH   rI   r   ~  re   z/is_normal_transformation_ok.<locals>.<listcomp>FT)r*   r
   rK   ra   rb   rJ   r   r   r   r   r   )rG   r   r   r   r   rH   r  rI   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 )	NrV   rO   r   r   ry   d   r   r   )r  rK   ra   rb   rH   rH   rH   rI   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 )NrV   rc   rO   ro   rq   rt   ry   r   1   r   rd   r   r   ru   c                
   S   s0   t tttftt dtd dtd dtd diS )NrU   rV   rO   r   )r5   rK   ra   rb   rH   rH   rH   rI   rL     s   
"z-test_diop_ternary_quadratic.<locals>.<lambda>rn   rs   )rq   rV   r   )rU   r   rV   r   rp   rw   )r   rK   rb   ra   r   r?   rj   r   rD   r2   pqr   rF   rH   rH   rI   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 )NrU   rm   r   ro   rp   rc   r   rV   ry   r   rs   rx   rO   4   r
  rq   i  rf   )r&   r   rH   rH   rH   rI   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 )NrV   r   r   rO   ro   rq   r
  r   rt   r  r   r        r   r   rd   r  rH   rH   rH   rI   "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 )NrV   rO      iY  ry   r   r   r  rH   rH   rH   rI    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   rV   c                   S   
   t ddS )Nrm   rv   r   rH   rH   rH   rI   rL        
 ztest_descent.<locals>.<lambda>c                   S   r  )Nr   rO   r  rH   rH   rH   rI   rL     r  c                   S   r  )Nrc   rO   r  rH   rH   rH   rI   rL     r  )r   r?   rQ   ZeroDivisionErrorr   rH   rH   rI   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 )<NrV   rO   rq   rU   rg   ro   rc   a   Tpermuterf   rU   rV   rO   \   c   )rz   rq   3   i{  rz   iKf   i  ij  r   )rU   rU   rV   rn   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r
        i	  i>  iipE i* i',  i  i  ry   )r   rV   rU   r   c                   S   s   t ttd  d S )NrV   rU   r   rK   ra   rH   rH   rH   rI   rL   -  r[   z"test_diophantine.<locals>.<lambda>>   )rc   rc   )rn   rU   r   )rO   rs   )rs   rO   >   )r   rm   )r   rU   r   )rm   rU   r   r   )rc   rm   )rc   rU   r   Q   )symsr  >   )rv   rn   )rO   rn   )rV   rv   )rn   rv   rV   rO   )rn   rO   )rv   rV   rO   rV   )r   rK   ra   rb   r`   r   r   r   r~   rS   rA   popr   Zas_coefficients_dictr5   r  r  r?   rk   r   ZHalfr   )rG   base_solcomplete_solnr   rH   rH   rI   test_diophantine  s    (4 $  4,<(  4* 
8" 
0"$
,
"
$
8"
 
6
("
$
$
&*r.  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erV   rc   rz   r   r   
parameters)	sympy.abcr   r   r0  r1  r2  r   r<   r   rK   ra   rb   r/  rH   rH   rI   test_general_pythagoreanC  s   (0488B<0Dr6  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 )NrO   r   c                 s       | ]}|d  V  qdS rV   NrH   r   irH   rH   rI   	<genexpr>T      z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>z:%irV   rf   r  i!  z:56Tnegativec                 S   s   g | ]}|d  qS rX   rH   r9  rH   rH   rI   r   _  r[   z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>p   >   )r   r   rc   rc   rc   rw   )rU   rU   rU   rO   rs   rw   )rU   rV   rO   rO   ro   rw   )rU   rU   rV   rO   rc   r   )r   rU   ro   ro   ro   r   )r   rU   rU   ro   rs   rr   )r   rO   rO   rO   rs   rr   )r   rU   rU   rV   ro   r   )r   r   rV   rs   rs   r   )rU   rU   rO   rc   rs   rr   )r   rU   rV   rO   rq   rr   )rV   rV   rc   rc   rs   r   )rU   rO   rc   ro   ro   r   )rV   rO   rO   rc   ro   rr   )r   rU   rU   rU   rO   r   )r   rV   rV   rV   rs   rw   )r   rV   rO   rO   rO   r   )r   r   rV   rV   rV   r   )r   rV   rO   ro   ro   rr   r  i  ry   )rV   rV   rV   rc   c                      s
   t   S rE   r^   rH   rF   rH   rI   rL   o  r  z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>)ranger   sumr	   r   rK   ra   rb   rS   r   r   lenr   r   r   r   r0  r1  r?   rk   )r:  var	base_solnrH   rF   rI   &test_diop_general_sum_of_squares_quickR  s$   ( *,*$rF  c                  C   s8   t d td  td  d } h d}t| |ksJ d S )NrV   i@B >   )r   r     )r   `  i  )  X    )r   rK  r   )r   rK  i  )r   rI  iX  )        )r   rJ     )  @  r   )   rI  `  )r   rP  rN  )rH  h  rS  )i  rI  r   )rT  rI  rO  )rM  rJ  r   )`   rT  i  )rL  rQ  rO  )rU  rI  ih  )rK   ra   rb   r   )rG   rE  rH   rH   rI   test_issue_23807r  s   rV  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)rt   r   rU   rt   rO   ro   c                 S      g | ]}t |qS rH   list)r   r  rH   rH   rI   r     r[   z'test_diop_partition.<locals>.<listcomp>)r   r   r   r   rO   )r   r   r   rU   rV   )r   r   rU   rU   rU   r   rH   c                 S   rW  rH   rX  r9  rH   rH   rI   r     r[   )rU   rU   rU   rV   )rA  r#   rC  rY  )nkr  rH   rH   rI   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)
ro   r   r   r|   %   r   i%	  i  i  iY  rV   rq   i5 )i  i  r   )r%   typeint)r:  r   r   ansrH   rH   rI    test_prime_as_sum_of_two_squares  s    ra  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   rU   rV   r   r   l   my l   85Jdl   8l9_	 rO  i!  i"  i#  i$  i%  i&  rV   r   c                   S   r\   Nrm   )r(   rH   rH   rH   rI   rL     r_   z+test_sum_of_three_squares.<locals>.<lambda>rq   i <  r   )r   r   ro   rc   r   r   rV   )r(   r?   rj   )r:  r   r   r0  rH   rH   rI   test_sum_of_three_squares  s    rd  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   )randintrU   l    @ k c                 s   r7  r8  rH   r9  rH   rH   rI   r;    r<  z+test_sum_of_four_squares.<locals>.<genexpr>c                   S   r\   rb  )r'   rH   rH   rH   rI   rL     r_   z*test_sum_of_four_squares.<locals>.<lambda>rG  rc   c                 s   s    | ]}|d kV  qdS r   NrH   r   rrH   rH   rI   r;    r<  c                 s   r7  r8  rH   rg  rH   rH   rI   r;    r<  )Zsympy.core.randomre  rB  r'   r?   rj   rA  rC  allrY  sorted)re  rZ  resultrH   rH   rI   test_sum_of_four_squares  s   
rl  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   rO   rV   )r   rV   rc   )rV   rU   rV   )rO   rU   rO   )ro   rV   rV   )i@0  rV   rc   )i  rV   rO   Tr   r{   rV   rc   )rU   rU   rO   rO   )r   r   rV   rc   c                   S   s   t tdddS )Ng333333?rV   rY  r$   rH   rH   rH   rI   rL     rP   z+test_power_representation.<locals>.<lambda>c                   S   s   t tdddS NrV   r   rm  rH   rH   rH   rI   rL     rP   c                   S   s   t tdddS rn  rm  rH   rH   rH   rI   rL     rP   rm   rU   rW   rO   rX   r'  rs   )Zzeros)rU   rV   rV   rV   rV   rV   )r   r   r   r   r   rO   ro   Frn   r   r   i  pi   @)r   r   rq   ro   rc   rV   rU   )r$   nextrC  StopIterationrY  r?   rj   r3   )teststestrZ  r  r[  flZchk_sumZl_ibigr:  rH   rH   rI   test_power_representation  sP   
 rv  c                  C   sL  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 t ddd\}}td|d  d| |  d	|  }|h dks`J t dddd\}}td|d  d| |  d	|  }|t ksJ t dddd\}}td|d  d| |  d	|  }|dhksJ dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rC   ZpositiverV   i  >   )y   rc   )r   r   )ro   r{   )   rV   )_   ro   )i  rU   za bFrO   rs   >   )rr   rp   )r   rv   )r   r   )r   r   )r   r   )rp   rw   zx yrB   r   ro   >   )rU   rp   )rv   ro   r   )rC   r?  r   N)r	   r   rS   )mrZ  Zdiofr   r   rK   ra   rH   rH   rI   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   Z	make_argsrY  free_symbolssortr   r+  rJ   r   r   )rG   sZfactorsrD  solutionrs  rH   rH   rI   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 )%NrV   rU   rn   rs   ry   rc   rx   rO   r   r   r   rt   c                 s   s    | ]	}| td V  qdS rf  )r   r   )r   _rH   rH   rI   r;  #  s    z$test_diopcoverage.<locals>.<genexpr>r{   ro   r   r   r*  c                   S   s   t dddS )Nrc   r{   rU   )r"   rH   rH   rH   rI   rL   )  rM   z#test_diopcoverage.<locals>.<lambda>r   r   r   TFr  c                   S   r\   )N)rV   rc   rs   )r9   rH   rH   rH   rI   rL   ;  r_   rd   n   i6  )r   rU   ro   c                   S   s,   t td td  tt  dt t  d S )NrV   ry   r   rK   ra   rb   rH   rH   rH   rI   rL   @  s   , c                   S   s   t td td  S )NrO   rV   r&  rH   rH   rH   rI   rL   A  r[   r'  >   )r   rm   r   )rm   r   )rU   r   )rm   rz   )rz   rm   r   )rU   rz   )rK   ra   r   r~   r   r   r   r,   tupler-   rS   r?   rj   r/   r`   rb   r   m1m2m3rC  r1   r   r   r6   r7   r8   r9   rQ   r.   rk   )rG   r`  rH   rH   rI   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 )NrV   rq   r   rc   O   r   rV   rq   r   rs   rU   r   )rV   rs   rV   c                   S   s   t ddddddS )NrV   rq   rf   rc   r  r   )r0   rH   rH   rH   rI   rL   O  s    ztest_holzer.<locals>.<lambda>)r0   r?   rj   rH   rH   rH   rI   test_holzerF  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}   rH   )rK   ra   rb   r   r   r0  rH   rI   rL   T  s   $ z"test_fail_holzer.<locals>.<lambda>)rc   r  r   )   rU   r   r  r   rV   )maxr0   )
rG   rK   ra   rb   Zxyzr   r   r  r`  hrH   r  rI   test_fail_holzerR  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 )Nrs   rz   r{   r|   )r   r`   ra   rK   rb   r~   r   r   rH   rH   rH   rI   test_issue_9539`  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 )NrO   rV   rf   r   r   r   r  rH   rH   rH   rI   test_issue_8943e  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 )Nrc   iq
  )rO   rs   rs   )rV   rc   rq   rV   c                      s   t   dS r}   )r   rH   rF   rH   rI   rL   o  rM   z.test_diop_sum_of_even_powers.<locals>.<lambda>negTr>  )rv   rs   rs   r   )limit)
rK   ra   rb   r   r   r?   rk   r	   r   rS   )r  rH   rF   rI   test_diop_sum_of_even_powersk  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>   )rV   rO   ro   rs   rq   )r   rU   rc   ro   rz   )r   r   rU   rU   r   )r   r   ro   rq   rq   )r   rO   ro   ro   rt   )rU   rV   rO   rO   r   )r   rU   rO   rq   rt   )rU   ro   ro   rs   rs   )r   rO   rc   rq   rq   )rV   rV   rO   ro   rz   )rU   rU   rV   rs   rz   )rU   rU   rs   rs   rq   )rU   rO   rc   rc   rz   )rO   rO   rc   ro   rt   rV   r   rf   c                   S   s   t tddS )Nr   rm   )rY  r4   rH   rH   rH   rI   rL         z,test_sum_of_squares_powers.<locals>.<lambda>rU   rW   T)r   rU   r   rO   r   r  rc   rX   ro   2   )ro   ro   )rU   rq   r   )rU   rU   rU   rV   rV   )r   r   rU   rU   rO   rt   )rU   rU   rU   rU   rU   rU   rU   rU   c                 S   s    g | ]}t tt|d dqS )ro   TrC  rY  r4   r9  rH   rH   rI   r     re   z.test_sum_of_squares_powers.<locals>.<listcomp>r   )rU   rU   rU   rU   rV   rV   rU   rU   rV   rV   rV   rV   rV   rO   rV   rU   rO   rO   rO   rO   rc   rO   rO   rV   rV   rc   rc   rc   rc   ro   c                 S   s   g | ]}t tt|d qS )ro   r  r9  rH   rH   rI   r     r   )r   r   r   r   r   rU   r   r   rU   r   r   rU   r   rU   rU   r   rU   rU   r   rU   rV   rU   rU   rU   rU   rU   rU   rU   rU   rO   c                 3   &    | ]}t d d |D  kV  qdS )c                 s   r7  r8  rH   r   jrH   rH   rI   r;    r<  7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>NrB  r   r:  rH   rI   r;       $ z-test_sum_of_squares_powers.<locals>.<genexpr>c                 3   r  )c                 s   r7  r8  rH   r  rH   rH   rI   r;    r<  r  Nr  r   r  rH   rI   r;    r  c                   S      t tdddS )NrV   rm   rU   rY  r3   rH   rH   rH   rI   rL     rP   c                   S   r  )NrV   rU   rm   r  rH   rH   rH   rI   rL     rP   rn   r   rc  )r   rU   rU   ))r   ro   )rU   rc   r)  rs      i  )rz   rG  )r   r   rK   ra   rb   r   r   rC  r?   rj   rY  r4   rA  rS   ri  r3   )ZtrurG   r`  s1s2rH   r  rI   test_sum_of_squares_powersw  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 )	NrO   rm   Frv   rU   r   rc   rV   )r:   rH   rH   rH   rI   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   r/  rc   r  r)  Tr  rV   r   #   i0  r   r   ry   r   )r5  r   r   r0  r1  r2  r   rS   rA   r+  rC  rK   ra   )	r   r   r0  r1  r2  rG   r,  r-  ZsolnrH   rH   rI   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 )NrV   rc   rU   r'  r(  r   )rU   rO   rK   ra   r   rF   rH   rH   rI   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 )NrO   rV   r  c                      s   t  tthdS )Nr  )r   ra   rK   rH   rF   rH   rI   rL     rP   z!test_issue_9538.<locals>.<lambda>)rK   ra   r   r~   r?   rQ   rH   rH   rF   rI   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 )NrV   rn   rc   rO   H   r   r   rz   rs   rt   ro   rq   r  r   r  i~i i
  ix  i:
 ii  ib<  )r   rK   ra   rb   r   r   r}  r2   )r  r  r  rh  rH   rH   rI   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 )NrH   c                      s     tfS rE   )addrK   rH   )r  rH   rI   rL     rM   z/test_diophantine_solution_set.<locals>.<lambda>c                      
     dS )NrW   r  rH   )r  rH   rI   rL     r  )rO   rc   rm   c                      s
     S rE   )updaterH   )r  r  rH   rI   rL     r  rO   rc   rV   rU   rq   rt   )r"  rm   rU   ro   r   rv   )ry   r   rU   )   rt   rU   c                      s    j ddS )NrU   )rK   r   rH   s3rH   rI   rL     rM   c                      s     dddS NrU   rV   rO   r  rH   r  rH   rI   rL     r  c                      r  )NrH   r  rH   r  rH   rI   rL     r  c                      r  )N)rU   rV   rO   rc   r  rH   r  rH   rI   rL     r  c                      r  )Nr   r  rH   r  rH   rI   rL     r  c                      s    dddS r  rH   rH   r  rH   rI   rL     rM   c                      s
    ddS )NrU   r  rH   rH   r  rH   rI   rL     r  r   r  r   r   )r;   rS   r	   r4  r?   rj   rY  Zdict_iteratorrK   ra   r   r   r  r  rb   rC  r   rQ   )Zs4rH   )r  r  r  rI   test_diophantine_solution_set  sV   

($$ ("*(r  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 )	NirO   rV   r3  r   ir   r   )rK   ra   r=   r   r   r   )rG   r  rH   rH   rI    test_quadratic_parameter_passing"  s    r  c                  C   s~   t d dt   td  dt  } t| }|h dksJ dt d  dt   dtd   dt  d }t|}|dhks=J d S )	NrV   rg   rt   >   )rg   rt   )rm   rc   r   )rg   r   )r   rt   )r   rc   rz   rc   rf   r   r  )Zeq1r   Zeq2rH   rH   rI   test_issue_18628)  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   r0  r1  r  r  rK   ra   rb   r`   r   r   r   r   r   r  r~   r   r   Zt_3Zt_4Zt_5Zt_6r  r  r  rD   rJ   rR   rT   rZ   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r.  r6  rF  rV  r\  ra  rd  rl  rv  r{  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH   rH   rH   rI   <module>   s    &
	K	
$Y 	-/
9

1