o
    ª3Ih_Ÿ  ã                   @   s4  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 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' ddl(m)Z) ddl*m+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.d/ Z;d0d1 Z<d2d3 Z=d4d5 Z>d6d7 Z?d8d9 Z@d:d; ZAd<d= ZBd>d? ZCd@dA ZDdBdC ZEdDdE ZFdFdG ZGdHdI ZHdJdK ZIdLdM ZJdNdO ZKdPdQ ZLdRdS ZMdTdU ZNdVdW ZOdXdY ZPdZd[ ZQd\d] ZRd^d_ ZSd`da ZTdbdc ZUddde ZVdfdg ZWdhdi ZXdjdk ZYdldm ZZdndo Z[dpdq Z\drds Z]dtdu Z^dvdw Z_dxdy Z`dzd{ 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d Zndd Zodd Zpdd Zqdd Zrdd Zsd d¡ Ztd¢S )£zTest sparse polynomials. é    )Úreduce)ÚaddÚmul)ÚringÚxringÚsringÚPolyRingÚPolyElement)ÚfieldÚ	FracField)Úninf)ÚZZÚQQÚRRÚFFÚEX)ÚlexÚgrlex)ÚGeneratorsErrorÚExactQuotientFailedÚMultivariatePolynomialErrorÚCoercionFailed)Úraises)ÚSymbolÚsymbols)ÚS)Úpi)Úexp)Úsqrtc                  C   s  t td\} }}}ttdttjdksJ tt| ttjdks#J ttdttjdks0J tt| ||fttjdks@J ttdttjdksMJ ttg ttjdksZJ ttdd	  td
t| tj	t| kspJ td
dtj	t| ks}J td
tdtttj	t| ksJ ttdd	  td}td
ttj
tks€J td
t|j
tks¯J td
tdj
tksºJ tdtt}tdtt}tdtt}|j|jd ksÖJ |j|jd ksàJ |j|jksèJ |j|jksðJ |j|jksøJ |j|jksJ d S )NÚxyztúx,y,zé   é   )ÚxÚyÚzÚ r   c                   S   s   t dttS ©Nr   ©r   r   r   © r)   r)   ú\/home/air/sanwanet/gpt-api/venv/lib/python3.10/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   úx,y)Úmapr   Úlenr   r   r   Úgensr   r   ÚdomainÚorderr#   r$   )r#   r$   r%   r-   Ú_lexÚR1ÚR2ÚR3r)   r)   r*   Útest_PolyRing___init__   s2    "r9   c                  C   s"   t dt\} }}}t| sJ d S ©Nr    ©r   r   Úhash©ÚRr#   r$   r%   r)   r)   r*   Útest_PolyRing___hash__7   s   r?   c                   C   s€   t dtd t dtd ksJ t dtd t dtd ks J t dtd t dtd ks0J t dtd t dtd ks@J t dtd t dtd ksPJ d S )Nr    r   r/   )r   r   r   r)   r)   r)   r*   Útest_PolyRing___eq__;   s
       $r@   c               	   C   s  t dt\} }}}|  d¡| dksJ |  d| | | ¡d| | | ks)J |d d| |  d|  d|d   d|  d }|  dggdgdggg d	¢gg¡|ksXJ |  ddddddd
¡|kshJ |  g d¢¡|kssJ t dt\} |  dg¡| dksJ d S )Nr    é   é   r!   é   é   é   r"   )rC   rD   rE   )©rB   r   r   ©r"   r"   r   ©r"   r   r   ©r   r   rB   ©r   r   r"   ©r   r   r   ))rF   r"   )rG   rB   )rH   r!   )rI   rC   )rJ   rD   )rK   rE   r&   )r)   rA   )r   r   Úring_new)r>   r#   r$   r%   Úfr)   r)   r*   Útest_PolyRing_ring_newB   s   *4* rN   c                     sV  t dt\ }   ¡tdttksJ   ¡tdttks#J   | ¡tdttks0J   d¡tdttks=J   d¡ d¡tdttksMJ   d¡ d¡ d¡tks\J   d¡tdttksiJ   d¡tdttksvJ   d¡ d¡td	ttksJ   d¡ d¡ d¡tksJ tt fd
d tt fdd d S )Nr    úy,zzx,zr/   r   r%   r"   rB   r#   c                      ó
      d¡S ©Nr!   ©Údropr)   ©r>   r)   r*   r+   b   ó   
 z$test_PolyRing_drop.<locals>.<lambda>c                      s      ¡  ¡S ©NrR   r)   ©r>   r#   r$   r)   r*   r+   c   ó    )r   r   rS   r   r   r   Ú
ValueError©r%   r)   rW   r*   Útest_PolyRing_dropQ   s     r[   c                  C   s~   t dt\} }}}| dd  tdttksJ | dd  tdttks%J | dd  tdttks3J | dd  tks=J d S )Nr    r   r"   rO   rB   r%   r!   )r   r   r   r   r=   r)   r)   r*   Útest_PolyRing___getitem__e   s
   r\   c                  C   s|   t dtt} | jdu sJ | jdu sJ t dtt} | jdu s!J | jdu s(J t dtt} | jdu s5J | jdu s<J d S )Nr#   TFr    r&   )r   r   r   Úis_univariateÚis_multivariaterT   r)   r)   r*   Útest_PolyRing_is_m   s   r_   c                     s~   t dt\}   fddtdD }|  |¡tt|  kr)d d  d ks,J  J t dt\} |  g d¢¡d	ks=J d S )
Nr#   c                    ó    g | ]} d  d |  d qS ©rB   r!   r)   ©Ú.0Úi©r#   r)   r*   Ú
<listcomp>   ó     z%test_PolyRing_add.<locals>.<listcomp>rC   rB   é   r&   )rB   rD   rA   é   )r   r   Úranger   r   ©r>   ÚFr)   re   r*   Útest_PolyRing_add}   s
   4rm   c                     s   t dt\}   fddtdD }|  |¡tt|  kr9 d d d   d d   d	 d
   d ks<J  J t dt\} |  g d¢¡dksMJ d S )Nr#   c                    r`   ra   r)   rb   re   r)   r*   rf      rg   z%test_PolyRing_mul.<locals>.<listcomp>rC   é   rh   rE   éÎ   iè  rB   i±  r&   )rB   r!   rD   é   )r   r   rj   r   r   rk   r)   re   r*   Útest_PolyRing_mul   s
   Trq   c                     s  t dt\ } }}}tt fdd tt fdd   d¡ jks&J   d¡| | | | ks5J   d¡| | | |  | |  ||  ||  ||  ksTJ   d¡| | | | | |  | | |  || |  kssJ   d	¡| | | | ksJ d S )
