a
    lhG                     @   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.9/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   -   rM   )r?   	TypeErrorrH   rH   rH   rI   test_input_format+   s    rQ   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    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sDJ d S )N      rT   rU   r   rK   rH   rH   rH   rI   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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 )NrU   rO   rT   )r+   rK   rH   rH   rH   rI   rL   <   rM   z$test_classify_diop.<locals>.<lambda>c                   S   s   t dS NrT   r+   rH   rH   rH   rI   rL   =   rM   c                   S   s   t tt t t d S rZ   )r+   wrK   yzrH   rH   rH   rI   rL   >   rM   c                   S   s    t td td  td  d S )NrO      Z   )r+   rK   r]   r^   rH   rH   rH   rI   rL   ?   rM      rU      *   rT   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?   rP   
ValueErrorNotImplementedErrorr+   rK   r]   r^   r\   rH   rH   rH   rI   test_classify_diop;   s>    

&
("($rg   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s8J t d	t dt  dt  d
 dt d
 dt d
 fksvJ 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slJ 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   rO   )rU   rE   r_   )r      )ri         )NN   )r   rj   rj   NNN      	         c                   S   s   t td S NrU   rX   rH   rH   rH   rI   rL   o   rM   ztest_linear.<locals>.<lambda>)
r   rK   r]   t_0r^   t_1r\   t_2r?   rP   rH   rH   rH   rI   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 )NrO   "   rt   rT   )i{)rj   irn   rU   r_   6   )   r      )rh   rj   8   rl   >   )i   ri   )irl   rT   )i)r   @   )i)i_rq   )iiru   rh   0   )r   rK   r]   rR   tr   rH   rH   rH   rI   %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 )Nrc   rU   ro   rb         i3  )r~   rh   r_   rO   rj      rt   rh   rh   ru   ra   V  )rn   
   r}      r   rT   rT   )rh   rU   rT   ri   )r   rK   r]   rR   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 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 )Nro   rU      rs   rj   rl      rn   rt   r_   rO   rT   )   (   check_solutionsrK   r]   rH   rH   rH   rI   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_   rU   rj   ri   rO   r      rt      ro   r       r   r   ru   rn   r   rH   rH   rH   rI   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 )NrU   rj   rO   ru   rn   r   )r   rK   r]   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||r8J q8d S )NirU   rO   rT   rK   r]   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 rx   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 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 )Nro   rU   r   r   r   r   rq   rl   rj   r   r_   rO   rT   r   rH   rH   rH   rI   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 )KNrO   r   r   r   rk   ir   rU   rT   r   r   r   r   rj   ru   r   r      )rs   r_   iL)rt   rn   rl   rh   rT   rU      ))rt   rj   )rj   rt   )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^	 )!   ro      )   '   )rs   rj   r   )r   rj   i"  )r   rT   	S  l   !K2l   uGoX r   r   )rO   rT   )  m   $   r   rq   r   r   Tr   ))   =   r   r   )      rt   rO      rt   >   )l   ;>x< i|r   rT   )ipi"'M)l   )fMOl   ?_)iX i  )i)  iS  r   )i  i     rs   )r   rT   )rn   rT      rU   r   ri   {   )r   rT   r   r~   i)rT   )r   rT   )r   r   r   rR   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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   )rq   rT   r   r   )r   )r   rO   r   )ir   r   ri     rT   )l   uL" l   EY   rr   ru   rT   r   r   rh   r   iT  )i  r   r   r   r_   rU   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sPJ t dd
