
    QiG                        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 ZdM ZdNS )O    )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          t          |                               S N)r   r   eqs    /var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pydiop_simplifyrK   '   s    GHRLL))***    c                  ^    t          t          d            t          t          d            d S )Nc                  D    t          t          t                              S rG   )r   r   x rL   rJ   <lambda>z#test_input_format.<locals>.<lambda>,   s    k#a&&11 rL   c                  @    t          t          t          z  dz
            S N   )r   rO   r   rP   rL   rJ   rQ   z#test_input_format.<locals>.<lambda>-   s    k!B$(33 rL   )r@   	TypeErrorrP   rL   rJ   test_input_formatrV   +   s0    
911222
93344444rL   c                      t          d          t                      k    sJ t          t          d                    t                      k    sJ d S rS   )r   setr	   rP   rL   rJ   test_nosolsrY   0   sF    q>>SUU""""qtt%%%%%%rL   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 d S )N      r[   r\   r   rO   rP   rL   rJ   test_univariater`   6   s_    q1uq1uqj())dD\9999q1uq1uo&&4,666666rL   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 d S )Nc                  <    t          t          dz  dz  dz
            S )Nr\   rT   r[   )r,   rO   rP   rL   rJ   rQ   z$test_classify_diop.<locals>.<lambda><   s    mAqDFQJ77 rL   c                       t          d          S Nr[   r,   rP   rL   rJ   rQ   z$test_classify_diop.<locals>.<lambda>=   s    }Q// rL   c                  `    t          t          t          z  t          z  t          z  dz
            S rd   )r,   wrO   yzrP   rL   rJ   rQ   z$test_classify_diop.<locals>.<lambda>>   s    ac!eAgk(B(B rL   c                  b    t          t          dz  t          dz  z   t          dz  z   dz
            S )NrT      Z   )r,   rO   rh   ri   rP   rL   rJ   rQ   z$test_classify_diop.<locals>.<lambda>?   s(    adQTkAqD6H26M(N(N rL      r\      *   r[   i
univariateinhomogeneous_ternary_quadraticinhomogeneous_general_quadratichomogeneous_general_quadratic
cubic_thuerk   b   igeneral_sum_of_even_powers$homogeneous_ternary_quadratic_normal)	r@   rU   
ValueErrorNotImplementedErrorr,   rO   rh   ri   rg   rP   rL   rJ   test_classify_dioprz   ;   s   
977888
://000
 B BCCC
 N NOOOAqD2a4",--	
aaQT2&26 6 6 6 61q!!	
Aq	AaCAq>#D&F F F F F1q1q!t+,,	
Aq!qsAq!QT1a35V1X X X X X1qsQT)A-..	
Aq	AaCAaCAqD!Q24U3W W W W W1q1r)**	
Aq!qsAq!QAq13T/V V V V V1qs##	
Aq!qsAqsA&(G(I I I I I1a4!$$	
A1a4Aq!<)1 1 1 1 1A1q!t+{;<<	
Aq	AsAqD!QT1adA68TAV V V V VA1q!t+,,	
Aq	AqD!QT1adA.0V1X X X X X X XrL   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            d S )N)r   r[   rT   )r\   rG   rk   )r      )r}         )NN   )r   r~   r~   NNN      	         c                  0    t          t          dz            S Nr\   r_   rP   rL   rJ   rQ   ztest_linear.<locals>.<lambda>o   s    j1oo rL   )
r   rO   rh   t_0ri   t_1rg   t_2r@   rU   rP   rL   rJ   test_linearr   T   s   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3acAaCi  RVSM1111acAaCi!m$$3BsFQJ(?????acAaCi!m$$4444acAaCi!A#o)**quqy!C%!).DDDDDacAaCi!A#o)**sAcEAcEMA4EquqQTu}WXGX.YYYYYacAaCi!A#o)400I====acAaCi!A#o)**.@@@@@acAaCi!A#o)**sBsFQsUNQ4F3QRSVQVY[H[.\\\\\acAaCi"Q$&*++#	33;/LLLLLacAaCi"Q$&*++S#)QsURPSV^VXY\V\E\/]]]]] 9--.....rL   c                     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 d S )NrT   "   r   r[   )i{)r~   ir   r\   rk   6   )   r      )r|   r~   8   r   >   i_r   iiiiir   i   r}   r   @   r[   r   r|   0   )r   rO   rh   rX   tr   rP   rL   rJ   %test_quadratic_simple_hyperbolic_caser   r   s   ac!ebdlRT)A-.."# # # #ac!eackAaC'!+,,5555c!eAg!mac)B.//G9<<<<c!eAg1nr!t+b011i[@@@@ac!eackBqD(1,-- 2F 2F 2F F F F F ac!eackAaC'!+,,5555acAgkAo&&B7QG*<<<<<r!tAvrL   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 d S )Nro   r\   r   rn         i3  )r   r|   rk   rT   r~      r   r|   r|   r   rm   V  )r   
   r      r|   r\   r[   r[   r[   r}   r   )r   rO   rh   rX   rP   rL   rJ   test_quadratic_elliptical_caser      s    bAg!Ao1a4/"Q$6A=DEE)TTTTa1fqAvo!+bd2R788CEEAAAAadQTkAaC'!A#-122xj@@@@bAg!Ao1a4/"Q$6A=DEE(SSSSbAg1Q&AqD02566///0 0 0 0 0 0rL   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 d S )Nr   r\      r   r~   r      r   r   rk   rT   r[   )   (   check_solutionsrO   rh   rP   rL   rJ   test_quadratic_parabolic_caser      s   1QT6BqDF?R1W4qs:QqS@2EFFFFF1QT6BqDF?R1W4qs:RTAAEFFFFF1QT6BqDF?R1W4qs:QqS@1DEE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$;+,,,,,,,rL   c                  Z   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 d S )Nr   rk   r\   r~   r}   rT   r      r      r   r       r   r   r   r   r   rP   rL   rJ   test_quadratic_perfect_squarer      sg    2a46"""""1QT6AaCE>AqD014555552ad7QqSU?Qq!tV3QqS82a4?"DEEEEE2ad7RT!V+a1f4qs:QqS@2EFFFFF1QT6BqDF?Qq!tV3bd:RTABFGGGGG1QT6AaCE>AaC/14q8999993q57Qq!tV+ac11Q36;<<<<<1a4!Q$;1,qs2333331a4!AqD&=1Q3.14555551QT6AadF?QqS02a47!;<<<<<<<rL   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                                             dhk    sJ d S )Nr\   r~   rT   r   r   r   )r   rO   rh   r>   solverP   rL   rJ   !test_quadratic_non_perfect_squarer      s#    1a4!A#:!Q$./////1QT6AadF?QqS01Q36777771a4!A#:1,qs2333331a4!AqD&=1Q3.14555551a4!Q$;1,qs2Q677==??H:MMMMMMrL   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 ]A}t          |                     t          t          ||                                        rJ Bd S )Nir\   rT   r[   rO   rh   r   rK   xreplacedictziprI   vsols      rJ   test_issue_9106r      s    	qsAaC!G}	q!A#'{	*B	