Núx,y,z,tc                      rP   ©Néÿÿÿÿ©Úsymmetric_polyr)   rT   r)   r*   r+      rU   z.test_PolyRing_symmetric_poly.<locals>.<lambda>c                      rP   )NrD   ru   r)   rT   r)   r*   r+      rU   r   r"   rB   r!   rC   )r   r   r   rY   rv   Úone)r#   r$   r%   r-   r)   rT   r*   Útest_PolyRing_symmetric_poly   s   >>"rx   c                  C   s  t d\} }}}tdtt}t| d|  d|  ||jd|j  d|j  fks+J tdtt}t| d|  |d  ||jd|j  |jd  fksNJ t| d| |d g||jd|j |jd gfksiJ tdtt}td|t}t| d| |  d|d  |  | ||||jd|j	 |j  d|j	d  |j  fks£J tdtt}td|t}t| || d  |d | d  | ||||j|j	|j d  |j	d |j d  fksÝJ t
dtt}td|t}t| d| |  |d | d  | ||||jd|j |j	  |j	d |j d  fksJ tdtd }t|dd\}}|jt tdtd ¡ks9J |jdksAJ ||j |¡ksLJ d S )	Nrr   r    rB   r!   r-   T©Ú	extensionr)   )r   r   r   r   r   r#   r$   r%   r   r-   r   r   r3   Úalgebraic_fieldr2   Ú
from_sympy)r#   r$   r%   r-   r>   ÚRtÚrÚar)   r)   r*   Ú
test_sring   s(   ::6\\^"r   c                  C   s*   t dt\} }}}t|| | sJ d S r:   r;   r=   r)   r)   r*   Útest_PolyElement___hash__¹   s   r   c                  C   s  t dtt\} }}|| d| |  dkdksJ || d| |  d| | kdks-J d|| d| |  kdks=J d| | || d| |  kdksQJ || ||  dkdks_J d|| ||  kdksmJ || ||  dkdks{J d|| ||  kdksJ || ||  dkdksJ d|| ||  kdks¥J || d| |  dkdksµJ || d| |  d| | kdksÉJ d|| d| |  kdksÙJ d| | || d| |  kdksíJ || ||  dkdksûJ d|| ||  kdks
J || ||  dkdksJ d|| ||  kdks(J | jtdd  kr:| jks=J  J | jd  krL| jksOJ  J t dt\}}t d|\} }}|d	 | | |d	 kdksoJ |d	 | | |d
 kdksJ d S )Nr/   rD   rE   FTr   r"   r-   r!   rC   )r   r   r   rw   r   )r>   r#   r$   r}   r-   r)   r)   r*   Útest_PolyElement___eq__œ   s2    ( ( ( (*$"&r   c                  C   sÜ   t dt\} }}| d|  k r|d   k r|d k s!J  J | d|  kr7|d   kr7|d ks:J  J |d |d   krP|  krP| dksSJ  J |d |d   kri|  kri| dkslJ  J d S )Nr/   r"   rB   r!   )r   r   rW   r)   r)   r*   Útest_PolyElement__lt_le_gt_ge__â   s
   2226r   c                  C   s   t d\} }ttt|  t| |f t|  | fD ]}td|\}}td|d  d dks.J qtt|  fD ]}td|\}}td|d  d dksLJ q5d S )Núx, yr-   rB   r"   z
2*t**2 + 1zEX(2)*t**2 + EX(1))r   r   r   r   Ústrr   )r#   r$   Údomr>   r-   r)   r)   r*   Útest_PolyElement__str__ë   s   &þr   c                  C   sN   t dt\} }}}|| d|  }| ¡ }||ksJ d|d< ||ks%J d S )Nr    r!   rA   ©r"   r"   r"   )r   r   Úcopy)r>   r#   r$   r%   rM   Ú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sAJ  ¡ |ksIJ td\}}}	d|d  | || |	  d|	d   d }|kslJ  |||	¡|kswJ tt fdd t d	t\} | d ¡ dksJ d S )
Nr    r!   rB   rA   r"   zu,v,wc                      s
      ¡S rV   )Úas_exprr)   ©ÚXrM   r)   r*   r+     rU   z*test_PolyElement_as_expr.<locals>.<lambda>r&   )r   r   r   r   r   rY   )
r>   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r!  |¡s#J   ¡}||kr1  |¡s3J   |  | ¡}||| | krI  |¡sKJ   |  | |    ¡}||| | ||  | krm  |¡soJ   d |  | d | d   d ¡}||d | | |d |d   d kr  |¡sJ ttdg\}}| td¡}||d krº| |¡sŒJ tt fdd tt fd	d tt fd
d tdt\   d¡}|dkrî  |¡sðJ d S )Nr    r"   r!   rB   rA   r   c                      s      d ¡S ©Nr"   ©Ú	from_exprr)   ©r>   r#   r)   r*   r+   ,  ó    z,test_PolyElement_from_expr.<locals>.<lambda>c                      s      d ¡S ©NrB   r   r)   r   r)   r*   r+   -  r   c                      s      d td ¡S )NrA   rB   )r   r   r)   r   r)   r*   r+   .  ó    r&   )	r   r   r   r   Ú
is_elementr   r   r   rY   )r$   r%   r   r   r   rM   r~   rl   r)   r   r*   Útest_PolyElement_from_expr  s*   