ddksdJ t ddddksxJ d S )NrU   rT   r   ri   r_   rj   rO   rk   r   r   rn   rl   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 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   rT   c                 S   s   g | ]}t |jttg qS rH   )reversedas_independentXY.0r   rH   rH   rI   
<listcomp>9  rM   z-is_pell_transformation_ok.<locals>.<listcomp>FrU   T)r)   r
   r   r   rJ   subsr   rK   r]   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
 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   rU   rl   ra   r   r   rj   r   r   r   r   -   r      r   rO   r      r   rb   ru   r   )r   rK   r]   rH   rH   rH   rI   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 )NrU   r   rO   rj   )rO   rj   r_   rl   )rj   rl   ro   ru   )rv   r   rt   )ro   T   rq   )rT   r   r   ra   )e   i)r   rK   r]   rH   rH   rH   rI   test_find_DNU  s    $$000.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 snJ d S )N)r   r   rO   r~   r   i)r_   rm   )rm   r_   [   rq   r   rT   rh   )r_   r   r   r   i) rT   r   irU   rh   rn   )r    r   abr\   rK   r]   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  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   rU   A  r   ih  rj   r_   rO   rn   r   r   r   r   rt   ru   r}   i-  |   r   1  r   rK   r]   r^   rH   rH   rH   rI   "test_diop_ternary_quadratic_normalj  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 rH   )r   r   r   r   r   ZrH   rI   r   ~  rM   z/is_normal_transformation_ok.<locals>.<listcomp>FT)r*   r
   rK   r]   r^   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  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 )	NrU   rO   r   r   rt   d   r   r}   )r  rK   r]   r^   rH   rH   rH   rI   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 )NrU   r_   rO   rj   rl   ro   rt   r   1   r   r`   r   r   rp   c                
   S   s0   t tttftt dtd dtd dtd diS )NrT   rU   rO   r   )r5   rK   r]   r^   rH   rH   rH   rI   rL     s    
"z-test_diop_ternary_quadratic.<locals>.<lambda>ri   rn   )rl   rU   r   )rT   r   rU   r   rk   rr   )r   rK   r^   r]   r   r?   re   r   rD   r2   pqr   rF   rH   rH   rI   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 )NrT   rh   r   rj   rk   r_   r   rU   rt   r   rn   rs   rO   4   r  rl   i  ra   )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  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 )NrU   r   r   rO   rj   rl   r  r   ro   r   r   r         r   r   r`   r   rH   rH   rH   rI   "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 )NrU   rO      iY  rt   r   r}   r   rH   rH   rH   rI    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   rU   c                   S   s
   t ddS )Nrh   rq   r   rH   rH   rH   rI   rL     rM   ztest_descent.<locals>.<lambda>c                   S   s
   t ddS )Nr   rO   r  rH   rH   rH   rI   rL     rM   c                   S   s
   t ddS )Nr_   rO   r  rH   rH   rH   rI   rL     rM   )r   r?   rP   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   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 )<NrU   rO   rl   rT   rb   rj   r_   a   Tpermutera   rT   rU   rO   \   c   )ru   rl   3   i{  ru   iKf   i  ij  r  )rT   rT   rU   ri   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r        i	  i>  iipE i* i',  i  i  rt   )r   rU   rT   r   c                   S   s   t ttd  d S )NrU   rT   r   rK   r]   rH   rH   rH   rI   rL   -  rM   z"test_diophantine.<locals>.<lambda>>   )r_   r_   )ri   rT   r   )rO   rn   )rn   rO   >   )r   rh   )r   rT   r   )rh   rT   r   r   )r_   rh   )r_   rT   r   Q   )symsr  >   )rq   ri   )rO   ri   )rU   rq   )ri   rq   rU   rO   )ri   rO   )rq   rU   rO   rU   )r   rK   r]   r^   r\   r   r   r   ry   rR   rA   popr   Zas_coefficients_dictr5   r  r  r?   rf   r   ZHalfr   )rG   base_solcomplete_solnr   rH   rH   rI   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erU   r_   ru   r   r   
