o
    *Î®c1©  ã                   @   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#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 Z.dd Z/dd Z0dd Z1d d! Z2d"d# Z3d$d% Z4d&d' Z5d(d) Z6d*d+ Z7d,d- Z8d.d/ Z9d0d1 Z:d2d3 Z;d4d5 Z<d6d7 Z=d8d9 Z>d:d; Z?d<d= Z@d>d? ZAd@dA ZBdBdC ZCdDdE ZDdFdG ZEdHdI ZFdJdK ZGdLdM ZHdNdO ZIdPdQ ZJdRdS ZKdTdU ZLdVdW ZMdXdY ZNdZd[ ZOd\d] ZPd^d_ ZQd`da ZRdbdc ZSddde ZTdfdg ZUdhdi ZVdjdk ZWdldm ZXdndo ZYdpdq ZZdrds Z[dtdu Z\dvdw Z]dxdy Z^dzd{ Z_d|d} Z`d~d Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgd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)ÚooÚ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(   úC/tmp/pip-target-vg8gfxp4/lib/python/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    "r8   c                  C   s"   t dt\} }}}t| sJ d S ©Nr   ©r   r   Úhash©ÚRr"   r#   r$   r(   r(   r)   Útest_PolyRing___hash__6   s   r>   c                   C   sD  t dtd t dtd ksJ t dtd t dtd u s J t dtd t dtd ks0J t dtd t dtd us@J t dtd t dtd ksPJ t dtd t dtd us`J t dtd t dtd kspJ t dtd t dtd usJ t dtd t dtd ksJ t dtd t dtd us J 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!   )rB   rC   rD   )©rA   r   r   ©r!   r!   r   ©r!   r   r   ©r   r   rA   ©r   r   r!   ©r   r   r   ))rE   r!   )rF   rA   )rG   r    )rH   rB   )rI   rC   )rJ   rD   r%   )r(   r@   )r   r   Úring_new)r=   r"   r#   r$   Úfr(   r(   r)   Útest_PolyRing_ring_newJ   s   *4* rM   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!   rA   r"   c                      ó
      d¡S ©Nr    ©Údropr(   ©r=   r(   r)   r*   j   ó   
 z$test_PolyRing_drop.<locals>.<lambda>c                      s      ¡  ¡S ©NrQ   r(   ©r=   r"   r#   r(   r)   r*   k   ó    )r   r   rR   r   r   r   Ú
ValueError©r$   r(   rV   r)   Útest_PolyRing_dropY   s     rZ   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!   rN   rA   r$   r    )r   r   r   r   r<   r(   r(   r)   Útest_PolyRing___getitem__m   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_multivariaterS   r(   r(   r)   Útest_PolyRing_is_u   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 ©rA   r    r(   ©Ú.0Úi©r"   r(   r)   Ú
<listcomp>   ó     z%test_PolyRing_add.<locals>.<listcomp>rB   rA   é   r%   )rA   rC   r@   é   )r   r   Úranger   r   ©r=   ÚFr(   rd   r)   Útest_PolyRing_add   s
   4rl   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_   r`   r(   ra   rd   r(   r)   re      rf   z%test_PolyRing_mul.<locals>.<listcomp>rB   é   rg   rD   éÎ   iè  rA   i±  r%   )rA   r    rC   é   )r   r   ri   r   r   rj   r(   rd   r)   Útest_PolyRing_mul   s
   Trp   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 )	Núx,y,z,tr   rA   r    r,   T)Ú	extensionr(   )r   r   r   r   r   r"   r#   r$   r   r,   r   r   r2   Úalgebraic_fieldr1   Ú
from_sympy)r"   r#   r$   r,   r=   ÚRtÚrÚar(   r(   r)   Ú
test_sring   s(   ::6\\^"rx   c                  C   s*   t dt\} }}}t|| | sJ d S r9   r:   r<   r(   r(   r)   Útest_PolyElement___hash__µ   s   ry   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.   rC   rD   FTr   r!   r,   r    rB   )r   r   r   Úoner   )r=   r"   r#   ru   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!   rA   r    )r   r   rV   r(   r(   r)   Útest_PolyElement__lt_le_gt_ge__Þ   s
   2226r|   c                  C   sN   t dt\} }}}|| d|  }| ¡ }||ksJ d|d< ||ks%J d S )Nr   r    r@   ©r!   r!   r!   )r   r   Úcopy)r=   r"   r#   r$   rL   Ú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    rA   r@   r!   c                      s
      ¡S rU   )Úas_exprr(   ©ÚXrL   r(   r)   r*     rT   z*test_PolyElement_as_expr.<locals>.<lambda>r%   )r   r   r   r   r   rX   )r=   r"   r#   r$   ÚYÚZr   r(   r   r)   Útest_PolyElement_as_exprñ   s   ,,,r   c                     sò  t d\} }t| |ft\ }}}  d¡}|dkr"t| js$J   ¡}||kr3t| js5J   |  | ¡}||| | krLt| jsNJ   |  | |    ¡}||| | ||  | krqt| jssJ   d |  | d | d   d ¡}||d | | |d |d   d kr¢t| js€J ttdg\}}| td¡}||d krÀt||jsÂJ 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÷J d S )Nr   r!   r    rA   r@   r   c                      s      d ¡S )Nr!   ©Ú	from_exprr(   ©r=   r"   r(   r)   r*     ó    z,test_PolyElement_from_expr.<locals>.<lambda>c                      s      d ¡S ©NrA   r   r(   r   r(   r)   r*     r   c                      s      d td ¡S )Nr@   rA   )r   r   r(   r   r(   r)   r*     ó    r%   )
r   r   r   r   Ú
isinstanceÚdtyper   r   r   rX   )r#   r$   r   r   r   rL   rv   rk   r(   r   r)   Útest_PolyElement_from_expr  s*   

 ,*8
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ks6J ||d  |  ¡ dksDJ |d |d  |  ¡ dksTJ | d |¡t u s`J | d |¡dkskJ |d  |¡dksvJ 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s/J ||d  |  |¡dks?J d|d  |d  |  |¡dksSJ t dt\} | d ¡ t u seJ | d ¡ dkspJ d S ©	Nr   r   r!   rA   r    rC   r@   r%   )r   r   Údegreer   r<   r(   r(   r)   Útest_PolyElement_degree%  s8    &&  (r   c                  C   sH  t dt\} }}}| 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sLJ |d |d  |d |   ¡ dks`J | d |¡t u slJ | d |¡dkswJ |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s9J |d  |¡dksEJ d|d  |d |   |¡dksYJ ||d  |d |   |¡dksmJ d|d  |d  |d |   |¡dksJ t dt\} | d ¡ t u sJ | d ¡ dks¢J d S r   )r   r   Útail_degreer   r<   r(   r(   r)   Útest_PolyElement_tail_degreeH  s8   $$(&&.&(0((0r   c                  C   ór   t dt\} }}}| d ¡ t t t fksJ | d ¡ dks#J |d | |d |d    ¡ dks7J d S )Nr   r   r!   rJ   rA   r    )r    r!   rA   )r   r   Údegreesr   r<   r(   r(   r)   Útest_PolyElement_degreesk  ó    ,r   c                  C   r   )Nr   r   r!   rJ   rA   r    rE   )r   r   Útail_degreesr   r<   r(   r(   r)   Útest_PolyElement_tail_degreesr  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    rA   r@   é   r!   c                      rO   rP   ©Úcoeffr(   ©rL   r(   r)   r*   ~  rT   z(test_PolyElement_coeff.<locals>.<lambda>r   éÿÿÿÿc                      s      dd   ¡S )Nr    rA   r   r(   ©rL   r"   r#   r(   r)   r*     r   c                      s         ¡S rU   r   r(   ©rL   r"   r#   r$   r(   r)   r*     r-   c                      s      dd  ¡S )Nr@   r    r   r(   )rL   r$   r(   r)   r*     ó    r%   )r   r   r   r   r   rX   rS   r(   r¡   r)   Útest_PolyElement_coeffy  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!   rA   rB   )r   r   r   ÚLCrV   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!   rA   ©r!   r   rB   ©r!   r!   )r   r   r   ÚLMrV   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!   rA   rš   rB   r©   r%   )r(   r   )r(   r!   )r   r   r   ÚLTr   rV   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_monomrV   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_termrV   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   rA   r    rB   rC   rE   r!   ©r   r    r   ©r   r   rB   r.   r@   r   )r`   rA   )©r!   r@   r!   r   r%   )r(   r    )r   r   Útermsr   r   r   )r=   r"   r#   r$   rµ   rL   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   rA   r    rB   rC   )rE   r²   r³   r.   r@   r   r`   rŽ   r   )r   r   Úmonomsr   r   r   )r=   r"   r#   r$   r·   rL   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   rA   r    rB   rC   r!   r.   r@   r   r   )r   r   Úcoeffsr   r   r   )r=   r"   r#   r$   r¹   rL   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!   ©rG   ©r   r!   r   ©rG   rJ   ©rF   rJ   ©rF   rI   rJ   rG   ©rF   rG   ©rF   rI   rG   c                      ó     S rU   r(   r(   ©r,   r"   r(   r)   r*   ö  ó    z*test_PolyElement___add__.<locals>.<lambda>c                      ó     S rU   r(   r(   rÄ   r(   r)   r*   ÷  rÅ   c                      rÃ   rU   r(   r(   ©r,   Úur(   r)   r*   ø  rÅ   c                      rÆ   rU   r(   r(   rÇ   r(   r)   r*   ù  rÅ   ©r}   rJ   ©r   r   Údictr   Ú	TypeErrorr
   r   r   ©ru   Ú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À   rG   rÁ   rÂ   c                      ó     S rU   r(   r(   rÄ   r(   r)   r*     rÅ   z*test_PolyElement___sub__.<locals>.<lambda>c                      ó     S rU   r(   r(   rÄ   r(   r)   r*     rÅ   c                      rÕ   rU   r(   r(   rÇ   r(   r)   r*     rÅ   c                      rÖ   rU   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   rG   rA   r!   )rG   rI   )rF   rI   r    )rG   rœ   rI   c                      ó      S rU   r(   r(   ©r,   r"   r$   r(   r)   r*   9  r+   z*test_PolyElement___mul__.<locals>.<lambda>c                      ó      S rU   r(   r(   rÙ   r(   r)   r*   :  r+   c                      rØ   rU   r(   r(   ©r,   rÈ   r$   r(   r)   r*   ;  r+   c                      rÚ   rU   r(   r(   rÛ   r(   r)   r*   <  r+   r}   rÊ   )ru   rÎ   rÏ   rÐ   r#   rÑ   r(   )r,   rÈ   r"   r$   r)   Útest_PolyElement___mul__!  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 d d  d  ksWJ d   d kseJ d d d  d d d  ks{J d d  d ¡dksJ 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rO|ksRJ  J   ¡    krd|ksgJ  J 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rÒ|ksÕJ  J 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rR|ksUJ  J 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rÞ|ksáJ  J tt fd+d t dt\} d d d d  d d | d}}  
¡t   kr||fks"J  J   ¡    kr4|ks7J  J   ¡    krI|ksLJ  J 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¢J  J   ¡    krŽ|ks·J  J   ¡    krÉ|ksÌJ  J tt fd1d t dt\} }d |d  |  | | d}}  
¡t   kr	||fksJ  J   ¡    kr|ks!J  J   ¡    kr3|ks6J  J   ¡|ks@J d |d  |  | d|d  }}  
¡t   krm||fkspJ  J   ¡    kr|ksJ  J   ¡    kr|ksJ  J tt fd2d d |d   |   | d|d  }}  
¡t   krÓ||fksÖJ  J   ¡    krè|ksëJ  J   ¡    krý|ks J  J tt fd3d d |d  d d|   | d }}  
¡t   kr7||fks:J  J   ¡    krL|ksOJ  J   ¡    kra|ksdJ  J tt fd4d t dt\} }d |d  |  | | d}}  
¡t   kr¡||fks€J  J   ¡    kr¶|ks¹J  J   ¡    krË|ksÎJ  J   ¡|ksØJ d |d  |  | d|d  }}  
¡t   kr||fksJ  J   ¡    kr|ksJ  J   ¡    kr/|ks2J  J tt fd5d d |d   |   | d|d  }}  
¡t   krk||fksnJ  J   ¡    kr|ksJ  J   ¡    kr|ksJ  J tt fd6d d |d  d d|   d |d  d|d  }}  
¡t   kr×||fksÚJ  J   ¡    krì|ksïJ  J   ¡    kr|ksJ  J tt fd7d d S )8Nr   rA   rB   r    r!   r   r   rC   r,   r»   rŸ   c                      s     d     S r   r(   r(   )rÈ   r"   r(   r)   r*   c  r-   z.test_PolyElement___truediv__.<locals>.<lambda>c                      ó     S rU   r(   r(   rÄ   r(   r)   r*   e  rÅ   c                      ó     S rU   r(   r(   rÄ   r(   r)   r*   f  rÅ   c                      rÝ   rU   r(   r(   rÇ   r(   r)   r*   g  rÅ   c                      rÞ   rU   r(   r(   rÇ   r(   r)   r*   h  rÅ   r"   c                      ó
      ¡S rU   ©Údivr(   ©rL   r   r(   r)   r*   m  rT   c                      ó
   t  S rU   ©Údivmodr(   râ   r(   r)   r*   n  rT   c                      rß   rU   ©Úremr(   râ   r(   r)   r*   o  rT   c                      ó     S rU   r(   r(   râ   r(   r)   r*   p  rÅ   c                      rß   rU   ©Úquor(   râ   r(   r)   r*   q  rT   c                      rÝ   rU   r(   r(   râ   r(   r)   r*   r  rÅ   c                      rß   rU   ©Úexquor(   râ   r(   r)   r*   s  rT   r.   c                      rß   rU   rà   r(   râ   r(   r)   r*   x  rT   c                      rã   rU   rä   r(   râ   r(   r)   r*   y  rT   c                      rß   rU   ræ   r(   râ   r(   r)   r*   z  rT   c                      rè   rU   r(   r(   râ   r(   r)   r*   {  rÅ   c                      rß   rU   ré   r(   râ   r(   r)   r*   |  rT   c                      rÝ   rU   r(   r(   râ   r(   r)   r*   }  rÅ   c                      rß   rU   rë   r(   râ   r(   r)   r*   ~  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*     rT   c                      rß   rU   rë   r(   râ   r(   r)   r*     rT   rD   é   c                      rß   rU   rë   r(   râ   r(   r)   r*     rT   é	   é   é,   é6   c                      rß   rU   rë   r(   râ   r(   r)   r*      rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   ª  rT   rh   é   é4   éo   c                      rß   rU   rë   r(   râ   r(   r)   r*   ²  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   Ä  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   Ì  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   Ô  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   æ  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   î  rT   c                      rß   rU   rë   r(   râ   r(   r)   r*   ö  rT   )r   r   rê   r0   rµ   r   rË   r   rÌ   ÚZeroDivisionErrorrá   rå   rç   r   rì   )	r=   r#   r$   ru   rÎ   rÏ   rÐ   Úqrv   r(   )rL   r   r,   rÈ   r"   r)   Útest_PolyElement___truediv__G  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s1J  d   d¡  krS  d¡  krSd	|d  d
|  d ksVJ  J  d   d¡  kr~  d¡  kr~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 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rn  d¡  krn|ksqJ  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"   rA   r    r   r!   c                      s    d S )Nr   r(   r(   r   r(   r)   r*   þ  rÅ   z*test_PolyElement___pow__.<locals>.<lambda>r   rB   é   rî   rm   é$   rñ   é   é   é`   éØ   éQ   rC   é    éð   iÐ  i8  i*  éó   r   rD   r,   i@Ôÿÿi,
  é1   l      M¿l     3urh   l     L]² l    @LV é
   l    Aìecl    ÇF	l   `V i°
IiÁöW )r   r   r   r   rX   Ú_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ø   rA   é*   rî   rú   éÿÿÿr!   r   r.   rB   rm   r   r%   )r   r    )r   r   r   rá   r   )	r=   r"   rL   r   rö   rv   r#   ÚGÚQr(   r(   r)   Útest_PolyElement_div  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ø   rA   r  r  r!   r.   rB   rm   r   )r   r   r   rç   rá   )r=   r"   rL   r   rv   r#   r	  r(   r(   r)   Útest_PolyElement_remP  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"   rA   rB   r!   )rA   r.   r   r©   )r!   rA   r    )rA   r!   )r   r   Údeflate©r=   r"   r#   rL   r   r(   r(   r)   Útest_PolyElement_deflatev  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!   r@   r    )r    r@   rA   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 rD   l   Ù[_+Jê[ŒkíPuä=\L=ªIÅGS{,ð²c.\) o l    P=Kzzdüaê$\0ci}=$?&ø@#uTn0Q rC   l   CNºVO&ilo?¥uTvB¯p5ºy\
$l©$ÖaPÑ-NCR l    Hi)Sbx|5eS6O--:QRbV.r?1lW rB   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^@*ß> rm   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)rb   rL   ©ÚrZZr(   r)   re   œ  s    z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   r  r   r   )	r=   r"   r#   ÚrQQr,   r   ÚTrk   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   rJ   rA   )rA   r!   r   éþÿÿÿ)rA   r   r   )rA   r   r   rB   r!   )rA   r!   r!   )rA   r   r!   )rA   r!   r   )rA   r   r   rq   gÍÌÌÌÌÌ @r    g      ð?)r   r   Ú	cofactorsr   r   )
r=   r"   r#   rL   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!   rA   )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.   rA   r    rB   r!   r"   r,   )r   r   Úcancelr   r
   )
r=   r"   r#   rL   r   rk   r	  ÚFxru   r,   r(   r(   r)   Útest_PolyElement_cancel  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    rB   rA   )r   r   Úmax_normrV   r(   r(   r)   Útest_PolyElement_max_norm9  ó   0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    rB   rA   r  )r   r   Úl1_normrV   r(   r(   r)   Útest_PolyElement_l1_normA  r$  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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   rC   r   rm   r!   rD   rB   r    r  rA   i 	  r@   rû   i`  rg   é@  )r   r   Údiff)r=   r   rL   r(   r(   r)   Útest_PolyElement_diffI  s
   |tLr)  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   rB   c                      ó     S rU   r(   r(   r   r(   r)   r*   Y  ó    z+test_PolyElement___call__.<locals>.<lambda>c                      s
    ddS )Nr   r!   r(   r(   r   r(   r)   r*   Z  rT   c                      s    t ddS ©Nr!   r@   ©r   r(   r   r(   r)   r*   \  r   r.   rA   r@   é5   c                      r*  rU   r(   r(   r   r(   r)   r*   i  r+  c                      s    dddS )Nr   r!   rA   r(   r(   r   r(   r)   r*   j  r+   c                      s    dt ddS r,  r-  r(   r   r(   r)   r*   l  rW   c                      s    t dddS r,  r-  r(   r   r(   r)   r*   m  rW   c                      s    t ddt ddS r,  r-  r(   r   r(   r)   r*   n  r   )r   r   r   rX   r   rR   r#   )r=   r"   r#   ÚRyr(   r   r)   Útest_PolyElement___call__R  s&   
r0  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rdt||  ¡jsfJ   dfdfg¡}|dkrt||  ¡jsJ   d¡}|dkrt||  ¡jsJ   dfdfg¡}|dkr¯t||  ¡j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    rB   rA   r   c                      ó      tdd¡S r,  ©Úevaluater   r(   ©rL   r"   r(   r)   r*   w  r¢   z+test_PolyElement_evaluate.<locals>.<lambda>r   c                      ó      dftddfg¡S r,  r2  r(   r    r(   r)   r*     ó    c                      ó      tddfdfg¡S r,  r2  r(   r    r(   r)   r*     r6  c                      ó"      tddftddfg¡S r,  r2  r(   r    r(   r)   r*     ó   " )	r   r   r3  r   r	   r   r   rR   r   ©r=   rv   r$   r(   r    r)   Útest_PolyElement_evaluatep  s(    ,  r;  c                     s0  t dt\} d dd   d  d    d¡}|dkr't|| js)J tt fdd t dt\} }d dd   d  d    d¡}|dkr\t|| js^J   dfdfg¡}|dkrst|| jsuJ tt fd	d tt fd
d tt fdd d S )Nr"   r    rB   rA   r   c                      r1  r,  ©Úsubsr   r(   r4  r(   r)   r*     r¢   z'test_PolyElement_subs.<locals>.<lambda>r   c                      r5  r,  r<  r(   r    r(   r)   r*     r6  c                      r7  r,  r<  r(   r    r(   r)   r*     r6  c                      r8  r,  r<  r(   r    r(   r)   r*     r9  )r   r   r=  r   r   r   r   r:  r(   r    r)   Útest_PolyElement_subs  s     r>  c                     sÚ  t dt\} d dd   d  d    d¡}|dkr't|| js)J   ¡ ks3J   d ¡d dd   dd   d ksOJ tt fdd t d	t\} }}d dd   d  d    d¡}|dkrt|| jsJ   df|dfg¡}|dkrt|| jsJ d dd   d | |  d  ||d  d
 ¡}||d  d
 d d||d  d
 d   d||d  d
  | |  d }||krét|| jsëJ d S )Nr"   r    rB   rA   r   rD   c                      r1  r,  )Úcomposer   r(   r4  r(   r)   r*   «  r¢   z*test_PolyElement_compose.<locals>.<lambda>r   r!   )r   r   r?  r   r   r   r   )r=   rv   r#   r$   rö   r(   r4  r)   Útest_PolyElement_compose¡  s     8 <Lr@  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   rA   rB   r,   é   r@   rÈ   rû   rh   r  rm   rD   c                      s    j S rU   )Úis_cyclotomicr(   rd   r(   r)   r*   ý  r+  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   rB  r   r   )r=   r#   r$   Ú_r,   rÈ   rL   r(   rd   r)   Útest_PolyElement_is_¹  sh    $0rP  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 t| d d¡ d¡ d¡| jdu sAJ ttfdd tt fd	d d S )
Nr   r!   r   rN   r$   Fc                      s      d¡  d¡  d¡S r&   rQ   r(   rY   r(   r)   r*   
  r   z'test_PolyElement_drop.<locals>.<lambda>c                      rO   r&   rQ   r(   rd   r(   r)   r*     rT   )	r   r   rR   r   r   r   r   r   rX   )r=   r#   r(   )r"   r$   r)   Útest_PolyElement_drop  s    &*rQ  c                  C   s   t dt\} }}|d |d  || }}|| d}}| |¡||fks'J | |¡|ks0J | |¡|ks9J | |¡|ksBJ d S )Nr.   rA   r   )r   r   ÚpdivÚpremÚpquoÚpexquo)rO  r"   r#   rL   r   rö   rv   r(   r(   r)   Útest_PolyElement_pdiv  s   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"   rA   rû   rÿ   r!   )r   r   Ú
half_gcdexÚgcdex)rO  r"   rL   r   Úsr,   r  r(   r(   r)   Útest_PolyElement_gcdex  s
   rZ  c                  C   sZ   t dt\} }|d d|  d |d d d| d }}}| |¡|||gks+J d S ©Nr"   rA   r!   )r   r   Úsubresultants©rO  r"   rL   r   r  r(   r(   r)   Útest_PolyElement_subresultants!  s   0r^  c                  C   sL   t dt\} }|d d|  d |d d d}}}| |¡|ks$J d S )Nr"   rA   r!   r   )r   r   Ú	resultantr]  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    rA   rî   é   ipÒÿÿza,b,crB   )r   r   Údiscriminant)rO  r"   rL   r   rk   rw   ÚbÚcr(   r(   r)   Útest_PolyElement_discriminant-  s   &.re  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  é   rm   iô  rD   éq  rB   rA   r    rî   rC   )r   r   r?  Ú	decomposer]  r(   r(   r)   Útest_PolyElement_decompose:  s   Pri  c                  C   sD   t dt\} }|d d|  d  d¡|d d|  d ks J d S r[  )r   r   Úshift)rO  r"   r(   r(   r)   Útest_PolyElement_shiftD  s   6rk  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	=  rm   rC   i   rg  rB   rÿ   r    é   rA   r!   i$ô  éd   é@   rò   rû   éÈ   rü   i N  rî   é   i÷ÿÿÿrø   i È¯ l      ir'  i  Šl      ^_)r
   r   r   Ústurm)rk   r,   rO  r"   rL   r(   r(   r)   Útest_PolyElement_sturmH  s   |2,>ürr  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"   rC   rA   rB   r    r!   )r   r   Úgff_list)rO  r"   rL   r(   r(   r)   Útest_PolyElement_gff_listU  s
   ( 0Frt  c                  C   sÜ   t dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fks6J t dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fkslJ d S )Nr"   r    rA   r!   rB   r  )r   r   rs   r   Ú	to_groundr"   Úsqf_norm)r=   r"   r   r(   r(   r)   Útest_PolyElement_sqf_norm^  s   
J
Nrw  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"   rC   r    rA   r!   rB   )r   r   Úsqf_partÚsqf_list)rO  r"   rL   r   r  Úpr(   r(   r)   Útest_PolyElement_sqf_listi  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"   rC   r    rA   r!   )r   r   Úfactor_list)rO  r"   rL   rÈ   rÏ   Úwr(   r(   r)   Útest_PolyElement_factor_listt  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"   rA   rD   rC   rB   r    r!   rg   rí   rû   rø   )r   r   r  )r=   r"   rz  r(   r(   r)   Útest_issue_21410  s   $6r  N)hÚ__doc__Ú	functoolsr   Úoperatorr   r   Úsympy.polys.ringsr   r   r   r   r	   Úsympy.polys.fieldsr
   r   Ú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.numbersr   r   Ú&sympy.functions.elementary.exponentialr   Ú(sympy.functions.elementary.miscellaneousr   r8   r>   r?   rM   rZ   r[   r^   rl   rp   rx   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)  r0  r;  r>  r@  rP  rQ  rV  rZ  r^  r`  re  ri  rk  rr  rt  rw  r{  r~  r  r(   r(   r(   r)   Ú<module>   s    "

%	
##
& 2;&5Q!	J
	
	