**6
r   c                  C   sê  t dt\} }}}ttdksJ | d ¡ tu sJ | d ¡ dks%J |d  ¡ dks/J d|d  |  ¡ dks=J ||d  |  ¡ dksKJ |d |d  |  ¡ dks[J | d |¡tu sfJ | d |¡dksqJ |d  |¡dks|J d|d  |  |¡dksJ ||d  |  |¡dksJ d|d  |d  |  |¡dks­J | d |¡tu sžJ | d |¡dksÃJ |d  |¡dksÎJ d|d  |  |¡dksÝJ ||d  |  |¡dksìJ d|d  |d  |  |¡dksÿJ | d |¡tu sJ | d |¡dksJ |d  |¡dks#J d|d  |  |¡dks3J ||d  |  |¡dksCJ d|d  |d  |  |¡dksWJ t d	t\} | d ¡ tu shJ | d ¡ dkssJ d S )
Nr    z-infr   r"   rB   r!   rD   rA   r&   )r   r   r   ÚfloatÚdegreer=   r)   r)   r*   Útest_PolyElement_degree4  s:    &&  (r    c                  C   s>  t dt\} }}}| d ¡ tu sJ | d ¡ dksJ |d  ¡ dks'J d|d  |d |   ¡ dks9J ||d  |d |   ¡ dksKJ |d |d  |d |   ¡ dks_J | d |¡tu sjJ | d |¡dksuJ |d  |¡dksJ d|d  |d |   |¡dksJ ||d  |d |   |¡dksŠJ d|d  |d  |d |   |¡dksœJ | d |¡tu sÈJ | d |¡dksÓJ |d  |¡dksÞJ d|d  |d |   |¡dksñJ ||d  |d |   |¡dksJ d|d  |d  |d |   |¡dksJ | d |¡tu s)J | d |¡dks5J |d  |¡dksAJ d|d  |d |   |¡dksUJ ||d  |d |   |¡dksiJ d|d  |d  |d |   |¡dksJ t dt\} | d ¡ tu sJ | d ¡ dksJ d S )	Nr    r   r"   rB   r!   rD   rA   r&   )r   r   Útail_degreer   r=   r)   r)   r*   Útest_PolyElement_tail_degreeY  s8   $$(&&.&(0((0r¢   c                  C   ól   t dt\} }}}| d ¡ tttfksJ | d ¡ dks J |d | |d |d    ¡ dks4J d S )Nr    r   r"   rK   rB   r!   )r!   r"   rB   )r   r   Údegreesr   r=   r)   r)   r*   Útest_PolyElement_degrees|  ó   ,r¥   c                  C   r£   )Nr    r   r"   rK   rB   r!   rF   )r   r   Útail_degreesr   r=   r)   r)   r*   Útest_PolyElement_tail_degrees  rŠ   rš   c                     sL  t dtt\} dd      dd   d    d¡dks)J tt fdd   ¡d	ks;J   ¡d	ksDJ   ¡d	ksMJ   d  ¡dksZJ     ¡d
ksgJ   d ¡dksrJ tt fdd tt fdd tt fdd t dt\} | d d¡dks€J d S )Nr    r!   rB   rA   é   r"   c                      rP   rQ   ©Úcoeffr)   ©rM   r)   r*   r+     rU   z(test_PolyElement_coeff.<locals>.<lambda>r   rt   c                      s      dd   ¡S )Nr!   rB   rª   r)   ©rM   r#   r$   r)   r*   r+     r   c                      s         ¡S rV   rª   r)   ©rM   r#   r$   r%   r)   r*   r+     r.   c                      s      dd  ¡S )NrA   r!   rª   r)   )rM   r%   r)   r*   r+     ó    r&   )r   r   r   r«   r   rY   rT   r)   r®   r*   Útest_PolyElement_coeff  s   ,r°   c                  C   sz   t dtt\} }}| djtdksJ tdd| jtddks#J tdd| | tdd|  jtddks;J d S ©Nr/   r   r"   rB   rC   )r   r   r   ÚLCrW   r)   r)   r*   Útest_PolyElement_LC   s   4r³   c                  C   sj   t dtt\} }}| djdksJ tdd| jdksJ tdd| | tdd|  jdks3J d S )	Nr/   r   ©r   r   r"   rB   ©r"   r   rC   ©r"   r"   )r   r   r   ÚLMrW   r)   r)   r*   Útest_PolyElement_LMŠ  s   .rž   c                  C   s¶   t dtt\} }}| djdtdfksJ tdd| jdtddfks'J tdd| | tdd|  jdtddfksAJ t d	t\} | djd
ksPJ | djdksYJ d S )Nr/   r   rŽ   r"   rB   rµ   rC   r¶   r&   )r)   r   )r)   r"   )r   r   r   ÚLTr   rW   r)   r)   r*   Útest_PolyElement_LT¬  s   "4rº   c                  C   st   t dtt\} }}| d ¡ dksJ tdd|  ¡ |ks J tdd| | tdd|   ¡ || ks8J d S r±   )r   r   r   Úleading_monomrW   r)   r)   r*   Útest_PolyElement_leading_monom¶  s   4rŒ   c                  C   s   t dtt\} }}| d ¡ dksJ tdd|  ¡ tdd| ks%J tdd| | tdd|   ¡ tdd| | ksBJ d S r±   )r   r   r   Úleading_termrW   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s5J t d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krh| d¡  krhddgkskJ  J | t¡| d¡  kr~ddgksJ  J t d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krŽ| d¡  krŽddgks·J  J | t¡| d¡  krÊddgksÍJ  J t dt\} | d ¡ dgksÞJ d S )Nr    rB   r!   rC   rD   rF   r"   ©r   r!   r   ©r   r   rC   r/   rA   r   )ra   rB   )©r"   rA   r"   r   r&   )r)   r!   )r   r   Útermsr   r   r   )r>   r#   r$   r%   rÂ   rM   r)   r)   r*   Útest_PolyElement_termsÂ  s   (0 :, :,rÃ   c                  C   s~  t dt\} }}}|d d |d d  |d d   ¡ }|g d¢ks%J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  krX| d	¡  krXd
dgks[J  J | t¡| d¡  krndd
gksqJ  J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  kr€| d¡  kr€dd
gks§J  J | t¡| d	¡  krºd
dgksœJ  J d S )Nr    rB   r!   rC   rD   )rF   r¿   rÀ   r/   rA   r   ra   rÁ   r   )r   r   Úmonomsr   r   r   )r>   r#   r$   r%   rÄ   rM   r)   r)   r*   Útest_PolyElement_monomsÖ  s   ( :, :0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/J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  krb| d	¡  krbddgkseJ  J | t¡| d
¡  krxddgks{J  J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  kr®| d
¡  kr®ddgks±J  J | t¡| d	¡  krÄddgksÇJ  J d S )Nr    rB   r!   rC   rD   r"   r/   rA   r   r   )r   r   Úcoeffsr   r   r   )r>   r#   r$   r%   rÆ   rM   r)   r)   r*   Útest_PolyElement_coeffsç  s   ($ :, :0rÇ   c                     sÜ  t dt\}  t dt\}}t d|\}}}td|  dddks'J t t   kr=ddks@J  J t|  t|    krZddks]J  J t|  | t| |    kr|ddd	ksJ  J t  t    krd
d iksJ  J t |  t|     kr»ddksŸJ  J t |  | t| |     krádddksäJ  J 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r5ddks8J  J t dt\}}}ttt| |  t| | tt   kritdttdkslJ  J d S )Nr-   úu,vr    r!   r"   ©rH   ©r   r"   r   ©rH   rK   ©rG   rK   ©rG   rJ   rK   rH   ©rG   rH   ©rG   rJ   rH   c                      ó     S rV   r)   r)   ©r-   r#   r)   r*   r+     ó    z*test_PolyElement___add__.<locals>.<lambda>c                      ó     S rV   r)   r)   rÑ   r)   r*   r+     rÒ   c                      rÐ   rV   r)   r)   ©r-   Úur)   r*   r+   	  rÒ   c                      rÓ   rV   r)   r)   rÔ   r)   r*   r+   
  rÒ   ©r   rK   ©r   r   Údictr   Ú	TypeErrorr
   r   r   ©r}   ÚRuvÚvÚRxyzr$   r%   ÚFuvr)   ©r-   rÕ   r#   r*   Útest_PolyElement___add__ø  s&   2:D<BL6Zrà   c                     sü  t dt\}  t dt\}}t d|\}}}td|  dddks'J t  t   kr?d dksBJ  J t |  t|    kr^d d	ksaJ  J t |  | t| |    krdd d
