U
    9%eQ±  ã                   @   sü  d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZmZmZ ddlmZmZ ddlmZmZmZmZ dd	lmZ dd
lm Z 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 Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd  Z3d!d" Z4d#d$ Z5d%d& Z6d'd( Z7d)d* Z8d+d, Z9d-d. Z:d/d0 Z;d1d2 Z<d3d4 Z=d5d6 Z>d7d8 Z?d9d: Z@d;d< ZAd=d> ZBd?d@ ZCdAdB ZDdCdD ZEdEdF ZFdGdH ZGdIdJ ZHdKdL ZIdMdN ZJdOdP ZKdQdR ZLdSdT ZMdUdV ZNdWdX ZOdYdZ ZPd[d\ ZQd]d^ ZRd_d` ZSdadb ZTdcdd ZUdedf ZVdgdh ZWdidj ZXdkdl ZYdmdn ZZdodp Z[dqdr Z\dsdt Z]dudv Z^dwdx Z_dydz Z`d{d| Zad}d~ Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd ZmdS )zTest sparse polynomials. é    )Úreduce)ÚaddÚmul)ÚringÚxringÚsringÚPolyRingÚPolyElement)ÚfieldÚ	FracField)ÚZZÚQQÚRRÚFFÚEX)ÚlexÚgrlex)ÚGeneratorsErrorÚExactQuotientFailedÚMultivariatePolynomialErrorÚCoercionFailed)Úraises)ÚSymbolÚsymbols)ÚS)ÚooÚpi)Úexp)Úsqrtc                  C   s  t td\} }}}ttdttjdks,ttt| ttjdksFtttdttjdks`ttt| ||fttjdkstttdttjdkstttg ttjdksŽttt	dd	  td
t| tj
t| ksàttd
dtj
t| ksúttd
tdtttj
t| ksttt	dd	  td}td
ttjtksLttd
t|jtksdttd
tdjtks|ttdtt}tdtt}tdtt}|j|jd ks¶t|j|jd ksÌt|j|jksÞt|j|jksðt|j|jkst|j|jkstd S )NZxyztúx,y,zé   é   )ÚxÚyÚzÚ r   c                   S   s   t dttS ©Nr   ©r   r   r   © r(   r(   ú[/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/tests/test_rings.pyÚ<lambda>   ó    z(test_PolyRing___init__.<locals>.<lambda>r"   zZZ[t]Útc                   S   s   t dt dtttS )Nr"   r'   r(   r(   r(   r)   r*   $   r+   r   úx,y)Úmapr   Úlenr   r   r   ÚgensÚAssertionErrorr   r   ÚdomainÚorderr"   r#   )r"   r#   r$   r,   Z_lexZR1ZR2ZR3r(   r(   r)   Útest_PolyRing___init__   s2     $r4   c                  C   s"   t dt\} }}}t| std S ©Nr   ©r   r   Úhashr1   ©ÚRr"   r#   r$   r(   r(   r)   Útest_PolyRing___hash__6   s    r:   c                   C   sJ  t dtd t dtd ks tt dtd t dtd ks@tt dtd t dtd ks`tt dtd t dtd k	stt dtd t dtd ks tt dtd t dtd k	sÀtt dtd t dtd ksàtt dtd t dtd k	stt dtd t dtd ks$tt dtd t dtd k	sFtd S )Nr   r   r-   )r   r   r1   r   r(   r(   r(   r)   Útest_PolyRing___eq__:   s           ""r;   c               	   C   s  t dt\} }}}|  d¡| dks(t|  d| | | ¡d| | | ksRt|d d| |  d|  d|d   d|  d }|  dggdgdggdddggg¡|ks²t|  ddddddd	¡|ksÒt|  d
dddddg¡|ksðtt dt\} |  dg¡| dkstd S )Nr   é   é   r    é   é   é   r!   )©r=   r   r   ©r!   r!   r   ©r!   r   r   ©r   r   r=   ©r   r   r!   ©r   r   r   )rA   r!   )rB   r=   )rC   r    )rD   r>   )rE   r?   )rF   r@   r%   )r(   r<   )r   r   Zring_newr1   )r9   r"   r#   r$   Úfr(   r(   r)   Útest_PolyRing_ring_newJ   s    *4, rH   c                     sZ  t dt\ }   ¡tdttks,t  ¡tdttksFt  | ¡tdttks`t  d¡tdttkszt  d¡ d¡tdttkst  d¡ d¡ d¡tksžt  d¡tdttksÒt  d¡tdttksìt  d¡ d¡td	ttkst  d¡ d¡ d¡tks.ttt fd
d tt fdd d S )Nr   úy,zzx,zr-   r   r$   r!   r=   r"   c                      s
      d¡S ©Nr    ©Údropr(   ©r9   r(   r)   r*   j   r+   z$test_PolyRing_drop.<locals>.<lambda>c                      s      ¡  ¡S ©NrK   r(   ©r9   r"   r#   r(   r)   r*   k   r+   )r   r   rL   r   r   r1   r   Ú
ValueError©r$   r(   rO   r)   Útest_PolyRing_dropY   s     " rR   c                  C   s~   t dt\} }}}| dd  tdttks.t| dd  tdttksJt| dd  tdttksft| dd  tksztd S )Nr   r   r!   rI   r=   r$   r    )r   r   r   r   r1   r8   r(   r(   r)   Útest_PolyRing___getitem__m   s
    rS   c                  C   s|   t dtt} | jdkst| jdks(tt dtt} | jdksBt| jdksPtt dtt} | jdksjt| jdksxtd S )Nr"   TFr   r%   )r   r   r   Zis_univariater1   Zis_multivariaterM   r(   r(   r)   Útest_PolyRing_is_u   s    rT   c                     s~   t dt\}   fddtdD }|  |¡tt|  krPd d  d ksVn tt dt\} |  ddd	g¡d