parameters)	sympy.abcr   r   r(  r)  r*  r   r<   r   rK   r]   r^   r'  rH   rH   rI   test_general_pythagoreanC  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 )NrO   r   c                 s   s   | ]}|d  V  qdS rU   NrH   r   irH   rH   rI   	<genexpr>T  rM   z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>z:%irU   ra   r  i!  z:56Tnegativec                 S   s   g | ]}|d  qS rW   rH   r0  rH   rH   rI   r   _  rM   z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>p   >   )r   r   r_   r_   r_   rr   )rT   rT   rT   rO   rn   rr   )rT   rU   rO   rO   rj   rr   )rT   rT   rU   rO   r_   r   )r   rT   rj   rj   rj   r   )r   rT   rT   rj   rn   rm   )r   rO   rO   rO   rn   rm   )r   rT   rT   rU   rj   r   )r   r   rU   rn   rn   r   )rT   rT   rO   r_   rn   rm   )r   rT   rU   rO   rl   rm   )rU   rU   r_   r_   rn   r   )rT   rO   r_   rj   rj   r   )rU   rO   rO   r_   rj   rm   )r   rT   rT   rT   rO   r   )r   rU   rU   rU   rn   rr   )r   rU   rO   rO   rO   r   )r   r   rU   rU   rU   r   )r   rU   rO   rj   rj   rm   r  i  rt   )rU   rU   rU   r_   c                      s
   t   S rE   r[   rH   rF   rH   rI   rL   o  rM   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>)ranger   sumr	   r   rK   r]   r^   rR   r   r   lenr   r   r   r   r(  r)  r?   rf   )r1  var	base_solnrH   rF   rI   &test_diop_general_sum_of_squares_quickR  s$    ( *,,$r<  c                  C   s8   t d td  td  d } h d}t| |ks4J d S )NrU   i@B >   )r   r     )r   `  i  )  X    )r   rA  r   )r   rA  i  )r   r?  iX  )        )r   r@     )  @  r   )   r?  `  )r   rF  rD  )r>  h  rI  )i  r?  r   )rJ  r?  rE  )rC  r@  r   )`   rJ  i  )rB  rG  rE  )rK  r?  ih  )rK   r]   r^   r   )rG   r;  rH   rH   rI   test_issue_23807r  s    rL  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)ro   r   rT   ro   rO   rj   c                 S   s   g | ]}t |qS rH   list)r   r  rH   rH   rI   r     rM   z'test_diop_partition.<locals>.<listcomp>)r   r   r   r   rO   )r   r   r   rT   rU   )r   r   rT   rT   rT   r   rH   c                 S   s   g | ]}t |qS rH   rM  r0  rH   rH   rI   r     rM   )rT   rT   rT   rU   )r7  r#   r9  rN  )nkr  rH   rH   rI   test_diop_partition}  s    
rQ  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)
rj   r   r   rw   %   r   i%	  i  i  iY  rU   rl   i5 )i  i  r   )r%   typeint)r1  r   r   ansrH   rH   rI    test_prime_as_sum_of_two_squares  s    rV  c                  C   s   dD ]>} t | \}}}|d |d  |d  | ks6J |dksJ qttdd  t dd u sbJ t dd u srJ t dd	ksJ t d
dksJ d S )N)r   rT   rU   r}   r   l   my l   85Jdl   8l9_	 rE  i!  i"  i#  i$  i%  i&  rU   r   c                   S   s   t dS Nrh   )r(   rH   rH   rH   rI   rL     rM   z+test_sum_of_three_squares.<locals>.<lambda>rl   i <  r   )r   r   rj   r_   r   r   rU   )r(   r?   re   )r1  r   r   r(  rH   rH   rI   test_sum_of_three_squares  s     rY  c                  C   s   ddl m}  | dd}tdd t|D |ks4J ttdd  td	D ]`}t|}t|d
ksfJ tdd |D s|J tdd |D |ksJ t	|t
|ksJJ qJd S )Nr   )randintrT   l    @ k c                 s   s   | ]}|d  V  qdS r/  rH   r0  rH   rH   rI   r2    rM   z+test_sum_of_four_squares.<locals>.<genexpr>c                   S   s   t dS rW  )r'   rH   rH   rH   rI   rL     rM   z*test_sum_of_four_squares.<locals>.<lambda>r=  r_   c                 s   s   | ]}|d kV  qdS r   NrH   r   rrH   rH   rI   r2    rM   c                 s   s   | ]}|d  V  qdS r/  rH   r\  rH   rH   rI   r2    rM   )Zsympy.core.randomrZ  r8  r'   r?   re   r7  r9  allrN  sorted)rZ  rO  resultrH   rH   rI   test_sum_of_four_squares  s    
ra  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   rO   rU   )r   rU   r_   )rU   rT   rU   )rO   rT   rO   )rj   rU   rU   )i@0  rU   r_   )i  rU   rO   r   rv   rU   r_   T)rT   rT   rO   rO   )r   r   rU   r_   c                   S   s   t tdddS )Ng333333?rU   rN  r$   rH   rH   rH   rI   rL     rM   z+test_power_representation.<locals>.<lambda>c                   S   s   t tdddS NrU   r   rb  rH   rH   rH   rI   rL     rM   c                   S   s   t tdddS rc  rb  rH   rH   rH   rI   rL     rM   rh   rT   rV   rO   rW   r  rn   )zeros)rT   rU   rU   rU   rU   rU   )r   r   r   r   r   rO   rj   Fri   r   r   i  pi   @)r   r   rl   rj   r_   rU   rT   )r$   nextr9  StopIterationrN  r?   re   r3   )teststestrO  r  rP  flZchk_sumZl_ibigr1  rH   rH   rI   test_power_representation  sF    

