U
    ZÊ¹jÃ¦  ã                   @   s¤  d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZLmMZM d dlNmOZO eddd�\ZPZQZRZSZTZUZVZWZXZYZZZ[Z\Z]Z^Z_eddd�\Z`ZaZbZcZdZeZfeddd�\ZgZhZieddd�Zjdd„ Zkdd„ Zldd„ Zmdd„ Zndd „ Zod!d"„ Zpd#d$„ Zqd%d&„ Zrd'd(„ Zsd)d*„ Ztd+d,„ Zud-d.„ Zvd/d0„ ZweKd1d2„ ƒZxd3d4„ Zyd5d6„ Zzd7d8„ Z{d9d:„ Z|d;d<„ Z}d=d>„ Z~d?d@„ ZdAdB„ Z€dCdD„ Z�dEdF„ Z‚dGdH„ ZƒdIdJ„ Z„dKdL„ Z…dMdN„ Z†dOdP„ Z‡dQdR„ ZˆdSdT„ Z‰dUdV„ ZŠdWdX„ Z‹dYdZ„ ZŒd[d\„ Z�d]d^„ ZŽd_d`„ Z�dadb„ Z�dcdd„ Z‘dedf„ Z’dgdh„ Z“didj„ Z”eMdkdl„ ƒZ•dmdn„ Z–dodp„ Z—dqdr„ Z˜dsdt„ Z™dudv„ Zšdwdx„ Z›eMdydz„ ƒZœd{d|„ Z�d}d~„ Zždd€„ ZŸd�d‚„ Z dƒS )„é    )ÚAdd)ÚMul)ÚRationalÚooÚpi)ÚEq)ÚS)Úsymbols)ÚMatrix)Ú	factorint)Úpowsimp)Ú_mexpand)Údefault_sort_keyÚordered)Úsin)Údiophantine),Údiop_DNÚ
diop_solveÚdiop_ternary_quadratic_normalÚdiop_general_pythagoreanÚdiop_ternary_quadraticÚdiop_linearÚdiop_quadraticÚdiop_general_sum_of_squaresÚdiop_general_sum_of_even_powersÚdescentÚ
diop_bf_DNÚ	divisibleÚ
equivalentÚfind_DNÚldescentÚlengthÚreconstructÚ	partitionÚpower_representationÚprime_as_sum_of_two_squaresÚsquare_factorÚsum_of_four_squaresÚsum_of_three_squaresÚtransformation_to_DNÚtransformation_to_normalÚclassify_diopÚbase_solution_linearÚ
cornacchiaÚ
sqf_normalÚgaussian_reduceÚholzerÚcheck_paramÚparametrize_ternary_quadraticÚsum_of_powersÚsum_of_squaresÚ_diop_ternary_quadratic_normalÚ_nint_or_floorÚ_oddÚ_evenÚ_remove_gcdÚ_can_do_sum_of_squaresÚDiophantineSolutionSetÚGeneralPythagoreanÚBinaryQuadratic)ÚslowÚraisesÚXFAIL)Úsigned_permutationsz.a, b, c, d, p, q, x, y, z, w, t, u, v, X, Y, ZT)Úintegerzt_:7zm1:4Ún1c                 C   s   t tt | ƒƒƒS ©N)r   r   ©Úeq© rG   úo/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/solvers/diophantine/tests/test_diophantine.pyÚdiop_simplify'   s    rI   c                   C   s    t tdd„ ƒ t tdd„ ƒ d S )Nc                   S   s   t ttƒƒS rD   )r   r   ÚxrG   rG   rG   rH   Ú<lambda>,   ó    z#test_input_format.<locals>.<lambda>c                   S   s   t tt d ƒS ©Né   )r   rJ   r   rG   rG   rG   rH   rK   -   rL   )r?   Ú	TypeErrorrG   rG   rG   rH   Útest_input_format+   s    rP   c                   C   s,   t dƒtƒ kst‚t tdƒƒtƒ ks(t‚d S rM   )r   ÚsetÚAssertionErrorr   rG   rG   rG   rH   Útest_nosols0   s    rS   c                   C   sH   t td td d  ƒddhks$t‚t td td  ƒddhksDt‚d S )Né   é   ©rT   ©rU   )r   rJ   rR   rG   rG   rG   rH   Útest_univariate6   s    $rX   c                
   C   s˜  t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tdtd  dt  d	 ƒtgd
dtdtd didfkstt‚ttt t ƒtttgtt d
td
idfks¤t‚ttt t t	 td  ƒt	tttgtt d
t	d
td d
td
idfksît‚ttt tt  td  d
 ƒtttgtt d
tt d
td d
d
d
idfk�s@t‚ttt t t	 d	 ƒt	tttgtt d
t	d
d
d	td
idfk�s„t‚ttt tt	  ƒt	tttgtt d
t	t d
idfk�sÀt‚tttd  d
 ƒttgttd  d