ksztd S )Nr"   c                    s    g | ]} d  d |  d qS ©r=   r    r(   ©Ú.0Úi©r"   r(   r)   Ú
<listcomp>   s     z%test_PolyRing_add.<locals>.<listcomp>r>   r=   é   r%   r?   r<   é   )r   r   Úranger   r   r1   ©r9   ÚFr(   rY   r)   Útest_PolyRing_add   s
    2r`   c                     s   t dt\}   fddtdD }|  |¡tt|  krp d d d   d d   d	 d
   d ksvn tt dt\} |  d
ddg¡dkstd S )Nr"   c                    s    g | ]} d  d |  d qS rU   r(   rV   rY   r(   r)   rZ      s     z%test_PolyRing_mul.<locals>.<listcomp>r>   é   r[   r@   éÎ   iè  r=   i±  r%   r    r?   é   )r   r   r]   r   r   r1   r^   r(   rY   r)   Útest_PolyRing_mul   s
    Rrd   c                     s
  t dt\ } }}}tt fdd tt fdd   d¡ jksLt  d¡| | | | ksjt  d¡| | | |  | |  ||  ||  ||  ksšt  d¡| | | | | |  | | |  || |  ksæt  d	¡| | | | kstd S )
Núx,y,z,tc                      s
      d¡S ©Néÿÿÿÿ©Úsymmetric_polyr(   rM   r(   r)   r*      r+   z.test_PolyRing_symmetric_poly.<locals>.<lambda>c                      s
      d¡S )Nr?   rh   r(   rM   r(   r)   r*      r+   r   r!   r=   r    r>   )r   r   r   rP   ri   Úoner1   )r"   r#   r$   r,   r(   rM   r)   Útest_PolyRing_symmetric_poly   s    >>rk   c                  C   s   t d\} }}}tdtt}t| d|  d|  ||jd|j  d|j  fksVttdt	t}t| d|  |d  ||jd|j  |jd  fkstt| d| |d g||jd|j |jd gfksÒttdtt}td|t}t| d| |  d|d  |  | ||||jd|j
 |j  d|j
d  |j  fksHttdt	t}td|t}t| || d  |d | d  | ||||j|j
|j d  |j
d |j d  fksŸttdtt}td|t}t| d| |  |d | d  | ||||jd|j |j
  |j
d |j d  fks4ttdtd }t|dd\}}|jt	 tdtd ¡ksvt|jdkst||j |¡kstd S )	Nre   r   r=   r    r,   T©Ú	extensionr(   )r   r   r   r   r   r"   r#   r$   r1   r   r,   r   r   r2   Úalgebraic_fieldr0   Ú
from_sympy)r"   r#   r$   r,   r9   ÚRtÚrÚar(   r(   r)   Ú
test_sring¥   s(    ::6^^^"rs   c                  C   s*   t dt\} }}}t|| | s&td S r5   r6   r8   r(   r(   r)   Útest_PolyElement___hash__Á   s    rt   c                  C   s  t dtt\} }}|| d| |  dkdks2t|| d| |  d| | kdksZtd|| d| |  kdksztd| | || d| |  kdks¢t|| ||  dkdksŸtd|| ||  kdksÚt|| ||  dkdksötd|| ||  kdkst|| ||  dkdks2td|| ||  kdksPt|| d| |  dkdksrt|| d| |  d| | kdkstd|| d| |  kdksŸtd| | || d| |  kdksèt|| ||  dkdkstd|| ||  kdks$t|| ||  dkdksBtd|| ||  kdks`t| jtdd  kr| jksn t| jd  kr€| jksªn tt dt\}}t d|\} }}|d	 | | |d	 kdksêt|d	 | | |d
 kdkstd S )Nr-   r?   r@   FTr   r!   r,   r    r>   )r   r   r   r1   rj   r   )r9   r"   r#   rp   r,   r(   r(   r)   Útest_PolyElement___eq__Å   s2     ( ("*"*(""ru   c                  C   sÔ   t dt\} }}| d|  k r:|d   k r:|d k s@n t| d|  krj|d   krj|d kspn t|d |d   kr|  kr| dks n t|d |d   krÊ|  krÊ| dksÐn td S )Nr-   r!   r=   r    )r   r   r1   rO   r(   r(   r)   Útest_PolyElement__lt_le_gt_ge__ê   s
    000rv   c                  C   s   t d\} }ttt|  t| |f t|  | fD ].}td|\}}td|d  d dks.tq.tt|  fD ].}td|\}}td|d  d dksjtqjd S )Nzx, yr,   r=   r!   z
2*t**2 + 1zEX(2)*t**2 + EX(1))r   r   r   r   Ústrr1   r   )r"   r#   Údomr9   r,   r(   r(   r)   Útest_PolyElement__str__ó   s    &ry   c                  C   sN   t dt\} }}}|| d|  }| ¡ }||ks6td|d< ||ksJtd S )Nr   r    r<   ©r!   r!   r!   )r   r   Úcopyr1   )r9   r"   r#   r$   rG   Úgr(   r(   r)   Útest_PolyElement_copyþ   s    r}   c            
         s(  t dt\} }}}d|d  | || |  d|d   d | j\ }}d d  |  | |  d|d   d }|kst ¡ |ksttd\}}}	d|d  | || |	  d|	d   d }|ksØt |||	¡|ksîttt fdd t d	t\} | d ¡ dks$td S )
Nr   r    r=   r<   r!   zu,v,wc                      s
      ¡S rN   )Úas_exprr(   ©ÚXrG   r(   r)   r*     r+   z*test_PolyElement_as_expr.<locals>.<lambda>r%   )r   r   r   r1   r~   r   rP   )
r9   r"   r#   r$   ÚYÚZr|   ÚUÚVÚWr(   r   r)   Útest_PolyElement_as_expr  s    ,,,r   c                     sþ  t d\} }t| |ft\ }}}  d¡}|dkrDt| jsHt  ¡}||krft| jsjt  |  | ¡}||| | krt| jst  |  | |    ¡}||| | ||  | krât| jsæt  d |  | d | d   d ¡}||d | | |d |d   d krHt| jsLtttdg\}}| td¡}||d krt||jstt	t
 fdd t	t
 fd	d t	t
 fd
d tdt\   d¡}|dkröt| jsútd S )Nr   r!   r    r=   r<   r   c                      s      d ¡S )Nr!   ©Ú	from_exprr(   ©r9   r"   r(   r)   r*   4  r+   z,test_PolyElement_from_expr.<locals>.<lambda>c                      s      d ¡S ©Nr=   r   r(   r   r(   r)   r*   5  r+   c                      s      d td ¡S )Nr<   r=   )r   r   r(   r   r(   r)   r*   6  r+   r%   )r   r   r   r   Ú
isinstanceÚdtyper1   r   r   r   rP   )r#   r$   r   r   r   rG   rq   r_   r(   r   r)   Útest_PolyElement_from_expr  s*    

 ,*< 