ksJ  J t   t    kr¢d d iks¥J  J t  |  t|     krÅd dksÈJ  J t  |  | t| |     krídd dksðJ  J 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rCd dksFJ  J t dt\}}}ttt | |  t| | tt   krytdtt dks|J  J d S )Nr-   rÈ   r    r!   r"   éýÿÿÿrÉ   rË   rÌ   rÍ   rH   rÎ   rÏ   c                      ó     S rV   r)   r)   rÑ   r)   r*   r+   $  rÒ   z*test_PolyElement___sub__.<locals>.<lambda>c                      ó     S rV   r)   r)   rÑ   r)   r*   r+   %  rÒ   c                      râ   rV   r)   r)   rÔ   r)   r*   r+   &  rÒ   c                      rã   rV   r)   r)   rÔ   r)   r*   r+   '  rÒ   rÖ   r×   rÚ   r)   rß   r*   Útest_PolyElement___sub__  s&   6>H@FP:^rä   c                     sp  t dt\}  t dt\}}t d|\}}t t   kr-diks0J  J td   td     krPd ddksSJ  J td   td     krsd ddksvJ  J td   td     krd ddksJ  J t d  t d    kr¹d ddksŒJ  J td  |  t| d     kràd ddksãJ  J td  |  td |     kr	d ddksJ  J td  |  t| d     kr2d ddks5J  J t | d  t|  d    kr[d ddks^J  J td |   t| d     krd ddksJ  J td |   td|      kr­d ddks°J  J td |   t| d     krÖd ddksÙJ  J t|  d  t|  d    krÿd ddksJ  J td	 |   t| d	     kr+d	 d	 dd
ks.J  J 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J  J t dt\}}ttt |  t|  tt   kr³dttiks¶J  J d S )Nr-   rÈ   r    rH   rB   r"   )rH   rJ   )rG   rJ   r!   )rH   rÊ   rJ   c                      ó      S rV   r)   r)   ©r-   r#   r%   r)   r*   r+   J  r,   z*test_PolyElement___mul__.<locals>.<lambda>c                      ó      S rV   r)   r)   ræ   r)   r*   r+   K  r,   c                      rå   rV   r)   r)   ©r-   rÕ   r%   r)   r*   r+   L  r,   c                      rç   rV   r)   r)   rè   r)   r*   r+   M  r,   r   r×   )r}   rÛ   rÜ   rÝ   r$   rÞ   r)   )r-   rÕ   r#   r%   r*   Útest_PolyElement___mul__2  s4   0FFFFNRRRRRRRX4Tré   c            	         sà  t dt\} }}dd  d d d d ksJ dd  d d d ks+J d d  ¡ks8J d   ¡d ksGJ ttfdd d   d ks^J ttfdd d d  d ¡d	ksvJ d  d  d   d ¡  krksJ  J t dt\} }}td d |d d  |d d
   ¡ d	ksžJ t dt\} }}td d |d d  |d d
   ¡ dksÛJ t dt\}t dt\}}t d|\}}}td    ddksJ 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r&||fks)J  J   ¡    kr;|ks>J  J   ¡|ksHJ tt fd#d tt fd$d dd  d   d
 d
d  d  d  | d	 }}  ¡t   kr||fksJ  J   ¡    krš|ks«J  J   ¡|ksµJ tt fd%d tt fd&d d
d  dd   dd   d  d d d  d  d
d  d'  d( d }}  ¡t   kr||fksJ  J   ¡    kr'|ks*J  J   ¡|ks4J tt fd)d 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s J  J   ¡    kr²|ksµJ  J   ¡|ks¿J tt fd/d tt fd0d t dt\} d d d d  d d | d
}}  ¡t   kr||fks
J  J   ¡    kr|ksJ  J   ¡|ks)J tt fd1d tt fd2d dd  d   d
 d
d  d  d  tdd
 td3d4 td5d4 td6d4 }}  ¡t   kr||fksJ  J   ¡    kr|ksJ  J   ¡|ksšJ tt fd7d tt fd8d t dt\} }d |d  |  | | d	}}  ¡t   krï||fksòJ  J   ¡    kr|ksJ  J   ¡|ksJ   ¡    kr#|ks&J  J d |d  |  | d|d  }}  ¡t   krS||fksVJ  J   ¡    krh|kskJ  J   ¡|ksuJ tt fd9d tt fd:d d |d   |   | d|d  }}  ¡t   krž||fks»J  J   ¡    krÍ|ksÐJ  J   ¡|ksÚJ tt fd;d tt fd<d d |d  d d|   | d	 }}  ¡t   kr||fksJ  J   ¡    kr0|ks3J  J   ¡|ks=J tt fd=d tt fd>d t dt\} }d |d  |  | | d	}}  ¡t   kr||fksJ  J   ¡    kr|ksJ  J   ¡|ksŠJ   ¡    krž|ks»J  J d |d  |  | d|d  }}  ¡t   krè||fksëJ  J   ¡    krý|ks J  J   ¡|ks