d
d
idfk�søt‚ttd td  td  d ƒtttgd
dtd d
td d
td d
idfk�sJt‚ttd td  td  ƒtttgtd d
td d
td d
idfk�s”t‚d S )Nc                   S   s   t td d d ƒS )NrU   rN   rT   )r+   rJ   rG   rG   rG   rH   rK   <   rL   z$test_classify_diop.<locals>.<lambda>c                   S   s   t dƒS ©NrT   ©r+   rG   rG   rG   rH   rK   =   rL   c                   S   s   t tt t t d ƒS rY   )r+   ÚwrJ   ÚyÚzrG   rG   rG   rH   rK   >   rL   c                   S   s    t td td  td  d ƒS )NrN   é   éZ   )r+   rJ   r\   r]   rG   rG   rG   rH   rK   ?   rL   é   rU   é   é*   rT   iÖÿÿÿZ
univariateZinhomogeneous_ternary_quadraticZinhomogeneous_general_quadraticZhomogeneous_general_quadraticZ
cubic_thuer^   éb   ižÿÿÿZgeneral_sum_of_even_powersZ$homogeneous_ternary_quadratic_normal)
r?   rO   Ú
ValueErrorÚNotImplementedErrorr+   rJ   rR   r\   r]   r[   rG   rG   rG   rH   Útest_classify_diop;   sb      ÿ
  ÿ

  ÿ
  ÿ
  ÿ
  ÿ  ÿ  ÿ  ÿrf   c                   C   s  t tƒdkst‚t dt ƒdks$t‚t dt ƒdks8t‚t td ƒdksLt‚t dt d ƒdksdt‚t dt d ƒdks|t‚t tt ƒtt fks–t‚t tt d	 ƒtt fks´t‚t tt d	 ƒtt fksÒt‚t d	t t d
 ƒdksît‚t dt dt  d
 ƒdt d
 dt d
 fk�s$t‚t dt dt  d
 ƒdt d
 dt d
 fk�sZt‚t dt dt  d
 ƒdt d
 dt d
 fk�s�t‚t dt d
t  ƒd
t dt fk�sºt‚t dt dt  ƒdt tfk�sàt‚t dt dt  d ƒdt d dt d fk�st‚t dt dt  d ƒdk�s8t‚t d	t dt  dt  d
 ƒdt d
 dt d
 fk�svt‚t dt dt  dt  d
 ƒtdt dt  d
 dt dt  d
 fk�sÆt‚t dt dt  dt  d
 d ƒdk�sòt‚t dt dt  dt  d
 ƒdk�st‚t d
t dt  dt  d ƒtdt dt  d dt dt  d fk�slt‚t dt dt  dt  d ƒdt d tdt  tfk�s¬t‚t dt dt  dt  t ƒtttt dt dt  dt  fk�söt‚t	t
dd„ ƒ d S )N)r   rT   rN   )éÿÿÿÿrU   rD   r^   )éþÿÿÿr   é   )éûÿÿÿrh   é   éùÿÿÿé   )NNé   )r   ri   ri   ©NNNéýÿÿÿéøÿÿÿé   é   é	   é   é   c                   S   s   t td ƒS ©NrU   )r   rJ   rG   rG   rG   rH   rK   o   rL   ztest_linear.<locals>.<lambda>)r   rJ   rR   r\   Út_0r]   Út_1r[   Út_2r?   rO   rG   rG   rG   rH   Útest_linearT   s2    666*&6">P,*P@Jr{   c                	   C   sn  t dt t dt  dt  d ƒddhks0t‚t dt t dt  dt  d ƒtƒ ks^t‚t d	t t dt  d
t  d ƒdhksŒt‚t dt t dt  dt  d ƒdhksºt‚t dt t dt  dt  d ƒddddddddhksöt‚t dt t dt  dt  d ƒtƒ k�s&t‚t tt t t d ƒdtftdfhk�sTt‚tdt t ƒ�sjt‚d S )NrN   é"   rs   rT   )i{ÿÿÿéõÿÿÿ)ri   iÇÿÿÿrm   rU   éóÿÿÿr^   é6   )é   r   éåÿÿÿé   )éòÿÿÿrg   ri   é8   rk   )i_ÿÿÿrp   )iÑÿÿÿéúÿÿÿ)iÝÿÿÿéôÿÿÿ)iãÿÿÿi»ÿÿÿ)r�   é@   )iëÿÿÿrk   ©é÷ÿÿÿrT   )éi   rh   rt   rg   é0   )r   rJ   r\   rR   rQ   Útr   rG   rG   rG   rH   Ú%test_quadratic_simple_hyperbolic_caser   s     "ÿ...(   þ
0.r�   c                   C   s:  t dtd  dt t  dtd   dt  dt  d ƒdhksFt‚t d	td  d
td   dt  dt  d ƒtƒ ks€t‚t td td  dt  dt  d ƒdhks²t‚t dtd  dt t  dtd   dt  dt  d ƒdhksøt‚t dtd  dt t  dtd   d ƒddddhk�s6t‚d S )Nrb   rU   rn   ra   é   é   i3  )r}   rg   r^   rN   ri   é   rs   ©rg   rg   rt   r`   éV  )éñÿÿÿrm   é
   r|   ©rg   rU   ©rT   rh   ©rT   rT   )r   rJ   r\   rR   rQ   rG   rG   rG   rH   Útest_quadratic_elliptical_case�   s    F:2F*
ÿr˜   c                   C   sŠ  t dtd  dt t  dtd   dt  dt  d ƒs@t‚t dtd  dt t  dtd   dt  d	t  d ƒs€t‚t dtd  dt t  dtd   d
t  dt  d ƒsÀt‚t dtd  d
t t  td  dt  d ƒsôt‚t td dt t  td  dt  dt  d ƒ�s.t‚t td dt t  td  dt  dt  d ƒ�sht‚t td dt  d ƒ�s†t‚d S )Nrn   rU   é   rr   ri   rk   é   rm   rs   r^   éüÿÿÿrN   rT   é)   é(   ©Úcheck_solutionsrJ   r\   rR   rG   rG   rG   rH   Útest_quadratic_parabolic_caseŒ   s    @@@4::r    c                   C   s   t dt t ƒst‚t dtd  dt t  td  d ƒs@t‚t dtd  dt t  dtd   dt  dt  d ƒs€t‚t d	td  d
t t  dtd   dt  dt  d	 ƒsÀt‚t dtd  dt t  dtd   dt  d
t  d ƒ�st‚t dtd  dt t  dt  dt  d ƒ�s8t‚t dt t dtd   dt  dt  d ƒ�snt‚t td td  dt  dt  ƒ�s˜t‚t td dtd   dt  dt  ƒ�sÆt‚t dtd  dtd   dt  d	t  d ƒ�süt‚d S )Nr‹   r^   rU   ri   rh   rN   r�   é   rs   é   rn   r”   é    rŽ   r›   rt   rm   rž   rG   rG   rG   rH   Útest_quadratic_perfect_square—   s    ,@@B66*.r¤   c                   C   sâ   t td dt  dtd   ƒs$t‚t dtd  dtd   dt  dt  ƒsTt‚t td tt  td  dt  ƒs|t‚t td dtd   dt  dt  ƒs¨t‚ttd td  dt  dt  d ƒ ¡ dhksÞt‚d S )NrU   ri   rN   rt   rm   r‘   )rŸ   rJ   r\   rR   r=   ÚsolverG   rG   rG   rH   Ú!test_quadratic_non_perfect_square¦   s
    $0(,r¦   c                  C   s^   ddt  dt  d   tdt d   } t tf}t| ƒD ] }t|  tt||ƒƒ¡ƒr8t‚q8d S )NiÐÿÿÿrU   rN   rT   ©rJ   r\   r   rI   ZxreplaceÚdictÚziprR   ©rF   ÚvZsolrG   rG   rH   Útest_issue_9106±   s    (r¬   c                  C   sJ   t d t  td  } t tf}t| ƒD ] }t|  tt||ƒƒ¡ƒr$t‚q$d S rw   r§   rª   rG   rG   rH   Útest_issue_18138¸   s    r­   c                   C   sð   t dtd  dt t  dtd   dt  dt  d ƒs@t‚t dtd  dt t  dtd   d	t  d ƒsxt‚t d
t dtd   t dt t  dtd   ƒs°t‚t ddt  dtd   dt  tt  dtd   ƒsìt‚d S )Nrn   rU   r”   r£   r¢   rŽ   rp   rk   ri   r›   r^   rN   rT   rž   rG   rG   rG   rH   Útest_quadratic_non_perfect_slow¿   s    @88r®   c                   C   s   t ddƒdgkst‚t ddƒg ks&t‚t ddƒdgks:t‚t d	d
ƒdgksNt‚t ddƒg ks`t‚t ddƒg ksrt‚t ddƒdtfgksŠt‚t ddƒdt tfgks¦t‚t ddƒg ks¸t‚t ddƒdgksÌt‚t ddƒdgksàt‚t ddƒdgksôt‚t ddƒddgk�st‚t ddƒddddgk�s(t‚t ddƒdgk�s>t‚t ddƒd gk�sTt‚t d!dƒd"gk�sjt‚t d#dƒd$gk�s€t‚t d%dƒd&gk�s–t‚t d
dƒd'gk�s¬t‚t d(dƒd)gk�sÂt‚t ddƒd*gk�sØt‚t d%dƒg k�sìt‚t d+dƒd,gk�st‚t d-dƒd.gk�st‚t d/dƒd0gk�s.t‚t d1dƒg k�sBt‚t dd2ƒd3d4d5gk�s\t‚td6dd7d8dd2ƒd9k�sxt‚t dd:ƒd;d<d=d>gk�s”t‚tt d?d@ƒƒdAdBdCdDdEdFhk�s¸t‚t ddGƒdHgk�sÎt‚t dIdJƒg k�sât‚t ddƒdKdLgk�sút‚t dMdNƒdAgk�st‚t dMdOƒg k�s$t‚t dPdOƒdQgk�s:t‚tdRddSddPdOƒ�sRt‚t dPdTƒdUdVgk�sjt‚t ddtƒdtfgk�s†t‚t ddtƒg k�sœt‚d S )WNrN   r   ©r   r   éïÿÿÿrj   iíÿÿÿrŽ   ©rU   rT   r~   r�   r“   r¢   ri   rt   rš   r™   é´   )rr   r^   iLÿÿÿ)rs   rm   rk   rg   ©rT   rU   é©   )rs   ri   )ri   rs   )r¢   r   )r   r¢   rT   )i‰  r²   iÔ  )i�Ê  ix  iÕ  )l   IN�d? l   ”j\iÚ  )i“À  i"  iß  )l   ÐWíRlQ]>I2l   A€AJtWj«Uˆ^	 )é!   rn   é   )éª   é'   )rr   ri   rœ   )r£   ri   i"  )r�   rT   é	S  ©l   !K�2l   uGÔoX r£   r›   ©rN   rT   )é‰  ém   ©é$   r”   rp   r¼   r½   Tr€   )éÜ   é=   ©r�   r�   )é   éÕ   ©rs   rN   é�   rs   )r¢   rT   )i§)  iS  )iXÖ iŽ´  )ipÖi"'M)l   ;>x< i¹Êÿ|)l   )fMÚOl   ƒ­?_r¡   )i­  i„  éÀ   rr   )r…   rT   )rm   rT   é§   rU   rh   é{   )r�   rT   r�   r}   iéÿÿÿ)éöÿÿÿrT   )r”   rT   )r   rR   rŒ   r   rQ   rG   rG   rG   rH   Útest_DNÉ   sZ     þrË   c                   C   s   t ddƒdddgkst‚t ddƒddd	d
gks2t‚t ddƒg ksDt‚t ddƒdgksXt‚t ddƒddgksnt‚t ddƒdgks‚t‚t ddƒdgks–t‚t ddtƒdgks¬t‚t ddtƒdtfgksÆt‚t ddtƒdt tfdt tfgksît‚t ddtƒdgk�st‚t ddtƒg k�st‚d S )Nr¢   r›   r»   )rp   rT   r¾   r€   rÅ   )r†   rN   rÂ   )iØÿÿÿr�   rÈ   rh   éÁ  rT   )l   éuÒL" l   ¼EñçéY   rq   ©rt   rT   rˆ   r¹   rg   rº   iT  )iô  rœ   r   r¯   r^   rU   rN   )r   rR   rŒ   rG   rG   rG   rH   Útest_bf_pell  s    (rÏ   c                   C   s|   t dddƒdkst‚t dddƒdks(t‚t ddd	ƒdks<t‚t ddd
ƒdksPt‚t dd
dƒdksdt‚t dddƒdksxt‚d S )NrU   rT   r   rh   r^   ri   rN   rj   r�   r¢   rm   rk   r�   rŽ   )r!   rR   rG   rG   rG   rH   Útest_length#  s    rÐ   c                 C   s  t | ƒ\}}|tttgƒ | d }|tttgƒ | d }t|  tttf||fƒ¡ƒ}t	dd„ |j
D ƒƒ}tt ttfD ]}|| ¡ krz dS qztd td dfD ]}|| ¡ kr¤d||< q¤|td  dkrþt|td  |td  ƒoüt|d |td  ƒS dS )a9  
    Test whether X*Y, X, or Y terms are present in the equation
    after transforming the equation using the transformation returned
    by transformation_to_pell(). If they are not present we are good.
    Moreover, coefficient of X**2 should be a divisor of coefficient of
    Y**2 and the constant term.
    r   rT   c                 S   s   g | ]}t |jttgŽ ƒ‘qS rG   )ÚreversedÚas_independentÚXÚY©Ú.0rŒ   rG   rG   rH   Ú