r   c                  C   sö  t dt\} }}}| d ¡ t ks(t| d ¡ dks<t|d  ¡ dksPtd|d  |  ¡ dkslt||d  |  ¡ dkst|d |d  |  ¡ dksšt| d |¡t ksÀt| d |¡dksÖt|d  |¡dksìtd|d  |  |¡dkst||d  |  |¡dks,td|d  |d  |  |¡dksTt| d |¡t ksnt| d |¡dkst|d  |¡dkstd|d  |  |¡dksŸt||d  |  |¡dksÞtd|d  |d  |  |¡dkst| d |¡t ks t| d |¡dks8t|d  |¡dksPtd|d  |  |¡dkspt||d  |  |¡dkstd|d  |d  |  |¡dksžtt dt\} | d ¡ t ksÜt| d ¡ dksòtd S ©	Nr   r   r!   r=   r    r?   r<   r%   )r   r   Zdegreer   r1   r8   r(   r(   r)   Útest_PolyElement_degree<  s8       (  (  (r   c                  C   sX  t dt\} }}}| d ¡ t ks(t| d ¡ dks<t|d  ¡ dksPtd|d  |d |   ¡ dkstt||d  |d |   ¡ dkst|d |d  |d |   ¡ dksÀt| d |¡t ksØt| d |¡dksît|d  |¡dkstd|d  |d |   |¡dks.t||d  |d |   |¡dksVtd|d  |d  |d |   |¡dkst| d |¡t ks t| d |¡dksžt|d  |¡dksÐtd|d  |d |   |¡dksøt||d  |d |   |¡dks td|d  |d  |d |   |¡dksPt| d |¡t ksjt| d |¡dkst|d  |¡dkstd|d  |d |   |¡dksÂt||d  |d |   |¡dksêtd|d  |d  |d |   |¡dkstt dt\} | d ¡ t ks>t| d ¡ dksTtd S r   )r   r   Ztail_degreer   r1   r8   r(   r(   r)   Útest_PolyElement_tail_degree_  s8    $$(((0((0((0r   c                  C   sr   t dt\} }}}| d ¡ t t t fks2t| d ¡ dksFt|d | |d |d    ¡ dksntd S )Nr   r   r!   rF   r=   r    )r    r!   r=   )r   r   Údegreesr   r1   r8   r(   r(   r)   Útest_PolyElement_degrees  s     r   c                  C   sr   t dt\} }}}| d ¡ t t t fks2t| d ¡ dksFt|d | |d |d    ¡ dksntd S )Nr   r   r!   rF   r=   r    rA   )r   r   Ztail_degreesr   r1   r8   r(   r(   r)   Útest_PolyElement_tail_degrees  s     r   c                     sN  t dtt\} dd      dd   d    d¡dksRttt fdd   ¡d	ksvt  ¡d	kst  ¡d	kst  d  ¡dksŽt    ¡d
ksÎt  d ¡dksättt fdd tt fdd tt fdd t dt\} | d d¡dksJtd S )Nr   r    r=   r<   é   r!   c                      s
      d¡S rJ   ©Úcoeffr(   ©rG   r(   r)   r*     r+   z(test_PolyElement_coeff.<locals>.<lambda>r   rg   c                      s      dd   ¡S )Nr    r=   r   r(   ©rG   r"   r#   r(   r)   r*     r+   c                      s         ¡S rN   r   r(   ©rG   r"   r#   r$   r(   r)   r*      r+   c                      s      dd  ¡S )Nr<   r    r   r(   )rG   r$   r(   r)   r*   ¡  r+   r%   )r   r   r   r   r1   r   rP   rM   r(   r   r)   Útest_PolyElement_coeff  s    ,r   c                  C   sz   t dtt\} }}| djtdks(ttdd| jtddksFttdd| | tdd|  jtddksvtd S ©Nr-   r   r!   r=   r>   )r   r   r   ZLCr1   rO   r(   r(   r)   Útest_PolyElement_LCŠ  s    r   c                  C   sj   t dtt\} }}| djdks$ttdd| jdks<ttdd| | tdd|  jdksftd S )	Nr-   r   ©r   r   r!   r=   ©r!   r   r>   ©r!   r!   )r   r   r   ZLMr1   rO   r(   r(   r)   Útest_PolyElement_LM¬  s    r    c                  C   s¶   t dtt\} }}| djdtdfks,ttdd| jdtddfksNttdd| | tdd|  jdtddfkstt d	t\} | djd
ks t| djdks²td S )Nr-   r   r   r!   r=   r   r>   r   r%   )r(   r   )r(   r!   )r   r   r   ÚLTr1   r   rO   r(   r(   r)   Útest_PolyElement_LT²  s    "4r¢   c                  C   st   t dtt\} }}| d ¡ dks&ttdd|  ¡ |ks@ttdd| | tdd|   ¡ || ksptd S r   )r   r   r   Zleading_monomr1   rO   r(   r(   r)   Útest_PolyElement_leading_monomŒ  s    r£   c                  C   s   t dtt\} }}| d ¡ dks&ttdd|  ¡ tdd| ksJttdd| | tdd|   ¡ tdd| | kstd S r   )r   r   r   Zleading_termr1   rO   r(   r(   r)   Útest_PolyElement_leading_termÂ  s    $r€   c                  C   sÄ  t dt\} }}}|d d |d d  |d d   ¡ }|dtddfdtddfd	tddfgksjtt d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krÎ| d¡  krÎddgksÔn t| t¡| d¡  krøddgksþn tt d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krh| d¡  krhddgksnn t| t¡| d¡  krddgksn tt dt\} | d ¡ dgksÀtd S )Nr   r=   r    r>   r?   rA   r!   ©r   r    r   ©r   r   r>   r-   r<   r   )rU   r=   )©r!   r<   r!   r   r%   )r(   r    )r   r   Útermsr1   r   r   r   )r9   r"   r#   r$   rš   rG   r(   r(   r)   Útest_PolyElement_termsÈ  s    (0 8* >.r©   c                  C   s  t dt\} }}}|d d |d d  |d d   ¡ }|dddgksLtt d	tt\} }}||d
  d|d  |d   }| ¡ | t¡  kr°| d¡  kr°ddgks¶n t| t¡| d¡  krÚddgksàn tt d	tt\} }}||d
  d|d  |d   }| ¡ | t¡  krJ| d¡  krJddgksPn t| t¡| d¡  krxddgks~n td S )Nr   r=   r    r>   r?   rA   r¥   rŠ   r-   r<   r   rU   r§   r   )r   r   Úmonomsr1   r   r   r   )r9   r"   r#   r$   rª   rG   r(   r(   r)   Útest_PolyElement_monomsÜ  s    ( 8* >r«   c                  C   s  t dt\} }}}|d d |d d  |d d   ¡ }|tddtddtddgks^tt dtt\} }}||d  d|d  |d   }| ¡ | t¡  krÂ| d	¡  krÂddgksÈn t| t¡| d