AA2 A A T#a++->->!?!?@@@@@@A ArL   c                      t           dz  t           z
  t          dz  z
  } t           t          f}t          |           D ]A}t          |                     t          t          ||                                        rJ Bd S r   r   r   s      rJ   test_issue_18138r      sv    	
AAqDB	
AA2 A A T#a++->->!?!?@@@@@@A ArL   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 d S )Nr   r\   r   r   r   r   r   r   r~   r   rk   rT   r[   r   rP   rL   rJ   test_quadratic_non_perfect_slowr      s$   1QT6BqDF?Qq!tV3bd:RTABFGG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AAAAArL   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 d S )KNrT   r   r   r   r   ir   r\   r[   r   r   r   r   r~   r   r   r      )r   rk   iL)r   r   r   r|   r[   r\      ))r   r~   )r~   r   )r   r   )r   r   r[   )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   r[   	S  l   !K2l   uGoX r   r   )rT   r[   )  m   $   r   r   r   r   Tr   ))   =   r   r   )      r   rT      r   >   iX i  ipi"'Mi)  iS  l   )fMOl   ?_l   ;>x< i|r   r[   r   )i  i     r   )r   r[   )r   r[      r\   r   r}   {   )r   r[   r   r   i)r[   )r   r[   )r   r   r   rX   rP   rL   rJ   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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62r??HHHHHHHwsB   %F %F %F 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31aAx''''1b!""""""rL   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 d S )Nr   r   )r   )r   r[   r   r   )r   )r   rT   r   )ir   r   r}     r[   )l   uL" l   EY   r   r   r[   r   r   r|   r   iT  )i  r   r   r   rk   r\   rT   )r   r   rP   rL   rJ   test_bf_pellr     s   b"!<!<!<<<<<b"!I!I!IIIIIc2"$$$$dA#B"CCCCCb"&'!22222eR  %B$CCCCCc29+----b!QF8++++aAAq6(****aAAaC8bdAY"77777aA6(****aQ2%%%%%%rL   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 d S )Nr\   r[   r   r}   rk   r~   rT   r   r   r   r   r   r   r   )r"   rP   rL   rJ   test_lengthr  #  s    !Q??a"aq    "a!!!!!Qq    !R""""!Q??arL   c           	         t          |           \  }}|t          t          t          g          z  |z   d         }|t          t          t          g          z  |z   d         }t	          |                     t          t          t          f||f                              }t          d |j
        D                       }t          t          z  t          t          fD ]}||                                v r dS t          dz  t          dz  dfD ]}||                                vrd||<   |t          dz           dk    rPt          |t          dz           |t          dz                     o#t          |d         |t          dz                     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   r[   c                 T    g | ]%}t           |j        t          t          g           &S rP   )reversedas_independentXY).0r   s     rJ   
