
    gæ                        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 ZdMS )N    )Add)Mul)Rationaloopi)Eq)S)symbols)Matrix)	factorint)powsimp)_mexpand)default_sort_keyordered)sin)diophantine),diop_DN
diop_solvediop_ternary_quadratic_normaldiop_general_pythagoreandiop_ternary_quadraticdiop_lineardiop_quadraticdiop_general_sum_of_squaresdiop_general_sum_of_even_powersdescent
diop_bf_DN	divisible
equivalentfind_DNldescentlengthreconstruct	partitionpower_representationprime_as_sum_of_two_squaressquare_factorsum_of_four_squaressum_of_three_squarestransformation_to_DNtransformation_to_normalclassify_diopbase_solution_linear
cornacchia
sqf_normalgaussian_reduceholzercheck_paramparametrize_ternary_quadraticsum_of_powerssum_of_squares_diop_ternary_quadratic_normal_nint_or_floor_odd_even_remove_gcd_can_do_sum_of_squaresDiophantineSolutionSetGeneralPythagoreanBinaryQuadratic)slowraisesXFAIL)signed_permutationsz.a, b, c, d, p, q, x, y, z, w, t, u, v, X, Y, ZT)integerzt_:7zm1:4n1c                 T    t          t          t          |                               S N)r   r   eqs    l/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pydiop_simplifyrJ   '   s    GHRLL))***    c                  ^    t          t          d            t          t          d            d S )Nc                  D    t          t          t                              S rF   )r   r   x rK   rI   <lambda>z#test_input_format.<locals>.<lambda>,   s    k#a&&11 rK   c                  @    t          t          t          z  dz
            S N   )r   rN   r   rO   rK   rI   rP   z#test_input_format.<locals>.<lambda>-   s    k!B$(33 rK   )r@   	TypeErrorrO   rK   rI   test_input_formatrU   +   s0    