J tt fd?d tt fd@d d |d   |   | d|d  }}  ¡t   krM||fksPJ  J   ¡    krb|kseJ  J   ¡|ksoJ tt fdAd tt fdBd d |d  d d|   d |d  d|d  }}  ¡t   krž||fks»J  J   ¡    krÍ|ksÐJ  J   ¡|ksÚJ tt fdCd tt fdDd d S )ENr    rB   rC   r!   r"   c                      s    d d   S ©NrB   r"   r)   r)   re   r)   r*   r+   a  rX   z.test_PolyElement___truediv__.<locals>.<lambda>c                      s    d d d   S rê   r)   r)   re   r)   r*   r+   c  r.   r   rD   r-   rÈ   rË   c                      s     d     S r   r)   r)   )rÕ   r#   r)   r*   r+   t  r.   c                      ó     S rV   r)   r)   rÑ   r)   r*   r+   v  rÒ   c                      ó     S rV   r)   r)   rÑ   r)   r*   r+   w  rÒ   c                      rë   rV   r)   r)   rÔ   r)   r*   r+   x  rÒ   c                      rì   rV   r)   r)   rÔ   r)   r*   r+   y  rÒ   r#   c                      ó
      ¡S rV   ©Údivr)   ©rM   r   r)   r*   r+   ~  rU   c                      ó
   t  S rV   ©Údivmodr)   rð   r)   r*   r+     rU   c                      rí   rV   ©Úremr)   rð   r)   r*   r+     rU   c                      ó     S rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   ©Úquor)   rð   r)   r*   r+     rU   c                      rë   rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   ©Úexquor)   rð   r)   r*   r+     rU   r/   c                      rí   rV   rî   r)   rð   r)   r*   r+     rU   c                      rñ   rV   rò   r)   rð   r)   r*   r+     rU   c                      rí   rV   rô   r)   rð   r)   r*   r+     rU   c                      rö   rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   r÷   r)   rð   r)   r*   r+     rU   c                      rë   rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+     rU   c                      rë   rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+     rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   ¢  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   £  rU   rE   é   c                      rë   rV   r)   r)   rð   r)   r*   r+   «  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   ¬  rU   é	   é   é,   é6   c                      rë   rV   r)   r)   rð   r)   r*   r+   Ž  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   µ  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   ¿  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   À  rU   ri   é   é4   éo   c                      rë   rV   r)   r)   rð   r)   r*   r+   È  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   É  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   Û  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   Ü  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   ä  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   å  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   í  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   î  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+      rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+     rU   c                      rë   rV   r)   r)   rð   r)   r*   r+   	  rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+   
  rU   c                      rë   rV   r)   r)   rð   r)   r*   r+     rÒ   c                      rí   rV   rù   r)   rð   r)   r*   r+     rU   )r   r   rø   r   r   r1   rÂ   r   rØ   rÙ   ÚZeroDivisionErrorrï   ró   rõ   rú   )	r>   r$   r%   r}   rÛ   rÜ   rÝ   Úqr~   r)   )rM   r   r-   rÕ   r#   r*   Útest_PolyElement___truediv__X  s  $ >44(0*60*F"0*N20*0*620*0**0*0*"0*0**0*0*"0*r  c                     s  t dtt\} }d| d   d dksJ  d  ksJ tt fdd  d   d¡  krI  d¡  krId|d  d	|  d
 ksLJ  J  d   d¡  krt  d¡  krtd|d  d|d   d|  d kswJ  J  d   d¡  kr¥  d¡  kr¥d|d  d|d   d|d   d|  d ksšJ  J  d   d¡  krÜ  d¡  krÜd|d  d|d   d|d   d|d   d|  d ksßJ  J 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rd  d¡  krd|ksgJ  J 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ÌJ  J d S )+Nr#   rB   r!   r   r"   c                      s    d S rs   r)   r)   r¬   r)   r*   r+     rÒ   z*test_PolyElement___pow__.<locals>.<lambda>rC   é   rü   rn   é$   rÿ   é   é   é`   éØ   éQ   rD   é    éð   iÐ  i8  i*  éó   r    rE   r-   i@Ôÿÿi,
  é1   l      M¿l     3uri   l     L]² l    @LV é
   l    Aìecl    ÇF	l   `V i°
IiÁöW )r   r   r   r   rY   Ú_pow_genericÚ_pow_multinomial)r>   r#   r$   r%   r   r-   r)   r¬   r*   Útest_PolyElement___pow__  s:   JVbn(<"
ÿ
ÿ
ÿ
þ
þþ@r  c            	      C   s6  t dtt\} }|d d|d   d }|d }|d d|  d }d}| |g¡|g|fks1J t dtt\} }|d d|  d }| | d	g¡|gd
fksRJ t dtt\} }|d d|  d }| | dg¡td	d|d  | d	 gd
fks~J t dtt\} }}d|d  | d| |  d|  d|  d }| | dg¡d|d  | ||  d|  | d gd
fksÀJ | d| g¡d|d  | d	 gd| d fksÛJ |d	 }|d	 }| |g¡d
g|fksðJ ||d  d	 }|| d	 |d	 g}|dg}d}| |¡||fksJ |d | ||d   |d  }|| d	 |d d	 g}|| d	g}|| d	 }| |¡||fksHJ |d d	 || d	 g}|d	 |g}d| d	 }| |¡||fkslJ t dt\} | d | d¡dksJ t dt\} | d | d¡tddd
fksJ d S )Nr#   r!   r  rB   é*   rü   r  éÿÿÿr"   r   r/   rC   rn   rt   r&   )r   r!   )r   r   r   rï   r   )	r>   r#   rM   r   r  r~   r$   ÚGÚQr)   r)   r*   Útest_PolyElement_div0  sJ   40B6 *r  c                  C   s~  t dtt\} }|d d|d   d }|d }d}| |g¡| |g¡d   kr/|ks2J  J t dtt\} }}d	|d  | d| |  d	|  d|  d
 }| | dg¡| | dg¡d   krldksoJ  J | d| g¡| d| g¡d   krd	| d
 ksJ  J |d }|d }| |g¡| |g¡d   kr¬|ks¯J  J ||d  d }|| d |d g}d}| |¡| |¡d   krÖ|ksÙJ  J |d | ||d   |d  }|| d |d d g}|| d }| |¡| |¡d   kr|ksJ  J |d d || d g}d| d }| |¡| |¡d   kr:|ks=J  J d S )Nr#   r!   r  rB   r  r  r"   r/   rC   rn   r   )r   r   r   rõ   rï   )r>   r#   rM   r   r~   r$   r  r)   r)   r*   Útest_PolyElement_remk  s.   008@0, 04r  c                  C   s  t dt\} }d|d   |d d|d   d ¡dd| |d d|  d gfks,J t dt\} }}| d | d¡dddgfksEJ | d | d¡dddgfksVJ | d | d¡dddgfksgJ | d d| ¡ddd| gfkszJ d|  d| ¡dd| d| gfksJ | d d|d  ¡d	dd| gfks€J d|d   d|d  ¡d	d| d| gfksœJ |d |d  |d |  d }|d |d
  |d |  d }| |¡d|d |d  ||  d ||d
  ||  d gfksJ d S )Nr#   rB   rC   r"   )rB   r/   r   r¶   )r"   rB   r!   )rB   r"   )r   r   Údeflate©r>   r#   r$   rM   r   r)   r)   r*   Útest_PolyElement_deflate  s   J"""&**2  Lr  c            	         sî  t dt\} }}| d ¡ tddfksJ | d ¡ tddfks$J | tdd ¡ dks1J | tdd ¡ dks>J d|d  |  ¡ dd|d  | fksTJ |d tdd|   ¡ dd|d  | fksmJ 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suJ d S )9Nr/   r"   rA   r!   )r!   rA   rB   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 rE   l   Ù[_+Jê[ŒkíPuä=\L=ªIÅGS{,ð²c.\) o l    P=Kzzdüaê$\0ci}=$?&ø@#uTn0Q rD   l   CNºVO&ilo?¥uTvB¯p5ºy\
$l©$ÖaPÑ-NCR l    Hi)Sbx|5eS6O--:QRbV.r?1lW rC   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^@*ß> rn   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_denomsÚset_ring)rc   rM   ©ÚrZZr)   r*   rf   Ø  s    z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   r  r   r   )	r>   r#   r$   ÚrQQr-   r   ÚTrl   r  r)   r   r*   Útest_PolyElement_clear_denoms¥  s   ,2ÿþýüûúùÿþýüûúùø
ÿ
þ
ý
ü
û
úùø
	
ÿ
þ
ý
ü
û
úùø÷ r$  c            
      C   st  t dt\} }}| d| d}}| |¡dksJ | d| d}}| |¡dks,J | d| d}}| |¡dks>J | d| d}}| |¡dksPJ | dd| d	 }}| |¡d| d	 dd
fkskJ d| d	 | d}}| |¡d| d	 d
dfksJ | d| d}}| |¡dksJ | d| d}}| |¡dksªJ | d| d}}| |¡dksŒJ | d| d}}| |¡dksÎJ |d d|  d
 | d
}}| |¡d
|d d|  d
 d
fksñJ |d d|  d
 | d}}| |¡d
|d d|  d
 dfksJ d|d  d	|  d | d}}| |¡d|d d|  d
 d
fks;J | dd|d  d	|  d }}| |¡dd
|d d|  d
 fksaJ d|d  d	|  d |d
 }}| |¡|d
 d| d d
fksJ |d
 d|d  d	|  d }}| |¡|d
 d
d| d fks©J t dt\} }}}}|d d|  d
 d| d }}| |¡|d
 |d
 dfksÕJ |d |d  d|d  |  |d  ||  | |d d|  d
 }}|d
 |d | |d  | |d
 }}}	| |¡|||	fksJ | |¡||	|fks*J t dt\} }}td
d|d  | td
d }td
d| td
d }|d
 }| |¡||td
dfksbJ | |¡|td
d|fksrJ t dt\} }}d| |d  d| |  d|  }d|d  }d| }| |¡||| || fks§J | |¡||| || fksžJ d S )Nr/   r   rK   rB   )rB   r"   r   éþÿÿÿ)rB   rt   r   )rB   r   rt   rC   r"   )rB   r"   r"   )rB   rt   r"   )rB   r"   rt   )rB   rt   rt   rr   gÍÌÌÌÌÌ @r!   g      ð?)r   r   Ú	cofactorsr   r   )
r>   r#   r$   rM   r   r%   r-   ÚhÚ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/J d S )Nr/   r"   rB   )r   r   Úgcdr  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s5J |  |¡| |fksBJ | | ¡| |fksOJ t dt\} }}tdd|d  |d  tdd|  }tdd|d  tdd|  }d| d }d}| |¡||fksJ |  |¡| |fksJ | | ¡| |fksšJ tdt\}}t d|\}}	|d  d d |	 }|	d |d d d  }| |¡|d  d |	 d|	d  d|d   d fksëJ d S )Nr/   rB   r!   rC   r"   r#   r-   )r   r   Úcancelr   r
   )
r>   r#   r$   rM   r   rl   r  ÚFxr}   r-   r)   r)   r*   Útest_PolyElement_cancel3  s*    ( @r/  c                  C   sh   t dt\} }}| d ¡ dksJ | d ¡ dksJ |d d|d   d|  d  ¡ dks2J d S )Nr/   r   r"   r!   rC   rB   )r   r   Úmax_normrW   r)   r)   r*   Útest_PolyElement_max_normT  ó   0r1  c                  C   sh   t dt\} }}| d ¡ dksJ | d ¡ dksJ |d d|d   d|  d  ¡ dks2J d S )Nr/   r   r"   r!   rC   rB   r  )r   r   Úl1_normrW   r)   r)   r*   Útest_PolyElement_l1_norm\  r2  r4  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J | |d ¡tdd|d d  |d d  |d d  |d
 d  d|d d  |d d	  |d d   ksÀJ | |d
 ¡tdd|d d  |d d  |d d	  |d
  ksäJ d S )Nzx:11i   rD   r   rn   r"   rE   rC   r!   r  rB   i 	  rA   r	  i`  rh   é@  )r   r   Údiff)r>   r   rM   r)   r)   r*   Útest_PolyElement_diffd  s
   |tLr7  c                     sT  t dt\} }d| d   ddksJ  ddksJ 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sSJ  dddks\J |  |¡} d|jd d ksnJ  d|jd d ks{J 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   rC   c                      ó     S rV   r)   r)   r¬   r)   r*   r+   t  ó    z+test_PolyElement___call__.<locals>.<lambda>c                      s
    ddS )Nr   r"   r)   r)   r¬   r)   r*   r+   u  rU   c                      s    t ddS ©Nr"   rA   ©r   r)   r¬   r)   r*   r+   w  r   r/   rB   rA   é5   c                      r8  rV   r)   r)   r¬   r)   r*   r+     r9  c                      s    dddS )Nr   r"   rB   r)   r)   r¬   r)   r*   r+     r,   c                      s    dt ddS r:  r;  r)   r¬   r)   r*   r+     rX   c                      s    t dddS r:  r;  r)   r¬   r)   r*   r+     rX   c                      s    t ddt ddS r:  r;  r)   r¬   r)   r*   r+     r   )r   r   r   rY   r   rS   r$   )r>   r#   r$   ÚRyr)   r¬   r*   Útest_PolyElement___call__m  s&   