<listcomp>z-is_pell_transformation_ok.<locals>.<listcomp>9  s/    OOO!(+1+aV455OOOrL   Fr\   T)r*   r   r  r  rK   subsr   rO   rh   r   argskeysr   )rI   ABur   
simplifiedcoeffterms           rJ   is_pell_transformation_okr  ,  sh     ##DAq	
61a&>>	A	q!A	
61a&>>	A	q!ArwwsAq6Aq6':':;;<<JOOzOOOPPE1a  5::<<55   Aq!tQ  uzz||##E$KQT{aq!teAqDk22 )%(E!Q$K((	) 4rL   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 d S )Nr   r\   r   rm   r   r   r~   r   r   r   r   -   r      r   rT   r      r   rn   r   r   )r  rO   rh   rP   rL   rJ   test_transformation_to_pellr  J  s   $SAX!A%51%<qs%BQqS%H2%MNNNNN$SAX1Q%61a4%?!A#%E1%Lr%QRRRRR$QTAqD[2%566666$adUQq!tV^b%899999$R1Wr!tAv%5!Q$%>1%Dr!t%Ka%OPPPPP$SAX1Q%6A%=!%Cc!e%Kc%QRRRRR$QTAaCE\3q!t8%;ac%ABqD%H2%MNNNNN$R1Wqs1u_r!Q$w%>A%E1%Lt%STTTTTTTrL   c                  x   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 d S )Nr\   r   rT   r~   )rT   r~   rk   r   )r~   r   r   r   )r   r   r   )r   T   r   )r[   r   r   rm   )e   i)r    rO   rh   rP   rL   rJ   test_find_DNr  U  s   1a4!A#:1$%%////1a4!AqD&=1$%%////1a4!A#a%<!AqD&(1,--77771QT6AaCE>AqD(1,--99991QT6AaCE>AqD(2-..'99992ad7QqSU?AqD())V33333q!t8ac!e#ad*QqS01Q36:;;NNNNNNrL   c                      g d} | D ]3\  }}t          ||          \  }}}||dz  z  ||dz  z  z   |dz  k    sJ 4t          dd          J t          dd          J d S )N)r   r   rT   r   r   i)rk   r   )r   rk   [   r   r   r[   r|   )rk   r   r   r   i) r[   r   ir\   r|   r   )r!   r  abrg   rO   rh   s         rJ   test_ldescentr*  _  s    
4 
4 
4A ' '11a..1aAv!Q$!Q$&&&&&B###Aq>>!!!!!rL   c                     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 d S )N   r\   A  r   ih  r~   rk   rT   r   r   r   r   r   r   r   r   i-  |   r   1  r   rO   rh   ri   rP   rL   rJ   "test_diop_ternary_quadratic_normalr1  j  s]   3q!t8eAqDj01a47888882ad7SAX-14555551QT6AadF?QT1222221QT6AadF?Qq!tV3444441a4!AqD&=1a4/000001QT6AadF?QT1222221a4!Q$;A-.....2ad7QT>Bq!tG3444441QT6AqD=2ad72333333q!t8bAg-!Q$6777772ad7Qq!tV+c!Q$h6777773q!t8bAg-QT	9:::::::rL   c           
         t          |           }|t          t          t          t          g          z  \  t          |                     t          t          t          t          ff                              }t          fd|j	        D                       }z  z  z  fD ]}||
                                v r dS dS )Nc           	      D    g | ]}t           |j        g           S rP   )r  r  )r  r   r  r  Zs     rJ   r	  z/is_normal_transformation_ok.<locals>.<listcomp>~  s2    RRRQ(+1+aAY788RRRrL   FT)r+   r   rO   rh   ri   rK   r
  r   r   r  r  )rI   r  r  r  r  r  r  r4  s        @@@rJ   is_normal_transformation_okr5  y  s     $$A1ay!!!GAq!rwwsAq!9q!Qi'@'@AABBJRRRRRR*/RRRSSE1ac1Q3  5::<<55   4rL   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 d S )	Nr\   rT   r   r   r   d   r   r   )r5  rO   rh   ri   rP   rL   rJ   test_transformation_to_normalr8    s2   &q!ta1f}q!t';bd1f'Dr!tAv'MPRSTPTUVPV'VWWWWW&q!ta1f}s1a4x'?@@@@@&q!tbd1f}55555&qAvAqD'82a46'ABBBBB&q!tbd1f}r!tAv'=1Q'FGGGGG&q!tbd1f}r!tAv'=!'CDDDDD&q!tad{QT'9AaC'?!A#'E!'KLLLLL&q!tac!e|a1f'<=====&qsQqSU{QqSU':;;;;;&qs1uqs1u}5555555rL   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 d S )Nr\   rk   rT   r~   r   r   r   r  1   r   rl   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 )Nr[   r\   rT   r   )r6   rO   rh   ri   rP   rL   rJ   rQ   z-test_diop_ternary_quadratic.<locals>.<lambda>  s@    &1ay	
1aAq!Q$1a4+	- 	- rL   r}   r   )r   r\   r   )r[   r   r\   r   r   r   )r   rO   ri   rh   r   r@   rx   r   rE   r3   pqr   rH   s    rJ   test_diop_ternary_quadraticr>    s   1QT6AqD=1a4/!A#a%7888881a4!Q$;A-!3ac9:::::1QT6AaC<!A#-!3444441a4!A#:!+,,,,,1QT6AaCE>AaC/000001QT6AadF?QqS0111111QT6AadF?QT1AaCE9AaCEAAaCEIJJJJJ1QT6BqDF?+++++2ad7Qq!tV+ac!e3ad:;;;;;1a4"QT'>AqD02a4691Q3q5@AAAAA2ad7Qq!tV+ac!e3ac!e;ac!eCDDDDD1a4!AqD&=1a4/!A#51Q>?????1a4!AqD&=1a4/!A#51Q>AaGHHHHH1a4!AqD&=1a4/"Q$q&82a46ABqDFJKKKKK1Q31Q;Aa/00000(A1q!t);<<@RRRRR(A155===
: - - . . . 
Aa!A#a%!AqD&	 1Q3q5	(1QT6	1B!"%%2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 1 acAaCEk""r!tAvs1a4x!Q$!&DDDDDDDrL   c                     t          d          t          d          cxk    rdk    sn J t          d          dk    sJ t          d          t          d          cxk    rdk    sn J t          d          t          d          cxk    rdk    sn J t          d	          t          d
          cxk    rdk    sn 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 d S )Nr[   r|   r   r~   r   rk   r   r\   r   r   r   r   rT   4   r:  r   i  rm   )r'   r   rP   rL   rJ   test_square_factorrA    s   }R005555A555555q    }R005555A555555}R005555A555555c 2 27777a777777q    !!!!!!!!!!!!####3((A------rL   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 d S )Nr\   r,  r-  rT   r~   r   r:  r   r   r.  r   r/        r   r   rl   r0  rP   rL   rJ   "test_parametrize_ternary_quadraticrE    s   1a4!Q$;A-.....1a4!A#a%<!Q$./////3q!t8eAqDj01a47888881QT6AadF?QT1AaCE9AaCEAAaCEIJJJJJ1a4!Q$;A-.....1a4"QT'>AqD02a469AaCEABB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JJ2ad7Qq!tV+ac!e3ac!e;ac!eCDDDDD3q!t8bAg-QT	9:::::::rL   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 d S )Nr\   rT      iY  r   r   r   r0  rP   rL   rJ    test_no_square_ternary_quadraticrH    s    1Q3q51Q3;1Q./////3q57SU1W,r!tAv5666662a46BqDF?+++++1Q319qs?+++++2a46BqDF?RT!V34444444rL   c                      g d} | D ]3\  }}t          ||          \  }}}||dz  z  ||dz  z  z   |dz  k    sJ 4t          t          d            t          t          d            t          t          d            d S )N)	r  r  r   r!  r   r#  r$  r%  r&  r\   c                  "    t          dd          S )Nr|   r   r   rP   rL   rJ   rQ   ztest_descent.<locals>.<lambda>  s    gb"oo rL   c                  "    t          dd          S )Nr   rT   rK  rP   rL   rJ   rQ   ztest_descent.<locals>.<lambda>  s    gamm rL   c                  "    t          dd          S )Nrk   rT   rK  rP   rL   rJ   rQ   ztest_descent.<locals>.<lambda>  s    gamm rL   )r   r@   rU   ZeroDivisionErrorr'  s         rJ   test_descentrO    s    	g	g	gA ' '1!Q--1aAv!Q$!Q$&&&&& 9--...