911222
93344444rK   c                      t          d          t                      k    sJ t          t          d                    t                      k    sJ d S rR   )r   setr	   rO   rK   rI   test_nosolsrX   0   sF    q>>SUU""""qtt%%%%%%rK   c                      t          t          dz
  t          dz
  dz  z            ddhk    sJ t          t          dz
  t          dz
  z            ddhk    sJ d S )N      rZ   r[   r   rN   rO   rK   rI   test_univariater_   6   s_    q1uq1uqj())dD\9999q1uq1uo&&4,666666rK   c            
         t          t          d            t          t          d            t          t          d            t          t          d            t	          dt
          dz  z  dt
          z  z   dz
            t
          gd	d
t
          dt
          dz  didfk    sJ t	          t
          t          z  t          z             t
          t          t          gt
          t          z  d	t          d	idfk    sJ t	          t
          t          z  t          z   t          z   t
          dz  z             t          t
          t          t          gt
          t          z  d	t          d	t
          dz  d	t          d	idfk    sJ t	          t
          t          z  t
          t          z  z   t
          dz  z   d	z             t
          t          t          gt
          t          z  d	t
          t          z  d	t
          dz  d	d	d	idfk    sJ t	          t
          t          z  t          z   t          z   dz             t          t
          t          t          gt
          t          z  d	t          d	d	dt          d	idfk    sJ t	          t
          t          z  t          t          z  z             t          t
          t          t          gt
          t          z  d	t          t          z  d	idfk    sJ t	          t
          t          dz  z  d	z             t
          t          gt
          t          dz  z  d	d	d	idfk    sJ t	          t
          dz  t          dz  z   t          dz  z   dz
            t
          t          t          gd	dt
          dz  d	t          dz  d	t          dz  d	idfk    sJ t	          t
          dz  t          dz  z   t          dz  z             t
          t          t          gt
          dz  d	t          dz  d	t          dz  d	idfk    sJ d S )Nc                  <    t          t          dz  dz  dz
            S )Nr[   rS   rZ   )r,   rN   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda><   s    mAqDFQJ77 rK   c                       t          d          S NrZ   r,   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>=   s    }Q// rK   c                  `    t          t          t          z  t          z  t          z  dz
            S rc   )r,   wrN   yzrO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>>   s    ac!eAgk(B(B rK   c                  b    t          t          dz  t          dz  z   t          dz  z   dz
            S )NrS      Z   )r,   rN   rg   rh   rO   rK   rI   rP   z$test_classify_diop.<locals>.<lambda>?   s(    adQTkAqD6H26M(N(N rK      r[      *   rZ   i
univariateinhomogeneous_ternary_quadraticinhomogeneous_general_quadratichomogeneous_general_quadratic
cubic_thuerj   b   igeneral_sum_of_even_powers$homogeneous_ternary_quadratic_normal)	r@   rT   
ValueErrorNotImplementedErrorr,   rN   rg   rh   rf   rO   rK   rI   test_classify_diopry   ;   s   
97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rK   c                     t          t                    dk    sJ t          dt          z            dk    sJ t          dt          z            dk    sJ t          t          dz             dk    sJ t          dt          z  dz             dk    sJ t          dt          z  dz             dk    sJ t          t          t          z             t          t           fk    sJ t          t          t          z   d	z             t          t           fk    sJ t          t          t          z   d	z
            t          t           fk    sJ t          d	t          z  t          z
  d
z
            dk    sJ t          dt          z  dt          z  z   d
z
            dt          z  d
z
  dt          z  d
z   fk    sJ t          dt          z  dt          z  z
  d
z
            dt          z  d
z
  dt          z  d
z
  fk    sJ t          dt          z  dt          z  z
  d
z
            dt          z  d
z   dt          z  d
z
  fk    sJ t          dt          z  d
t          z  z             d
t          z  dt          z  fk    sJ t          dt          z  dt          z  z             dt          z  t          fk    sJ t          dt          z  dt          z  z   dz
            dt          z  dz
  dt          z  dz   fk    sJ t          dt          z  dt          z  z   dz
            dk    sJ t          d	t          z  dt          z  z   dt          z  z
  d
z             dt          z  d
z   dt          z  d
z   fk    sJ t          dt          z  dt          z  z   dt          z  z
  d
z             t          dt          z  dt
          z  z   d
z   dt          z  dt
          z  z   d
z   fk    sJ t          dt          z  dt          z  z   dt          z  z
  d
z   d           dk    sJ t          dt          z  dt          z  z   dt          z  z   d
z
            dk    sJ t          d
t          z  dt          z  z   dt          z  z
  dz
            t          dt          z  dt
          z  z   dz   dt          z  dt
          z  z   dz   fk    sJ t          dt          z  dt          z  z
  dt          z  z   dz
            dt          z  dz   t          dt
          z  z   t
          fk    sJ t          dt          z  dt          z  z   dt          z  z   t          z
            t          t
          t
          t          z   dt          z  dt
          z  z   dt          z  z   fk    sJ t          t          d            d S )N)r   rZ   rS   )r[   rF   rj   )r      )r|         )NN   )r   r}   r}   NNN      	         c                  0    t          t          dz            S Nr[   r^   rO   rK   rI   rP   ztest_linear.<locals>.<lambda>o   s    j1oo rK   )
r   rN   rg   t_0rh   t_1rf   t_2r@   rT   rO   rK   rI   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--.....rK   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 )NrS   "   r   rZ   )i{)r}   ir   r[   rj   6   )   r      )r{   r}   8   r   >   i_r   iiiiir   i   r|   r   @   rZ   r   r{   0   )r   rN   rg   rW   tr   rO   rK   rI   %test_quadratic_simple_hyperbolic_caser   r   s   ac!ebdlRT)A-.."# # # #ac!eackAaC'!+,,555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rK   c                  (   t          dt          dz  z  dt          z  t          z  z   dt          dz  z  z   dt          z  z   dt          z  z   dz
            dhk    sJ t          d	t          dz  z  d
t          dz  z  z   dt          z  z   dt          z  z
  dz             t                      k    sJ t          t          dz  t          dz  z   dt          z  z   dt          z  z   dz             dhk    sJ t          dt          dz  z  dt          z  t          z  z
  dt          dz  z  z   dt          z  z
  dt          z  z
  dz
            dhk    sJ t          dt          dz  z  dt          z  t          z  z   dt          dz  z  z   dz
            h dk    sJ d S )Nrn   r[   r   rm         i3  )r   r{   rj   rS   r}      r   r{   r{   r   rl   V  )r   
   r      r{   r[   rZ   rZ   rZ   r|   r   )r   rN   rg   rW   rO   rK   rI   test_quadratic_elliptical_caser      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 0rK   c                  (   t          dt          dz  z  dt          z  t          z  z
  dt          dz  z  z   dt          z  z   dt          z  z   dz             sJ t          dt          dz  z  dt          z  t          z  z
  dt          dz  z  z   dt          z  z   d	t          z  z   dz
            sJ t          dt          dz  z  dt          z  t          z  z   dt          dz  z  z   d
t          z  z   dt          z  z   dz
            sJ t          dt          dz  z  d
t          z  t          z  z   t          dz  z
  dt          z  z   dz
            sJ t          t          dz  dt          z  t          z  z   t          dz  z   dt          z  z   dt          z  z   dz             sJ t          t          dz  dt          z  t          z  z
  t          dz  z   dt          z  z   dt          z  z   dz             sJ t          t          dz  dt          z  z
  dz             sJ d S )Nr   r[      r   r}   r      r   r   rj   rS   rZ   )   (   check_solutionsrN   rg   rO   rK   rI   test_quadratic_parabolic_caser      s   1QT6BqDF?R1W4qs:QqS@2EFFF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$;+,,,,,,,rK   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   rj   r[   r}   r|   rS   r      r      r   r       r   r   r   r   r   rO   rK   rI   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!;<<<<<<<rK   c                     t          t          dz  dt          z  z
  dt          dz  z  z
            sJ t          dt          dz  z  dt          dz  z  z
  dt          z  z
  dt          z  z
            sJ t          t          dz  t          t          z  z
  t          dz  z
  dt          z  z
            sJ t          t          dz  dt          dz  z  z
  dt          z  z
  dt          z  z
            sJ t          t          dz  t          dz  z   dt          z  z   dt          z  z   dz                                             dhk    sJ d S )Nr[   r}   rS   r   r   r   )r   rN   rg   r>   solverO   rK   rI   !test_quadratic_non_perfect_squarer      s#    1a4!A#:!Q$./////1QT6AadF?QqS01Q36777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MrK   c                  &   ddt           z  dt           z  dz
  z  z
  t          dt          z  dz
  z  z   } t           t          f}t          |           D ]A}t          |                     t          t          ||                                        rJ Bd S )Nir[   rS   rZ   rN   rg   r   rJ   xreplacedictziprH   vsols      rI   test_issue_9106r      s    	qsAaC!G}	q!A#'{	*B	
AA2 A A T#a++->->!?!?@@@@@@A ArK   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      rI   test_issue_18138r      sv    	
AAqDB	
AA2 A A T#a++->->!?!?@@@@@@A ArK   c                     t          dt          dz  z  dt          z  t          z  z   dt          dz  z  z
  dt          z  z
  dt          z  z
  dz
            sJ t          dt          dz  z  dt          z  t          z  z
  dt          dz  z  z   d	t          z  z
  dz
            sJ t          d
t          z
  dt          dz  z  z   t          z
  dt          z  t          z  z
  dt          dz  z  z
            sJ t          ddt          z  z   dt          dz  z  z   dt          z  z   t          t          z  z   dt          dz  z  z
            sJ d S )Nr   r[   r   r   r   r   r   r   r}   r   rj   rS   rZ   r   rO   rK   rI   test_quadratic_non_perfect_slowr      s$   1QT6BqDF?Qq!tV3bd:RTABFGGG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ArK   c                     t          dd          dgk    sJ t          dd          g k    sJ t          dd          dgk    sJ t          d	d
          dgk    sJ t          dd          g k    sJ t          dd          g k    sJ t          dd          dt          fgk    sJ t          dd          dt          z  t          fgk    sJ t          dd          g k    sJ t          dd          dgk    sJ t          dd          dgk    sJ t          dd          dgk    sJ t          dd          ddgk    sJ t          dd          g dk    sJ t          dd          dgk    sJ t          dd          dgk    sJ t          dd          dgk    sJ t          d d          d!gk    sJ t          d"d          d#gk    sJ t          d
d          d$gk    sJ t          d%d          d&gk    sJ t          dd          d'gk    sJ t          d"d          g k    sJ t          d(d          d)gk    sJ t          d*d          d+gk    sJ t          d,d          d-gk    sJ t          d.d          g k    sJ t          dd/          g d0k    sJ t          d1dd2d3dd/          d4k    sJ t          dd5          g d6k    sJ t          t          d7d8                    h d9k    sJ t          dd:          d;gk    sJ t          d<d=          g k    sJ t          dd          d>d?gk    sJ t          d@dA          dBgk    sJ t          d@dC          g k    sJ t          dDdC          dEgk    sJ t          dFddGddDdC          sJ t          dDdH          dIdJgk    sJ t          ddt                    dt          fgk    sJ t          ddt                    g k    sJ d S )KNrS   r   r   r   r~   ir   r[   rZ   r   r   r   r   r}   r   r   r      )r   rj   iL)r   r   r   r{   rZ   r[      ))r   r}   )r}   r   )r   r   )r   r   rZ   )i  r   i  )i  ix  i  )l   INd? l   j\i  )i  i"  i  )l   WRlQ]>I2l   AAJtWjU^	 )!   r      )   '   )r   r}   r   )r   r}   i"  )r   rZ   	S  l   !K2l   uGoX r   r   )rS   rZ   )  m   $   r   r   r   r   Tr   ))   =   r   r   )      r   rS      r   >   iX i  ipi"'Mi)  iS  l   )fMOl   ?_l   ;>x< i|r   rZ   r   )i  i     r   )r   rZ   )r   rZ      r[   r   r|   {   )r   rZ   r   r   i)rZ   )r   rZ   )r   r   r   rW   rO   rK   rI   test_DNr      s    1a==VH$$$$3r!!!!3x''''3x''''3r!!!!1a==B1a==aVH$$$$1a==ac1XJ&&&&2r??b    1c??wi''''1dy((((1a==VH$$$$ 2q>>ff-----2sCCCC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!""""""rK   c                     t          dd          g dk    sJ t          dd          g dk    sJ t          dd          g k    sJ t          dd	          d
gk    sJ t          dd          ddgk    sJ t          dd          dgk    sJ t          dd          dgk    sJ t          ddt                    dgk    sJ t          ddt                    dt          fgk    sJ t          ddt                    dt          z  t          fdt          z  t          fgk    sJ t          ddt                    dgk    sJ t          d	dt                    g k    sJ d S )Nr   r   )r   )r   rZ   r   r   )r   )r   rS   r   )ir   r   r|     rZ   )l   uL" l   EY   r   r   rZ   r   r   r{   r   iT  )i  r   r   r   rj   r[   rS   )r   r   rO   rK   rI   test_bf_pellr     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%%%%%%rK   c                     t          ddd          dk    sJ t          ddd          dk    sJ t          ddd	          dk    sJ t          ddd
          dk    sJ t          dd
d          dk    sJ t          ddd          dk    sJ d S )Nr[   rZ   r   r|   rj   r}   rS   r~   r   r   r   r   r   r   )r"   rO   rK   rI   test_lengthr   #  s    !Q??a"aq    "a!!!!!Qq    !R""""!Q??arK   c           	         t          |           \  }}|t          t          t          g          z  |z   d         }|t          t          t          g          z  |z   d         }t	          |                     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   rZ   c                 T    g | ]%}t           |j        t          t          g           &S rO   )reversedas_independentXY).0r   s     rI   
<listcomp>z-is_pell_transformation_ok.<locals>.<listcomp>9  s/    OOO!(+1+aV455OOOrK   Fr[   T)r*   r   r  r  rJ   subsr   rN   rg   r   argskeysr   )rH   ABur   
simplifiedcoeffterms           rI   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((	) 4rK   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   rl   r   r   r}   r   r   r   r   -   r      r   rS   r      r   rm   r   r   )r  rN   rg   rO   rK   rI   test_transformation_to_pellr  J  s   $SAX!A%51%<qs%BQqS%H2%MNNN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TrK   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   rS   r}   )rS   r}   rj   r   )r}   r   r   r   )r   r   r   )r   T   r   )rZ   r   r   rl   )e   i)r    rN   rg   rO   rK   rI   test_find_DNr  U  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NrK   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   rS   r   r   i)rj   r   )r   rj   [   r   r   rZ   r{   )rj   r   r   r   i) rZ   r   ir[   r{   r   )r!   r  abrf   rN   rg   s         rI   test_ldescentr)  _  s    
4 
4 
4A ' '11a..1aAv!Q$!Q$&&&&&B###Aq>>!!!!!rK   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}   rj   rS   r   r   r   r   r   r   r   r   i-  |   r   1  r   rN   rg   rh   rO   rK   rI   "test_diop_ternary_quadratic_normalr0  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:::::::rK   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 rO   )r  r  )r  r   r  r  Zs     rI   r  z/is_normal_transformation_ok.<locals>.<listcomp>~  s2    RRRQ(+1+aAY788RRRrK   FT)r+   r   rN   rg   rh   rJ   r	  r   r   r
  r  )rH   r  r  r  r  r  r  r3  s        @@@rI   is_normal_transformation_okr4  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   4rK   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[   rS   r   r   r   d   r   r   )r4  rN   rg   rh   rO   rK   rI   test_transformation_to_normalr7    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5rK   c                     t          dt          dz  z  t          dz  z   t          dz  z   dt          z  t          z  z
            sJ t          t          dz  t          dz  z
  t          dz  z
  t          t          z  z
  t          t          z  z
            sJ t          dt          dz  z  t          t          z  z
  t          t          z  z
  t          t          z  z
            sJ t          t          dz  t          t          z  z
  t          t          z  z
            sJ t          dt          dz  z  dt          z  t          z  z
  t          t          z  z
            sJ t          dt          dz  z  dt          dz  z  z
  t          t          z  z
            sJ t          dt          dz  z  dt          dz  z  z   t          dz  z
  dt          z  t          z  z
  dt          z  t          z  z   dt          z  t          z  z
            sJ t          dt          dz  z  dt          z  t          z  z
            sJ t          dt          dz  z  dt          dz  z  z
  dt          z  t          z  z
  t          dz  z
            sJ t          t          dz  d	t          dz  z  z
  t          dz  z
  d