r>  c                     sÒ  t dt\} d dd   d  d    d¡}|dkr&t|tr(J tt fdd t dt\} } d d d   d   d    d¡}|dkrc|  ¡ |¡seJ   dfdfg¡}|dkr}|  ¡ |¡sJ   d¡}|dkr|  ¡ |¡sJ   dfdfg¡}|dkr«|  ¡ |¡s­J   dfdf|dfg¡}|dkrÄt|trÆJ tt fd	d tt fd
d tt fdd d S )Nr#   r!   rC   rB   r   c                      ó      tdd¡S r:  ©Úevaluater   r)   ©rM   r#   r)   r*   r+     r¯   z+test_PolyElement_evaluate.<locals>.<lambda>r    c                      ó      dftddfg¡S r:  r@  r)   r­   r)   r*   r+   £  ó    c                      ó      tddfdfg¡S r:  r@  r)   r­   r)   r*   r+   €  rD  c                      ó"      tddftddfg¡S r:  r@  r)   r­   r)   r*   r+   ¥  ó   " )	r   r   rA  Ú
isinstancer	   r   r   rS   r   ©r>   r~   r%   r)   r­   r*   Útest_PolyElement_evaluate  s(    ,rJ  c                     s*  t dt\} d dd   d  d    d¡}|dkr&|  |¡s(J tt fdd t dt\} }d dd   d  d    d¡}|dkrZ|  |¡s\J   dfdfg¡}|dkrp|  |¡srJ tt fd	d tt fd
d tt fdd d S )Nr#   r!   rC   rB   r   c                      r?  r:  ©Úsubsr   r)   rB  r)   r*   r+   ®  r¯   z'test_PolyElement_subs.<locals>.<lambda>r    c                      rC  r:  rK  r)   r­   r)   r*   r+   ž  rD  c                      rE  r:  rK  r)   r­   r)   r*   r+   ¹  rD  c                      rF  r:  rK  r)   r­   r)   r*   r+   º  rG  )r   r   rL  r   r   r   rI  r)   r­   r*   Útest_PolyElement_subs§  s     rM  c                  C   s~  t dt\} }}|d |d  }| ¡ \}}}|dksJ | |¡| |ks(J |d |d  }| ¡ \}}}|dks=J | |¡| |ksHJ || d }| ¡ \}}}|dks[J | |¡| |ksfJ |d }| ¡ \}}}|dkswJ | |¡| |ksJ |  d¡}| ¡ \}}}|dksJ | |¡| |ksJ td\} }| ¡ \}}}|dks²J | |¡| |ksœJ d S )Nr/   rB   r   rA   r!   )r   r   Ú
symmetrizeÚcomposer   r   )r>   r#   r$   rM   Úsymrõ   Úmr)   r)   r*   Útest_PolyElement_symmetrizeŒ  s2   
rR  c                     sÒ  t dt\} d dd   d  d    d¡}|dkr&|  |¡s(J   ¡ ks2J   d ¡d dd   dd   d ksNJ tt fdd t d	t\} }}d dd   d  d    d¡}|dkr|  |¡sJ   df|dfg¡}|dkr|  |¡sJ d dd   d | |  d  ||d  d
 ¡}||d  d
 d d||d  d
 d   d||d  d
  | |  d }||krå|  |¡sçJ d S )Nr#   r!   rC   rB   r   rE   c                      r?  r:  )rO  r   r)   rB  r)   r*   r+   í  r¯   z*test_PolyElement_compose.<locals>.<lambda>r    r"   )r   r   rO  r   r   r   )r>   r~   r$   r%   r  r)   rB  r*   Útest_PolyElement_composeã  s     8 <LrS  c                     sL  t dt\}  }}   jdksJ    jdksJ    jdks$J    jdks-J    d jdks8J    d jdksCJ    d jdksNJ    d jdksYJ  jdks`J  jdksgJ  jdksnJ  jdksuJ  | jdks~J  | jdksJ  | jdksJ  | jdksJ d  jdks¢J d  jdks«J d  jdksŽJ d  jdksœJ d  d jdksÈJ d  d jdksÓJ d  d jdksÞJ d  d jdkséJ | djdu sòJ | djdu sûJ | djdu sJ | djdu sJ  d jdu sJ d  d jdu s%J d  d j	du s1J d  d j	du s=J  | | d j
