
    sgæ                     p   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      \  ZPZQZRZSZTZUZVZWZXZYZZZ[Z\Z]Z^Z_ edd      \  Z`ZaZbZcZdZeZf edd      \  ZgZhZi edd      Zjd Zkd Zld Zmd Znd Zod Zpd Zqd Zrd Zsd  Ztd! Zud" Zvd# ZweKd$        Zxd% Zyd& Zzd' Z{d( Z|d) Z}d* Z~d+ Zd, Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZeMdA        ZdB ZdC ZdD ZdE ZdF ZdG ZeMdH        ZdI ZdJ ZdK ZdL ZyM)N    )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                 <    t        t        t        |                   S N)r   r   eqs    c/var/www/html/venv/lib/python3.12/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pydiop_simplifyrJ   '   s    GHRL)**    c                  H    t        t        d        t        t        d        y )Nc                  2    t        t        t                    S rF   )r   r   x rK   rI   <lambda>z#test_input_format.<locals>.<lambda>,   s    k#a&1 rK   c                  4    t        t        t        z  dz
        S N   )r   rN   r   rO   rK   rI   rP   z#test_input_format.<locals>.<lambda>-   s    k!B$(3 rK   )r@   	TypeErrorrO   rK   rI   test_input_formatrU   +   s    
912
934rK   c                  v    t        d      t               k(  sJ t        t        d            t               k(  sJ y rR   )r   setr	   rO   rK   rI   test_nosolsrX   0   s/    q>SU"""qt%%%rK   c                      t        t        dz
  t        dz
  dz  z        ddhk(  sJ t        t        dz
  t        dz
  z        ddhk(  sJ y )N      rZ   r[   r   rN   rO   rK   rI   test_univariater_   6   sM    q1uq1uqj()dD\999q1uq1uo&4,666rK   c            
         t        t        d        t        t        d        t        t        d        t        t        d        t	        dt
        dz  z  dt
        z  z   dz
        t
        gd	d
t
        dt
        dz  didfk(  sJ t	        t
        t        z  t        z         t
        t        t        gt
        t        z  d	t        d	idfk(  sJ t	        t
        t        z  t        z   t        z   t
        dz  z         t        t
        t        t        gt
        t        z  d	t        d	t
        dz  d	t        d	idfk(  sJ t	        t
        t        z  t
        t        z  z   t
        dz  z   d	z         t
        t        t        gt
        t        z  d	t
        t        z  d	t
        dz  d	d	d	idfk(  sJ t	        t
        t        z  t        z   t        z   dz         t        t
        t        t        gt
        t        z  d	t        d	d	dt        d	idfk(  sJ t	        t
        t        z  t        t        z  z         t        t
        t        t        gt
        t        z  d	t        t        z  d	idfk(  sJ t	        t
        t        dz  z  d	z         t
        t        gt
        t        dz  z  d	d	d	idfk(  sJ t	        t
        dz  t        dz  z   t        dz  z   dz
        t
        t        t        gd	dt
        dz  d	t        dz  d	t        dz  d	idfk(  sJ t	        t
        dz  t        dz  z   t        dz  z         t
        t        t        gt
        dz  d	t        dz  d	t        dz  d	idfk(  sJ y )Nc                  2    t        t        dz  dz  dz
        S )Nr[   rS   rZ   )r,   rN   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda><   s    mAqDFQJ7 rK   c                      t        d      S NrZ   r,   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>=   s    }Q/ rK   c                  P    t        t        t        z  t        z  t        z  dz
        S rc   )r,   wrN   yzrO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>>   s    ac!eAgk(B rK   c                  T    t        t        dz  t        dz  z   t        dz  z   dz
        S )NrS      Z   )r,   rN   rg   rh   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>?   s%    adQTkAqD6H26M(N rK      r[      *   rZ   i
univariateinhomogeneous_ternary_quadraticinhomogeneous_general_quadratichomogeneous_general_quadratic
cubic_thuerj   b   igeneral_sum_of_even_powers$homogeneous_ternary_quadratic_normal)	r@   rT   
ValueErrorNotImplementedErrorr,   rN   rg   rh   rf   rO   rK   rI   test_classify_diopry   ;   s)   
978
:/0
 BC
 NOAqD2a4",-	
aaQT2&26 6 6 61q!	
Aq	AaCAq>#D&F F F F1q1q!t+,	
Aq!qsAq!QT1a35V1X X X X1qsQT)A-.	
Aq	AaCAaCAqD!Q24U3W W W W1q1r)*	
Aq!qsAq!QAq13T/V V V V1qs#	
Aq!qsAqsA&(G(I I I I1a4!$	
A1a4Aq!<)1 1 1 1A1q!t+{;<	
Aq	AsAqD!QT1adA68TAV V V VA1q!t+,	
Aq	AqD!QT1adA.0V1X X X XrK   c                  `	   t        t              dk(  sJ t        dt        z        dk(  sJ t        dt        z        dk(  sJ t        t        dz         dk(  sJ t        dt        z  dz         dk(  sJ t        dt        z  dz         dk(  sJ t        t        t        z         t        t         fk(  sJ t        t        t        z   d	z         t        t         fk(  sJ t        t        t        z   d	z
        t        t         fk(  sJ t        d	t        z  t        z
  d
z
        dk(  sJ t        dt        z  dt        z  z   d
z
        dt        z  d
z
  dt        z  d
z   fk(  sJ t        dt        z  dt        z  z
  d
z
        dt        z  d
z
  dt        z  d
z
  fk(  sJ t        dt        z  dt        z  z
  d
z
        dt        z  d
z   dt        z  d
z
  fk(  sJ t        dt        z  d
t        z  z         d
t        z  dt        z  fk(  sJ t        dt        z  dt        z  z         dt        z  t        fk(  sJ t        dt        z  dt        z  z   dz
        dt        z  dz
  dt        z  dz   fk(  sJ t        dt        z  dt        z  z   dz
        dk(  sJ t        d	t        z  dt        z  z   dt        z  z
  d
z         dt        z  d
z   dt        z  d
z   fk(  sJ t        dt        z  dt        z  z   dt        z  z
  d
z         t        dt        z  dt
        z  z   d
z   dt        z  dt
        z  z   d
z   fk(  sJ t        dt        z  dt        z  z   dt        z  z
  d
z   d       dk(  sJ t        dt        z  dt        z  z   dt        z  z   d
z
        dk(  sJ t        d
t        z  dt        z  z   dt        z  z
  dz
        t        dt        z  dt
        z  z   dz   dt        z  dt
        z  z   dz   fk(  sJ t        dt        z  dt        z  z
  dt        z  z   dz
        dt        z  dz   t        dt
        z  z   t
        fk(  sJ t        dt        z  dt        z  z   dt        z  z   t        z
        t        t
        t
        t        z   dt        z  dt
        z  z   dt        z  z   fk(  sJ t        t        d        y )N)r   rZ   rS   )r[   rF   rj   )r      )r|         )NN   )r   r}   r}   NNN      	         c                  &    t        t        dz        S Nr[   r^   rO   rK   rI   rP   ztest_linear.<locals>.<lambda>o   s    j1o rK   )
r   rN   rg   t_0rh   t_1rf   t_2r@   rT   rO   rK   rI   test_linearr   T   sP   a=D   ac?d"""ac?d"""a!e%%%acAg')))acAg%'''a!esd+++a!eai S3$K///a!eai S3$K///acAgk"e+++acAaCi!m$3BsFQJ(????acAaCi!m$3AcEAI(>>>>bdQqSj1n%!C%!)RVaZ)@@@@acAaCi QsUBsFO333acAaCi RVSM111acAaCi!m$3BsFQJ(????acAaCi!m$444acAaCi!A#o)*quqy!C%!).DDDDacAaCi!A#o)*sAcEAcEMA4EquqQTu}WXGX.YYYYacAaCi!A#o)40I===acAaCi!A#o)*.@@@@acAaCi!A#o)*sBsFQsUNQ4F3QRSVQVY[H[.\\\\acAaCi"Q$&*+#	33;/LLLLacAaCi"Q$&*+S#)QsURPSV^VXY\V\E\/]]]] 9-.rK   c                  V   t        dt        z  t        z  dt        z  z   dt        z  z
  dz         ddhk(  sJ t        dt        z  t        z  dt        z  z   dt        z  z   dz         t               k(  sJ t        d	t        z  t        z  dt        z  z   d
t        z  z
  dz
        dhk(  sJ t        dt        z  t        z  dt        z  z
  dt        z  z
  dz
        dhk(  sJ t        dt        z  t        z  dt        z  z   dt        z  z   dz         h dk(  sJ t        dt        z  t        z  dt        z  z   dt        z  z   dz         t               k(  sJ t        t        t        z  t        z   t        z   dz         dt        ft        dfhk(  sJ t        dt        z  t        z        sJ y )NrS   "   r   rZ   )i{)r}   ir   r[   rj   6   )   r      )r{   r}   8   r   >   i_r   iiiiir   i   r|   r   @   rZ   r   r{   0   )r   rN   rg   rW   tr   rO   rK   rI   %test_quadratic_simple_hyperbolic_caser   r   s   ac!ebdlRT)A-."# # #ac!eackAaC'!+,555c!eAg!mac)B./G9<<<c!eAg1nr!t+b01i[@@@ac!eackBqD(1,- 2F F F F ac!eackAaC'!+,555acAgkAo&B7QG*<<<<r!tAvrK   c                     t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z   dt        z  z   dt        z  z   dz
        dhk(  sJ t        d	t        dz  z  d
t        dz  z  z   dt        z  z   dt        z  z
  dz         t               k(  sJ t        t        dz  t        dz  z   dt        z  z   dt        z  z   dz         dhk(  sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   dt        z  z
  dt        z  z
  dz
        dhk(  sJ t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z   dz
        h dk(  sJ y )Nrn   r[   r   rm         i3  )r   r{   rj   rS   r}      r   r{   r{   r   rl   V  )r   
   r      r{   r[   rZ   rZ   rZ   r|   r   )r   rN   rg   rW   rO   rK   rI   test_quadratic_elliptical_caser      sW    bAg!Ao1a4/"Q$6A=DE)TTTa1fqAvo!+bd2R78CEAAAadQTkAaC'!A#-12xj@@@bAg!Ao1a4/"Q$6A=DE(SSSbAg1Q&AqD0256/0 0 0rK   c                     t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   dt        z  z   dt        z  z   dz         sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   dt        z  z   d	t        z  z   dz
        sJ t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z   d
t        z  z   dt        z  z   dz
        sJ t        dt        dz  z  d
t        z  t        z  z   t        dz  z
  dt        z  z   dz
        sJ t        t        dz  dt        z  t        z  z   t        dz  z   dt        z  z   dt        z  z   dz         sJ t        t        dz  dt        z  t        z  z
  t        dz  z   dt        z  z   dt        z  z   dz         sJ t        t        dz  dt        z  z
  dz         sJ y )Nr   r[      r   r}   r      r   r   rj   rS   rZ   )   (   check_solutionsrN   rg   rO   rK   rI   test_quadratic_parabolic_caser      s   1QT6BqDF?R1W4qs:QqS@2EFFF1QT6BqDF?R1W4qs:RTAAEFFF1QT6BqDF?R1W4qs:QqS@1DEEE2ad7QqSU?QT1AaC7!;<<<1a4!A#a%<!Q$.14qs:Q>???1a4!A#a%<!Q$.14qs:Q>???1a4"Q$;+,,,rK   c                     t        dt        z  t        z        sJ t        dt        dz  z  dt        z  t        z  z
  t        dz  z   dz         sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   dt        z  z
  dt        z  z
  dz         sJ t        d	t        dz  z  d
t        z  t        z  z   dt        dz  z  z   dt        z  z
  dt        z  z   d	z
        sJ t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z   dt        z  z
  d
t        z  z
  dz
        sJ t        dt        dz  z  dt        z  t        z  z
  dt        z  z
  dt        z  z
  dz
        sJ t        dt        z  t        z  dt        dz  z  z
  dt        z  z
  dt        z  z
  dz
        sJ t        t        dz  t        dz  z
  dt        z  z
  dt        z  z
        sJ t        t        dz  dt        dz  z  z
  dt        z  z
  dt        z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        z  z
  d	t        z  z
  dz
        sJ y )Nr   rj   r[   r}   r|   rS   r      r      r   r       r   r   r   r   r   rO   rK   rI   test_quadratic_perfect_squarer      s%    2a46"""1QT6AaCE>AqD0145552ad7QqSU?Qq!tV3QqS82a4?"DEEE2ad7RT!V+a1f4qs:QqS@2EFFF1QT6BqDF?Qq!tV3bd:RTABFGGG1QT6AaCE>AaC/14q89993q57Qq!tV+ac11Q36;<<<1a4!Q$;1,qs23331a4!AqD&=1Q3.145551QT6AadF?QqS02a47!;<<<rK   c                  .   t        t        dz  dt        z  z
  dt        dz  z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        z  z
  dt        z  z
        sJ t        t        dz  t        t        z  z
  t        dz  z
  dt        z  z
        sJ t        t        dz  dt        dz  z  z
  dt        z  z
  dt        z  z
        sJ t        t        dz  t        dz  z   dt        z  z   dt        z  z   dz         j	                         dhk(  sJ y )Nr[   r}   rS   r   r   r   )r   rN   rg   r>   solverO   rK   rI   !test_quadratic_non_perfect_squarer      s     1a4!A#:!Q$.///1QT6AadF?QqS01Q367771a4!A#:1,qs23331a4!AqD&=1Q3.145551a4!Q$;1,qs2Q67==?H:MMMrK   c                      ddt         z  dt         z  dz
  z  z
  t        dt        z  dz
  z  z   } t         t        f}t        |       D ]1  }t        | j	                  t        t        ||                        s1J  y )Nir[   rS   rZ   rN   rg   r   rJ   xreplacedictziprH   vsols      rI   test_issue_9106r      sm    	qsAaC!G}	q!A#'{	*B	
AA2 A T#a+->!?@@@ArK   c                      t         dz  t         z
  t        dz  z
  } t         t        f}t        |       D ]1  }t        | j	                  t        t        ||                        s1J  y r   r   r   s      rI   test_issue_18138r      sW    	
AAqDB	
AA2 A T#a+->!?@@@ArK   c                  >   t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z
  dt        z  z
  dt        z  z
  dz
        sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   d	t        z  z
  dz
        sJ t        d
t        z
  dt        dz  z  z   t        z
  dt        z  t        z  z
  dt        dz  z  z
        sJ t        ddt        z  z   dt        dz  z  z   dt        z  z   t        t        z  z   dt        dz  z  z
        sJ y )Nr   r[   r   r   r   r   r   r   r}   r   rj   rS   rZ   r   rO   rK   rI   test_quadratic_non_perfect_slowr      s   1QT6BqDF?Qq!tV3bd:RTABFGGG 2ad7QqSU?Qq!tV3ac9A=>>>26AadF?Q.1Q61a4?@@@1qs7Qq!tV+ac1AaC7!AqD&@AAArK   c                  "   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(  sJ t        dd      g k(  sJ t        dd      dt        fgk(  sJ t        dd      dt        z  t        f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      dgk(  sJ 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(  sJ t        d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      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(  sJ t        d(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(  sJ t        dd/      g d0k(  sJ t        d1dd2d3dd/      d4k(  sJ t        dd5      g d6k(  sJ t        t        d7d8            h d9k(  sJ t        dd:      d;gk(  sJ t        d<d=      g k(  sJ t        dd      d>d?gk(  sJ t        d@dA      dBgk(  sJ t        d@dC      g k(  sJ t        dDdC      dEgk(  sJ t        dFddGddDdC      sJ t        dDdH      dIdJgk(  sJ t        ddt              dt        fgk(  sJ t        ddt              g k(  sJ y )KNrS   r   r   r   r~   ir   r[   rZ   r   r   r   r   r}   r   r   r      )r   rj   iL)r   r   r   r{   rZ   r[      ))r   r}   )r}   r   )r   r   )r   r   rZ   )i  r   i  )i  ix  i  )l   INd? l   j\i  )i  i"  i  )l   WRlQ]>I2l   AAJtWjU^	 )!   r      )   '   )r   r}   r   )r   r}   i"  )r   rZ   	S  l   !K2l   uGoX r   r   )rS   rZ   )  m   $   r   r   r   r   Tr   ))   =   r   r   )      r   rS      r   >   iX i  ipi"'Mi)  iS  l   )fMOl   ?_l   ;>x< i|r   rZ   r   )i  i     r   )r   rZ   )r   rZ      r[   r   r|   {   )r   rZ   r   r   i)rZ   )r   rZ   )r   r   r   rW   rO   rK   rI   test_DNr      s    1a=VH$$$3r!!!3x'''3x'''3r!!!1a=B1a=aVH$$$1a=ac1XJ&&&2r?b   1c?wi'''1dy(((1a=VH$$$ 2q>ff----2sCCCC
 2q>j\)))3?}o---3??@@@@3?}o---3?^____2q>gY&&&2q>i[((( 2r?wi'''3r!!!2r?wi'''3y(((5""?!@@@@2r?b    2r?<<<< b!S#r2.$6662r?HHHHwsB  %F F F F 2r?{m+++3r!!!2r?w////3?wi'''3r!!!3y((( b!S!S"---37 33331aAx'''1b!"""rK   c                  *   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(  sJ t        dd      dgk(  sJ t        dd      dgk(  sJ t        ddt              dgk(  sJ t        ddt              dt        fgk(  sJ t        ddt              dt        z  t        fdt        z  t        fgk(  sJ t        ddt              dgk(  sJ t        d	dt              g k(  sJ y )Nr   r   )r   )r   rZ   r   r   )r   )r   rS   r   )ir   r   r|     rZ   )l   uL" l   EY   r   r   rZ   r   r   r{   r   iT  )i  r   r   r   rj   r[   rS   )r   r   rO   rK   rI   test_bf_pellr     s8   b"!<<<<b"!IIIIc2"$$$dA#B"CCCCb"&'!2222eR %B$CCCCc29+---b!QF8+++aAAq6(***aAAaC8bdAY"7777aA6(***aQ2%%%rK   c                      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(  sJ t        ddd      dk(  sJ y )Nr[   rZ   r   r|   rj   r}   rS   r~   r   r   r   r   r   r   )r"   rO   rK   rI   test_lengthr   #  s    !Q?a"aq   "a!!!!Qq   !R"""!Q?arK   c                    t        |       \  }}|t        t        t        g      z  |z   d   }|t        t        t        g      z  |z   d   }t	        | j                  t        t        t        f||f                  }t        |j                  D cg c]$  }t         |j                  t        t        g       & c}      }t        t        z  t        t        fD ]  }||j                         v s y t        dz  t        dz  dfD ]  }||j                         vsd||<    |t        dz     dk7  r;t        |t        dz     |t        dz           xr t        |d   |t        dz           S yc c}w )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   rZ   Fr[   T)r*   r   XYrJ   subsr   rN   rg   r   argsreversedas_independentkeysr   )	rH   ABur   
simplifiedr   coeffterms	            rI   is_pell_transformation_okr  ,  sS     #DAq	
61a&>	A	q!A	
61a&>	A	q!ArwwsAq6Aq6':;<JzO!(+1++aV45OPE1a 5::< Aq!tQ uzz|#E$K QT{aq!teAqDk2 )%(E!Q$K(	)  Ps   )E*c                     t        dt        dz  z  dt        z  t        z  z
  t        dz  z   dt        z  z   dt        z  z
  dz
        sJ t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z
  dt        z  z
  dt        z  z
  d	z
        sJ t        t        dz  t        dz  z
  d
z         sJ t        t        dz   dt        dz  z  z   d	z
        sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   dt        z  z
  dt        z  z
  dz         sJ t        dt        dz  z  dt        z  t        z  z   t        dz  z   dt        z  z
  dt        z  z
  dz
        sJ t        t        dz  dt        z  t        z  z
  dt        dz  z  z
  dt        z  z
  d	t        z  z
  dz
        sJ t        dt        dz  z  dt        z  t        z  z
  dt        dz  z  z   d	t        z  z
  dt        z  z
  dz
        sJ y )Nr   r[   r   rl   r   r   r}   r   r   r   r   -   r      r   rS   r      r   rm   r   r   )r  rN   rg   rO   rK   rI   test_transformation_to_pellr  J  s   $SAX!A%51%<qs%BQqS%H2%MNNN$SAX1Q%61a4%?!A#%E1%Lr%QRRR$QTAqD[2%5666$adUQq!tV^b%8999$R1Wr!tAv%5!Q$%>1%Dr!t%Ka%OPPP$SAX1Q%6A%=!%Cc!e%Kc%QRRR$QTAaCE\3q!t8%;ac%ABqD%H2%MNNN$R1Wqs1u_r!Q$w%>A%E1%Lt%STTTrK   c                     t        t        dz  dt        z  z
  t        dz  z
        dk(  sJ t        t        dz  dt        dz  z  z
  dz
        dk(  sJ t        t        dz  dt        z  t        z  z
  dt        dz  z  z
  dz
        dk(  sJ t        dt        dz  z  d	t        z  t        z  z
  t        dz  z
  d
z
        dk(  sJ t        dt        dz  z  dt        z  t        z  z
  t        dz  z
  dz
        dk(  sJ t        dt        dz  z  dt        z  t        z  z   t        dz  z
        dk(  sJ t        dt        dz  z  dt        z  t        z  z
  t        dz  z   dt        z  z   dt        z  z
  dz
        dk(  sJ y )Nr[   r   rS   r}   )rS   r}   rj   r   )r}   r   r   r   )r   r   r   )r   T   r   )rZ   r   r   rl   )e   i)r    rN   rg   rO   rK   rI   test_find_DNr  U  si   1a4!A#:1$%///1a4!AqD&=1$%///1a4!A#a%<!AqD&(1,-7771QT6AaCE>AqD(1,-9991QT6AaCE>AqD(2-.'9992ad7QqSU?AqD()V3333q!t8ac!e#ad*QqS01Q36:;NNNrK   c                      g d} | D ].  \  }}t        ||      \  }}}||dz  z  ||dz  z  z   |dz  k(  r.J  t        dd      J t        dd      J y )N)r   r   rS   r   r   i)rj   r   )r   rj   [   r   r   rZ   r{   )rj   r   r   r   i) rZ   r   ir[   r{   r   )r!   r  abrf   rN   rg   s         rI   test_ldescentr&  _  sz    
4A '11a.1aAv!Q$!Q$&&&' B###Aq>!!!rK   c                  Z   t        dt        dz  z  dt        dz  z  z
  t        dz  z
        sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
        sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
        sJ t        dt        dz  z  d	t        dz  z  z   dt        dz  z  z
        sJ t        t        dz  dt        dz  z  z   t        dz  z
        sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
        sJ t        t        dz  t        dz  z   t        dz  z
        sJ t        d
t        dz  z  t        dz  z   dt        dz  z  z
        sJ t        d	t        dz  z  t        dz  z
  dt        dz  z  z         sJ t        dt        dz  z  dt        dz  z  z   dt        dz  z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z
        sJ y )N   r[   A  r   ih  r}   rj   rS   r   r   r   r   r   r   r   r   i-  |   r   1  r   rN   rg   rh   rO   rK   rI   "test_diop_ternary_quadratic_normalr-  j  s   3q!t8eAqDj01a478882ad7SAX-145551QT6AadF?QT12221QT6AadF?Qq!tV34441a4!AqD&=1a4/0001QT6AadF?QT12221a4!Q$;A-...2ad7QT>Bq!tG34441QT6AqD=2ad723333q!t8bAg-!Q$67772ad7Qq!tV+c!Q$h67773q!t8bAg-QT	9:::rK   c                    t        |       }|t        t        t        t        g      z  \  }}}t        | j                  t        t        t        t        f|||f                  }t        |j                  D cg c]  }t         |j                  |||g        c}      }||z  ||z  ||z  fD ]  }||j                         v s y yc c}w )NFT)r+   r   rN   rg   rh   rJ   r  r   r   r  r  r  r  )	rH   r	  r  r  Zr  r   r  r  s	            rI   is_normal_transformation_okr0  y  s     $A1ay!!GAq!rwwsAq!9q!Qi'@ABJ*//RQ(+1++aAY78RSE1ac1Q3 5::<  Ss   6"Cc                     t        t        dz  dt        dz  z  z   t        dz  z   dt        z  t        z  z
  dt        z  t        z  z
  dt        z  t        z  z         sJ t        t        dz  dt        dz  z  z   dt        dz  z  z
        sJ t        t        dz  dt        z  t        z  z         sJ t        dt        dz  z  dt        dz  z  z
  dt        z  t        z  z
        sJ t        t        dz  dt        z  t        z  z   dt        z  t        z  z
  dt        z  t        z  z         sJ t        t        dz  dt        z  t        z  z   dt        z  t        z  z
  t        t        z  z         sJ t        t        dz  t        dz  z   t        dz  z   t        t        z  z
  t        t        z  z
  t        t        z  z
        sJ t        t        dz  dt        z  t        z  z   dt        dz  z  z         sJ t        t        t        z  dt        z  t        z  z   dt        z  t        z  z         sJ t        dt        z  t        z  dt        z  t        z  z         sJ y )	Nr[   rS   r   r   r   d   r   r   )r0  rN   rg   rh   rO   rK   rI   test_transformation_to_normalr3    s   &q!ta1f}q!t';bd1f'Dr!tAv'MPRSTPTUVPV'VWWW&q!ta1f}s1a4x'?@@@&q!tbd1f}555&qAvAqD'82a46'ABBB&q!tbd1f}r!tAv'=1Q'FGGG&q!tbd1f}r!tAv'=!'CDDD&q!tad{QT'9AaC'?!A#'E!'KLLL&q!tac!e|a1f'<===&qsQqSU{QqSU':;;;&qs1uqs1u}555rK   c                  *   t        dt        dz  z  t        dz  z   t        dz  z   dt        z  t        z  z
        sJ t        t        dz  t        dz  z
  t        dz  z
  t        t        z  z
  t        t        z  z
        sJ t        dt        dz  z  t        t        z  z
  t        t        z  z
  t        t        z  z
        sJ t        t        dz  t        t        z  z
  t        t        z  z
        sJ t        dt        dz  z  dt        z  t        z  z
  t        t        z  z
        sJ t        dt        dz  z  dt        dz  z  z
  t        t        z  z
        sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
  dt        z  t        z  z
  dt        z  t        z  z   dt        z  t        z  z
        sJ t        dt        dz  z  dt        z  t        z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        z  t        z  z
  t        dz  z
        sJ t        t        dz  d	t        dz  z  z
  t        dz  z
  d
t        z  t        z  z   dt        z  t        z  z
        sJ t        dt        dz  z  dt        dz  z  z   dt        z  t        z  z   dt        z  t        z  z   dt        z  t        z  z         sJ t        t        dz  dt        dz  z  z   t        dz  z   t        t        z  z
  dt        z  t        z  z
        sJ t        t        dz  dt        dz  z  z   t        dz  z   t        t        z  z
  dt        z  t        z  z
  dt        z  t        z  z         sJ t        t        dz  dt        dz  z  z   t        dz  z   d
t        z  t        z  z
  dt        z  t        z  z
  dt        z  t        z  z         sJ t        t        t        z  dt        z  t        z  z
  d
t        z  t        z  z         sJ t	        t        dz  t        dz  z   t        dz  z         dk(  sJ t	        t        dz  t        dz  z         J t        t        d        dt        z  t        z  dt        z  t        z  z
  dt        dz  z  z   dt        z  t        z  z
  dt        dz  z  z   } t        |       dk(  sJ t	        dt        dz  z  dt        dz  z  z   t        dz  z
        dk(  sJ t        t        t        z  dt        z  t        z  z         ddt        fk(  sJ dt        z  t        z  dt        z  t        z  z
  dt        z  t        z  z
  dt        dz  z  z   } t        |       dt        dz  z  dt        z  t        z  z
  dt        z  t        z  dt        dz  z  z   dt        z  t        z  fk(  sJ t        t        t        z  dt        z  t        z  z         dt        z  t        z  t         t        dz  z  t        dz  z   t        t        z  fk(  sJ y )Nr[   rj   rS   r}   r   r   r   r  1   r   rk   r   r   r   c                      t        t        t        t        ft        t        z  dt        dz  dt        dz  dt        dz  di      S )NrZ   r[   rS   r   )r6   rN   rg   rh   rO   rK   rI   rP   z-test_diop_ternary_quadratic.<locals>.<lambda>  s;    &1ay	
1aAq!Q$1a4+	- rK   r|   r   )r   r[   r   )rZ   r   r[   r   r~   r   )r   rN   rh   rg   r   r@   rw   r   rD   r3   pqr   rG   s    rI   test_diop_ternary_quadraticr9    s+   1QT6AqD=1a4/!A#a%78881a4!Q$;A-!3ac9:::1QT6AaC<!A#-!34441a4!A#:!+,,,1QT6AaCE>AaC/0001QT6AadF?QqS01111QT6AadF?QT1AaCE9AaCEAAaCEIJJJ1QT6BqDF?+++2ad7Qq!tV+ac!e3ad:;;;1a4"QT'>AqD02a4691Q3q5@AAA2ad7Qq!tV+ac!e3ac!e;ac!eCDDD1a4!AqD&=1a4/!A#51Q>???1a4!AqD&=1a4/!A#51Q>AaGHHH1a4!AqD&=1a4/"Q$q&82a46ABqDFJKKK1Q31Q;Aa/000(A1q!t);<@RRRR(A15===
: - . 
Aa!A#a%!AqD&	 1Q3q5	(1QT6	1B!"%222(1a4!AqD&1a4)?@  !!A#!A+.	Q  	Aa!A#a%!A#a%	!AqD&	(B(,	
1a4!A#a%Aa!AqD&!A#a%01 1 1 acAaCEk"r!tAvs1a4x!Q$!&DDDDrK   c                     t        d      t        d      cxk(  rdk(  sJ  J t        d      dk(  sJ t        d      t        d      cxk(  rdk(  sJ  J t        d      t        d      cxk(  rdk(  sJ  J t        d	      t        d
      cxk(  rdk(  sJ  J t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        d      dk(  sJ t        t        d
            dk(  sJ y )NrZ   r{   r   r}   r~   rj   r   r[   r   r   r   r   rS   4   r5  r   i  rl   )r'   r   rO   rK   rI   test_square_factorr<    s   }R05A55555q   }R05A55555}R05A55555c 27a77777q   !!!!!!!!!###3(A---rK   c                  $   t        t        dz  t        dz  z   t        dz  z
        sJ t        t        dz  dt        z  t        z  z   t        dz  z         sJ t        dt        dz  z  dt        dz  z  z
  t        dz  z
        sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
  dt        z  t        z  z
  dt        z  t        z  z   dt        z  t        z  z
        sJ t        t        dz  t        dz  z
  t        dz  z
        sJ t        t        dz  dt        dz  z  z
  t        dz  z
  dt        z  t        z  z   d	t        z  t        z  z
        sJ t        d	t        z  t        z  t        dz  z         sJ t        d
t        dz  z  dt        dz  z  z
  dt        dz  z  z
        sJ t        dt        dz  z  dt        dz  z  z
  dt        z  t        z  z
  dt        z  t        z  z
  dt        z  t        z  z
        sJ t        dt        dz  z  dt        dz  z  z   dt        z  t        z  z   dt        z  t        z  z   dt        z  t        z  z         sJ t        d
t        dz  z  dt        dz  z  z
  dt        dz  z  z
        sJ y )Nr[   r(  r)  rS   r}   r   r5  r   r   r*  r   r+        r   r   rk   r,  rO   rK   rI   "test_parametrize_ternary_quadraticr@    s@   1a4!Q$;A-...1a4!A#a%<!Q$.///3q!t8eAqDj01a478881QT6AadF?QT1AaCE9AaCEAAaCEIJJJ1a4!Q$;A-...1a4"QT'>AqD02a469AaCEABBB1Q3q51a4<(((3q!t8bAg-QT	9:::3q!t8c!Q$h.Aa7"Q$q&@2a46IJJJ2ad7Qq!tV+ac!e3ac!e;ac!eCDDD3q!t8bAg-QT	9:::rK   c                  ,   t        dt        z  t        z  t        t        z  z   dt        z  t        z  z
        sJ t        dt        z  t        z  dt        z  t        z  z
  dt        z  t        z  z
        sJ t        dt        z  t        z  dt        z  t        z  z         sJ t        t        t        z  t        t        z  z   t        t        z  z         sJ t        dt        z  t        z  dt        z  t        z  z   dt        z  t        z  z         sJ y )Nr[   rS      iY  r   r   r   r,  rO   rK   rI    test_no_square_ternary_quadraticrC    s    1Q3q51Q3;1Q.///3q57SU1W,r!tAv56662a46BqDF?+++1Q319qs?+++2a46BqDF?RT!V3444rK   c                      g d} | D ].  \  }}t        ||      \  }}}||dz  z  ||dz  z  z   |dz  k(  r.J  t        t        d        t        t        d        t        t        d        y )N)	r  r  r  r  r   r  r   r!  r"  r[   c                      t        dd      S )Nr{   r   r   rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gb"o rK   c                      t        dd      S )Nr   rS   rF  rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gam rK   c                      t        dd      S )Nrj   rS   rF  rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gam rK   )r   r@   rT   ZeroDivisionErrorr#  s         rI   test_descentrJ    su    	gA '1!Q-1aAv!Q$!Q$&&&'
 9-.
34
9+,rK   c                     t        t        t        z
  t        t        z
  z  t        t        z
  z        sJ t        t        t        z
  t        dz  t        dz  z   t        dz  z
  z        sJ t        t        dt        z  z
  dt        z  z   t        dz  t        dz  z   t        dz  z
  z        sJ t        t        dz  dt        dz  z  z
  dz
        sJ t        t        dz  dt        z  t        z  z         sJ t        t        dz  dt        z  t        z  z
  t        dz  z         sJ t        t        t        dz  t        dz  z
  dz
  z        sJ t        t        dt        z  dt        z  z
  dz   z        sJ t        t        dz  dt        dz  z  z
  dz
  t        dz  t        dz  z
  dz
  z        sJ t        t        dz  dt        dz  z  z
  dz
  t        dt        z  z
  z        sJ t        t        dz  t        dz  z   t        dz  z
  t        dt        z  z
  dt        z  z
  dt        z  z   z        sJ t        t        dz  dt        z  t        z  z
  dt        z  t        z  z         sJ t        t        dz  dt        z  z
  dz         sJ t        t        t        z
        t        t        t        t                    k(  sJ t        dz  t        dz  z   dz
  } t        | d	
      t        |  d	
      k(  sJ t        dt        z  t        z  dt        z  t        z  z
        dt        z  dt        z  fhk(  sJ t        dz  t        dz  z   t        dz  z   dz
  } dh}t        |       |k(  sJ t        t        |j                                     }t        | d	
      |k(  sJ t        t        dz  t        t        dd      z  z   dz
        t               k(  sJ dt        dz  z  dt        dz  z  z
  t        dz  z
  } | j                         }t        t        t        t        f|      dhk(  sJ t        |       dt        dz  z  dt         dz  z  z   dt        dz  z  dt        z  t         z  z
  dt         dz  z  z   dt        dz  z  dt        z  t         z  z
  dt         dz  z  z
  fhk(  sJ dt        dz  z  dt        dz  z  z   t        dz  z
  } | j                         }t        t        t        t        f|      dhk(  sJ t        |       dt        dz  z  t         dz  z
  dt        dz  z  dt        z  t         z  z   t         dz  z
  dt        dz  z  dt        z  t         z  z
  dt         dz  z  z   fhk(  sJ dt        dz  z  dt        dz  z  z   dt        dz  z  z
  } | j                         }t        t        t        t        f|      dhk(  sJ t        |       dt        dz  z  dt         dz  z  z
  dt        dz  z  d t        z  t         z  z   d!t         dz  z  z
  d"t        dz  z  d#t        z  t         z  z
  d$t         dz  z  z   fhk(  sJ d%t        dz  z  d&t        dz  z  z   d't        dz  z  z
  } | j                         }t        t        t        t        f|      d(hk(  sJ t        |       d)t        dz  z  d*t         dz  z  z
  d+t        dz  z  d,t        z  t         z  z   d-t         dz  z  z
  d.t        dz  z  d/t        z  t         z  z
  d0t         dz  z  z   fhk(  sJ t        dz  dt        dz  z  z   d1t        dz  z  z
  } | j                         }t        t        t        t        f|      d2hk(  sJ t        |       d3t        z  t         z  dt        dz  z  d3t         dz  z  z
  t        dz  d1t         dz  z  z   fhk(  sJ t#        t$        d4        t        dt        z        t               k(  sJ t        dt        z  dt        z  z   t&        j(                  z
        h d5k(  sJ t        t        dz  t        dz  z   dt        z  z   dz
  d	
      h d6k(  sJ t        t        dz  t        dz  z   d7z
  d8z
  t        t        fd	9      h d:k(  sJ t        t        dz  t        dz  z   d7z
  d8z
  t        t        fd	9      h d:k(  sJ t        t        dz  t        z
        sJ t        t        dz  t        z
        sJ t        t        dz  t        z
  t*              t*        t*        dz  fhk(  sJ t        t        dz  t        z
  t*              t*        dz  t*        fhk(  sJ y );Nr[   rS   r   rZ   rm   r}   rj   a   Tpermuterl   rZ   r[   rS   \   c   )r   r   3   i{  r   iKf   i  ij  rR  )rZ   rZ   r[   r|   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r5        i	  i>  iipE i* i',  i  i  r   )r   r[   rZ   r   c                  :    t        t        t        dz  z  dz         S )Nr[   rZ   r   rN   rg   rO   rK   rI   rP   z"test_diophantine.<locals>.<lambda>-  s    AadFQJ(? rK   >   rS   r   rj   rj   r   rS   r|   rZ   r   >   rj   rZ   rj   r{   r   rZ   r   r{   r{   rZ   r   r  r   r   Q   )symsrN  >   r[   r   rS   r|   r   r[   r   r|   r|   rS   r|   r   r[   rS   rS   r[   )r   rN   rg   rh   rf   r   r   r   r   rW   rB   popr   as_coefficients_dictr6   r7  r8  r@   rx   r	   Halfr   )rH   base_solcomplete_solnr  s       rI   test_diophantinerr    s   AEAE?AE2333AEAqD1a4K!Q$$67888A!GacMAqD1a4K!Q$,>?@@@1a4!AqD&=1,---1a4!A#a%<(((1a4!A#a%<!Q$.///1adQTkB./0001acAaCi!m,---AqD1QT6MA-1q!tb0@ABBBAqD1QT6MA-AaC8999AqD1a4K!Q$.QqS1Q311DEFFF 1a4!A#a%<!A#a%/0001a4!A#:>***q1uR1X!6666	
A1r	Br4(KT,JJJJqs2v!B'QsUAcEN+;;;;	
A1q!t	b	 B{Hr?h&&&+HLLN;<Mr4(M999q!taR 000145>>>	AqD2ad7	QT	!B##%E)1a)U;<  r?AqD1QT6419s1uQw.1a47QT	DF1Hr!Q$w& ( ) ) ) ) 
1a4!AqD&1a4	B##%E)1a)U;;  r?	!Q$Ar!Q$w1QA-	!Q$1Q1a4 ! " " " " 
QT"QT'	#ad(	"B##%E)1a)U;     r?AqD[6!Q$;&1wqy{(BAqD[) A+q
2VAqD[@B CC C C 
QT#ad(	3q!t8	#B##%E)1a)U;  r?!Q$Yq!t#VAqD[5719%<uQTz%I1a4Z%'!)#eAqDj02 33 3 3 
A!Q$AqD	 B##%E)1a)U;;  r?T!VQq!tVbAg%q!tbAg~678 8 8  ?@ qssu$$$qsQqSy166)*.XXXXq!tad{AaC'*D9ST T T
 q!tad{T)D01vtLST T Tq!tad{T)D01vtLST T T 1a4!8$$$1a4!8$$$1q1%1ad)4441q1%1a4)444rK   c                     ddl m} m}m}m}m} t        | dz  |dz  z   |dz  z   |dz  z
        sJ t        | dz  d|dz  z  z   d|dz  z  z   |dz  z
        sJ t        d| dz  z  d|dz  z  z   d|dz  z  z   |dz  z
        sJ t        d| dz  z  d|dz  z  z   d|dz  z  z
  d|dz  z  z         sJ t        d| dz  z  d|dz  z  z
  d|dz  z  z   d|dz  z  z         sJ t        |dz   d| dz  z  z   d|dz  z  z   d|dz  z  z   d|dz  z  z         sJ t        d| dz  z  |dz  z
  d|dz  z  z   |dz  z   d|dz  z  z         sJ t        | dz  |dz  z   |dz  z   |dz  z
        j                  t        t        t        g      t        dz  t        dz  z   t        dz  z
  dt        z  t        z  dt        z  t        z  t        dz  t        dz  z   t        dz  z   fhk(  sJ y )	Nr   r$  r%  cder[   rj   r   r   r   
parameters)	sympy.abcr$  r%  ru  rv  rw  r   r=   r   rN   rg   rh   rt  s        rI   test_general_pythagoreanr{  C  s7   ''1a4!Q$;A-145551a4!AqD&=1QT61AqD89991QT6AadF?Qq!tV3ad:;;;1QT6AadF?R1W4qAv=???1QT6Bq!tG+a1f4qAv=>>>AqD51QT6>AadF2Qq!tV;bAgEFFF2ad7QT>AadF2QT9Bq!tGCDDDadQTkAqD01a478>>1aQR)>TTAqD[1a41Q!Aq!tad{QT/ABCD D DrK   c            
         t        dd      D ].  } t        t        d t        d| z        D              | z
        r.J  t	        t
        dz  t        dz  z   dz
        J t	        t
        dz  t        dz  z   t        dz  z   dz         t               k(  sJ t
        dz  t        dz  z   t        dz  z   dz
  t	              dhk(  sJ t        dz  t        dz  z   t
        dz  z   t        dz  z   t        dz  z   dz
  t        t	        d            dk(  sJ t        d	      t        d
d      fz   }t        |D  cg c]  } | dz  	 c}  dz
  h d}t              |k(  sJ t        t        d            dk(  sJ t        dt
        dz  z
  t        dz  z
  t        dz  z
        dhk(  sJ t        dz  t        dz  z   t         dz  z   t"        dz  z   dz
  t%        t&        fd       y c c} w )NrS   r   c              3   &   K   | ]	  }|d z    ywr[   NrO   .0is     rI   	<genexpr>z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>T  s     "DA1a4"D   z:%ir[   rl   rO  i!  z:56Tnegativep   >   r   r   r[   r[   r[   r   r   r   r[   r   r   r   r   r   rj   rj   rj   r   r   rZ   rZ   rZ   rS   r   r   rZ   rZ   r[   r}   r   r   rZ   rZ   r}   r   r   r   rZ   r[   rS   r   r   r   rZ   r}   r}   r}   r   r   r[   r[   r[   r   r   r   r[   rS   rS   rS   r   r   r[   rS   r}   r}   r   r   rS   rS   rS   r   r   rZ   rZ   rZ   rS   r   r   rZ   rZ   r[   rS   rj   r   rZ   rZ   rS   rj   r   r   rZ   r[   rS   rS   r}   r   rZ   rS   rj   r}   r}   r   r[   r[   rj   rj   r   r   r[   rS   rS   rj   r}   r   rM  i  r   )r[   r[   r[   rj   c                      t                S rF   rd   rG   s   rI   rP   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>o  s    rc(: rK   )ranger   sumr
   r   rN   rg   rh   rW   r  r   lenr   r   r$  r%  ru  rv  r@   rx   )r  var	base_solnrH   s      @rI   &test_diop_general_sum_of_squares_quickr  R  s   1b\ Js"D1C"DDqHIIIJ 'q!tad{Q7???&q!tad{QT'9A'=>#%GGG	
A1q!t	y	)B&r*;  	
A1q!t	ad	"QT	)D	0B*2q12a777
$-7368
8C	S!q!t!	"S	(BPI
 r?i'''{2t,-777 rAqDy1a4'!Q$./I;>>> 
A1q!t	ad	"Q	&B
 :;! "s   8G'c                  l    t         dz  t        dz  z   t        dz  z   dz
  } h d}t        |       |k(  sJ y )Nr[   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  )rN   rg   rh   r   )rH   r  s     rI   test_issue_23807r  r  s=    	
A1q!t	g	%BBI
 r?i'''rK   c                     dD ]4  } t        dd      D ]#  }t        | |      D ]  }t        |      |k(  rJ  % 6 t        t        dd            g k(  sJ t        ddd      D cg c]  }t        |       c}g dg dg dgk(  sJ t        t        d	            d
gk(  sJ t        t        dd	            d
gk(  sJ t        d      D cg c]  }t        |       c}g dddgdggk(  sJ y c c}w c c}w )N)r   r   rZ   r   rS   r}   )r   r   r   r   rS   )r   r   r   rZ   r[   )r   r   rZ   rZ   rZ   r   rO   )rZ   rZ   rZ   r[   )r  r$   r  list)nkr7  r  s       rI   test_diop_partitionr  }  s    #q! 	#Aq!_ #1v{"{#	## 	!Q B&&&&q!Q/0DG0/5; ; ; ;	!"%%%	!Q RD(((&q\*DG*y1a&1#.FFFF	 1 +s   #C+C0c                      dD ]   } t        |       \  }}|dz  |dz  z   | k(  r J  t        d      J t        d      }|dk(  rt        |d         t        u sJ y )N)
r}   r   r   r   %   r   i%	  i  i  iY  r[   r   i5 )i  i  r   )r&   typeint)r  r$  r%  anss       rI    test_prime_as_sum_of_two_squaresr    sv    >  *1-1!tad{a  'q)111
%f
-C*c!f!444!4rK   c                      dD ].  } t        |       \  }}}|dz  |dz  z   |dz  z   | k(  sJ |dk\  r.J  t        t        d        t        d      J t        d      J t        d      dk(  sJ t        d	      d
k(  sJ y )N)r   rZ   r[   r   r   l   my l   85Jdl   8l9_	 r  i!  i"  i#  i$  i%  i&  r[   r   c                      t        d      S Nr{   )r)   rO   rK   rI   rP   z+test_sum_of_three_squares.<locals>.<lambda>  s    3B7 rK   r   i <  r   )r   r   r}   rj   r   r   r[   )r)   r@   rw   )r  r$  r%  ru  s       rI   test_sum_of_three_squaresr    s    1 &q)1a!tad{QT!Q&&&Avv	 :78"***	*222  #y000"i///rK   c                  b   ddl m}   | dd      }t        d t        |      D              |k(  sJ t	        t
        d        t        d      D ]a  }t        |      }t        |      dk(  sJ t        d	 |D              sJ t        d
 |D              |k(  sJ t        |      t        |      k(  raJ  y )Nr   )randintrZ   l    @ k c              3   &   K   | ]	  }|d z    ywr~  rO   r  s     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s     4q!t4r  c                      t        d      S r  )r(   rO   rK   rI   rP   z*test_sum_of_four_squares.<locals>.<lambda>  s    226 rK   r  rj   c              3   &   K   | ]	  }|d k\    ywr   NrO   r  rs     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s     *a16*r  c              3   &   K   | ]	  }|d z    ywr~  rO   r  s     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s     (A1a4(r  )sympy.core.randomr  r  r(   r@   rw   r  r  allr  sorted)r  r  results      rI   test_sum_of_four_squaresr    s    ) 	?#A40344999 :674[ .$Q'6{a*6****(((A---F|vf~---.rK   c            	      8   g d} | D ]K  }|\  }}}t        |||      }	 	 t        |      }t        |      |k(  sJ d}|D ]
  }|||z  z   } ||k(  sJ 	 6 t	        t        dddd            ddgk(  sJ t        t        d	        t        t        d
        t        t        d        t	        t        ddd            g k(  sJ t	        t        ddd            dgk(  sJ t	        t        ddd            g k(  sJ t	        t        ddd            dgk(  sJ t	        t        dddd            ddgk(  sJ t	        t        dddd            g k(  sJ t	        t        ddd            dgk(  sJ t	        t        ddd            g k(  sJ t	        t        dddd            dgk(  sJ t	        t        dddd            g k(  sJ t        t	        t        ddd                  dk(  sJ d}	dD ]   }
t	        t        |	d|	|
z
              g k(  r J  y # t        $ r Y w xY w)N))r   rS   r[   )r(  r[   rj   )r[   rZ   r[   )rS   rZ   rS   )r}   r[   r[   )i@0  r[   rj   )i  r[   rS   Tr   r   r[   rj   )rZ   rZ   rS   rS   )r   r   r[   rj   c                  .    t        t        ddd            S )Ng333333?r[   r  r%   rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>  s    t$8a$CD rK   c                  .    t        t        ddd            S Nr[   r   r  rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>      t$8Aq$AB rK   c                  .    t        t        ddd            S r  r  rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>  r  rK   r{   rZ   r\   rS   r]   rc  r   )zeros)rZ   r[   r[   r[   r[   r[   )r   r   r   r   r   rS   r}   Fr|   r   r   i  pi   @)r   r   r   r}   rj   r[   rZ   )r%   nextr  StopIterationr  r@   rw   r4   )teststestr  r7  r  flchk_suml_ibigr  s              rI   test_power_representationr    s   E  1a Aq)
G1v{"{ /C%Q.G/!|#| 	" $RAt45	|$% % %
:DE
:BC
:BC$RA./2555$Q1-.4&888$Q1-."444$Q1-.4&888$T1at<=	/01 1 1$T1au=>"DDD$RA./H:===$RA./2555$Q1d34@@@$Q1e45;;;t()91a@ABaGGG
C$ :M#q#'23r999:/ ! s   3H	HHc                      t        ddd      \  } }t        |dz  | |z  z   dz
        }|h dk(  sJ t        ddd      \  }}t        ||z  d|z  z   d	|z  z   d
z
        }|h dk(  sJ y)z<
    Test whether diophantine respects the assumptions.
    zm nT)rC   positiver[   i  >   i  rZ   r}   r   r   r   _   r}   y   rj      r[   za bFrS   r   >   r   r   r   r   r   r~   r   r   r~   r   r   r   N)r
   r   )mr  diofr$  r%  s        rI   test_assumptionsr    s     5$6DAqq!taczC'(DMMMM5$7DAqqsQqSy1Q3*+DQQQQrK   c           	      &   t        |       }t        j                  |       }t        | j                        }|j                  t               |rD|j                         }|D ]+  }t        |j                  t        ||                  dk(  s+ n y|rDy)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   rm  rJ   r  r   )rH   sfactorsr  solutionr  s         rI   r   r     s     	BAmmBG
r
CHH!H"
557 	AQVVCX$678A=	   rK   c            	      D   dt         z  t        z   dz   dz  } t        |       t        dt        z  dz
  fhk(  sJ dt         dz  z  dt         z  t        z  z   dt         z  z   dt        dz  z  z   dt        z  z   dz   } t        |       t        t         dz
  fdt        z  dz
  t        fhk(  sJ t        t         t        dz  z   dz
        t        dz   dz   t        fhk(  sJ t        t         t        z   dz
        t        dt        z
  fk(  sJ t        d	ddd 
      dk(  sJ dt        z  dz
  dt        z  dz   f}t        dddt              |k(  sJ t        dddd 
      t        d |D              k(  sJ t        ddd      t               k(  sJ t        ddd      dhk(  sJ t        ddd      dhk(  sJ t        t        d        t        ddd      dk(  sJ t        dz   t         dz  z
  t        dz  z
  t        dz  z   } t!        |       t!        |        cxk(  r\t"        dz  t$        dz  z   t&        dz  z
  dt"        z  t&        z  dt$        z  t&        z  t"        dz  t$        dz  z   t&        dz  z   fk(  sJ  J t)        t+        t-        d      t         dz  z   t-        d      t         dz  z   t-        d      t         g            d	k(  sJ t)        t+        t/        dd      t-        d      t         z   t-        d      t         g            d	k(  sJ t)        t+        t-        d      t         z   t/        dd      t-        d      t         g            d	k(  sJ t1        dd      dk(  sJ t3        d      t5        d       cxk(  rdk(  sJ  J t3        d	      t5        d	       cxk(  rdk(  sJ  J t7        ddd      dk(  sJ t        t8        d        t;        ddd      dk(  sJ t        t<        d        t        t<        d         t        t         dz  t        dz  z   dz
  d!z
        h d"k(  sJ y )#Nr[   rZ   r|   r   r   rj   r   rS   r   r   r   r   c              3   H   K   | ]  }|j                  t        d         ywr  )r  r   )r  _s     rI   r  z$test_diopcoverage.<locals>.<genexpr>  s     :UA166!Q<:Us    "r   r}   r   r   rl  c                      t        ddd      S )Nrj   r   rZ   )r#   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>  s    {1b!4 rK   r   r   r   TFrO  c                      t        d      S )N)r[   rj   r   )r:   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>/  s    k)4 rK   rk   n   i6  )r   rZ   r}   c                  ~    t        t        dz  t        dz  z   t        t        z  z   dt        z  t        z  z   dz
        S )Nr[   r   r   rN   rg   rh   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>4  s3    AqD1a4K!A#4E!A4MPR4R(S rK   c                  :    t        t        dz  t        dz  z         S )NrS   r[   rY  rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>5  s    AqD1a4K(@ rK   rc  >   rZ   r   rZ   r   r   r{   r   r{   r{   r   r{   r   r   r   )rN   rg   r   r   r   r   r   r-   tupler.   rW   r@   rw   r0   rf   rh   r   m1m2m3r  r2   r	   r   r7   r8   r9   r:   rT   r/   rx   )rH   r  s     rI   test_diopcoverager%    s   
A#'A+	Bb>sBsFQJ/0000	
1a4!A#a%"Q$	1a4	'"Q$	.	3Bb>q1"q&kBqD1Ha=9999!ad(Q,'adUQYN+;;;;q1uqy!c1s7^3331a40F:::Q37BqD1H
C1b!,3331bD1U:UQT:U5UUUUaB35(((aA6(***aBF8+++
:451a#v---
Q$A1	q!t	#B#B' "%,URU]RU"AbDGbDGRURU]RU*,, , , , ,
 {1Q4!A#:qtacz1Q4!=>!CCC{8Aq>1Q4!8QqTA3?@AEEE{1Q4!8Xa^QqTA3?@AEEE"b!Q&&&758|,,,,,,758|------q!Q9,,,
945h	2    ST
 @A!Q$A+,t34ST T TrK   c                  z    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        y )Nr[   r   r   rj   O   r   r[   r   r   r   rZ   r   )r[   r   r[   c                  "    t        dddddd      S )Nr[   r   rl   rj   r'  r   )r1   rO   rK   rI   rP   ztest_holzer.<locals>.<lambda>C  s    vaB2r: rK   )r1   r@   rw   rO   rK   rI   test_holzerr*  :  sK     !QAr2&*444 !Q1a$	111
::;rK   c                  B  
 
fd} d\  
dx\  }}}}dx\  }}}} | | dk(  sJ  | | dk(  sJ t        
|dz  z  |dz  z  |dz  z        
z  z  k  sJ t        
|dz  z  |dz  z  |dz  z        
z  z  k  sJ t        |||
      }	|	|k(  sJ y )Nc                 8    | dz  z  |dz  z  z   |dz  z  z
  S r   rO   )rN   rg   rh   r$  r%  ru  s      rI   rP   z"test_fail_holzer.<locals>.<lambda>H  s(    1a4!AqD&1QT61 rK   )rj   r'  r   )   rZ   r   r(  r   r[   )maxr1   )rH   rN   rg   rh   xyzr  r  r/  r  hr$  r%  ru  s             @@@rI   test_fail_holzerr1  F  s    	1BGAq!GAq!cGAq!cs8q==s8q==qAvqAvqAv&!A#a%///qAvqAvqAv&!A#a%///q!Q1a A8O8rK   c                      t        dt        z  dt        z  z   dt        z  z   t        z
        t
        t        t        t        z   dt
        z  dt        z  z   dt        z  z   fhk(  sJ y )Nr   r   r   r   )r   rf   rg   rN   rh   r   r   r   rO   rK   rI   test_issue_9539r3  T  s[    qsQqSy2a4'!+,#sSy!C%"S&.1S5"89:; ; ;rK   c                      t        dt        dz  t        dz  z   t        dz  z   z  dt        t        z  t        t        z  z   t        t        z  z   z  z
        dhk(  sJ y )NrS   r[   rl   r   r   r   r  rO   rK   rI   test_issue_8943r6  Y  sY    	1a4!Q$;AQqS1Q3Y1_!557;  rK   c                     t         dz  t        dz  z   t        dz  z   dz
  t              ddhk(  sJ t	        d      ddhk(  sJ t        t        fd       t        dd	      } t         dz  t        dz  z   | dz  z   dz
  t	              d
hk(  sJ t        t         dz  t        dz  z   dz         t               k(  sJ t	        t         dz  t        dz  z   dz
  d      t               k(  sJ y )Nrj   iq
  )rS   r   r   )r[   rj   r   r[   c                      t          d      S r   )r   rG   s   rI   rP   z.test_diop_sum_of_even_powers.<locals>.<lambda>c  s    (GQ(O rK   negTr  )r   r   r   r   )limit)
rN   rg   rh   r   r   r@   rx   r
   r   rW   )r9  rH   s    @rI   test_diop_sum_of_even_powersr;  _  s    	
A1q!t	d	"Bb>i3333*2q1i5KKKK
 OP
%$
'C	
A1sAv		$B*2.:,>>>q!tad{Q'35000*1a4!Q$;?!DMMMrK   c                     h d} t         dz  t        dz  z   t        dz  z   t        dz  z   t        dz  z   dz
  }t        |t              }t        |      dk(  sJ || k(  sJ t        t        d        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            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            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(  sJ t        t        dd            dgk(  sJ t        d      D cg c]!  }t        t        t        |dd                  # c}g dk(  sJ t        d      D cg c]   }t        t        t        |d                  " c}g dk(  sJ t        d      D ][  t        t        dd            }|rt        fd|D              sJ t        t        d            }t        fd|D              r[J  t        t        d        t        t        d        t        t        d dd            d!gk(  sJ t        t        d dd            g k(  sJ t        t        ddd            dgk(  sJ t        t        dddd            d"d#gk(  sJ t        t        dddd            g d$k(  sJ 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(  rd'd'k(  sJ t        t        dd)z  dd            g k(  sJ y c c}w c c}w )*N>   r   r   rZ   rZ   r   r   r   r}   r   r   r   rZ   rS   r   r   r   rZ   rj   r}   r   r   rS   rj   r   r   r   rS   r}   r}   r   rZ   rZ   r[   r   r   rZ   rZ   r   r   r   rZ   r[   rS   rS   r   rZ   rS   rj   rj   r   rZ   r}   r}   r   r   r[   r[   rS   r}   r   r[   rS   r}   r   r   rS   rS   rj   r}   r   r[   r   rl   c                  ,    t        t        dd            S )Nr   r{   )r  r5   rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>t  s    tN2r$:; rK   rZ   r\   T)r   rZ   r   rS   r   r5  rj   r]   r}   2   )r}   r}   )rZ   r   r   )rZ   rZ   rZ   r[   r[   )r   r   rZ   rZ   rS   r   )rZ   rZ   rZ   rZ   rZ   rZ   rZ   rZ   r   )rZ   rZ   rZ   rZ   r[   r[   rZ   rZ   r[   r[   r[   r[   r[   rS   r[   rZ   rS   rS   rS   rS   rj   rS   rS   r[   r[   rj   rj   rj   rj   r}   )r   r   r   r   r   rZ   r   r   rZ   r   r   rZ   r   rZ   rZ   r   rZ   rZ   r   rZ   r[   rZ   rZ   rZ   rZ   rZ   rZ   rZ   rZ   rS   c              3   H   K   | ]  }t        d  |D              k(    yw)c              3   &   K   | ]	  }|d z    ywr~  rO   r  js     rI   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s      1!A 1r  Nr  r  r   r  s     rI   r  z-test_sum_of_squares_powers.<locals>.<genexpr>  s!     C1S 1q 11Q6C   "c              3   H   K   | ]  }t        d  |D              k(    yw)c              3   &   K   | ]	  }|d z    ywr~  rO   rO  s     rI   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s     'q!t'r  NrQ  rR  s     rI   r  z-test_sum_of_squares_powers.<locals>.<genexpr>  s!     93'Q''1,9rS  c                  .    t        t        ddd            S )Nr[   r{   rZ   r  r4   rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!R$;< rK   c                  .    t        t        ddd            S )Nr[   rZ   r{   rW  rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!Q$;< rK   r|   r   r  )r   rZ   rZ   ))r   r}   )rZ   rj   rk  r      i  )r   r  )r  r   rN   rg   rh   r   r   r  r@   rw   r  r5   r  rW   r  r4   )trurH   r  r  s1s2s      `  rI   test_sum_of_squares_powersr]  k  s   -C 
A1q!t	ad	"QT	)C	/B
%b"
-Cs8r>>#::
:;<q!$%$///q!$%+++q!T*+x777sA&'2---q!$%+++q!T*+	{:::q!$%+++q!$%$///q!$%+++r1%&66*::::r1d+,1* * * *q!$%*B)CCCC;@9EaC^Aq$/01E J    6;2Y?C^Aq)*+? D    2Y :1d+,CCCCC1%&9b9999	: :<=
:<=b!Q'(XJ666b!Q'(B...aA&'D6111aAt,-)Y1GGGGaAt,-1IIIIaA&'2---dAq)*b000dAq)*tf4$$,GGagq!,-333= F @s   &N? %Oc                      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 sJ y )	NrS   r{   Fr   rZ   r   rj   r[   )r;   rO   rK   rI   test__can_do_sum_of_squaresr_    s    !!R(E111!"a(E111!!Q'''!!Q'''!!Q'''!!Q'''!!Q'5000rK   c                     ddl m} m}m}m}m} | dz  |dz  z   dz
  }dh}t        |      |k(  sJ t        t        |j                                     }t        |d      |k(  sJ | dz  |dz  z   |dz  z   |dz  z   |dz  z   d	z
  }t        t        |            d
k(  sJ t        t        |d            dk(  sJ h d}t        dt        dz  z  dt        z  t        z  z   dt        dz  z  z   dz
  d      |k(  sJ y )Nr   rt  rj   rL  rk  TrM  r[   r(  #   i0  r   r   r   r   )rz  r$  r%  ru  rv  rw  r   rW   rB   rm  r  rN   rg   )	r$  r%  ru  rv  rw  rH   rp  rq  solns	            rI   test_diophantine_permute_signrc    s   ''	
A1	$BxHr?h&&&+HLLN;<Mr4(M999	
A1q!t	ad	"QT	)C	/B{22%%%{2t,-666/Dr!Q$wAa'"QT'1B6EMMMrK   c                  r    t         dz  t        dz  z   dz
  dz
  } t        | t         t        g      ddhk(  sJ y )Nr[   rj   rZ   rc  rd  r   )rZ   rS   )rN   rg   r   rG   s    rI   test_not_implementedrf    s;    	
A1t	d	"BrA'FF+;;;;rK   c                       t         dt        z  z
  dz    t         t        t         g      t        dt        z  dz
  fhk(  sJ t	        t
         fd       y )NrS   r[   re  c                  2    t         t        t        h      S )Nre  )r   rg   rN   rG   s   rI   rP   z!test_issue_9538.<locals>.<lambda>  s    k"Aq6: rK   )rN   rg   r   r   r@   rT   rG   s   @rI   test_issue_9538ri    sH    	
QqS1Br1&C3+;*<<<<
9:;rK   c                     t        dt        dz  z  t        dz  z   dt        dz  z  z
        } t	        t        |       j                        \  }}}| |dz  d|dz  z  z
  d|dz  z  d|z  |z  z   d|z  |z  z
  d|dz  z  z
  |dz  d|z  |z  z
  d|dz  z  z   d|z  |z  z
  fhk(  sJ t        t        dz  dt        dz  z  z   dt        dz  z  z
        } | d|z  |z  |dz  d|dz  z  z
  |dz  d|dz  z  z   fhk(  sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
        } | d|dz  z  |dz  z
  d|dz  z  d|z  |z  z   |dz  z
  d|dz  z  d|z  |z  z
  d|dz  z  z   fhk(  sJ t        dt        dz  z  dt        dz  z  z   dt        dz  z  z
        } | d|dz  z  d|dz  z  z
  d	|z  |z  d
|dz  z  d|dz  z  z   fhk(  sJ t        dt        dz  z  dt        dz  z  z   t        dz  z
  dt        z  t        z  z
  dt        z  t        z  z   dt        z  t        z  z
        d|dz  z  d|z  |z  z
  |dz  z
  d|dz  z  d|z  |z  z   |dz  z
  d|dz  z  d|z  |z  z
  d|dz  z  z   fk(  sJ t        dt        dz  z  dt        dz  z  z
  dt        dz  z  z
        d|dz  z  d|dz  z  z
  d|dz  z  d|z  |z  z   d|dz  z  z
  d|dz  z  d|z  |z  z   d|dz  z  z   fk(  sJ y )Nr[   r|   rj   rS   H   r   r   r   r   r   r}   r   r*  r   r+  i~i i
  ix  i:
 ii  ib<  )r   rN   rg   rh   r   r	   r  r3   )r  r7  r8  r  s       rI   test_ternary_quadraticrl    s   AadFQTMAadF*+Aad''(GAq!	1qAv
1a4!A#a%!A#a%!AqD&(	1qs1uqAv!A%' ( ( ( (
 	AqD1QT6MAadF*+A!A#a%A!Q$1qAv67777AadFQq!tVOad*+A!AqD&1a4-AqD1Q3q51a4!7	!Q$1Q1a4! " " " " 	AadFR1W$r!Q$w./A"QT'AadF"AaCE1QT6AadF?;<<<<(	!Q$1a4!Q$1Q&1Q.1Q68	!Q$1QAqAv!A~14a1f	!A7!Q$7<   )AqD2ad7T!Q$Y&(ad
VAqD[ $q!t)eAgai"7q!t#AXQq(5A:5,77 7 7rK   c                  &	   t        g g       t              t               k(  sJ j                  dk(  sJ j                  dk(  sJ t	        t
        fd       t        j                               g k(  sJ t        t        t        gt        t        g      j                  t        t        fk(  sJ j                  t        t        fk(  sJ t	        t
        fd       j                  d       t              dhk(  sJ j                  ddt        f       t              ddt        fhk(  sJ t	        t
        fd       t        j                               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(  sJ j                  t        d	z  t        z   t        t        z
  d
f       t              t        d	z  t        z   t        t        z
  d
fhk(  sJ j!                  t        d	      t        dz   d	t        z
  d
fhk(  sJ  d	      t        dz   d	t        z
  d
fhk(  sJ j!                  t        dt        di      dhk(  sJ  dd      dhk(  sJ j!                  t        di      t        dz   dt        z
  d
fhk(  sJ  d      t        dz   dt        z
  d
fhk(  sJ j!                  t        d      t        d	z  dz
  t        dz   d
fhk(  sJ  d d      t        d	z  dz
  t        dz   d
fhk(  sJ j!                  t        d	t        di      dhk(  sJ  d	d      dhk(  sJ j!                  t        dt        di      dhk(  sJ  dd      dhk(  sJ t	        t
        fd       t	        t
        fd       t	        t
        fd       t	        t
        fd       t	        t
        fd       t	        t
        fd       t	        t"        fd       t        t        t        gt        t        g      } | j                  t        dt        z  f       | j                  t         dt        z  f        | dd      dhk(  sJ y )NrO   c                  0     j                  t        f      S rF   )addrN   )r[  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvqd| rK   c                  &     j                  d      S )Nr\   ro  )r\  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvd| rK   )rS   rj   r{   c                  &     j                        S rF   )update)r[  r\  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    ryy} rK   rS   rj   r[   rZ   r   r   )rT  r{   rZ   r}   r   r   )r   r   rZ   )   r   rZ   c                  (     j                  d      S )NrZ   )rN   r  s3s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rwww| rK   c                  *     j                  ddd      S NrZ   r[   rS   rv  rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>	  s    rwwq!Q/ rK   c                  &     j                  d      S )NrO   rq  rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>
  s    rvvbz rK   c                  &     j                  d      S )N)rZ   r[   rS   rj   rq  rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvl3 rK   c                  &     j                  d      S )Nr   rq  rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvf~ rK   c                        ddd      S rz  rO   rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    r!Q{ rK   c                        d      S )NrZ   r  rO   rw  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    b1g rK   r   rt  r   r   )r<   rW   r
   ry  r@   rw   r  dict_iteratorrN   rg   r   r  ro  rs  rh   r  r  rT   )s4r[  r\  rx  s    @@@rI   test_diophantine_solution_setr    s   	B	'Br7ce::==B
:+,  "#r)))	AA	/B::!Q==QF"""
:+,FF6Nr7vhIIfr1gr7vAw''''
:,-  "#B11a|'DDDD	Aq	Aq6	2Br}}"""FFAqD1Ha!eQ r71q!a%+,,,,771a=a!eQUA.////a5a!eQUA&''''77Aq!Q< [M111a8}$$$77Aq6?BAq12222a5a"fa!eQ'((((771b>q!taxQ23333dB<QTAXq1ua0111177Aq!Q< [M111a8}$$$77Aq!R=!j\111a9$$$
:+,
:/0
:)*
:34
:-.
:*+
9o&	AA	/BFFAr!t9FFQB1:a8xrK   c                      dt         z  t        z  dt        dz  z  z   } t        |       j                  t        t
        g      }|t        dt        z  ft        dt        z  fhk(  sJ  |dd      dhk(  sJ y )	NirS   r[   rx  r   ir   r   )rN   rg   r>   r   r   r  )rH   r  s     rI    test_quadratic_parameter_passingr    sq    	Qq1QT6	Br"((QF(;HBqD	As1u:....Aq>fX%%%rK   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   sympy.testing.pytestr?   r@   rA   sympy.utilities.iterablesrB   r$  r%  ru  rv  r7  r8  rN   rg   rh   rf   r   r  r   r  r  r/  r   r   r   t_3t_4t_5t_6r"  r#  r$  rD   rJ   rU   rX   r_   ry   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r&  r-  r0  r3  r9  r<  r@  rC  rJ  rr  r{  r  r  r  r  r  r  r  r  r   r%  r*  r1  r3  r6  r;  r]  r_  rc  rf  ri  rl  r  r  rO   rK   rI   <module>r     s8     1 1 $ " % ' + * ( 8 8 1            5 4 294d2D .1aAq!Q1aAq!Q$+FD$A !S#sCcVT*
BT4 +5
&7
X2/<0-=NAA B BH#V& <UO";

6!EH.;5-V5rD<@(
G50&.$*:ZR.,T^	< 
 
;
	N64r1N < <
<78. b&rK   