33444
9++,,,,,rL   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          |                                                    }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
  } |                                 }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
  } |                                 }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
  } |                                 }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
  } |                                 }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
  } |                                 }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 d S );Nr\   rT   r   r[   rn   r~   rk   a   Tpermuterm   r[   r\   rT   \   c   )r   r   3   i{  r   iKf   i  ij  rW  )r[   r[   r\   r}   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r:        i	  i>  iipE i* i',  i  i  r   )r   r\   r[   r   c                  F    t          t          t          dz  z  dz             S )Nr\   r[   r   rO   rh   rP   rL   rJ   rQ   z"test_diophantine.<locals>.<lambda>-  s    AadFQJ(?(? rL   >   rT   r   rk   rk   r   rT   r}   r[   r   >   rk   r[   rk   r|   r   r[   r   r|   r|   r[   r   r#  r   r   Q   )symsrS  >   r\   r   rT   r}   r   r\   r   r}   r}   rT   r}   r   r\   rT   rT   r\   )r   rO   rh   ri   rg   r   r   r   r   rX   rB   popr   as_coefficients_dictr6   r<  r=  r@   ry   r	   Halfr   )rI   base_solcomplete_solnr  s       rJ   test_diophantinerw    s-
   AEAE?AE233333AEAqD1a4K!Q$$6788888A!GacMAqD1a4K!Q$,>?@@@@@1a4!AqD&=1,-----1a4!A#a%<(((((1a4!A#a%<!Q$./////1adQTkB./000001acAaCi!m,-----AqD1QT6MA-1q!tb0@ABBBBBAqD1QT6MA-AaC899999AqD1a4K!Q$.QqS1Q311DEFFFFF 1a4!A#a%<!A#a%/000001a4!A#:>*****q1uR1XX!6!66666	
A1r	Br4(((KT,J,J,JJJJJqs2v!B''QsUAcEN+;;;;;	
A1q!t	b	 B{Hr??h&&&&+HLLNN;;<<Mr4(((M9999q!taR 0 000145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 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 3 
A!Q$AqD	 B##%%E)1a)U;;;   r??T!VQq!tVbAg%q!tbAg~678 8 8 8  ? ?@@@ qssuu$$$$qsQqSy16)**.X.X.XXXXXq!tad{AaC'*D999SSST T T T
 q!tad{T)D01vtLLLSSST T T Tq!tad{T)D01vtLLLSSST T T T 1a4!8$$$$$1a4!8$$$$$1q1%%1ad)44441q1%%1a4)444444rL   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
                                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 d S )	Nr   r(  r)  cder\   rk   r   r   r   
parameters)	sympy.abcr(  r)  rz  r{  r|  r   r=   r   rO   rh   ri   ry  s        rJ   test_general_pythagoreanr  C  s   ''''''''''''''1a4!Q$;A-14555551a4!AqD&=1QT61AqD899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FF2ad7QT>AadF2QT9Bq!tGCDDDDDadQTkAqD01a4788>>1aQR)>TTTAqD[1a41Q!Aq!tad{QT/ABCD D D D D DrL   c            
         t          dd          D ]=} t          t          d t          d| z            D                       | z
            s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 |D              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           d S )NrT   r   c              3       K   | ]	}|d z  V  
dS r\   NrP   r  is     rJ   	<genexpr>z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>T  s&      "D"DA1a4"D"D"D"D"D"DrL   z:%ir\   rm   rT  i!  z:56Tnegativec                     g | ]}|d z  S r^   rP   r  s     rJ   r	  z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>_  s    !!!q!t!!!rL   p   >   r   r   r\   r\   r\   r   r   r   r\   r   r   r   r   r   rk   rk   rk   r   r   r[   r[   r[   rT   r   r   r[   r[   r\   r~   r   r   r[   r[   r~   r   r   r   r[   r\   rT   r   r   r   r[   r~   r~   r~   r   r   r\   r\   r\   r   r   r   r\   rT   rT   rT   r   r   r\   rT   r~   r~   r   r   rT   rT   rT   r   r   r[   r[   r[   rT   r   r   r[   r[   r\   rT   rk   r   r[   r[   rT   rk   r   r   r[   r\   rT   rT   r~   r   r[   rT   rk   r~   r~   r   r\   r\   rk   rk   r   r   r\   rT   rT   rk   r~   r   rR  i  r   )r\   r\   r\   rk   c                  $    t                      S rG   re   rH   s   rJ   rQ   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>o  s    rc(:(: rL   )ranger   sumr
   r   rO   rh   ri   rX   r  r   lenr   r   r(  r)  rz  r{  r@   ry   )r  var	base_solnrI   s      @rJ   &test_diop_general_sum_of_squares_quickr  R  sa   1b\\ J Js"D"D1C1C"D"D"DDDqHIIIIII&q!tad{Q77???&q!tad{QT'9A'=>>#%%GGGG	
A1q!t	y	)B&r**;   	
A1q!t	ad	"QT	)D	0B*2q1122a7777
$--736668
8C	!!S!!!	"S	(BP P PI
 r??i''''{2t,,,--7777 rAqDy1a4'!Q$.//I;>>>> 
A1q!t	ad	"Q	&B
 : : : :;;;;;rL   c                  ~    t           dz  t          dz  z   t          dz  z   dz
  } h d}t          |           |k    sJ d S )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  )rO   rh   ri   r   )rI   r  s     rJ   test_issue_23807r  r  sT    	
A1q!t	g	%BB B BI
 r??i''''''rL   c                     dD ]=} t          dd          D ]*}t          | |          D ]}t          |          |k    sJ +>t          t          dd                    g k    sJ d t          ddd          D             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 d t          d          D             g dddgdggk    sJ d S )N)r   r   r[   r   rT   r~   c                 ,    g | ]}t          |          S rP   list)r  r<  s     rJ   r	  z'test_diop_partition.<locals>.<listcomp>  s    000DGG000rL   )r   r   r   r   rT   )r   r   r   r[   r\   )r   r   r[   r[   r[   r   rP   c                 ,    g | ]}t          |          S rP   r  r  s     rJ   r	  z'test_diop_partition.<locals>.<listcomp>  s    ***DGG***rL   )r[   r[   r[   r\   )r  r$   r  r  )nkr<  s      rJ   test_diop_partitionr  }  sJ    # #q! 	# 	#Aq!__ # #1vv{{{{{#	# 	!Q  B&&&&00Yq!Q//000///5; ; ; ; ;	!"%%%%	!Q  RD((((**Yq\\***yyy1a&1#.FFFFFFFrL   c                      dD ]%} t          |           \  }}|dz  |dz  z   | k    sJ &t          d          J t          d          }|dk    rt          |d                   t          u sJ d S )N)
r~   r   r   r   %   r   i%	  i  i  iY  r\   r   i5 )i  i  r   )r&   typeint)r  r(  r)  anss       rJ    test_prime_as_sum_of_two_squaresr    s    >    *1--1!tad{a&q))111
%f
-
-C*c!f!4!4!4!4!4!4rL   c                  8   dD ]4} t          |           \  }}}|dz  |dz  z   |dz  z   | k    sJ |dk    sJ 5t          t          d            t          d          J t          d          J t          d          dk    sJ t          d	          d
k    sJ d S )N)r   r[   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)   rP   rL   rJ   rQ   z+test_sum_of_three_squares.<locals>.<lambda>  s    3B77 rL   r   i <  r   )r   r   r~   rk   r   r   r\   )r)   r@   rx   )r  r(  r)  rz  s       rJ   test_sum_of_three_squaresr    s    1  &q))1a!tad{QT!Q&&&&Avvvvv :77888""***	**222  ##y0000""i//////rL   c                     ddl m}   | dd          }t          d t          |          D                       |k    sJ t	          t
          d            t          d          D ]}t          |          }t          |          dk    sJ t          d	 |D                       sJ t          d
 |D                       |k    sJ t          |          t          |          k    sJ d S )Nr   )randintr[   l    @ k c              3       K   | ]	}|d z  V  
dS r  rP   r  s     rJ   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      44q!t444444rL   c                       t          d          S r  )r(   rP   rL   rJ   rQ   z*test_sum_of_four_squares.<locals>.<lambda>  s    2266 rL   r  rk   c              3   "   K   | ]
}|d k    V  dS r   NrP   r  rs     rJ   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      **a16******rL   c              3       K   | ]	}|d z  V  
dS r  rP   r  s     rJ   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      ((A1a4((((((rL   )sympy.core.randomr  r  r(   r@   rx   r  r  allr  sorted)r  r  results      rJ   test_sum_of_four_squaresr    s   )))))) 	?##A44033444449999 :667774[[ . .$Q''6{{a**6********(((((((A----F||vf~~-----. .rL   c            	      \   g d} | D ]h}|\  }}}t          |||          }	 	 t          |          }t          |          |k    sJ d}|D ]
}|||z  z   }||k    sJ n# t          $ r Y nw xY wNit	          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    sJ *d S )N))r   rT   r\   )r,  r\   rk   )r\   r[   r\   )rT   r[   rT   )r~   r\   r\   )i@0  r\   rk   )i  r\   rT   Tr   r   r\   rk   )r[   r[   rT   rT   )r   r   r\   rk   c                  >    t          t          ddd                    S )Ng333333?r\   r  r%   rP   rL   rJ   rQ   z+test_power_representation.<locals>.<lambda>  s    t$8a$C$CDD rL   c                  >    t          t          ddd                    S Nr\   r   r  rP   rL   rJ   rQ   z+test_power_representation.<locals>.<lambda>      t$8Aq$A$ABB rL   c                  >    t          t          ddd                    S r  r  rP   rL   rJ   rQ   z+test_power_representation.<locals>.<lambda>  r  rL   r|   r[   r]   rT   r^   rh  r   )zeros)r[   r\   r\   r\   r\   r\   )r   r   r   r   r   rT   r~   Fr}   r   r   i  pi   @)r   r   r   r~   rk   r\   r[   )r%   nextr  StopIterationr  r@   rx   r4   )teststestr  r<  r  flchk_suml_ibigr  s              rJ   test_power_representationr    sQ     E   1a Aq))	
GG1vv{{{{ / /C%Q.GG!|||||    	 $RAt4455	|$% % % %
:DDEEE
:BBCCC
:BBCCC$RA..//25555$Q1--..4&8888$Q1--.."4444$Q1--..4&8888$T1at<<<==	/01 1 1 1$T1au===>>"DDDD$RA..//H:====$RA..//25555$Q1d3344@@@@$Q1e4455;;;;t()91a@@AABBaGGGG
C$ : :M#q#'2233r99999: :s   ;A
A+*A+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 t          dd          \  }}t          d|dz  z  d|z  |z  z   d	|z  z
            }|h dk    sJ t          ddd          \  }}t          d|dz  z  d|z  |z  z   d	|z  z
            }|t                      k    sJ t          ddd          \  }}t          d|dz  z  d|z  |z  z   d	|z  z
            }|dhk    sJ dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rD   positiver\   i  >   i  r[   r~   r   r   r   _   r~   y   rk      r\   za bFrT   r   >   r   r   r   r   r   r   r   r   r   r   r   r   zx yrC   r   r~   >   r[   r   r   r~   r   )rD   r  r   N)r
   r   rX   )mr  diofr(  r)  rO   rh   s          rJ   test_assumptionsr    s    5$666DAqq!taczC'((DMMMMMMM5$777DAqqsQqSy1Q3*++DQQQQQQQ5$'''DAqr!Q$w1Q1,--D-------5$666DAqr!Q$w1Q1,--D355====5$777DAqr!Q$w1Q1,--DF8rL   c           	      T   t          |           }t          j        |           }t          | j                  }|                    t                     |rS|                                }|D ]8}t          |	                    t          ||                              dk    r n9dS |SdS )z
    Determines whether solutions returned by diophantine() satisfy the original
    equation. Hope to generalize this so we can remove functions like check_ternay_quadratic,
    check_solutions_normal, check_solutions()
    )keyr   FT)r   r   	make_argsr  free_symbolssortr   rr  rK   r
  r   )rI   sfactorsr  solutionr  s         rJ   r   r      s     	BAmBG
r

CHH!H"""
 5577 	 	AQVVCX$6$67788A== > 5   4rL   c            	      .
   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    rft"          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n 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n J t3          d	          t5          d	           cxk    rdk    sn 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 d S )#Nr\   r[   r}   r   r   rk   r   rT   r   r   r   r   c              3   L   K   | ]}|                     t          d           V   dS r  )r
  r   )r  _s     rJ   r  z$test_diopcoverage.<locals>.<genexpr>#  s.      :U:UA166!Q<<:U:U:U:U:U:UrL   r   r~   r   r   rq  c                  $    t          ddd          S )Nrk   r   r[   )r#   rP   rL   rJ   rQ   z#test_diopcoverage.<locals>.<lambda>)  s    {1b!44 rL   r   r   r   TFrT  c                       t          d          S )N)r\   rk   r   )r:   rP   rL   rJ   rQ   z#test_diopcoverage.<locals>.<lambda>;  s    k)44 rL   rl   n   i6  )r   r[   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   rO   rh   ri   rP   rL   rJ   rQ   z#test_diopcoverage.<locals>.<lambda>@  s6    AqD1a4K!A#4E!A4MPR4R(S(S rL   c                  F    t          t          dz  t          dz  z             S )NrT   r\   r^  rP   rL   rJ   rQ   z#test_diopcoverage.<locals>.<lambda>A  s    AqD1a4K(@(@ rL   rh  >   r[   r   r[   r   r   r|   r   r|   r|   r   r|   r   r   r   )rO   rh   r   r   r   r   r   r-   tupler.   rX   r@   rx   r0   rg   ri   r   m1m2m3r  r2   r	   r   r7   r8   r9   r:   rU   r/   ry   )rI   r  s     rJ   test_diopcoverager.    s   
A#'A+	Bb>>sBsFQJ/00000	
1a4!A#a%"Q$	1a4	'"Q$	.	3Bb>>q1"q&kBqD1Ha=99999!ad(Q,''adUQYN+;;;;;q1uqy!!c1s7^33331a4000F::::Q37BqD1H
C1b!,,33331bD111U:U:UQT:U:U:U5U5UUUUUaB355((((aA6(****aBF8++++
:445551a##v----
Q$A1	q!t	#B#B'' "%%, , , ,URU]RU"AbDGbDGRURU]RU*,, , , , , ,
 {1Q44!A#:qttacz1Q44!==>>!CCCC{8Aq>>1Q44!8QqTTA3??@@AEEEE{1Q44!8Xa^^QqTTA3??@@AEEEE"b!!Q&&&&77588|,,,,,,,,,,77588|----------q!Q9,,,,
944555h	22     S STTT
 @ @AAA!Q$A+,t344SSST T T T T TrL   c                      t          dddddd          dk    sJ t          dddd	d	d
          dk    sJ t          t          d            d S )Nr\   r   r   rk   O   r   r\   r   r   r   r[   r   )r\   r   r\   c                  *    t          dddddd          S )Nr\   r   rm   rk   r0  r   )r1   rP   rL   rJ   rQ   ztest_holzer.<locals>.<lambda>O  s    vaB2r:: rL   )r1   r@   rx   rP   rL   rJ   test_holzerr3  F  sf     !QAr2&&*4444 !Q1a$$	1111
:::;;;;;rL   c                  f  
 
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 d S )Nc                 8    | dz  z  |dz  z  z   |dz  z  z
  S r   rP   )rO   rh   ri   r(  r)  rz  s      rJ   rQ   z"test_fail_holzer.<locals>.<lambda>T  s(    1a4!AqD&1QT61 rL   )rk   r0  r   )   r[   r   r1  r   r\   )maxr1   )rI   rO   rh   ri   xyzr  r  r4  r  hr(  r)  rz  s             @@@rJ   test_fail_holzerr:  R  s   	1	1	1	1	1	1BGAq!GAq!cGAq!c2s8q====2s8q====qAvqAvqAv&&!A#a%////qAvqAvqAv&&!A#a%////q!Q1a  A888888rL   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 d S )Nr   r   r   r   )r   rg   rh   rO   ri   r   r   r   rP   rL   rJ   test_issue_9539r<  `  sm    qsQqSy2a4'!+,,#sSy!C%"S&.1S5"89:; ; ; ; ; ;rL   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 d S )NrT   r\   rm   r   r   r   r"  rP   rL   rJ   test_issue_8943r?  e  sm    	1a4!Q$;AQqS1Q3Y1_!557 7;     rL   c                  F   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 d S )Nrk   iq
  )rT   r   r   )r\   rk   r   r\   c                  &    t            d          S r   )r   rH   s   rJ   rQ   z.test_diop_sum_of_even_powers.<locals>.<lambda>o  s    (GQ(O(O rL   negTr  )r   r   r   r   )limit)
rO   rh   ri   r   r   r@   ry   r
   r   rX   )rB  rI   s    @rJ   test_diop_sum_of_even_powersrD  k  s*   	
A1q!t	d	"Bb>>i33333*2q11i5KKKKK
 O O O OPPP
%$
'
'
'C	
A1sAv		$B*2..:,>>>>q!tad{Q''3550000*1a4!Q$;?!DDDMMMMMMrL   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 d t          d          D             g dk    sJ d t          d          D             g dk    sJ t          d          D ]yt          t          dd                    }|rt          fd|D                       sJ t          t          d                    }t          fd|D                       sJ zt          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 d S ),N>   r   r   r[   r[   r   r   r   r~   r   r   r   r[   rT   r   r   r   r[   rk   r~   r   r   rT   rk   r   r   r   rT   r~   r~   r   r[   r[   r\   r   r   r[   r[   r   r   r   r[   r\   rT   rT   r   r[   rT   rk   rk   r   r[   r~   r~   r   r   r\   r\   rT   r~   r   r\   rT   r~   r   r   rT   rT   rk   r~   r   r\   r   rm   c                  <    t          t          dd                    S )Nr   r|   )r  r5   rP   rL   rJ   rQ   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tN2r$:$:;; rL   r[   r]   T)r   r[   r   rT   r   r>  rk   r^   r~   2   )r~   r~   )r[   r   r   )r[   r[   r[   r\   r\   )r   r   r[   r[   rT   r   )r[   r[   r[   r[   r[   r[   r[   r[   c                 d    g | ]-}t          t          t          |d d                              .S )r~   Tr  r  r5   r  s     rJ   r	  z.test_sum_of_squares_powers.<locals>.<listcomp>  s4    EEEaC^Aq$//0011EEErL   r   )r[   r[   r[   r[   r\   r\   r[   r[   r\   r\   r\   r\   r\   rT   r\   r[   rT   rT   rT   rT   rk   rT   rT   r\   r\   rk   rk   rk   rk   r~   c           
      b    g | ],}t          t          t          |d                               -S )r~   rW  r  s     rJ   r	  z.test_sum_of_squares_powers.<locals>.<listcomp>  s2    ???C^Aq))**++???rL   )r   r   r   r   r   r[   r   r   r[   r   r   r[   r   r[   r[   r   r[   r[   r   r[   r\   r[   r[   r[   r[   r[   r[   r[   r[   rT   c              3   R   K   | ]!}t          d  |D                       k    V  "dS )c              3       K   | ]	}|d z  V  
dS r  rP   r  js     rJ   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s&       1 1!A 1 1 1 1 1 1rL   Nr  r  r   r  s     rJ   r  z-test_sum_of_squares_powers.<locals>.<genexpr>  s?      CC1S 1 1q 1 1 111Q6CCCCCCrL   c              3   R   K   | ]!}t          d  |D                       k    V  "dS )c              3       K   | ]	}|d z  V  
dS r  rP   r[  s     rJ   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s&      ''q!t''''''rL   Nr]  r^  s     rJ   r  z-test_sum_of_squares_powers.<locals>.<genexpr>  s?      993''Q'''''1,999999rL   c                  >    t          t          ddd                    S )Nr\   r|   r[   r  r4   rP   rL   rJ   rQ   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!R$;$;<< rL   c                  >    t          t          ddd                    S )Nr\   r[   r|   rb  rP   rL   rJ   rQ   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!Q$;$;<< rL   r}   r   r  )r   r[   r[   ))r   r~   )r[   rk   rp  r      i  )r   r  )r  r   rO   rh   ri   r   r   r  r@   rx   r  r5   r  rX   r  r4   )trurI   r  s1s2r  s        @rJ   test_sum_of_squares_powersrh  w  s   - - -C 
A1q!t	ad	"QT	)C	/B
%b"
-
-Cs88r>>>>#::::
:;;<<<q!$$%%$////q!$$%%++++q!T**++x7777sA&&''2----q!$$%%++++q!T**++	{::::q!$$%%++++q!$$%%$////q!$$%%++++r1%%&&66*:::::r1d++,,1* * * * *q!$$%%*B)CCCCCEE599EEE J J J     @?U2YY??? D D D     2YY : :1d++,,CCCCCCCCCCCCC1%%&&9999b999999999
:<<===
:<<===b!Q''((XJ6666b!Q''((B....aA&&''D61111aAt,,--)Y1GGGGGaAt,,--1I1I1IIIIIaA&&''2----dAq))**b0000dAq))**tf44$$,,,,agq!,,--333333rL   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 d S )	NrT   r|   Fr   r[   r   rk   r\   )r;   rP   rL   rJ   test__can_do_sum_of_squaresrj    s    !!R((E1111!"a((E1111!!Q'''''!!Q'''''!!Q'''''!!Q'''''!!Q''5000000rL   c                  X   ddl m} m}m}m}m} | dz  |dz  z   dz
  }dh}t          |          |k    sJ t          t          |	                                                    }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 d S )Nr   ry  rk   rQ  rp  TrR  r\   r,  #   i0  r   r   r   r   )r  r(  r)  rz  r{  r|  r   rX   rB   rr  r  rO   rh   )	r(  r)  rz  r{  r|  rI   ru  rv  solns	            rJ   test_diophantine_permute_signrn    sh   ''''''''''''''	
A1	$BxHr??h&&&&+HLLNN;;<<Mr4(((M9999	
A1q!t	ad	"QT	)C	/B{22%%%%{2t,,,--6666///Dr!Q$wAa'"QT'1B6EEEMMMMMMrL   c                      t           dz  t          dz  z   dz
  dz
  } t          | t           t          g          ddhk    sJ d S )Nr\   rk   r[   rh  ri  r   )r[   rT   rO   rh   r   rH   s    rJ   test_not_implementedrr    sJ    	
A1t	d	"BrA'''FF+;;;;;;;rL   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           d S )NrT   r\   rp  c                  >    t           t          t          h          S )Nrp  )r   rh   rO   rH   s   rJ   rQ   z!test_issue_9538.<locals>.<lambda>  s    k"Aq6::: rL   )rO   rh   r   r   r@   rU   rH   s   @rJ   test_issue_9538ru    sf    	
QqS1Br1&&&C3+;*<<<<<
9::::;;;;;rL   c                  D   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 d S )Nr\   r}   rk   rT   H   r   r   r   r   r   r~   r   r.  r   r/  i~i i
  ix  i:
 ii  ib<  )r   rO   rh   ri   r   r	   r  r3   )r  r<  r=  r  s       rJ   test_ternary_quadraticrx    s   AadFQTMAadF*++Aadd'((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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 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 7 7 7 7rL   c                  
   t          g g           t                    t                      k    sJ j        dk    sJ j        dk    sJ t	          t
          fd           t                                                    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                               d           t                    dhk    sJ                     ddt          f           t                    ddt          fhk    sJ t	          t
          f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    s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                     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                     t          dt          di          dhk    sJ  dd          dhk    s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                     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                     t          d	t          di          dhk    sJ  d	d          dhk    s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          } |                     t          dt          z  f           |                     t           dt          z  f            | dd          dhk    sJ d S )NrP   c                  :                          t          f          S rG   )addrO   )rf  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvqd|| rL   c                  .                          d          S )Nr]   r{  )rg  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvd|| rL   )rT   rk   r|   c                  .                                    S rG   )update)rf  rg  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    ryy}} rL   rT   rk   r\   r[   r   r   )rY  r|   r[   r~   r   r   )r   r   r[   )   r   r[   c                  0                          d          S )Nr[   )rO   r
  s3s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    bgggll rL   c                  2                          ddd          S Nr[   r\   rT   r  r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    bggaA.. rL   c                  .                          d          S )NrP   r}  r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvbzz rL   c                  .                          d          S )N)r[   r\   rT   rk   r}  r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvl33 rL   c                  .                          d          S )Nr   r}  r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvf~~ rL   c                        ddd          S r  rP   r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    rr!Q{{ rL   c                        d          S )Nr[   r  rP   r  s   rJ   rQ   z/test_diophantine_solution_set.<locals>.<lambda>  s    bb1ggg rL   r   r  r   r   )r<   rX   r
   r~  r@   rx   r  dict_iteratorrO   rh   r   r  r{  r  ri   r  r
  rU   )s4rf  rg  r  s    @@@rJ   test_diophantine_solution_setr    s8   	B	'	'Br77cee:=B
:++++,,,  ""##r))))	AA	/	/B:!Q=QF""""
:++++,,,FF6NNNr77vhIIfr1gr77vAw'''''
:,,,,,---  ""##B11a|'DDDDD	Aq	Aq6	2	2Br}""""FFAqD1Ha!eQ   r771q!a%+,,,,,771a==a!eQUA./////2a55a!eQUA&'''''77Aq!Q<  [M11112a88}$$$$77Aq6??BAq1222222a55a"fa!eQ'(((((771b>>q!taxQ2333332dB<<QTAXq1ua01111177Aq!Q<  [M11112a88}$$$$77Aq!R=!!j\11112a99$$$$
9****+++
9....///
:))))***
:3333444
:----...
:****+++
9oooo&&&	AA	/	/BFFAr!t9FFQB1:2a88xrL   c                     dt           z  t          z  dt          dz  z  z   } t          |                               t          t
          g          }|t          dt          z  ft          dt          z  fhk    sJ  |dd          dhk    sJ d S )	NirT   r\   r}  r   ir   r   )rO   rh   r>   r   r   r  )rI   r  s     rJ    test_quadratic_parameter_passingr  "  s    	Qq1QT6	Br""((QF(;;HBqD	As1u:.....8Aq>>fX%%%%%%rL   c                  &   t           dz  dt           z  z
  t          dz  z   dt          z  z
  } t          |           }|h dk    sJ dt           dz  z  dt           z  z
  dt          dz  z  z   dt          z  z
  dz   }t          |          }|dhk    sJ d S )	Nr\   rn   r   >   r   r   rn   r   rn   r   r   rk   r|   rk   r   r   rk   rm   r   rq  )eq1r   eq2s      rJ   test_issue_18628r  )  s    