<listcomp>9  s     z-is_pell_transformation_ok.<locals>.<listcomp>FrU   T)r)   r
   rÓ   rÔ   rI   Úsubsr©   rJ   r\   r¨   ÚargsÚkeysr   )rF   ÚAÚBÚur«   Ú
simplifiedÚcoeffÚtermrG   rG   rH   Úis_pell_transformation_ok,  s     
ÿrá   c                   C   s¼  t dtd  dt t  td  dt  dt  d ƒs<t‚t dtd  dt t  dtd   dt  dt  d	 ƒs|t‚t td td  d
 ƒs˜t‚t td  dtd   d	 ƒsºt‚t dtd  dt t  dtd   dt  dt  d ƒsút‚t dtd  dt t  td  dt  dt  d ƒ�s8t‚t td dt t  dtd   dt  d	t  d ƒ�svt‚t dtd  dt t  dtd   d	t  dt  d ƒ�s¸t‚d S )Nr~   rU   rk   r`   r°   r¶   ri   r¢   rŽ   r�   r¡   é-   r”   é¾   r‚   rN   r·   é‚   rÍ   ra   rt   r’   )rá   rJ   r\   rR   rG   rG   rG   rH   Útest_transformation_to_pellJ  s    <@"@>>rå   c                   C   sL  t td dt  td  ƒdks$t‚t td dtd   d ƒdksHt‚t td dt t  dtd   d ƒdksxt‚t dtd  d	t t  td  d
 ƒdks¨t‚t dtd  dt t  td  d ƒdksØt‚t dtd  dt t  td  ƒdk�st‚t dtd  dt t  td  dt  dt  d ƒdk�sHt‚d S )NrU   r—   rN   ri   )rN   ri   r^   rk   )ri   rk   rn   rt   )ru   r¿   rs   )rn   éT   rp   )rT   r   r~   r`   )ée   i¸—ˆÿ)r   rJ   r\   rR   rG   rG   rG   rH   Útest_find_DNU  s    $$000.rè   c                  C   s†   ddddddddd	d
ddg} | D ]<\}}t ||ƒ\}}}||d  ||d   |d ks t‚q t ddƒd kspt‚t ddƒd ks‚t‚d S )N©r¢   rŽ   ©rN   r}   ©rœ   i�ÿÿÿ)r^   rl   )rl   r^   ©é[   rp   r—   ©rT   rg   )r^   r£   ©r�   r¢   ©i)ã rT   ©r¶   iÆýÿÿrU   rg   rm   )r    rR   ©rÝ   ÚaÚbr[   rJ   r\   rG   rG   rH   Útest_ldescent_  s       ÿ&rõ   c                   C   sô  t dtd  dtd   td  ƒs(t‚t dtd  dtd   td  ƒsPt‚t dtd  dtd   td  ƒsxt‚t dtd  d	td   dtd   ƒs¤t‚t td dtd   td  ƒsÈt‚t dtd  dtd   td  ƒsðt‚t td td  td  ƒ�st‚t d
td  td  dtd   ƒ�s<t‚t d	td  td  dtd   ƒ�sft‚t dtd  dtd   dtd   ƒ�s”t‚t dtd  dtd   dtd   ƒ�sÂt‚t dtd  dtd   dtd   ƒ�sðt‚d S )Néê   rU   éA  rŽ   ih  ri   r^   rN   rm   rš   r¡   r”   rÄ   rs   rt   r|   i-  é|   r‚   é1  ©rŸ   rJ   r\   r]   rR   rG   rG   rG   rH   Ú"test_diop_ternary_quadratic_normalj  s    (((,$("**..rû   c                    sŽ   t | ƒ}|ttttgƒ \‰ ‰‰t|  ttttfˆ ˆˆfƒ¡ƒ}t‡ ‡‡fdd„|j	D ƒƒ}ˆ ˆ ˆˆ ˆ ˆ fD ]}|| 
¡ krr dS qrdS )Nc                    s    g | ]}t |jˆ ˆˆgŽ ƒ‘qS rG   )rÑ   rÒ   rÕ   ©rÓ   rÔ   ÚZrG   rH   r×   ~  s     z/is_normal_transformation_ok.<locals>.<listcomp>FT)r*   r
   rJ   r\   r]   rI   rØ   r©   r¨   rÙ   rÚ   )rF   rÛ   rÞ   rß   rà   rG   rü   rH   Úis_normal_transformation_oky  s     rþ   c                   C   sÒ  t td dtd   td  dt t  dt t  dt t  ƒsHt‚t td dtd   dtd   ƒspt‚t td dt t  ƒsŒt‚t dtd  dtd   dt t  ƒs¸t‚t td dt t  dt t  dt t  ƒsìt‚t td dt t  dt t  tt  ƒ�st‚t td td  td  tt  tt  tt  ƒ�sXt‚t td dt t  dtd   ƒ�s‚t‚t tt dt t  dt t  ƒ�s¬t‚t dt t dt t  ƒ�sÎt‚d S )	NrU   rN   r¢   rš   rs   éd   rŽ   r|   )rþ   rJ   r\   r]   rR   rG   rG   rG   rH   Útest_transformation_to_normal†  s    H(,42:**r   c                  C   sÒ  t dtd  td  td  dt t  ƒs0t‚t td td  td  tt  tt  ƒs`t‚t dtd  tt  tt  tt  ƒsŒt‚t td tt  tt  ƒs¬t‚t dtd  dt t  tt  ƒsÔt‚t dtd  dtd   tt  ƒsüt‚t dtd  dtd   td  dt t  dt t  dt t  ƒ�sJt‚t dtd  dt t  ƒ�slt‚t dtd  dtd   dt t  td  ƒ�s¢t‚t td d	td   td  d
t t  dt t  ƒ�sàt‚t dtd  dtd   dt t  dt t  dt t  ƒ�s&t‚t td dtd   td  tt  dt t  ƒ�s`t‚t td dtd   td  tt  dt t  dt t  ƒ�s¦t‚t td dtd   td  d
t t  dt t  dt t  ƒ�sðt‚t tt dt t  d
t t  ƒ�st‚ttd td  td  ƒdk�s@t‚ttd td  ƒd k�s^t‚ttdd„ ƒ dt t dt t  dtd   dt t  dtd   } t| ƒdk�sºt‚tdtd  dtd   td  ƒdk�sèt‚ttt dt t  ƒddt	fk�st‚dt t dt t  dt t  dtd   } t
| ƒdtd  dt t  dt t dtd   dt t fk�sˆt‚ttt dt t  ƒdt t t	 td  td  tt fk�sÎt‚d S )NrU   r^   rN   ri   rk   rn   rs   râ   é1   r¢   r_   r�   rš   ro   c                
   S   s0   t tttftt dtd dtd dtd diƒS )NrT   rU   rN   r   )r5   rJ   r\   r]   rG   rG   rG   rH   rK   ¦  s    