du sKJ  | | d j
du sYJ  | | d jdu sgJ  | | d jdu suJ  d jdu sJ  d d jdu sJ  d   d jdu sJ  d d   d jdu s©J t d	td
\}}d| d jdu sŸJ d|d  d|  d jdu sÐJ t dt\}}|d |d  |d  |d  |d  |d  }|jdu s÷J |d jdu sJ tt fdd t dt\} | djdu sJ | djdu s$J d S )Nr    FTr"   r!   r   rB   rC   r-   é   rA   rÕ   r	  ri   r  rn   rE   c                      s    j S rV   )Úis_cyclotomicr)   re   r)   r*   r+   ?  r9  z&test_PolyElement_is_.<locals>.<lambda>r&   )r   r   Úis_generatorÚ	is_groundÚis_monomialÚis_termÚis_zeroÚis_oneÚis_monicÚis_primitiveÚ	is_linearÚis_quadraticÚis_squarefreeÚis_irreducibler   r   rU  r   r   )r>   r$   r%   Ú_r-   rÕ   rM   r)   re   r*   Útest_PolyElement_is_û  sh    $0rc  c                     sš   t dt\}  }| d d¡j tdttksJ | d d¡ d¡j tdttks,J |  | d d¡ d¡ d¡¡du s@J ttfdd tt fd	d d S )
Nr    r"   r   rO   r%   Fc                      s      d¡  d¡  d¡S r'   rR   r)   rZ   r)   r*   r+   L  r   z'test_PolyElement_drop.<locals>.<lambda>c                      rP   r'   rR   r)   re   r)   r*   r+   M  rU   )r   r   rS   r   r   r   r   rY   )r>   r$   r)   )r#   r%   r*   Útest_PolyElement_dropE  s    &(rd  c                  C   sF  t dt\} }}}d|d  d|d   d|d  |  d }| dd¡d| d ks-J | |d¡dks7J d|d  d| |d  |  d	|d   d	| |d   }| |d¡d|d  | d	|d   kskJ | |d¡d| | d	 ks{J d|d  d| |  d }| |d¡| d
ksJ | |d¡| d
ks¡J d S )Nzx, y, zrC   r!   rD   rB   rE   rA   r"   r  r   )r   r   Ú	coeff_wrt)r>   r#   r$   r%   Úpr)   r)   r*   Útest_PolyElement_coeff_wrtO  s   ,<, rg  c                     s<  t dt\ } }| d | |  d|  d } |¡d| d ks$J | d d d|  d } |¡ || ¡  krCdksFJ  J  |d¡ dksRJ | | d|   d | | } |¡|d  d|  d kssJ  |d¡ ||¡  kr| d  d|   d ksJ  J tt fdd	 d S )
Nr   rB   éüÿÿÿrC   r"   rû   r   c                      ó      d¡S r'   ©Úpremr)   ©r>   rM   r)   r*   r+   l  r   z'test_PolyElement_prem.<locals>.<lambda>)r   r   rk  r   r  ©r#   r$   r   r)   rl  r*   Útest_PolyElement_prem^  s   *$>rn  c                     s  t dt\ } }| d d| d   d| d   d| d  d } |¡ || ¡  krCd| d  d|   d d	|  d
 fksFJ  J | d |d  | | } |¡ |d¡  kri| | dfkslJ  J | | d|   d | | } |¡|d |d  d|  d fksJ  ||¡ |d¡  kr±| d | d  d|   d fksŽJ  J  d |¡dks¿J tt fdd d S )Nr/   rC   rD   r!   rA   rB   rû   é   iÄÿÿÿéB   r   r"   rŽ   c                      ri  r'   rj  r)   rl  r)   r*   r+   |  r   z'test_PolyElement_pdiv.<locals>.<lambda>)r   r   Úpdivr   r  rm  r)   rl  r*   Útest_PolyElement_pdivn  s   2J2,Frr  c                  C   s   t dt\} }}|d d|d  |  d|d   |d d|  }}| |¡| ||¡  kr;|d d|  ks>J  J | ||¡d|d  d|  d ksRJ |d |d  |d |d  }}| |¡| |d¡  kr{|d |d  ks~J  J d S )Nr   rC   rB   rn   r   )r   r   Úpquor  r)   r)   r*   Útest_PolyElement_pquo~  s   66(":rt  c                     sÂ   t dt\} }}|d |d  ||    ¡  |¡  kr)|| ks,J  J   |¡  d¡  krC|| d ksFJ  J |d d|  d |d  tt fdd d S )Nr   rB   r"   r!   rE   c                      rí   rV   )Úpexquor)   rð   r)   r*   r+     rU   z)test_PolyElement_pexquo.<locals>.<lambda>)r   r   ru  r   r   rW   r)   rð   r*   Útest_PolyElement_pexquo  s   .4rv  c                  C   sr   t dt\} }d| |d d }}|d tdd d}}}| |¡||fks+J | |¡|||fks7J d S )Nr#   rB   r	  r  r"   )r   r   Ú