t          z  t          z  z   dt          z  t          z  z
            sJ t          dt          dz  z  dt          dz  z  z   dt          z  t          z  z   dt          z  t          z  z   dt          z  t          z  z             sJ t          t          dz  dt          dz  z  z   t          dz  z   t          t          z  z
  dt          z  t          z  z
            sJ t          t          dz  dt          dz  z  z   t          dz  z   t          t          z  z
  dt          z  t          z  z
  dt          z  t          z  z             sJ t          t          dz  dt          dz  z  z   t          dz  z   d
t          z  t          z  z
  dt          z  t          z  z
  dt          z  t          z  z             sJ t          t          t          z  dt          z  t          z  z
  d
t          z  t          z  z             sJ t	          t          dz  t          dz  z   t          dz  z             dk    sJ t	          t          dz  t          dz  z             J t          t          d            dt          z  t          z  dt          z  t          z  z
  dt          dz  z  z   dt          z  t          z  z
  dt          dz  z  z   } t          |           dk    sJ t	          dt          dz  z  dt          dz  z  z   t          dz  z
            dk    sJ t          t          t          z  dt          z  t          z  z             ddt          fk    sJ dt          z  t          z  dt          z  t          z  z
  dt          z  t          z  z
  dt          dz  z  z   } t          |           dt          dz  z  dt          z  t          z  z
  dt          z  t          z  dt          dz  z  z   dt          z  t          z  fk    sJ t          t          t          z  dt          z  t          z  z             dt          z  t          z  t           t          dz  z  t          dz  z   t          t          z  fk    sJ d S )Nr[   rj   rS   r}   r   r   r   r  1   r   rk   r   r   r   c                      t          t          t          t          ft          t          z  dt          dz  dt          dz  dt          dz  di          S )NrZ   r[   rS   r   )r6   rN   rg   rh   rO   rK   rI   rP   z-test_diop_ternary_quadratic.<locals>.<lambda>  s@    &1ay	