"ÿz-test_diop_ternary_quadratic.<locals>.<lambda>rh   rm   )rk   rU   r   )rT   r   rU   r   rj   rq   )rŸ   rJ   r]   r\   rR   r   r?   rd   r   rC   r2   ÚpÚqr   rE   rG   rG   rH   Útest_diop_ternary_quadratic“  s>    00, ((N"6>F:FJ*&<"ÿ
ÿ
08ÿ
r  c                   C   s   t dƒt dƒ  krdks"n t‚t dƒdks2t‚t dƒt dƒ  krNdksTn t‚t dƒt dƒ  krpdksvn t‚t d	ƒt d
ƒ  kr’dks˜n t‚t dƒdks¨t‚t dƒdks¸t‚t dƒdksÈt‚t dƒdksØt‚t dƒdksèt‚t td
ƒƒdksüt‚d S )NrT   rg   r   ri   rj   r^   r›   rU   rs   r†   rm   rr   rN   é4   r  rk   iˆ  r`   )r&   rR   r   rG   rG   rG   rH   Útest_square_factor·  s    """"r  c                   C   s   t td td  td  ƒs t‚t td dt t  td  ƒsDt‚t dtd  dtd   td  ƒslt‚t dtd  dtd   td  dt t  dt t  dt t  ƒs¸t‚t td td  td  ƒsØt‚t td dtd   td  dt t  d	t t  ƒ�st‚t d	t t td  ƒ�s4t‚t d
td  dtd   dtd   ƒ�sbt‚t dtd  dtd   dt t  dt t  dt t  ƒ�s¨t‚t dtd  dtd   dt t  dt t  dt t  ƒ�sît‚t d
td  dtd   dtd   ƒ�st‚d S )NrU   rö   r÷   rN   ri   rk   r  r¢   rn   rø   r‚   rù   éì   éá   r�   r�   r_   rú   rG   rG   rG   rH   Ú"test_parametrize_ternary_quadraticÅ  s     $(L >.FFr	  c                   C   sÄ   t dt t tt  dt t  ƒs(t‚t dt t dt t  dt t  ƒsTt‚t dt t dt t  ƒstt‚t tt tt  tt  ƒs”t‚t dt t dt t  dt t  ƒsÀt‚d S )NrU   rN   é½   iY  rs   rŽ   r|   rú   rG   rG   rG   rH   Ú test_no_square_ternary_quadraticÓ  s
    (,  r  c               	   C   s†   ddddddddd	g	} | D ]<\}}t ||ƒ\}}}||d
  ||d
   |d
 kst‚qttdd„ ƒ ttdd„ ƒ ttdd„ ƒ d S )Nré   rê   rë   rì   r—   rî   rï   rð   rñ   rU   c                   S   s
   t ddƒS )Nrg   rp   ©r   rG   rG   rG   rH   rK   ã  rL   ztest_descent.<locals>.<lambda>c                   S   s
   t ddƒS )Nr   rN   r  rG   rG   rG   rH   rK   å  rL   c                   S   s
   t ddƒS )Nr^   rN   r  rG   rG   rG   rH   rK   ç  rL   )r   rR   r?   rO   ÚZeroDivisionErrorrò   rG   rG   rH   Útest_descentÛ  s    &r  c               	   C   sô  t tt tt  tt  ƒs t‚t tt td td  td   ƒsHt‚t tdt  dt  td td  td   ƒs|t‚t td dtd   d ƒsœt‚t td dt t  ƒs¸t‚t td dt t  td  ƒsÜt‚t ttd td  d  ƒsüt‚t tdt dt  d  ƒ�st‚t td dtd   d td td  d  ƒ�sTt‚t td dtd   d tdt   ƒ�s‚t‚t td td  td  tdt  dt  dt   ƒ�sÀt‚t td dt t  dt t  ƒ�sêt‚t td dt  d ƒ�st‚ttt ƒttttƒƒk�s(t‚td td  d } t| d	d
�t|  d	d
�k�s\t‚tdt t dt t  ƒdt	 dt	 fhk�s�t‚td td  td  d } dh}t| ƒ|k�sÄt‚t
t| ¡ ƒƒ}t| d	d
�|k�sêt‚ttd ttddƒ  d ƒt
ƒ k�st‚dtd  dtd   td  } |  ¡ }ttttf|ƒdhk�sXt‚t| ƒdtd  dtd   dtd  dt t  dtd   dtd  dt t  dtd   fhk�sÆt‚dtd  dtd   td  } |  ¡ }ttttf|ƒdhk�s
t‚t| ƒdtd  td  dtd  dt t  td  dtd  dt t  dtd   fhk�spt‚dtd  dtd   dtd   } |  ¡ }ttttf|ƒdhk�s¸t‚t| ƒdtd  dtd   dtd  d t t  d!td   d"td  d#t t  d$td   fhk�s&t‚d%td  d&td   d'td   } |  ¡ }ttttf|ƒd(hk�snt‚t| ƒd)td  d*td   d+td  d,t t  d-td   d.td  d/t t  d0td   fhk�sÜt‚td dtd   d1td   } |  ¡ }ttttf|ƒd2hk�s t‚t| ƒd3t t dtd  d3td   td d1td   fhk�sft‚ttd4d5„ ƒ tdt ƒt
ƒ k�sŒt‚tdt dt  tj ƒd6d7d8d9d:hk�sºt‚ttd td  dt  d d	d
�d;d<d=d>d?d@dAdBhk�søt‚ttd td  dC dD ttfd	dE�dFdGdHdIdJdKdLdMhk�s8t‚ttd td  dC dD ttfd	dE�dFdGdHdIdJdKdLdMhk�sxt‚t td t ƒ�sŽt‚t td t ƒ�s¤t‚ttd t tƒttd fhk�sÊt‚ttd t tƒtd tfhk�sðt‚d S )NNrU   rN   rk   rT   ra   ri   r^   éa   T©Úpermuter`   ©rT   rU   rN   é\   éc   )rt   rk   é3   i{  rt   iKýÿÿéf   i¹  ij  r  )rT   rT   rU   rh   i›  é9   éÝ   )iå  iU
  iú  iýÁ i±Ð i³ýÿi¤­ iaë iªª iÚ™ iÒV
 i=  i  iØ  )r  éé   é   i	  iÈ>  iÿ®ÿÿipE iˆ* i',  i¢  i¸¢  rs   )r   rU   rT   r™   c                   S   s   t ttd  d ƒS )NrU   rT   ©r   rJ   r\   rG   rG   rG   rH   rK   -  rL   z"test_diophantine.<locals>.<lambda>)rm   rN   )rh   rT   )r^   r^   r–   )rN   rm   )rg   rT   )r›   rg   rî   r—   )r›   rT   r‘   )r^   rT   )r^   rg   rš   éQ   )Úsymsr  )rp   rh   )rp   rU   )rh   rp   )rh   rN   )rU   rp   ©rU   rN   )rN   rh   ©rN   rU   )rŸ   rJ   r\   r]   rR   r[   r   r   r   rx   rQ   rA   Úpopr   Zas_coefficients_dictr5   r  r  r?   re   r   ZHalfrŒ   )rF   Úbase_solÚcomplete_solnrß   rG   rG   rH   Útest_diophantineê  s²     (4 $ "6.>*  4* ÿ
 ""þ ÿ
 "þ$ÿ