¡  krìddgksòn tt dtt\} }}||d  d|d  |d   }| ¡ | t¡  kr\| d
¡  kr\ddgksbn t| t¡| d	¡  krddgksn td S )Nr   r=   r    r>   r?   r!   r-   r<   r   r   )r   r   Úcoeffsr1   r   r   r   )r9   r"   r#   r$   r¬   rG   r(   r(   r)   Útest_PolyElement_coeffsí  s    ($ 8* >r­   c                     sØ  t dt\}  t dt\}}t d|\}}}td|  dddksNtt t   krxddks~n tt|  t|    kr°ddks¶n tt|  | t| |    kròddd	ksøn tt  t    kr0d
d iks6n tt |  t|     krtddkszn tt |  | t| |     krÂdddksÈn ttt fdd tt fdd tt fdd tt fdd tdt\}}t d|\}}}t t   krhddksnn tt dt\}}}ttt| |  t| | tt   krÎtdttdksÔn td S )Nr,   úu,vr   r    r!   ©rC   ©r   r!   r   ©rC   rF   ©rB   rF   ©rB   rE   rF   rC   ©rB   rC   ©rB   rE   rC   c                      s     S rN   r(   r(   ©r,   r"   r(   r)   r*     r+   z*test_PolyElement___add__.<locals>.<lambda>c                      s     S rN   r(   r(   r¶   r(   r)   r*     r+   c                      s     S rN   r(   r(   ©r,   Úur(   r)   r*     r+   c                      s     S rN   r(   r(   r·   r(   r)   r*     r+   ©rz   rF   ©	r   r   Údictr1   r   Ú	TypeErrorr
   r   r   ©rp   ÚRuvÚvÚRxyzr#   r$   ÚFuvr(   ©r,   rž   r"   r)   Útest_PolyElement___add__þ  s&    08B>DN4rÃ   c                     sü  t dt\}  t dt\}}t d|\}}}td|  dddksNtt  t   kr|d dksn tt |  t|    kržd d	ksŸn tt |  | t| |    krdd d
ksn tt   t    krDd d iksJn tt  |  t|     krd dksn tt  |  | t| |     krÞdd dksän ttt fdd tt fdd tt fdd tt fdd tdt\}}t d|\}}}t  t   krd dksn tt dt\}}}ttt | |  t| | tt   kròtdtt dksøn td S )Nr,   r®   r   r    r!   éýÿÿÿr¯   r±   r²   r³   rC   rŽ   rµ   c                      s     S rN   r(   r(   r¶   r(   r)   r*   *  r+   z*test_PolyElement___sub__.<locals>.<lambda>c                      s     S rN   r(   r(   r¶   r(   r)   r*   +  r+   c                      s     S rN   r(   r(   r·   r(   r)   r*   ,  r+   c                      s     S rN   r(   r(   r·   r(   r)   r*   -  r+   r¹   rº   rœ   r(   rÂ   r)   Útest_PolyElement___sub__  s&    4<JBHR8rÅ   c                     s\  t dt\}  t dt\}}t d|\}}t t   krXdiks^n ttd   td     krd ddks¢n ttd   td     kràd ddksæn ttd   td     kr(d ddks.n tt d  t d    krpd ddksvn ttd  |  t| d     krÀd ddksÆn ttd  |  td |     krd ddksn ttd  |  t| d     kr`d ddksfn tt | d  t|  d    kr°d ddks¶n ttd |   t| d     kr d ddksn ttd |   td|      krPd ddksVn ttd |   t| d     kr d ddksŠn tt|  d  t|  d    krðd ddksön ttd	 |   t| d	     krFd	 d	 dd
ksLn ttt fdd tt fdd tt fdd tt fdd tdt\}}t d|\}}t t   kròdiksøn tt dt\}}ttt |  t|  tt   krRdttiksXn td S )Nr,   r®   r   rC   r=   r!   )rC   rE   )rB   rE   r    )rC   r°   rE   c                      s      S rN   r(   r(   ©r,   r"   r$   r(   r)   r*   P  r+   z*test_PolyElement___mul__.<locals>.<lambda>c                      s      S rN   r(   r(   rÆ   r(   r)   r*   Q  r+   c                      s      S rN   r(   r(   ©r,   rž   r$   r(   r)   r*   R  r+   c                      s      S rN   r(   r(   rÇ   r(   r)   r*   S  r+   rz   rº   )rp   rŸ   r¿   rÀ   r#   rÁ   r(   )r,   rž   r"   r$   r)   Útest_PolyElement___mul__8  s4    .DDHHPPPPPPPPV2rÈ   c            	         sÔ  t dt\} }}dd  d d d d ks6tdd  d d d ksVtd d  ¡ksptd   ¡d kstd d  d  ks®td   d ksÊtd d d  d d d  ksötd d  d ¡dkstd  d  d   d ¡  krPksVn tt dt\} }}td d |d d  |d d   ¡ dkstt dt\} }}td d |d d  |d d   ¡ dksætt d	t\}t d
t\}}t d|\}}}td    dd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 dt\} d d  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
 fdd t dt\} }| d  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
 fd!d t dt\} d d d d   | dd d  }}  ¡t   krz||fksn t  ¡    kr¢|ksšn t  ¡    krÊ|ksÐn ttt fd"d dd  d   d dd  d  d   | d  }}  ¡t   krP||fksVn t  ¡    krx|ks~n t  ¡    kr |ksŠn ttt fd#d dd  dd   dd   d  d d d  d   dd  d$  d% d  }}  ¡t   krJ||fksPn t  ¡    krr|ksxn t  ¡    kr|ks n ttt fd&d dd  dd   dd   dd    d dd   d'   d d$ d(d  dd   d)  d*  }}  ¡t   kr\||fksbn t  ¡    kr|ksn t  ¡    kr¬|ks²n ttt fd+d t dt\} d d d d   d d | d }}  ¡t   kr,||fks2n t  ¡    krT|ksZn t  ¡    kr||ksn ttt fd,d dd  d   d dd  d  d   tdd td-d. td/d. td0d.  }}  ¡t   k	r&||fk	s,n t  ¡    k	rN|k	sTn t  ¡    k	rv|k	s|n ttt fd1d t dt\} }d |d  |   | | d }}  ¡t   k	rô||fk	sún t  ¡    k
r|k
s"n t  ¡    k
rD|k
sJn t  ¡|k
s^td |d  |   | d|d   }}  ¡t   k
r¶||fk
sŒn t  ¡    k
rÞ|k
sän t  ¡    kr|ksn ttt fd2d d |d   |    | d|d   }}  ¡t   kr|||fksn t  ¡    kr€|ksªn t  ¡    krÌ|ksÒn ttt fd3d d |d  d d|    | d  }}  ¡t   kr>||fksDn t  ¡    krf|ksln t  ¡    kr|ksn ttt fd4d t dt\} }d |d  |   | | d }}  ¡t   kr||fksn t  ¡    kr4|ks:n t  ¡    kr\|ksbn t  ¡|ksvtd |d  |   | d|d   }}  ¡t   krÎ||fksÔn t  ¡    krö|ksün t  ¡    kr|ks$n ttt fd5d d |d   |    | d|d   }}  ¡t   kr||fksn t  ¡    krŒ|ksÂn t  ¡    krä|ksên ttt fd6d d |d  d d|    d |d  d|d   }}  ¡t   krf||fksln t  ¡    kr|ksn t  ¡    kr¶|ksŒn ttt fd7d d S )8Nr   r=   r>   r    r!   rg   r   r?   r,   r®   r±   c                      s     d     S r   r(   r(   )rž   r"   r(   r)   r*   z  r+   z.test_PolyElement___truediv__.<locals>.<lambda>c                      s     S rN   r(   r(   r¶   r(   r)   r*   |  r+   c                      s     S rN   r(   r(   r¶   r(   r)   r*   }  r+   c                      s     S rN   r(   r(   r·   r(   r)   r*   ~  r+   c                      s     S rN   r(   r(   r·   r(   r)   r*     r+   r"   c                      s
      ¡S rN   ©Údivr(   ©rG   r|   r(   r)   r*     r+   c                      s
   t  S rN   ©Údivmodr(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   ©Úremr(   rË   r(   r)   r*     r+   c                      s     S rN   r(   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   ©Úquor(   rË   r(   r)   r*     r+   c                      s     S rN   r(   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   ©Úexquor(   rË   r(   r)   r*     r+   r-   c                      s
      ¡S rN   rÉ   r(   rË   r(   r)   r*     r+   c                      s
   t  S rN   rÌ   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÎ   r(   rË   r(   r)   r*     r+   c                      s     S rN   r(   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÐ   r(   rË   r(   r)   r*     r+   c                      s     S rN   r(   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   §  r+   r@   é   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   ¯  r+   é	   é   é,   é6   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   ·  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   Á  r+   r\   é   é4   éo   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   É  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   Û  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   ã  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   ë  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*   ý  r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*     r+   c                      s
      ¡S rN   rÒ   r(   rË   r(   r)   r*     r+   )r   r   r1   rÑ   r/   rš   r   r»   r   rŒ   ÚZeroDivisionErrorrÊ   rÍ   rÏ   r   rÓ   )	r9   r#   r$   rp   rŸ   r¿   rÀ   Úqrq   r(   )rG   r|   r,   rž   r"   r)   Útest_PolyElement___truediv__^  s   $  , @66(.((6.((F".((N2.((.((62.((.((.((.((".((.((.((.((".((rÞ   c                     s°  t dtt\} }d| d   d dks,t d  ks<ttt fdd |d |d ksbt d   d¡  kr€  d¡  kr€d	|d  d
|  d ksªn t d   d¡  krø  d¡  krød|d  d|d   d|  d ksþn t d	   d	¡  kr^  d	¡  kr^d|d	  d|d   d|d   d|  d ksdn t d   d¡  krÐ  d¡  krÐd|d  d|d	   d|d   d|d   d|  d ksÖn tt dt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¡  krÞ  d¡  krÞ|ksän tt 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	¡  krŠ  d	¡  krŠ|ks¬n td S ),Nr"   r=   r    r   r!   c                      s    d S rf   r(   r(   r   r(   r)   r*     r+   z*test_PolyElement___pow__.<locals>.<lambda>rg   r>   é   rÕ   ra   é$   rØ   é   é   é`   éØ   éQ   r?   é    éð   iÐ  i8  i*  éó   r   r@   r,   i@Ôÿÿi,
  é1   l      M¿l     3ur\   l     L]² l    @LV é
   l    Aìecl    ÇF	l   `V i°
IiÁöW )r   r   r   r1   r   rP   Z_pow_genericÚ_pow_multinomial)r9   r"   r#   r$   r|   r,   r(   r   r)   Útest_PolyElement___pow__  s<    HTfr(:"
ÿ
ÿ
ÿ
þ
þþrì   c            	      C   s<  t dtt\} }|d d|d   d }|d }|d d|  d }d}| |g¡|g|fksbtt dtt\} }|d d|  d }| | d	g¡|gd
fks€tt dtt\} }|d d|  d }| | dg¡td	d|d  | d	 gd
fksütt dtt\} }}d|d  | d| |  d|  d|  d }| | dg¡d|d  | ||  d|  | d gd
fkst| d| g¡d|d  | d	 gd| d fksºt|d	 }|d	 }| |g¡d
g|fksæt||d  d	 }|| d	 |d	 g}|dg}d}| |¡||fks.t|d | ||d   |d  }|| d	 |d d	 g}|| d	g}|| d	 }| |¡||fkst|d d	 || d	 g}|d	 |g}d| d	 }| |¡||fksÞtt dt\} | d | d¡dkstt dt\} | d | d¡tddd
fks8td S )Nr"   r    rß   r=   é*   rÕ   rá   éÿÿÿr!   r   r-   r>   ra   rg   r%   )r   r    )r   r   r   rÊ   r1   r   )	r9   r"   rG   r|   rÝ   rq   r#   ÚGÚQr(   r(   r)   Útest_PolyElement_div,  sJ    40D8 rñ   c                  C   s|  t dtt\} }|d d|d   d }|d }d}| |g¡| |g¡d   kr\|ksbn tt dtt\} }}d	|d  | d| |  d	|  d|  d
 }| | dg¡| | dg¡d   krÔdksÚn t| d| g¡| d| g¡d   krd	| d
 ksn t|d }|d }| |g¡| |g¡d   krX|ks^n t||d  d }|| d |d g}d}| |¡| |¡d   kr®|ksŽn t|d | ||d   |d  }|| d |d d g}|| d }| |¡| |¡d   kr |ks&n t|d d || d g}d| d }| |¡| |¡d   krr|ksxn td S )Nr"   r    rß   r=   rí   rî   r!   r-   r>   ra   r   )r   r   r   rÏ   rÊ   r1   )r9   r"   rG   r|   rq   r#   rï   r(   r(   r)   Útest_PolyElement_remg  s.    .06B2. .rò   c                  C   s  t dt\} }d|d   |d d|d   d ¡dd| |d d|  d gfksXtt dt\} }}| d | d¡dddgfkst| d | d¡dddgfks¬t| d | d¡dddgfksÎt| d d| ¡ddd| gfksôtd|  d| ¡dd| d| gfks t| d d|d  ¡d	dd| gfksLtd|d   d|d  ¡d	d| d| gfkst|d |d  |d |  d }|d |d
  |d |  d }| |¡d|d |d  ||  d ||d
  ||  d gfkstd S )Nr"   r=   r>   r!   )r=   r-   r   r   )r!   r=   r    )r=   r!   )r   r   Údeflater1   ©r9   r"   r#   rG   r|   r(   r(   r)   Útest_PolyElement_deflate  s    J"""&,,4  rõ   c            	         sî  t dt\} }}| d ¡ tddfks,t| d ¡ tddfksHt| tdd ¡ dksbt| tdd ¡ dks|td|d  |  ¡ dd|d  | fksšt|d tdd|   ¡ dd|d  | fksÚtt dtt\}}}t dtt\ }}|tdd	|d   td
d|d   tdd|d   tdd|d   tdd|d   tdd|d   tdd|  tdd |d tdd|d   tdd|d   td d|d   td!d"|d   td#d"|d   td$d|d   td%d|  td&d g}d'| d(|d   d)|d   d*|d   d+|d   d,|d   d-|d   d.|  d/ d|d  d0|d   d|d   d1|d   d2|d   d3|d   d4|d   d5|  d6 g} fd7d8|D |ksêtd S )9Nr-   r!   r<   r    )r    r<   r=   zx,tl   ùÊO{]K_É$í-é\·WåKÜ.j/%=udLhàL` l     :P·$¯GÌ¢NA3VßCðc8RNe]Ú l   ©HBSWÜ~b]"zZMî}§Eî |uÀ"Õ¿KÉ2 l    h^%==2þpDu.qŽ~@|`:*w
Ìh r@   l   Ù[_+Jê[ŒkíPuä=\L=ªIÅGS{,ð²c.\) o l    P=Kzzdüaê$\0ci}=$?&ø@#uTn0Q r?   l   CNºVO&ilo?¥uTvB¯p5ºy\
$l©$ÖaPÑ-NCR l    Hi)Sbx|5eS6O--:QRbV.r?1lW r>   l   M[Sýµ hlÙó<ÝMÏ6Ÿ>P|oPoÔDugÍe l    Ð[€WGfNQNBÁ3NÖoCBxcBR'å.Cml   Ã.wSK-­Gã¡+~96nzLwGDÉÍ<u)qàGµ	l   °>0I	íB£,Iu!|çJÚ=yÂ9¶-l   @¹VóT×ry![tÔ
¯RdløCHjò\L¬Lf:' l   0Å%H8[JÝ/@)\LMñ3B\_>þmxwr) l   ×$ä><JkðtGl³+oßgÆKàz·ÉeXBOR¢Fl   `%C!+[O;RY.²{À;©°gW!Ýo^@*ß> ra   l   `(s÷xŽ]Yl   i œ4&äm: l   À,8y'X^l   ±¥:ÕW]l    kÌB`l    
ÄOª<âpä{l   ;7>r¬I° l    ``6]j_{l    @åo;bÉ|?l      Tõ=-Él     ÊlFORl     
RtJ)1~M²C©MgKÝbšq«ùcÃL¶e«l   Árýa2ÈU!J'B\KW4Du+Á%B:®N'/|,ç3D`N l    >C_õ=DèmbgrVJ5n,»Oÿ{-[8 ·Dî/7Ê"²l   *×uæQ!ó3'É; ÄPtµSäo"_ ;2g0PZwg
l   À§.ëSö[_iºªák
8Cn|#	v*u0HtS¡l    5u3ÜjÁx]L*(ýIIyLÚ1iC©Âo§latÖ1:'É6(l    P­gÿ];meVÎqÌæ'%°op¹Z "ŒMmtä:%63l    P*71}<U1qÕq,Œ+Œ'ÔcíX0rVvQa;ô pA9l    @ir0ê@>/3,«F%*Á;W@ {=5|o&à(Ëc_46l   `k-·@\K'l    4C|	,Ydm l    Loÿ5§R®s l     "#?ÇVq l    @otc?c l      t¢-JOl     Sêz(Gçc                    s   g | ]}|  ¡ d    ¡qS )r!   )Úclear_denomsZset_ring)rW   rG   ©ZrZZr(   r)   rZ   Ô  s     z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   rö   r   r1   r   )	r9   r"   r#   ZrQQr,   r   ÚTr_   rï   r(   r÷   r)   Útest_PolyElement_clear_denoms¡  s    ,2ÿþýüûúùÿþýüûúùø
ÿ
þ
ý
ü
û
úùø	

ÿ
þ
ý
ü
û
úùø÷rù   c            
      C   s  t dt\} }}| d| d }}| |¡dks4t| d| d }}| |¡dksXt| d| d }}| |¡dks|t| d| d }}| |¡dks t| dd| d	  }}| |¡d| d	 dd