half_gcdexÚgcdex)rb  r#   rM   r   Úsr-   r'  r)   r)   r*   Útest_PolyElement_gcdex  s
   rz  c                  C   s  t dt\} }}|d | ||  || }}|d |d  }| |¡|||gks+J | |d¡| ||¡  krA|||gksDJ  J | ||¡|d | ||  || |d |d  gksaJ d| | |d d|  | }}| |¡|d | d|  d| | |d d|  gksJ | d|d |d  }}| |¡|d |d  dgks®J |d | ||  | d}}| |¡|d | ||  dgksÐJ | d| d}}| |¡ddgksäJ |d | |d | }}| |¡|d | |d | gksJ d S )Nr   rB   r!   r   r  r"   )r   r   Úsubresultants)r>   r#   r$   rM   r   r'  r)   r)   r*   Útest_PolyElement_subresultants  s    2:"<"&,r|  c                  C   sL   t dt\} }|d d|  d |d d d}}}| |¡|ks$J d S )Nr#   rB   r"   r   )r   r   Ú	resultant©rb  r#   rM   r   r'  r)   r)   r*   Útest_PolyElement_resultant¶  s   (r  c                  C   sŠ   t dt\} }|d d|d   d|  d d}}| ¡ |ks"J t dt\}}}}t d|\} }||d  ||  | |d d| |  }}| ¡ |ksQJ d S )	Nr#   r!   rB   rü   é   ipÒÿÿza,b,crC   )r   r   Údiscriminant)rb  r#   rM   r   rl   r   ÚbÚcr)   r)   r*   Útest_PolyElement_discriminantŒ  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sKJ | ¡ ||gksUJ d S )Nr#   r  rû   r  é   rn   iô  rE   éq  rC   rB   r!   rü   rD   )r   r   rO  Ú	decomposer~  r)   r)   r*   Útest_PolyElement_decomposeÉ  s   Pr  c                     sÂ   t dt\}   d d   d  d¡ d d   d ks J  d d   d  dg¡ d d   d ks:J t dt\}    ddg¡ d d  ksUJ tt fdd d S )Nr#   rB   r"   r   c                      s       d¡S r   )Úshiftr)   ©r#   r$   r)   r*   r+   Û  r   z(test_PolyElement_shift.<locals>.<lambda>)r   r   r  Ú
shift_listr   r   )rb  r>   r)   r  r*   Útest_PolyElement_shiftÓ  s   24&r  c               	   C   sf  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s±J d S ) Nr-   r#   i   i	=  rn   rD   i   r  rC   r  r!   é   rB   r"   i$ô  éd   é@   r   r	  éÈ   r
  i N  rü   é   i÷ÿÿÿr  i È¯ l      ir5  i  Šl      ^_)r
   r   r   Ústurm)rl   r-   rb  r#   rM   r)   r)   r*   Útest_PolyElement_sturmÝ  s   |2,>ür  c                  C   sÌ   t dt\} }|d d|d   |d  d|d   }| ¡ |df|d dfgks+J ||d d  |d d  |d d  |d  }| ¡ |d d|  d df|d d|  d df|dfgksdJ d S )Nr#   rD   rB   rC   r!   r"   )r   r   Úgff_list)rb  r#   rM   r)   r)   r*   Útest_PolyElement_gff_listê  s
   ( 0Fr  c                  C   sd   t } t  td¡}|j}td| \}}}td|\}}}|| |  ¡ |d |d  d ks0J d S )NrB   r/   )r   r{   r   Úunitr   Únorm)ÚkÚKÚsqrt2rb  r   r   r#   r$   r)   r)   r*   Útest_PolyElement_normó  s   ,r  c                  C   sà   t dt td¡\} }|  ¡ j}|d d  ¡ dg|d dtd |  d |d d|d   d fks7J t dt td¡\} }|  ¡ j}|d d  ¡ dg|d dtd |  d |d d|d   d fksnJ d S )Nr#   r!   rB   r"   rC   r  )r   r   r{   r   Ú	to_groundr#   Úsqf_norm)r>   r#   r   r)   r)   r*   Útest_PolyElement_sqf_normü  s   
L
Pr  c                  C   s   t dt\} }|d |d  |d  d }|d d|d   d|  d }|d }|d |d  | d }| ¡ |ks=J | ¡ d|df|dfgfksMJ d S )Nr#   rD   r!   rB   r"   rC   )r   r   Úsqf_partÚsqf_list)rb  r#   rM   r   r'  rf  r)   r)   r*   Útest_PolyElement_sqf_list  s    $r¡  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]J |jdksdJ g }| D ]}| |j |¡¡ qh||kszJ d S )	Nr!   r	  r  rn   r"   Try   r)   )	r   r   r   r3   r   r{   r2   Úappendr|   )Úitemsr>   r   Ú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s8J d S )Nr#   rD   r!   rB   r"   )r   r   Úfactor_list)rb  r#   rM   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s4J d S )Nr#   rB   rE   rD   rC   r!   r"   rh   rû   r	  r  )r   r   r  )r>   r#   rf  r)   r)   r*   Útest_issue_21410(  s   $6rª  c                  C   sN   t d} t|  }|d}| ¡ \}}|dksJ ||ksJ |jdu s%J d S )Nr#   r   F)r   r   Ú	primitiver]  )r#   r>   Ú	zero_polyÚcontÚprimr)   r)   r*   Útest_zero_polynomial_primitive.  s   r¯  N)uÚ__doc__Ú	functoolsr   Úoperatorr   r   Úsympy.polys.ringsr   r   r   r   r	   Úsympy.polys.fieldsr
   r   Úsympy.polys.densebasicr   Úsympy.polys.domainsr   r   r   r   r   Úsympy.polys.orderingsr   r   Úsympy.polys.polyerrorsr   r   r   r   Úsympy.testing.pytestr   Ú
sympy.corer   r   Úsympy.core.singletonr   Úsympy.core.numbersr   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.miscellaneousr   r9   r?   r@   rN   r[   r\   r_   rm   rq   rx   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/  r1  r4  r7  r>  rJ  rM  rR  rS  rc  rd  rg  rn  rr  rt  rv  rz  r|  r  r  r  r  r  r  r  r  r¡  rŠ  r©  rª  r¯  r)   r)   r)   r*   Ú<module>   s²    "

%	
%#
& >;&5Q!	'J


	

		