,
ÿ"ÿÿ
$ÿ
8"ÿÿ
 ÿ
6ÿ
."ÿ
$ÿ
$ÿ
&r#  c                  C   s  ddl m} m}m}m}m} t| d |d  |d  |d  ƒsDt‚t| d d|d   d|d   |d  ƒstt‚td| d  d|d   d|d   |d  ƒs¨t‚td| d  d|d   d|d   d|d   ƒsàt‚td| d  d|d   d|d   d|d   ƒ�st‚t|d  d| d   d|d   d|d   d|d   ƒ�s^t‚td| d  |d  d|d   |d  d|d   ƒ�sœt‚t| d |d  |d  |d  ƒj	t
ttgd�t
d td  td  dt
 t dt t t
d td  td  fhk�st‚d S )	Nr   ©ró   rô   ÚcÚdÚerU   r^   rt   r¡   rš   ©Ú
parameters)Ú	sympy.abcró   rô   r%  r&  r'  rŸ   rR   r<   r¥   rJ   r\   r]   r$  rG   rG   rH   Útest_general_pythagoreanC  s    (048:D>0Dÿr+  c                     sØ  t ddƒD ]*} ttdd„ td|  ƒD ƒƒ|  ƒs
t‚q
ttd td  d ƒd ksVt‚ttd td  td  d ƒt	ƒ ks€t‚td td  td  d ‰ tˆ ƒdhks®t‚t
d td  td  td  td  d	 ‰ ttˆ dƒƒdksðt‚td
ƒtddd�f }tdd„ |D ƒŽ d ‰ dddddddddddddddd d!d"d#h}tˆ ƒ|k�sXt‚ttˆ dd$�ƒd%k�srt‚td&td  td  td  ƒd'hk�sžt‚td td  td  td  d( ‰ tt‡ fd)d*„ƒ d S )+NrN   r”   c                 s   s   | ]}|d  V  qdS ©rU   NrG   ©rÖ   ÚirG   rG   rH   Ú	<genexpr>T  s     z9test_diop_general_sum_of_squares_quick.<locals>.<genexpr>z:%irU   r`   r  i!  z:5Ú6T©Únegativec                 S   s   g | ]}|d  ‘qS rW   rG   r-  rG   rG   rH   r×   _  s     z:test_diop_general_sum_of_squares_quick.<locals>.<listcomp>ép   )r   rT   rT   ri   rm   rl   )rT   rT   rT   rN   rm   rq   )rU   rN   rN   r^   ri   rl   )r   rT   rT   rT   rN   rÊ   )r   r   r^   r^   r^   rq   )rT   rU   rN   rN   ri   rq   )r   rT   rU   rN   rk   rl   )rU   rU   r^   r^   rm   r…   )rT   rT   rN   r^   rm   rl   )r   rU   rN   rN   rN   r‰   )r   r   rU   rU   rU   rÊ   )rT   rT   rU   rN   r^   r‰   )r   rT   rT   rU   ri   r‰   )r   r   rU   rm   rm   r…   )rT   rN   r^   ri   ri   r…   )r   rU   rU   rU   rm   rq   )r   rN   rN   rN   rm   rl   )r   rU   rN   ri   ri   rl   )r   rT   ri   ri   ri   r…   r  iÀ  rs   )rU   rU   rU   r^   c                      s
   t ˆ  ƒS rD   rZ   rG   rE   rG   rH   rK   o  rL   z8test_diop_general_sum_of_squares_quick.<locals>.<lambda>)ÚrangerŸ   Úsumr	   rR   r   rJ   r\   r]   rQ   rÝ   r«   Úlenr   r   ró   rô   r%  r&  r?   re   )r.  ÚvarÚ	base_solnrG   rE   rH   Ú&test_diop_general_sum_of_squares_quickR  sD    ( *ÿ,           ü,$r9  c                  C   sX   t d td  td  d } ddddddd	d