Q$A+1
qs
"C
c

CFFFFFFF
AqD&1Q3,1a4
!A#
%
*C
c

C6(??????rL   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)  rz  r{  r<  r=  rO   rh   ri   rg   r   r  r   r  r  r4  r   r   r   t_3t_4t_5t_6r+  r,  r-  rE   rK   rV   rY   r`   rz   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r*  r1  r5  r8  r>  rA  rE  rH  rO  rw  r  r  r  r  r  r  r  r  r  r   r.  r3  r:  r<  r?  rD  rh  rj  rn  rr  ru  rx  r  r  r  rP   rL   rJ   <module>r     s9               1 1 1 1 1 1 1 1 1 1 $ $ $ $ $ $ " " " " " " % % % % % % ' ' ' ' ' ' + + + + + + * * * * * * ( ( ( ( ( ( 8 8 8 8 8 8 8 8 8 8 8 8 8 8 1 1 1 1 1 1                                                                                            5 4 4 4 4 4 4 4 4 4      294d2D 2D 2D .1aAq!Q1aAq!Q$+GFD$A$A$A !S#sCcWVT***
BWT4   + + +5 5 5
& & &7 7 7
X X X2/ / /<  0 0 0- - -= = =N N NA A AA A A B B BH# H# H#V& & &       <U U UO O O" " "; ; ;
 
 

6 
6 
6!E !E !EH. . .; ; ;5 5 5- - -V5 V5 V5rD D D< < <@( ( (
G 
G 
G5 5 50 0 0&. . .$*: *: *:Z  6  .,T ,T ,T^	< 	< 	< 
 
 
; ; ;
  	N 	N 	N64 64 64r1 1 1N N N < < <
< < <7 7 78.  .  . b& & &    rL   