1aAq!Q$1a4+	- 	- rK   r|   r   )r   r[   r   )rZ   r   r[   r   r~   r   )r   rN   rh   rg   r   r@   rw   r   rD   r3   pqr   rG   s    rI   test_diop_ternary_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DrK   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 )NrZ   r{   r   r}   r~   rj   r   r[   r   r   r   r   rS   4   r9  r   i  rl   )r'   r   rO   rK   rI   test_square_factorr@    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------rK   c                     t          t          dz  t          dz  z   t          dz  z
            sJ t          t          dz  dt          z  t          z  z   t          dz  z             sJ t          dt          dz  z  dt          dz  z  z
  t          dz  z
            sJ t          dt          dz  z  dt          dz  z  z   t          dz  z
  dt          z  t          z  z
  dt          z  t          z  z   dt          z  t          z  z
            sJ t          t          dz  t          dz  z
  t          dz  z
            sJ t          t          dz  dt          dz  z  z
  t          dz  z
  dt          z  t          z  z   d	t          z  t          z  z
            sJ t          d	t          z  t          z  t          dz  z             sJ t          d
t          dz  z  dt          dz  z  z
  dt          dz  z  z
            sJ t          dt          dz  z  dt          dz  z  z
  dt          z  t          z  z
  dt          z  t          z  z
  dt          z  t          z  z
            sJ t          dt          dz  z  dt          dz  z  z   dt          z  t          z  z   dt          z  t          z  z   dt          z  t          z  z             sJ t          d