ddddddddddh}t| ƒ|ksTt‚d S )NrU   i@B )r   r   éè  )r   é`  i¨  )éà  éX  é€  )r™   r>  rÃ   )rÇ   r>  iè  )rÇ   r<  iX  )é¨   éà   éÀ  )r   r=  é   )é  é@  rÃ   )é˜   r<  é`  )r   rC  rA  )r;  éh  rF  )i¨  r<  rÃ   )rG  r<  rB  )r@  r=  rÃ   )é`   rG  i   )r?  rD  rB  )rH  r<  ih  )rJ   r\   r]   r   rR   )rF   r8  rG   rG   rH   Útest_issue_23807r  s"    
          ýrI  c                  C   sð   dD ]4} t ddƒD ]$}t| |ƒD ]}t|ƒ|ks t‚q qqttddƒƒg ksPt‚dd„ tdddƒD ƒdddddgddddd	gdddddggks’t‚ttdƒƒd
gks¨t‚ttddƒƒd
gksÀt‚dd„ tdƒD ƒdddgdd	gdggksìt‚d S )N)rn   r”   rT   rn   rN   ri   c                 S   s   g | ]}t |ƒ‘qS rG   ©Úlist)rÖ   r  rG   rG   rH   r×   ƒ  s     z'test_diop_partition.<locals>.<listcomp>r   rU   rG   c                 S   s   g | ]}t |ƒ‘qS rG   rJ  r-  rG   rG   rH   r×   ‡  s     )r4  r#   r6  rR   rK  )ÚnÚkr  rG   rG   rH   Útest_diop_partition}  s      ÿ
rN  c                  C   sf   dD ](} t | ƒ\}}|d |d  | kst‚qt dƒd ks>t‚t dƒ}|dkr^t|d ƒtksbt‚d S )N)
ri   r¢   r�   rv   é%   rœ   i%	  iå  iˆ  iYü  rU   rk   i5 )iÂ  i  r   )r%   rR   ÚtypeÚint)r.  ró   rô   ÚansrG   rG   rH   Ú test_prime_as_sum_of_two_squaresŠ  s    rS  c                  C   s–   dD ]>} t | ƒ\}}}|d |d  |d  | ks6t‚|dkst‚qttdd„ ƒ t dƒd ksbt‚t dƒd ksrt‚t dƒd	ks‚t‚t d
ƒdks’t‚d S )N)r   rT   rU   r|   rÉ   l   Ámy l   ý85JdÎl   8l9þ_	 rB  i!  i"  i#  i$  i%  i&  rU   r   c                   S   s   t dƒS ©Nrg   )r(   rG   rG   rG   rH   rK   ›  rL   z+test_sum_of_three_squares.<locals>.<lambda>rk   i <  r¡   )r   r   ri   r^   ©r   r   rU   )r(   rR   r?   rd   )r.  ró   rô   r%  rG   rG   rH   Útest_sum_of_three_squares“  s     rV  c                  C   s°   ddl m}  | ddƒ}tdd„ t|ƒD ƒƒ|ks4t‚ttdd„ ƒ td	ƒD ]`}t|ƒ}t|ƒd
ksft‚t	dd„ |D ƒƒs|t‚tdd„ |D ƒƒ|ks–t‚t
|ƒt|ƒksJt‚qJd S )Nr   )ÚrandintrT   l    @ô Ìk c                 s   s   | ]}|d  V  qdS r,  rG   r-  rG   rG   rH   r/  «  s     z+test_sum_of_four_squares.<locals>.<genexpr>c                   S   s   t dƒS rT  )r'   rG   rG   rG   rH   rK   ®  rL   z*test_sum_of_four_squares.<locals>.<lambda>r:  r^   c                 s   s   | ]}|d kV  qdS ©r   NrG   ©rÖ   ÚrrG   rG   rH   r/  ³  s     c                 s   s   | ]}|d  V  qdS r,  rG   rY  rG   rG   rH   r/  ´  s     )Zsympy.core.randomrW  r5  r'   rR   r?   rd   r4  r6  ÚallrK  Úsorted)rW  rL  ÚresultrG   rG   rH   Útest_sum_of_four_squares¦  s    
r^  c               	   C   sB  dddddddg} | D ]x}|\}}}t |||ƒ}zBt|ƒ}t|ƒ|ksJt‚d}|D ]}|||  }qR||kspt‚W q0 tk
rŠ   Y qY q0X q0qtt d	d
ddƒƒddgks®t‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ tt dd
d
ƒƒg ksðt‚tt dddƒƒdgk�st‚tt dd
dƒƒg k�s&t‚tt dd
dƒƒdgk�sBt‚tt ddddd�ƒddgk�sdt‚tt ddddd�ƒg k�s‚t‚tt ddd
ƒƒd gk�sžt‚tt ddd
ƒƒg k�s¸t‚tt ddd
dƒƒd!gk�sÖt‚tt ddd
dƒƒg k�sòt‚ttt d"d
dƒƒƒdk�st‚d#}	d$D ]$}
tt|	d
|	|
 ƒƒg k�st‚�qd S )%N)rÌ   rN   rU   )rö   rU   r^   )rU   rT   rU   )rN   rT   rN   )ri   rU   rU   )i@0  rU   r^   )iø  rU   rN   r   ru   rU   r^   T)rT   rT   rN   rN   )r   r   rU   r^   c                   S   s   t tdddƒƒS )Ng333333ó?rU   ©rK  r$   rG   rG   rG   rH   rK   Ï  rL   z+test_power_representation.<locals>.<lambda>c                   S   s   t tdddƒƒS ©NrU   r   r_  rG   rG   rG   rH   rK   Ð  rL   c                   S   s   t tdddƒƒS r`  r_  rG   rG   rG   rH   rK   Ñ  rL   rg   rT   rV   rN   rW   r  rm   )Zzeros)rT   rU   rU   rU   rU   rU   )r   r   r   r   r   rN   ri   Frh   r‘   r¯   i  pi   @)r¢   r”   rk   ri   r^   rU   rT   )	r$   Únextr6  rR   ÚStopIterationrK  r?   rd   r3   )ZtestsÚtestrL  r  rM  ÚfÚlZchk_sumZl_iÚbigr.  rG   rG   rH   Útest_power_representation¸  sJ    ÿ
ÿÿ
rg  c                  C   s�   t dddd�\} }t|d | |  d ƒ}|dddd	d
dhksBt‚t dddd�\}}t|| d|  d|  d ƒ}|ddddddhksŒt‚dS )z<
    Test whether diophantine respects the assumptions.
    zm nT)rB   ZpositiverU   iô  )ri   ru   )r�   r”   )é_   ri   )éy   r^   )éø   rU   )ió  rT   za bFrN   rm   )r“   rp   )r‰   r›   )rl   rj   )r…   r…   )rj   rq   )r›   rƒ   N)r	   r   rR   )ÚmrL  Zdiofró   rô   rG   rG   rH   Útest_assumptionså  s     rl  c                 C   sd   t | ƒ}t | ¡}t| jƒ}|jtd� |r`| ¡ }|D ] }t| 	t
||ƒ¡ƒdkr8 q(q8dS q(dS )zá
    Determines whether solutions returned by diophantine() satisfy the original
    equation. Hope to generalize this so we can remove functions like check_ternay_quadratic,
    check_solutions_normal, check_solutions()
    )Úkeyr   FT)r   r   Z	make_argsrK  Úfree_symbolsÚsortr   r   rI   rØ   r©   )rF   ÚsZfactorsr7  Úsolutionrd  rG   rG   rH   rŸ   ô  s    

rŸ   c               	   C   sÔ  dt  t d d } t| ƒtdt d fhks2t‚dt d  dt  t  dt   dtd   dt  d } t| ƒtt d fdt d tfhks”t‚tt td  d ƒtd  d tfhksÀt‚tt t d ƒtdt fksàt‚td	ddd d
�dksøt‚dt d dt d f}tdddtƒ|k�s(t‚tdddd d
�t	dd„ |D ƒƒk�sPt‚t
dddƒtƒ k�sht‚t
dddƒdhk�s€t‚t
dddƒdhk�s˜t‚ttdd„ ƒ tdddƒdk�s¼t‚td  t d  td  td  } t| ƒt|  ƒ  k�r@td td  td  dt t dt t td td  td  fk�sFn t‚tttdƒt d  tdƒt d  tdƒt gƒƒd	k�s€t‚tttddƒtdƒt  tdƒt gƒƒd	k�s°t‚tttdƒt  tddƒtdƒt gƒƒd	k�sàt‚tddƒdk�sôt‚tdƒtdƒ   k�rdk�sn t‚td	ƒtd	ƒ   k�r>dk�sDn t‚tdddƒdk�sZt‚ttdd„ ƒ tdddƒd k�s~t‚ttd!d„ ƒ ttd"d„ ƒ tt d td  d d# ƒd$d%d&d'd(d)d*d+hk�sÐt‚d S ),NrU   rT   rh   rm   rs   r^   rr   rN   r   ©rŒ   r¯   rn   c                 s   s   | ]}|  td ¡V  qdS rX  )rØ   rŒ   )rÖ   Ú_rG   rG   rH   r/    s     z$test_diopcoverage.<locals>.<genexpr>ru   ri   r±   r�   r  c                   S   s   t dddƒS )Nr^   ru   rT   )r"   rG   rG   rG   rH   rK     rL   z#test_diopcoverage.<locals>.<lambda>r—   rš   r”   TFr  c                   S   s   t dƒS )N)rU   r^   rm   )r9   rG   rG   rG   rH   rK   /  rL   r_   én   i6  )r�   rT   ri   c                   S   s,   t td td  tt  dt t  d ƒS )NrU   rs   )r   rJ   r\   r]   rG   rG   rG   rH   rK   4  rL   c                   S   s   t td td  ƒS )NrN   rU   r  rG   rG   rG   rH   rK   5  rL   r  )r‰   rg   rˆ   )rg   r‰   )rg   rt   )rT   r‰   )rT   rt   )rt   rg   rÎ   ) rJ   r\   r   rx   rR   rŒ   r   r   r,   Útupler-   rQ   r?   rd   r/   r[   r]   r   Úm1Úm2Úm3r6  r1   r   r   r6   r7   r8   r9   rO   r.   re   )rF   rR  rG   rG   rH   Útest_diopcoverage  sP    8*, ("ÿ
 
 ÿþ:00((
ÿ
ÿry  c                   C   sF   t ddddddƒdkst‚t dddd	d	d
ƒdks4t‚ttdd„ ƒ d S )NrU   rk   r¢   r^   éO   rŽ   ©rU   rk   r¢   rm   rT   r”   )rU   rm   rU   c                   S   s   t ddddddƒS )NrU   rk   r`   r^   rz  rŽ   )r0   rG   rG   rG   rH   rK   C  rL   ztest_holzer.<locals>.<lambda>)r0   rR   r?   rd   rG   rG   rG   rH   Útest_holzer:  s    r|  c            
         sà   ‡ ‡‡fdd„} d\‰ ‰‰d \}}}}d \}}}}| |Ž dksFt ‚| |Ž dksVt ‚tˆ |d  ˆ|d  ˆ|d  ƒˆ ˆ ˆ ksŠt ‚tˆ |d  ˆ|d  ˆ|d  ƒˆ ˆ ˆ ks¾t ‚t|||ˆ ˆˆƒ}	|	|ksÜt ‚d S )Nc                    s$   ˆ | d  ˆ|d   ˆ|d   S rw   rG   )rJ   r\   r]   ©ró   rô   r%  rG   rH   rK   H  rL   z"test_fail_holzer.<locals>.<lambda>)r^   rz  rŽ   )é   rT   r�   r{  r   rU   )rR   Úmaxr0   )
rF   rJ   r\   r]   ZxyzrÓ   rÔ   rý   rR  ÚhrG   r}  rH   Útest_fail_holzerF  s    
44r�  c                   C   sN   t dt dt  dt  t ƒtttt dt dt  dt  fhksJt‚d S )Nrm   rt   ru   rv   )	r   r[   r\   rJ   r]   rx   ry   rz   rR   rG   rG   rG   rH   Útest_issue_9539T  s    $ÿr‚  c                   C   sJ   t dtd td  td   dtt tt  tt    ƒdhksFt‚d S )NrN   rU   r`   ©r   r   r   )r   rJ   r\   r]   rR   rG   rG   rG   rH   Útest_issue_8943Y  s
    6ÿþr„  c                     sÞ   t d td  td  d ‰ tˆ ƒddhks0t‚tˆ dƒddhksFt‚tt‡ fdd„ƒ tdd	d