rl  c                  C   sP  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sJ t dddd\}}td|d  d| |  d	|  }|t ksJ t dddd\}}td|d  d| |  d	|  }|dhksLJ dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rC   ZpositiverU   i  >   )y   r_   )r   r   )rj   rv   )   rU   )_   rj   )i  rT   za bFrO   rn   >   )rm   rk   )r   rq   )r   r   )r   r   )r   r   )rk   rr   zx yrB   r   rj   >   )rT   rk   )rq   rj   r   )rC   r5  r   N)r	   r   rR   )mrO  Zdiofr   r   rK   r]   rH   rH   rI   test_assumptions  s     $$$rq  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_argsrN  free_symbolssortr   r#  rJ   r   r   )rG   sZfactorsr:  solutionri  rH   rH   rI   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sPJ t	dddt
 kshJ 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sFn 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sDn J tddddksZJ ttdd  tdddd ks~J ttd!d  ttd"d  tt d td  d d# h d$ksJ d S )%NrU   rT   ri   rn   rt   r_   rs   rO   r   r   r   ro   c                 s   s   | ]}| td V  qdS r[  )r   r   )r   _rH   rH   rI   r2  #  rM   z$test_diopcoverage.<locals>.<genexpr>rv   rj   r   r   r"  c                   S   s   t dddS )Nr_   rv   rT   )r"   rH   rH   rH   rI   rL   )  rM   z#test_diopcoverage.<locals>.<lambda>r   r   r   TFr  c                   S   s   t dS )N)rU   r_   rn   )r9   rH   rH   rH   rI   rL   ;  rM   r`   n   i6  )r   rT   rj   c                   S   s,   t td td  tt  dt t  d S )NrU   rt   r   rK   r]   r^   rH   rH   rH   rI   rL   @  rM   c                   S   s   t td td  S )NrO   rU   r  rH   rH   rH   rI   rL   A  rM   r  >   )r   rh   r   )rh   r   )rT   r   )rh   ru   )ru   rh   r   )rT   ru   )rK   r]   r   ry   r   r   r   r,   tupler-   rR   r?   re   r/   r\   r^   r   m1m2m3r9  r1   r   r   r6   r7   r8   r9   rP   r.   rf   )rG   rU  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s4J ttdd  d S )NrU   rl   r   r_   O   r   rU   rl   r   rn   rT   r   )rU   rn   rU   c                   S   s   t ddddddS )NrU   rl   ra   r_   r  r   )r0   rH   rH   rH   rI   rL   O  rM   ztest_holzer.<locals>.<lambda>)r0   r?   re   rH   rH   rH   rI   test_holzerF  s    r  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 rx   rH   )rK   r]   r^   r   r   r(  rH   rI   rL   T  rM   z"test_fail_holzer.<locals>.<lambda>)r_   r  r   )   rT   r   r  r   rU   )maxr0   )
rG   rK   r]   r^   Zxyzr   r   r   rU  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sJJ d S )Nrn   ru   rv   rw   )r   r\   r]   rK   r^   ry   rz   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sFJ d S )NrO   rU   ra   r   r   r   rz  rH   rH   rH   rI   test_issue_8943e  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
  )rO   rn   rn   )rU   r_   rl   rU   c                      s   t   dS rx   )r   rH   rF   rH   rI   rL   o  rM   z.test_diop_sum_of_even_powers.<locals>.<lambda>negTr4  )rq   rn   rn   r   )limit)