fksÖtd| d	 | d }}| |¡d| d	 d
dfkst| d| d }}| |¡dks4t| d| d }}| |¡dksZt| d| d }}| |¡dkst| d| d }}| |¡dksŠt|d d|  d
 | d
 }}| |¡d
|d d|  d
 d
fksît|d d|  d
 | d }}| |¡d
|d d|  d
 dfks6td|d  d	|  d | d }}| |¡d|d d|  d
 d
fkst| dd|d  d	|  d  }}| |¡dd
|d d|  d
 fksÎtd|d  d	|  d |d
  }}| |¡|d
 d| d d
fkst|d
 d|d  d	|  d  }}| |¡|d
 d
d| d fks^tt dt\} }}}}|d d|  d
 d| d  }}| |¡|d
 |d
 dfks¶t|d |d  d|d  |  |d  ||  | |d d|  d
  }}|d
 |d | |d  | |d
   }}}	| |¡|||	fksFt| |¡||	|fks`tt dt\} }}td
d|d  | td
d }td
d| td
d }|d
 }| |¡||td
dfksÐt| |¡|td
d|fksðtt dt\} }}d| |d  d| |  d|  }d|d  }d| }| |¡||| || fksZt| |¡||| || fks|td S )Nr-   r   rF   r=   )r=   r!   r   éþÿÿÿ)r=   rg   r   )r=   r   rg   r>   r!   )r=   r!   r!   )r=   rg   r!   )r=   r!   rg   )r=   rg   rg   re   gÍÌÌÌÌÌ @r    g      ð?)r   r   Z	cofactorsr1   r   r   )
r9   r"   r#   rG   r|   r$   r,   ÚhZcffÚcfgr(   r(   r)   Útest_PolyElement_cofactorsÖ  sh     "**"*"*"&"&""J,   $"rý   c                  C   sb   t dt\} }}tdd|d  | tdd }tdd| tdd }| |¡|d ks^td S )Nr-   r!   r=   )r   r   Úgcdr1   rô   r(   r(   r)   Útest_PolyElement_gcd'  s     rÿ   c            
      C   sâ  t dt\} }}d|d  d|d   d|  }d|d  d|  }d| d }d}| |¡||fksjt|  |¡| |fkst| | ¡| |fkstt dt\} }}tdd|d  |d  tdd|  }tdd|d  tdd|  }d| d }d}| |¡||fkst|  |¡| |fks:t| | ¡| |fksVttdt\}}t d|\}}	|d  d d |	 }|	d |d d d  }| |¡|d  d |	 d|	d  d|d   d fksÞtd S )Nr-   r=   r    r>   r!   r"   r,   )r   r   Úcancelr1   r   r
   )
r9   r"   r#   rG   r|   r_   rï   ZFxrp   r,   r(   r(   r)   Útest_PolyElement_cancel/  s*     ( r  c                  C   sh   t dt\} }}| d ¡ dks$t| d ¡ dks8t|d d|d   d|  d  ¡ dksdtd S )Nr-   r   r!   r    r>   r=   )r   r   Zmax_normr1   rO   r(   r(   r)   Útest_PolyElement_max_normP  s    r  c                  C   sh   t dt\} }}| d ¡ dks$t| d ¡ dks8t|d d|d   d|  d  ¡ dksdtd S )Nr-   r   r!   r    r>   r=   rê   )r   r   Zl1_normr1   rO   r(   r(   r)   Útest_PolyElement_l1_normX  s    r  c                  C   sÒ  t dt\} }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 ¡tdd|d d  |d d  |d d	  |d
 d  d|d  |d d	  |d d	   d|d   kst| |d ¡tdd|d d  |d d  |d d  |d
 d  d|d d  |d d	  |d d   kst| |d
 ¡tdd|d d  |d d  |d d	  |d
  ksÎtd S )Nzx:11i   r?   r   ra   r!   r@   r>   r    rê   r=   i 	  r<   râ   i`  r[   é@  )r   r   Údiffr1   )r9   r   rG   r(   r(   r)   Útest_PolyElement_diff`  s
    ~vr  c                     sT  t dt\} }d| d   ddks*t ddks:ttt fdd tt fdd tt fd	d t d
t\} }}d| |d  d   dddksŠt dddksžt|  |¡} d|jd d ksÜt d|jd d 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 d S )Nr"   r    r!   r   r>   c                      s     S rN   r(   r(   r   r(   r)   r*   p  r+   z+test_PolyElement___call__.<locals>.<lambda>c                      s
    ddS )Nr   r!   r(   r(   r   r(   r)   r*   q  r+   c                      s    t ddS ©Nr!   r<   ©r   r(   r   r(   r)   r*   s  r+   r-   r=   r<   é5   c                      s     S rN   r(   r(   r   r(   r)   r*     r+   c                      s    dddS )Nr   r!   r=   r(   r(   r   r(   r)   r*     r+   c                      s    dt ddS r  r  r(   r   r(   r)   r*     r+   c                      s    t dddS r  r  r(   r   r(   r)   r*     r+   c                      s    t ddt ddS r  r  r(   r   r(   r)   r*     r+   )r   r   r1   r   rP   r   rL   r#   )r9   r"   r#   ZRyr(   r   r)   Útest_PolyElement___call__i  s&    
r
  c                     sê  t dt\} d dd   d  d    d¡}|dkrLt|trPttt fdd t dt\} } d d d   d   d    d¡}|dkrÈt||  ¡j	sÌt  dfdfg¡}|dkrt||  ¡j	st  d¡}|dkr0t||  ¡j	s4t  dfdfg¡}|dkrjt||  ¡j	snt  dfdf|dfg¡}|dkr t|tr€ttt fd	d tt fd
d tt fdd d S )Nr"   r    r>   r=   r   c                      s      tdd¡S r  ©Úevaluater   r(   ©rG   r"   r(   r)   r*     r+   z+test_PolyElement_evaluate.<locals>.<lambda>r   c                      s      dftddfg¡S r  r  r(   r   r(   r)   r*     r+   c                      s      tddfdfg¡S r  r  r(   r   r(   r)   r*      r+   c                      s"      tddftddfg¡S r  r  r(   r   r(   r)   r*   ¡  r+   )
r   r   r  r   r	   r1   r   r   rL   r   ©r9   rq   r$   r(   r   r)   Útest_PolyElement_evaluate  s(     ,$"$r  c                     s0  t dt\} d dd   d  d    d¡}|dkrNt|| jsRttt fdd t dt\} }d dd   d  d    d¡}|dkržt|| jsŒt  dfdfg¡}|dkræt|| jsêttt fd	d tt fd
d tt fdd d S )Nr"   r    r>   r=   r   c                      s      tdd¡S r  ©Úsubsr   r(   r  r(   r)   r*   ª  r+   z'test_PolyElement_subs.<locals>.<lambda>r   c                      s      dftddfg¡S r  r  r(   r   r(   r)   r*   Ž  r+   c                      s      tddfdfg¡S r  r  r(   r   r(   r)   r*   µ  r+   c                      s"      tddftddfg¡S r  r  r(   r   r(   r)   r*   ¶  r+   )r   r   r  r   r   r1   r   r   r  r(   r   r)   Útest_PolyElement_subs£  s      r  c                  C   s  t dt\} }}|d |d  }| ¡ \}}}|dks:t| |¡| |ksPt|d |d  }| ¡ \}}}|dkszt| |¡| |kst|| d }| ¡ \}}}|dks¶t| |¡| |ksÌt|d }| ¡ \}}}|dksît| |¡| |kst|  d¡}| ¡ \}}}|dks,t| |¡| |ksDttd\} }| ¡ \}}}|dkslt| |¡| |kstd S )Nr-   r=   r   r<   r    )r   r   Z
symmetrizer1   Úcomposer   r   )r9   r"   r#   rG   ÚsymrÏ   Úmr(   r(   r)   Útest_PolyElement_symmetrizež  s2    
r  c                     sæ  t dt\} d dd   d  d    d¡}|dkrNt|| jsRt  ¡ ksft  d ¡d dd   dd   d ksttt fdd t d	t\} }}d dd   d  d    d¡}|dkrt|| jst  df|dfg¡}|dkr:t|| js>td dd   d | |  d  ||d  d
 ¡}||d  d
 d d||d  d
 d   d||d  d
  | |  d }||krÞt|| jsâtd S )Nr"   r    r>   r=   r   r@   c                      s      tdd¡S r  )r  r   r(   r  r(   r)   r*   é  r+   z*test_PolyElement_compose.<locals>.<lambda>r   r!   )r   r   r  r   r   r1   r   r   )r9   rq   r#   r$   rÝ   r(   r  r)   Útest_PolyElement_composeß  s      8 <Lr  c                     sf  t dt\}  }}   jdks$t   jdks6t   jdksHt   jdksZt   d jdkspt   d jdkst   d jdkst   d jdks²t jdksÀt jdksÎt jdksÜt jdksêt | jdksüt | jdkst | jdks$t | jdks8td  jdksLtd  jdks`td  jdksttd  jdkstd  d jdks td  d jdksžtd  d jdksÐtd  d jdksèt| djdksüt| djdkst| djdks$t| djdks8t d j	dksLtd  d j	dksdtd  d j
dks|td  d j
dkst | | d jdks°t | | d jdksÌt | | d jdksèt | | d jdkst d jdkst d d jdks0t d   d jdksLt d d   d jdksltt d	td
\}}d| d jdkstd|d  d|  d jdksºtt dt\}}|d |d  |d  |d  |d  |d  }|jdkst|d jdksttt fdd t dt\} | djdksNt| djdksbtd S )Nr   FTr!   r    r   r=   r>   r,   é   r<   rž   râ   r\   rê   ra   r@   c                      s    j S rN   )Úis_cyclotomicr(   rY   r(   r)   r*   ;  r+   z&test_PolyElement_is_.<locals>.<lambda>r%   )r   r   Zis_generatorr1   Z	is_groundZis_monomialZis_termÚis_zeroZis_oneZis_monicZis_primitiveZ	is_linearZis_quadraticZis_squarefreeZis_irreducibler   r   r  r   r   )r9   r#   r$   Ú_r,   rž   rG   r(   rY   r)   Útest_PolyElement_is_÷  sh     $0r  c                     sª   t dt\}  }| d d¡j tdttks2t| d d¡ d¡j tdttksXtt| d d¡ d¡ d¡| jdksttt	fdd tt	 fd	d d S )
Nr   r!   r   rI   r$   Fc                      s      d¡  d¡  d¡S r&   rK   r(   rQ   r(   r)   r*   H  r+   z'test_PolyElement_drop.<locals>.<lambda>c                      s
      d¡S r&   rK   r(   rY   r(   r)   r*   I  r+   )
r   r   rL   r   r   r1   r   r   r   rP   )r9   r#   r(   )r"   r$   r)   Útest_PolyElement_dropA  s     &*r  c                  C   s   t dt\} }}|d |d  ||  }}|| d }}| |¡||fksNt| |¡|ks`t| |¡|ksrt| |¡|kstd S )Nr-   r=   r   )r   r   Zpdivr1   ZpremZpquoZpexquo)r  r"   r#   rG   r|   rÝ   rq   r(   r(   r)   Útest_PolyElement_pdivK  s    r  c                  C   sr   t dt\} }d| |d d  }}|d tdd d  }}}| |¡||fksVt| |¡|||fksntd S )Nr"   r=   râ   ræ   r!   )r   r   Z
half_gcdexr1   Zgcdex)r  r"   rG   r|   Úsr,   rû   r(   r(   r)   Útest_PolyElement_gcdexV  s
    r   c                  C   sZ   t dt\} }|d d|  d |d d d| d   }}}| |¡|||gksVtd S ©Nr"   r=   r!   )r   r   Zsubresultantsr1   ©r  r"   rG   r|   rû   r(   r(   r)   Útest_PolyElement_subresultants_  s    0r#  c                  C   sL   t dt\} }|d d|  d |d d d  }}}| |¡|ksHtd S )Nr"   r=   r!   r   )r   r   Z	resultantr1   r"  r(   r(   r)   Útest_PolyElement_resultante  s    (r$  c                  C   sŠ   t dt\} }|d d|d   d|  d d }}| ¡ |ksDtt dt\}}}}t d|\} }||d  ||  | |d d| |   }}| ¡ |ks¢td S )	Nr"   r    r=   rÕ   é   ipÒÿÿza,b,cr>   )r   r   Zdiscriminantr1   )r  r"   rG   r|   r_   rr   ÚbÚcr(   r(   r)   Útest_PolyElement_discriminantk  s    &.r(  c                  C   s®   t dt\} }|d d|d   d|d   d|d   d	|d
   d|d   d|  d }|d
 d|  d }|d d|  }| ||¡|kst| ¡ ||gksªtd S )Nr"   rß   rÔ   rê   é   ra   iô  r@   éq  r>   r=   r    rÕ   r?   )r   r   r  r1   Z	decomposer"  r(   r(   r)   Útest_PolyElement_decomposex  s    Pr+  c                  C   sD   t dt\} }|d d|  d  d¡|d d|  d ks@td S r!  )r   r   Úshiftr1   )r  r"   r(   r(   r)   Útest_PolyElement_shift  s    r-  c               	   C   sh  t dt\} }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|  |d	 d  |d	  d | dd  | d|d	  d  d|d  d|d   d|d	   d|d  d|d	   d  gksdtd S ) Nr,   r"   i   i	=  ra   r?   i   r*  r>   ræ   r    é   r=   r!   i$ô  éd   é@   rÙ   râ   éÈ   rã   i N  rÕ   é   i÷ÿÿÿrß   i È¯ l      ir  i  Šl      ^_)r
   r   r   Zsturmr1   )r_   r,   r  r"   rG   r(   r(   r)   Útest_PolyElement_sturm  s    |2,>ür3  c                  C   sÌ   t dt\} }|d d|d   |d  d|d   }| ¡ |df|d dfgksVt||d d  |d d  |d d  |d  }| ¡ |d d|  d df|d d|  d df|dfgksÈtd S )Nr"   r?   r=   r>   r    r!   )r   r   Zgff_listr1   )r  r"   rG   r(   r(   r)   Útest_PolyElement_gff_list  s
    ( 0r4  c                  C   sÜ   t dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fksltt dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fksØtd S )Nr"   r    r=   r!   r>   rê   )r   r   rn   r   Z	to_groundr"   Zsqf_normr1   )r9   r"   r   r(   r(   r)   Útest_PolyElement_sqf_norm  s    