t          dz  z  dt          dz  z  z
  dt          dz  z  z
            sJ d S )Nr[   r+  r,  rS   r}   r   r9  r   r   r-  r   r.        r   r   rk   r/  rO   rK   rI   "test_parametrize_ternary_quadraticrD    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:::::::rK   c                     t          dt          z  t          z  t          t          z  z   dt          z  t          z  z
            sJ t          dt          z  t          z  dt          z  t          z  z
  dt          z  t          z  z
            sJ t          dt          z  t          z  dt          z  t          z  z             sJ t          t          t          z  t          t          z  z   t          t          z  z             sJ t          dt          z  t          z  dt          z  t          z  z   dt          z  t          z  z             sJ d S )Nr[   rS      iY  r   r   r   r/  rO   rK   rI    test_no_square_ternary_quadraticrG    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4rK   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   rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gb"oo rK   c                  "    t          dd          S )Nr   rS   rJ  rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gamm rK   c                  "    t          dd          S )Nrj   rS   rJ  rO   rK   rI   rP   ztest_descent.<locals>.<lambda>  s    gamm rK   )r   r@   rT   ZeroDivisionErrorr&  s         rI   test_descentrN    s    	g	g	gA ' '1!Q--1aAv!Q$!Q$&&&&& 9--...
33444
9++,,,,,rK   c                     t          t          t          z
  t          t          z
  z  t          t          z
  z            sJ t          t          t          z
  t          dz  t          dz  z   t          dz  z
  z            sJ t          t          dt          z  z
  dt          z  z   t          dz  t          dz  z   t          dz  z
  z            sJ t          t          dz  dt          dz  z  z
  dz
            sJ t          t          dz  dt          z  t          z  z             sJ t          t          dz  dt          z  t          z  z
  t          dz  z             sJ t          t          t          dz  t          dz  z
  dz
  z            sJ t          t          dt          z  dt          z  z
  dz   z            sJ t          t          dz  dt          dz  z  z
  dz
  t          dz  t          dz  z
  dz
  z            sJ t          t          dz  dt          dz  z  z
  dz
  t          dt          z  z
  z            sJ t          t          dz  t          dz  z   t          dz  z
  t          dt          z  z
  dt          z  z
  dt          z  z   z            sJ t          t          dz  dt          z  t          z  z
  dt          z  t          z  z             sJ t          t          dz  dt          z  z
  dz             sJ t          t          t          z
            t          t          t          t                              k    sJ t          dz  t          dz  z   dz
  } t          | d	
          t          |  d	
          k    sJ t          dt          z  t          z  dt          z  t          z  z
            dt          z  dt          z  fhk    sJ t          dz  t          dz  z   t          dz  z   dz
  } dh}t          |           |k    sJ t          t          |                                                    }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[   rS   r   rZ   rm   r}   rj   a   Tpermuterl   rZ   r[   rS   \   c   )r   r   3   i{  r   iKf   i  ij  rV  )rZ   rZ   r[   r|   i  9      )i  iU
  i  i i ii ia i iڙ iV
 i=  i  i  )r9        i	  i>  iipE i* i',  i  i  r   )r   r[   rZ   r   c                  F    t          t          t          dz  z  dz             S )Nr[   rZ   r   rN   rg   rO   rK   rI   rP   z"test_diophantine.<locals>.<lambda>-  s    AadFQJ(?(? rK   >   rS   r   rj   rj   r   rS   r|   rZ   r   >   rj   rZ   rj   r{   r   rZ   r   r{   r{   rZ   r   r"  r   r   Q   )symsrR  >   r[   r   rS   r|   r   r[   r   r|   r|   rS   r|   r   r[   rS   rS   r[   )r   rN   rg   rh   rf   r   r   r   r   rW   rB   popr   as_coefficients_dictr6   r;  r<  r@   rx   r	   Halfr   )rH   base_solcomplete_solnr  s       rI   test_diophantinerv    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4rK   c                  *   ddl m} m}m}m}m} t          | dz  |dz  z   |dz  z   |dz  z
            sJ t          | dz  d|dz  z  z   d|dz  z  z   |dz  z
            sJ t          d| dz  z  d|dz  z  z   d|dz  z  z   |dz  z
            sJ t          d| dz  z  d|dz  z  z   d|dz  z  z
  d|dz  z  z             sJ t          d| dz  z  d|dz  z  z
  d|dz  z  z   d|dz  z  z             sJ t          |dz   d| dz  z  z   d|dz  z  z   d|dz  z  z   d|dz  z  z             sJ t          d| dz  z  |dz  z
  d|dz  z  z   |dz  z   d|dz  z  z             sJ t          | dz  |dz  z   |dz  z   |dz  z
                                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[   rj   r   r   r   
parameters)	sympy.abcr'  r(  ry  rz  r{  r   r=   r   rN   rg   rh   rx  s        rI   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rK   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 )NrS   r   c              3       K   | ]	}|d z  V  
dS r[   NrO   r  is     rI   	<genexpr>z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>T  s&      "D"DA1a4"D"D"D"D"D"DrK   z:%ir[   rl   rS  i!  z:56Tnegativec                     g | ]}|d z  S r]   rO   r  s     rI   r  z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>_  s    !!!q!t!!!rK   p   >   r   r   r[   r[   r[   r   r   r   r[   r   r   r   r   r   rj   rj   rj   r   r   rZ   rZ   rZ   rS   r   r   rZ   rZ   r[   r}   r   r   rZ   rZ   r}   r   r   r   rZ   r[   rS   r   r   r   rZ   r}   r}   r}   r   r   r[   r[   r[   r   r   r   r[   rS   rS   rS   r   r   r[   rS   r}   r}   r   r   rS   rS   rS   r   r   rZ   rZ   rZ   rS   r   r   rZ   rZ   r[   rS   rj   r   rZ   rZ   rS   rj   r   r   rZ   r[   rS   rS   r}   r   rZ   rS   rj   r}   r}   r   r[   r[   rj   rj   r   r   r[   rS   rS   rj   r}   r   rQ  i  r   )r[   r[   r[   rj   c                  $    t                      S rF   rd   rG   s   rI   rP   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>o  s    rc(:(: rK   )ranger   sumr
   r   rN   rg   rh   rW   r  r   lenr   r   r'  r(  ry  rz  r@   rx   )r  var	base_solnrH   s      @rI   &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
 : : : :;;;;;rK   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  )rN   rg   rh   r   )rH   r  s     rI   test_issue_23807r  r  sT    	
A1q!t	g	%BB B BI
 r??i''''''rK   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   rZ   r   rS   r}   c                 ,    g | ]}t          |          S rO   list)r  r;  s     rI   r  z'test_diop_partition.<locals>.<listcomp>  s    000DGG000rK   )r   r   r   r   rS   )r   r   r   rZ   r[   )r   r   rZ   rZ   rZ   r   rO   c                 ,    g | ]}t          |          S rO   r  r  s     rI   r  z'test_diop_partition.<locals>.<listcomp>  s    ***DGG***rK   )rZ   rZ   rZ   r[   )r  r$   r  r  )nkr;  s      rI   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FrK   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       rI    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!4rK   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   rZ   r[   r   r   l   my l   85Jdl   8l9_	 r  i!  i"  i#  i$  i%  i&  r[   r   c                       t          d          S Nr{   )r)   rO   rK   rI   rP   z+test_sum_of_three_squares.<locals>.<lambda>  s    3B77 rK   r   i <  r   )r   r   r}   rj   r   r   r[   )r)   r@   rw   )r  r'  r(  ry  s       rI   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//////rK   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   )randintrZ   l    @ k c              3       K   | ]	}|d z  V  
dS r  rO   r  s     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      44q!t444444rK   c                       t          d          S r  )r(   rO   rK   rI   rP   z*test_sum_of_four_squares.<locals>.<lambda>  s    2266 rK   r  rj   c              3   "   K   | ]
}|d k    V  dS r   NrO   r  rs     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      **a16******rK   c              3       K   | ]	}|d z  V  
dS r  rO   r  s     rI   r  z+test_sum_of_four_squares.<locals>.<genexpr>  s&      ((A1a4((((((rK   )sympy.core.randomr  r  r(   r@   rw   r  r  allr  sorted)r  r  results      rI   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~~-----. .rK   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   rS   r[   )r+  r[   rj   )r[   rZ   r[   )rS   rZ   rS   )r}   r[   r[   )i@0  r[   rj   )i  r[   rS   Tr   r   r[   rj   )rZ   rZ   rS   rS   )r   r   r[   rj   c                  >    t          t          ddd                    S )Ng333333?r[   r  r%   rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>  s    t$8a$C$CDD rK   c                  >    t          t          ddd                    S Nr[   r   r  rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>      t$8Aq$A$ABB rK   c                  >    t          t          ddd                    S r  r  rO   rK   rI   rP   z+test_power_representation.<locals>.<lambda>  r  rK   r{   rZ   r\   rS   r]   rg  r   )zeros)rZ   r[   r[   r[   r[   r[   )r   r   r   r   r   rS   r}   Fr|   r   r   i  pi   @)r   r   r   r}   rj   r[   rZ   )r%   nextr  StopIterationr  r@   rw   r4   )teststestr  r;  r  flchk_suml_ibigr  s              rI   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 dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rC   positiver[   i  >   i  rZ   r}   r   r   r   _   r}   y   rj      r[   za bFrS   r   >   r   r   r   r   r   r~   r   r   r~   r   r   r   N)r
   r   )mr  diofr'  r(  s        rI   test_assumptionsr    s     5$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QQrK   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   rq  rJ   r	  r   )rH   sfactorsr  solutionr  s         rI   r   r     s     	BAmBG
r

CHH!H"""
 5577 	 	AQVVCX$6$67788A== > 5   4rK   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[   rZ   r|   r   r   rj   r   rS   r   r   r   r   c              3   L   K   | ]}|                     t          d           V   dS r  )r	  r   )r  _s     rI   r  z$test_diopcoverage.<locals>.<genexpr>  s.      :U:UA166!Q<<:U:U:U:U:U:UrK   r   r}   r   r   rp  c                  $    t          ddd          S )Nrj   r   rZ   )r#   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>  s    {1b!44 rK   r   r   r   TFrS  c                       t          d          S )N)r[   rj   r   )r:   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>/  s    k)44 rK   rk   n   i6  )r   rZ   r}   c                      t          t          dz  t          dz  z   t          t          z  z   dt          z  t          z  z   dz
            S )Nr[   r   r   rN   rg   rh   rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>4  s6    AqD1a4K!A#4E!A4MPR4R(S(S rK   c                  F    t          t          dz  t          dz  z             S )NrS   r[   r]  rO   rK   rI   rP   z#test_diopcoverage.<locals>.<lambda>5  s    AqD1a4K(@(@ rK   rg  >   rZ   r   rZ   r   r   r{   r   r{   r{   r   r{   r   r   r   )rN   rg   r   r   r   r   r   r-   tupler.   rW   r@   rw   r0   rf   rh   r   m1m2m3r  r2   r	   r   r7   r8   r9   r:   rT   r/   rx   )rH   r  s     rI   test_diopcoverager+    s   
A#'A+	Bb>>sBsFQJ/0000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rK   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   rj   O   r   r[   r   r   r   rZ   r   )r[   r   r[   c                  *    t          dddddd          S )Nr[   r   rl   rj   r-  r   )r1   rO   rK   rI   rP   ztest_holzer.<locals>.<lambda>C  s    vaB2r:: rK   )r1   r@   rw   rO   rK   rI   test_holzerr0  :  sf     !QAr2&&*4444 !Q1a$$	1111
:::;;;;;rK   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   rO   )rN   rg   rh   r'  r(  ry  s      rI   rP   z"test_fail_holzer.<locals>.<lambda>H  s(    1a4!AqD&1QT61 rK   )rj   r-  r   )   rZ   r   r.  r   r[   )maxr1   )rH   rN   rg   rh   xyzr  r  r3  r  hr'  r(  ry  s             @@@rI   test_fail_holzerr7  F  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888888rK   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   rf   rg   rN   rh   r   r   r   rO   rK   rI   test_issue_9539r9  T  sm    qsQqSy2a4'!+,,#sSy!C%"S&.1S5"89:; ; ; ; ; ;rK   c                      t          dt          dz  t          dz  z   t          dz  z   z  dt          t          z  t          t          z  z   t          t          z  z   z  z
            dhk    sJ d S )NrS   r[   rl   r   r   r   r  rO   rK   rI   test_issue_8943r<  Y  sm    	1a4!Q$;AQqS1Q3Y1_!557 7;     rK   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 )Nrj   iq
  )rS   r   r   )r[   rj   r   r[   c                  &    t            d          S r   )r   rG   s   rI   rP   z.test_diop_sum_of_even_powers.<locals>.<lambda>c  s    (GQ(O(O rK   negTr  )r   r   r   r   )limit)
rN   rg   rh   r   r   r@   rx   r
   r   rW   )r?  rH   s    @rI   test_diop_sum_of_even_powersrA  _  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MrK   c                  	   h d} t           dz  t          dz  z   t          dz  z   t          dz  z   t          dz  z   dz
  }t          |t                    }t          |          dk    sJ || k    sJ t          t          d            t          t          dd                    dgk    sJ t          t          dd                    g k    sJ t          t          ddd                    d	gk    sJ t          t          d
d                    g k    sJ t          t          dd                    g k    sJ t          t          ddd                    dgk    sJ t          t          dd                    g k    sJ t          t          dd                    dgk    sJ t          t          dd                    g k    sJ t          t          dd                    ddgk    sJ t          t          ddd                    ddgk    sJ t          t          dd                    dgk    sJ 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   rZ   rZ   r   r   r   r}   r   r   r   rZ   rS   r   r   r   rZ   rj   r}   r   r   rS   rj   r   r   r   rS   r}   r}   r   rZ   rZ   r[   r   r   rZ   rZ   r   r   r   rZ   r[   rS   rS   r   rZ   rS   rj   rj   r   rZ   r}   r}   r   r   r[   r[   rS   r}   r   r[   rS   r}   r   r   rS   rS   rj   r}   r   r[   r   rl   c                  <    t          t          dd                    S )Nr   r{   )r  r5   rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>t  s    tN2r$:$:;; rK   rZ   r\   T)r   rZ   r   rS   r   r;  rj   r]   r}   2   )r}   r}   )rZ   r   r   )rZ   rZ   rZ   r[   r[   )r   r   rZ   rZ   rS   r   )rZ   rZ   rZ   rZ   rZ   rZ   rZ   rZ   c                 d    g | ]-}t          t          t          |d d                              .S )r}   Tr  r  r5   r  s     rI   r  z.test_sum_of_squares_powers.<locals>.<listcomp>  s4    EEEaC^Aq$//0011EEErK   r   )rZ   rZ   rZ   rZ   r[   r[   rZ   rZ   r[   r[   r[   r[   r[   rS   r[   rZ   rS   rS   rS   rS   rj   rS   rS   r[   r[   rj   rj   rj   rj   r}   c           
      b    g | ],}t          t          t          |d                               -S )r}   rT  r  s     rI   r  z.test_sum_of_squares_powers.<locals>.<listcomp>  s2    ???C^Aq))**++???rK   )r   r   r   r   r   rZ   r   r   rZ   r   r   rZ   r   rZ   rZ   r   rZ   rZ   r   rZ   r[   rZ   rZ   rZ   rZ   rZ   rZ   rZ   rZ   rS   c              3   R   K   | ]!}t          d  |D                       k    V  "dS )c              3       K   | ]	}|d z  V  
dS r  rO   r  js     rI   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s&       1 1!A 1 1 1 1 1 1rK   Nr  r  r   r  s     rI   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CrK   c              3   R   K   | ]!}t          d  |D                       k    V  "dS )c              3       K   | ]	}|d z  V  
dS r  rO   rX  s     rI   r  z7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>  s&      ''q!t''''''rK   NrZ  r[  s     rI   r  z-test_sum_of_squares_powers.<locals>.<genexpr>  s?      993''Q'''''1,999999rK   c                  >    t          t          ddd                    S )Nr[   r{   rZ   r  r4   rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!R$;$;<< rK   c                  >    t          t          ddd                    S )Nr[   rZ   r{   r_  rO   rK   rI   rP   z,test_sum_of_squares_powers.<locals>.<lambda>  s    tM!Q$;$;<< rK   r|   r   r  )r   rZ   rZ   ))r   r}   )rZ   rj   ro  r      i  )r   r  )r  r   rN   rg   rh   r   r   r  r@   rw   r  r5   r  rW   r  r4   )trurH   r  s1s2r  s        @rI   test_sum_of_squares_powersre  k  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3rK   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 )	NrS   r{   Fr   rZ   r   rj   r[   )r;   rO   rK   rI   test__can_do_sum_of_squaresrg    s    !!R((E1111!"a((E1111!!Q'''''!!Q'''''!!Q'''''!!Q'''''!!Q''5000000rK   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   rx  rj   rP  ro  TrQ  r[   r+  #   i0  r   r   r   r   )r~  r'  r(  ry  rz  r{  r   rW   rB   rq  r  rN   rg   )	r'  r(  ry  rz  r{  rH   rt  ru  solns	            rI   test_diophantine_permute_signrk    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MrK   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[   rj   rZ   rg  rh  r   )rZ   rS   )rN   rg   r   rG   s    rI   test_not_implementedrn    sJ    	
A1t	d	"BrA'''FF+;;;;;;;rK   c                       t           dt          z  z
  dz    t           t          t           g          t          dt          z  dz
  fhk    sJ t	          t
           fd           d S )NrS   r[   rm  c                  >    t           t          t          h          S )Nrm  )r   rg   rN   rG   s   rI   rP   z!test_issue_9538.<locals>.<lambda>  s    k"Aq6::: rK   )rN   rg   r   r   r@   rT   rG   s   @rI   test_issue_9538rq    sf    	
QqS1Br1&&&C3+;*<<<<<
9::::;;;;;rK   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|   rj   rS   H   r   r   r   r   r   r}   r   r-  r   r.  i~i i
  ix  i:
 ii  ib<  )r   rN   rg   rh   r   r	   r  r3   )r  r;  r<  r  s       rI   test_ternary_quadraticrt    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 7rK   c                  
   t          g g           t                    t                      k    sJ j        dk    sJ j        dk    sJ t	          t
          fd           t                                                    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 )NrO   c                  :                          t          f          S rF   )addrN   )rc  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvqd|| rK   c                  .                          d          S )Nr\   rw  )rd  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvd|| rK   )rS   rj   r{   c                  .                                    S rF   )update)rc  rd  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    ryy}} rK   rS   rj   r[   rZ   r   r   )rX  r{   rZ   r}   r   r   )r   r   rZ   )   r   rZ   c                  0                          d          S )NrZ   )rN   r	  s3s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rwww|| rK   c                  2                          ddd          S NrZ   r[   rS   r~  r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>	  s    rwwq!Q// rK   c                  .                          d          S )NrO   ry  r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>
  s    rvvbzz rK   c                  .                          d          S )N)rZ   r[   rS   rj   ry  r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvl33 rK   c                  .                          d          S )Nr   ry  r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rvvf~~ rK   c                        ddd          S r  rO   r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    rr!Q{{ rK   c                        d          S )NrZ   r  rO   r  s   rI   rP   z/test_diophantine_solution_set.<locals>.<lambda>  s    bb1ggg rK   r   r|  r   r   )r<   rW   r
   r}  r@   rw   r  dict_iteratorrN   rg   r   r  rw  r{  rh   r  r	  rT   )s4rc  rd  r  s    @@@rI   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$$$$
:++++,,,
:////000
:))))***
:3333444
:----...
:****+++
9oooo&&&	AA	/	/BFFAr!t9FFQB1:2a88xrK   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 )	NirS   r[   r|  r   ir   r   )rN   rg   r>   r   r   r  )rH   r  s     rI    test_quadratic_parameter_passingr    s    	Qq1QT6	Br""((QF(;;HBqD	As1u:.....8Aq>>fX%%%%%%rK   N)sympy.core.addr   sympy.core.mulr   sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.singletonr	   sympy.core.symbolr
   sympy.matrices.denser   sympy.ntheory.factor_r   sympy.simplify.powsimpr   sympy.core.functionr   sympy.core.sortingr   r   (sympy.functions.elementary.trigonometricr   sympy.solvers.diophantiner   %sympy.solvers.diophantine.diophantiner   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   sympy.testing.pytestr?   r@   rA   sympy.utilities.iterablesrB   r'  r(  ry  rz  r;  r<  rN   rg   rh   rf   r   r  r   r  r  r3  r   r   r   t_3t_4t_5t_6r(  r)  r*  rD   rJ   rU   rX   r_   ry   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r)  r0  r4  r7  r=  r@  rD  rG  rN  rv  r  r  r  r  r  r  r  r  r  r   r+  r0  r7  r9  r<  rA  re  rg  rk  rn  rq  rt  r  r  rO   rK   rI   <module>r     s-               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R R R  .,T ,T ,T^	< 	< 	< 
 
 
; ; ;
  	N 	N 	N64 64 64r1 1 1N N N < < <
< < <7 7 78.  .  . b& & & & &rK   