�} t d td  | d  d ‰ tˆ ƒdhks’t‚t	t d td  d ƒt
ƒ ks´t‚tt d td  d dd�t
ƒ ksÚt‚d S )Nr^   iq
  )rN   rm   rm   )rU   r^   rk   rU   c                      s   t ˆ  dƒS rw   )r   rG   rE   rG   rH   rK   c  rL   z.test_diop_sum_of_even_powers.<locals>.<lambda>ÚnegTr1  )rp   rm   rm   r   )Úlimit)rJ   r\   r]   r   rR   r   r?   re   r	   r   rQ   )r…  rG   rE   rH   Útest_diop_sum_of_even_powers_  s    "r‡  c                     sö  ddddddddd	d
ddddh} t d td  td  td  td  d }t|tƒ}t|ƒdksft‚|| ksrt‚t	t
dd„ ƒ ttddƒƒdgks˜t‚ttddƒƒg ks®t‚ttdddƒƒdgksÈt‚ttddƒƒg ksÞt‚ttddƒƒg ksôt‚ttdddƒƒdgk�st‚ttddƒƒg k�s(t‚ttddƒƒdgk�sBt‚ttddƒƒg k�sZt‚ttddƒƒd d!gk�svt‚ttd"ddƒƒd#d$gk�s”t‚ttd%d%ƒƒd&gk�s®t‚d'd(„ td)ƒD ƒddddddddddddddddddddddddddddddgk�st‚d*d(„ td)ƒD ƒddddddddddddddddddddddddddddddgk�s^t‚td)ƒD ]b‰ ttˆ ddƒƒ}|�rœt‡ fd+d,„|D ƒƒ�sœt‚ttˆ dƒƒ}t‡ fd-d,„|D ƒƒ�sft‚�qft	t
d.d„ ƒ t	t
d/d„ ƒ ttd0ddƒƒd1gk�st‚ttd0ddƒƒg k�st‚ttdddƒƒdgk�s8t‚ttddddƒƒd2d3gk�sXt‚ttddddƒƒd4d5d6gk�szt‚ttd7ddƒƒg k�s”t‚ttd8ddƒƒg k�s®t‚ttd9ddƒƒd:gk�rÐd9d9k�sÔt‚ttdd; ddƒƒg k�sòt‚d S )<N)r   r   rT   rT   r�   )r   r   ri   rk   rk   )r   rT   rN   rk   rn   )r   rT   r^   ri   rt   )r   rN   r^   rk   rk   )r   rN   ri   ri   rn   )rT   rT   rU   rm   rt   )rT   rT   rm   rm   rk   )rT   rU   rN   rN   r”   )rT   rN   r^   r^   rt   )rT   ri   ri   rm   rm   )rU   rU   rN   ri   rt   )rU   rN   ri   rm   rk   )rN   rN   r^   ri   rn   rU   rÉ   r`   c                   S   s   t tddƒƒS )Nr”   rg   )rK  r4   rG   rG   rG   rH   rK   t  rL   z,test_sum_of_squares_powers.<locals>.<lambda>rT   rV   T)r   rT   rÊ   rN   r   rƒ  r^   rW   ri   é2   )ri   ri   )rT   rk   r�   )rT   rT   rT   rU   rU   )r   r   rT   rT   rN   rn   )rT   rT   rT   rT   rT   rT   rT   rT   c                 S   s    g | ]}t tt|d dƒƒƒ‘qS )ri   T©r6  rK  r4   r-  rG   rG   rH   r×   ƒ  s     z.test_sum_of_squares_powers.<locals>.<listcomp>r‚   c                 S   s   g | ]}t tt|d ƒƒƒ‘qS )ri   r‰  r-  rG   rG   rH   r×   Š  s     c                 3   s$   | ]}t d d„ |D ƒƒˆ kV  qdS )c                 s   s   | ]}|d  V  qdS r,  rG   ©rÖ   ÚjrG   rG   rH   r/  “  s     ú7test_sum_of_squares_powers.<locals>.<genexpr>.<genexpr>N©r5  rÕ   ©r.  rG   rH   r/  “  s     z-test_sum_of_squares_powers.<locals>.<genexpr>c                 3   s$   | ]}t d d„ |D ƒƒˆ kV  qdS )c                 s   s   | ]}|d  V  qdS r,  rG   rŠ  rG   rG   rH   r/  •  s     rŒ  Nr�  rÕ   rŽ  rG   rH   r/  •  s     c                   S   s   t tdddƒƒS )NrU   rg   rT   ©rK  r3   rG   rG   rG   rH   rK   —  rL   c                   S   s   t tdddƒƒS )NrU   rT   rg   r�  rG   rG   rG   rH   rK   ˜  rL   rh   r‘   rU  )r   rT   rT   )r   ri   )rT   r^   r  rm   éó   iÙ  )rt   r:  )rÝ   r«   rJ   r\   r]   r   r   r6  rR   r?   rd   rK  r4   r4  rQ   r[  r3   )ZtrurF   rR  Ús1Ús2rG   rŽ  rH   Útest_sum_of_squares_powersk  sÜ          þ,
 ÿ                        ú                        ú"  "&r“  c                   C   sr   t ddƒdkst‚t ddƒdks$t‚t ddƒs2t‚t ddƒs@t‚t ddƒsNt‚t ddƒs\t‚t ddƒdksnt‚d S )	NrN   rg   Frp   rT   r   r^   rU   )r:   rR   rG   rG   rG   rH   Útest__can_do_sum_of_squares¤  s    r”  c            	      C   s  ddl m} m}m}m}m} | d |d  d }dh}t|ƒ|ksFt‚tt	| 
¡ ƒƒ}t|dd�|ksjt‚| d |d  |d  |d  |d  d	 }tt|ƒƒd
ksªt‚tt|dd�ƒdksÂt‚ddddh}tdtd  dt t  dtd   d dd�|k�st‚d S )Nr   r$  r^   r  r  Tr  rU   rö   é#   i0ò  r‘   r•   r–   r—   r”   rs   r|   )r*  ró   rô   r%  r&  r'  r   rR   rQ   rA   r   r6  rJ   r\   )	ró   rô   r%  r&  r'  rF   r!  r"  ZsolnrG   rG   rH   Útest_diophantine_permute_sign®  s    ,r–  c                  C   s8   t d td  d d } t| t tgd�ddhks4t‚d S )NrU   r^   rT   r  ©r  rÎ   )rT   rN   )rJ   r\   r   rR   rE   rG   rG   rH   Útest_not_implemented½  s    r˜  c                      sL   t dt  d ‰ tˆ tt gd�tdt d fhks6t‚tt‡ fdd„ƒ d S )NrN   rU   r—  c                      s   t ˆ tthd�S )Nr—  )r   r\   rJ   rG   rE   rG   rH   rK   Æ  rL   z!test_issue_9538.<locals>.<lambda>)rJ   r\   r   rx   rR   r?   rO   rG   rG   rE   rH   Útest_issue_9538Ã  s    &r™  c                  C   sF  t dtd  td  dtd   ƒ} tt| ƒjƒ\}}}| |d d|d   d|d  d| |  d| |  d|d   |d d| |  d|d   d| |  fhks°t‚t td dtd   dtd   ƒ} | d| | |d d|d   |d d|d   fhk�st‚t dtd  dtd   td  ƒ} | d|d  |d  d|d  d| |  |d  d|d  d| |  d|d   fhk�s˜t‚t dtd  dtd   dtd   ƒ} | d|d  d|d   d	| | d
|d  d|d   fhk�st‚tdtd  dtd   td  dt t  dt t  dt t  ƒd|d  d| |  |d  d|d  d| |  |d  d|d  d| |  d|d   fk�s¶t‚tdtd  dtd   dtd   ƒd|d  d|d   d|d  d| |  d|d   d|d  d| |  d|d   fk�sBt‚d S )NrU   rh   r^   rN   éH   r€   r™   rt   rm   rn   ri   rk   rø   r‚   rù   i~úÿÿiÿŠ iŒ
  iÄx  i:�
 iÄÿÿÿi  ib<  )	r   rJ   r\   r]   r   r   rn  rR   r2   )rp  r  r  rZ  rG   rG   rH   Útest_ternary_quadraticÉ  sJ    $.*ý$>$2"ÿ(FBÿ  

ÿ
ÿÿÿ
"ÿ 
ÿ"þÿr›  c                     sâ  t g g ƒ‰ tˆ ƒtƒ kst‚ˆ jdks*t‚ˆ jdks8t‚tt‡ fdd„ƒ tˆ  ¡ ƒg ks^t‚t t	t
gttgƒ‰ˆjt	t
fks‚t‚ˆjttfks”t‚tt‡fdd„ƒ ˆ d¡ tˆƒdhksÂt‚ˆ ddtf¡ tˆƒddtfhksêt‚tt‡ ‡fdd„ƒ tˆ ¡ ƒt	dt
tit	dt
d	igk�s(t‚t t	t
tgttgƒ‰tˆjƒd
k�sPt‚ˆ td
 t tt df¡ tˆƒtd
 t tt dfhk�s’t‚ˆ td
¡td	 d
t dfhk�s¸t‚ˆd
ƒtd	 d
t dfhk�sÚt‚ˆ tdtdi¡dhk�søt‚ˆddƒdhk�st‚ˆ tdi¡td dt dfhk�s6t‚ˆdƒtd dt dfhk�sXt‚ˆ td¡td
 d td dfhk�s‚t‚ˆd dƒtd
 d td dfhk�sªt‚ˆ td
tdi¡dhk�sÈt‚ˆd
dƒdhk�sÞt‚ˆ tdtdi¡dhk�süt‚ˆddƒdhk�st‚tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ tt‡fdd„ƒ t t	t
gttgƒ} |  tdt f¡ |  t dt f¡ | ddƒdhk�sÞt‚d S )NrG   c                      s   ˆ   tf¡S rD   )ÚaddrJ   rG   )r‘  rG   rH   rK   ê  rL   z/test_diophantine_solution_set.<locals>.<lambda>c                      s
   ˆ   d¡S )NrV   ©rœ  rG   )r’  rG   rH   rK   ð  rL   )rN   r^   rg   c                      s
   ˆ   ˆ¡S rD   )ÚupdaterG   )r‘  r’  rG   rH   rK   õ  rL   rN   r^   rU   rT   rk   rn   )r  rg   rT   ri   r¡   rp   )rs   r…   rT   )é   rn   rT   c                      s   ˆ j dd�S )NrT   )rJ   ©rØ   rG   ©Ús3rG   rH   rK     rL   c                      s   ˆ   ddd¡S ©NrT   rU   rN   r   rG   r¡  rG   rH   rK   	  rL   c                      s
   ˆ   d¡S )NrG   r�  rG   r¡  rG   rH   rK   
  rL   c                      s
   ˆ   d¡S )N)rT   rU   rN   r^   r�  rG   r¡  rG   rH   rK     rL   c                      s
   ˆ   d¡S )Nr³   r�  rG   r¡  rG   rH   rK     rL   c                      s   ˆ dddƒS r£  rG   rG   r¡  rG   rH   rK     rL   c                      s
   ˆ dd�S )NrT   rr  rG   rG   r¡  rG   rH   rK     rL   r�   rŸ  r   r¯   )r;   rQ   rR   r	   r)  r?   rd   rK  Zdict_iteratorrJ   r\   rŒ   rÝ   rœ  rž  r]   r6  rØ   rO   )Zs4rG   )r‘  r’  r¢  rH   Útest_diophantine_solution_setå  sV    

*&&"("*(r¤  c                  C   sd   dt  t dtd   } t| ƒjttgd�}|tdt ftdt fhksLt‚|ddƒdhks`t‚d S )	NißÿÿÿrN   rU   r(  r�   iêÿÿÿr   r¯   )rJ   r\   r=   r¥   rŒ   rÝ   rR   )rF   rq  rG   rG   rH   Ú test_quadratic_parameter_passing  s     r¥  N)¡Zsympy.core.addr   Zsympy.core.mulr   Zsympy.core.numbersr   r   r   Zsympy.core.relationalr   Zsympy.core.singletonr   Zsympy.core.symbolr	   Zsympy.matrices.denser
   Zsympy.ntheory.factor_r   Zsympy.simplify.powsimpr   Zsympy.core.functionr   Zsympy.core.sortingr   r   Z(sympy.functions.elementary.trigonometricr   Zsympy.solvers.diophantiner   Z%sympy.solvers.diophantine.diophantiner   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Zsympy.testing.pytestr>   r?   r@   Zsympy.utilities.iterablesrA   ró   rô   r%  r&  r  r  rJ   r\   r]   r[   rŒ   rÝ   r«   rÓ   rÔ   rý   rx   ry   rz   Zt_3Zt_4Zt_5Zt_6rv  rw  rx  rC   rI   rP   rS   rX   rf   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+  r9  rI  rN  rS  rV  r^  rg  rl  rŸ   ry  r|  r�  r‚  r„  r‡  r“  r”  r–  r˜  r™  r›  r¤  r¥  rG   rG   rG   rH   Ú<module>   sž   ¸ ÿ&
	K	
$Y 	-/
9

1