J
r5  c                  C   s   t dt\} }|d |d  |d  d }|d d|d   d|  d }|d }|d |d  | d }| ¡ |kszt| ¡ d|df|dfgfkstd S )Nr"   r?   r    r=   r!   r>   )r   r   Zsqf_partr1   Zsqf_list)r  r"   rG   r|   rû   Úpr(   r(   r)   Útest_PolyElement_sqf_list§  s     r7  c                  C   sø   t dd tdtd d d  t dd dtd d  t dd dtd d  t d d tdtd d d  g} t| dd\}}|jt tdtdtd d  ¡ksºt|jdksÈtg }| D ]}| |j 	|¡¡ qÐ||ksôtd S )	Nr    râ   rê   ra   r!   Trl   r(   )
r   r   r   r2   r   rn   r1   r0   Úappendro   )Úitemsr9   rr   ÚresultÚitemr(   r(   r)   Útest_issue_18894²  s    ~,r<  c                  C   st   t dt\} }|d |d  |d  d }|d }|d }|d | d }| ¡ d|df|df|dfgfksptd S )Nr"   r?   r    r=   r!   )r   r   Zfactor_listr1   )r  r"   rG   rž   r¿   Úwr(   r(   r)   Útest_PolyElement_factor_listŒ  s    r>  c                  C   sl   t dtd\} }|d |d  |d  |d  d }| d¡|d |d	  |d
  |d  d kshtd S )Nr"   r=   r@   r?   r>   r    r!   r[   rÔ   râ   rß   )r   r   rë   r1   )r9   r"   r6  r(   r(   r)   Útest_issue_21410È  s    $r?  N)nÚ__doc__Ú	functoolsr   Úoperatorr   r   Zsympy.polys.ringsr   r   r   r   r	   Zsympy.polys.fieldsr
   r   Zsympy.polys.domainsr   r   r   r   r   Zsympy.polys.orderingsr   r   Zsympy.polys.polyerrorsr   r   r   r   Zsympy.testing.pytestr   Z
sympy.corer   r   Zsympy.core.singletonr   Zsympy.core.numbersr   r   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   r4   r:   r;   rH   rR   rS   rT   r`   rd   rk   rs   rt   ru   rv   ry   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  r  r  r
  r  r  r  r  r  r  r  r   r#  r$  r(  r+  r-  r3  r4  r5  r7  r<  r>  r?  r(   r(   r(   r)   Ú<module>   s¢   "

%	
##
& 2;&5Q!	'J
	
	