rK   r]   r^   r   r   r?   rf   r	   r   rR   )r  rH   rF   rI   test_diop_sum_of_even_powersk  s    "r  c                     sj  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dgksJ 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g ksJ t
tddd	dgksJ t
tddg ksJ t
tdddgks(J t
tddg ks@J t
tddddgks\J t
tddd	ddgkszJ 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 ]b tt dd	}|rt fd d!|D sJ 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sxJ 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(gksJ t
tdddd	g d)ksJ t
td*ddg ksJ t
td+ddg ks"J t
td,ddd-gkrDd,d,ksHJ t
tdd. ddg ksfJ d S )/N>   )rU   rO   rj   rn   rl   )r   rT   r_   rj   ru   )r   r   rT   rT   r   )r   r   rj   rl   rl   )r   rO   rj   rj   ro   )rT   rU   rO   rO   r   )r   rT   rO   rl   ro   )rT   rj   rj   rn   rn   )r   rO   r_   rl   rl   )rU   rU   rO   rj   ru   )rT   rT   rU   rn   ru   )rT   rT   rn   rn   rl   )rT   rO   r_   r_   ru   )rO   rO   r_   rj   ro   rU   r   ra   c                   S   s   t tddS )Nr   rh   )rN  r4   rH   rH   rH   rI   rL     rM   z,test_sum_of_squares_powers.<locals>.<lambda>rT   rV   T)r   rT   r   rO   r   r  r_   rW   rj   2   )rj   rj   )rT   rl   r   )rT   rT   rT   rU   rU   )r   r   rT   rT   rO   ro   )rT   rT   rT   rT   rT   rT   rT   rT   c                 S   s    g | ]}t tt|d dqS )rj   Tr9  rN  r4   r0  rH   rH   rI   r     rM   z.test_sum_of_squares_powers.<locals>.<listcomp>r   )rT   rT   rT   rT   rU   rU   rT   rT   rU   rU   rU   rU   rU   rO   rU   rT   rO   rO   rO   rO   r_   rO   rO   rU   rU   r_   r_   r_   r_   rj   c                 S   s   g | ]}t tt|d qS )rj   r  r0  rH   rH   rI   r     rM   )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   rO   c                 3   s$   | ]}t d d |D  kV  qdS )c                 s   s   | ]}|d  V  qdS r/  rH   r   jrH   rH   rI   r2    rM   7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>Nr8  r   r1  rH   rI   r2    rM   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/  rH   r  rH   rH   rI   r2    rM   r  Nr  r   r  rH   rI   r2    rM   c                   S   s   t tdddS )NrU   rh   rT   rN  r3   rH   rH   rH   rI   rL     rM   c                   S   s   t tdddS )NrU   rT   rh   r  rH   rH   rH   rI   rL     rM   ri   r   rX  )r   rT   rT   ))r   rj   )rT   r_   r!  rn      i  )ru   r=  )r   r   rK   r]   r^   r   r   r9  r?   re   rN  r4   r7  rR   r^  r3   )ZtrurG   rU  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s2J t dds@J t ddsNJ t dds\J t dddu snJ d S )	NrO   rh   Frq   rT   r   r_   rU   )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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  rU   r   #   i0  r   r   rt   r}   )r-  r   r   r(  r)  r*  r   rR   rA   r#  r9  rK   r]   )	r   r   r(  r)  r*  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s4J d S )NrU   r_   rT   r  r   r   )rT   rO   rK   r]   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s6J tt fdd d S )NrO   rU   r  c                      s   t  tthdS )Nr  )r   r]   rK   rH   rF   rH   rI   rL     rM   z!test_issue_9538.<locals>.<lambda>)rK   r]   r   ry   r?   rP   rH   rH   rF   rI   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 )NrU   ri   r_   rO   H   r   r   ru   rn   ro   rj   rl   r   r   r   i~i i
  ix  i:
 ii  ib<  )r   rK   r]   r^   r   r   rs  r2   )ru  r  r  r]  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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 )NrH   c                      s     tfS rE   )addrK   rH   )r  rH   rI   rL     rM   z/test_diophantine_solution_set.<locals>.<lambda>c                      s
     dS )NrV   r  rH   )r  rH   rI   rL     rM   )rO   r_   rh   c                      s
     S rE   )updaterH   )r  r  rH   rI   rL     rM   rO   r_   rU   rT   rl   ro   )r  rh   rT   rj   r   rq   )rt   r   rT   )   ro   rT   c                      s    j ddS )NrT   )rK   r   rH   s3rH   rI   rL     rM   c                      s     dddS NrT   rU   rO   r  rH   r  rH   rI   rL     rM   c                      s
     dS )NrH   r  rH   r  rH   rI   rL     rM   c                      s
     dS )N)rT   rU   rO   r_   r  rH   r  rH   rI   rL     rM   c                      s
     dS )Nr   r  rH   r  rH   rI   rL     rM   c                      s    dddS r  rH   rH   r  rH   rI   rL     rM   c                      s
    ddS )NrT   rw  rH   rH   r  rH   rI   rL     rM   r   r  r   r   )r;   rR   r	   r,  r?   re   rN  Zdict_iteratorrK   r]   r   r   r  r  r^   r9  r   rP   )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sLJ |dddhks`J d S )	NirO   rU   r+  r   ir   r   )rK   r]   r=   r   r   r   )rG   rv  rH   rH   rI    test_quadratic_parameter_passing"  s     r  c                  C   s~   t d dt   td  dt  } t| }|h dks8J dt d  dt   dtd   dt  d }t|}|dhkszJ d S )	NrU   rb   ro   >   )rb   ro   )rh   r_   r   )rb   r   )r   ro   )r   r_   ru   r_   ra   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   r(  r)  r  r  rK   r]   r^   r\   r   r   r   r   r   r   ry   rz   r{   Zt_3Zt_4Zt_5Zt_6r|  r}  r~  rD   rJ   rQ   rS   rY   rg   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<  rL  rQ  rV  rY  ra  rl  rq  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