a
    ¬<b1©  ã                   @   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sFJ ttdttjdks`J tt| ||fttjdksJ ttdttjdksJ ttg ttjdksŽJ ttdd	  td
t| tj	t| ksàJ 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sLJ td
t|j
tksdJ 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 )NZxyztúx,y,zé   é   )ÚxÚyÚzÚ r   c                   S   s   t dttS ©Nr   ©r   r   r   © r'   r'   úl/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/polys/tests/test_rings.pyÚ<lambda>   ó    z(test_PolyRing___init__.<locals>.<lambda>r!   zZZ[t]Útc                   S   s   t dt dtttS )Nr!   r&   r'   r'   r'   r(   r)   $   r*   r   úx,y)Úmapr   Úlenr   r   r   Úgensr   r   ÚdomainÚorderr!   r"   )r!   r"   r#   r+   Z_lexZR1ZR2ZR3r'   r'   r(   Útest_PolyRing___init__   s2     $r2   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    r8   c                   C   sJ  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s`J 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 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s$J t dtd t dtd usFJ d S )Nr   r   r,   )r   r   r   r'   r'   r'   r(   Útest_PolyRing___eq__:   s           ""r9   c               	   C   s  t dt\} }}}|  d¡| dks(J |  d| | | ¡d| | | ksRJ |d d| |  d|  d|d   d|  d }|  dggdgdggg d	¢gg¡|ks°J |  ddddddd
¡|ksÐJ |  g d¢¡|ksæJ t dt\} |  dg¡| dksJ d S )Nr   é   é   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;   )rA   r   )rB   r<   )rC   r=   )rD   r>   r$   )r'   r:   )r   r   Zring_new)r7   r!   r"   r#   Úfr'   r'   r(   Útest_PolyRing_ring_newJ   s    *4* rF   c                     sZ  t dt\ }   ¡tdttks,J   ¡tdttksFJ   | ¡tdttks`J   d¡tdttkszJ   d¡ d¡tdttksJ   d¡ d¡ d¡tksžJ   d¡tdttksÒJ   d¡tdttksìJ   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    r;   r!   c                      s
      d¡S ©Nr   ©Údropr'   ©r7   r'   r(   r)   j   r*   z$test_PolyRing_drop.<locals>.<lambda>c                      s      ¡  ¡S ©NrI   r'   ©r7   r!   r"   r'   r(   r)   k   r*   )r   r   rJ   r   r   r   Ú
ValueError©r#   r'   rM   r(   Útest_PolyRing_dropY   s     " rP   c                  C   s~   t dt\} }}}| dd  tdttks.J | dd  tdttksJJ | dd  tdttksfJ | dd  tkszJ d S )Nr   r   r    rG   r;   r#   r   )r   r   r   r   r6   r'   r'   r(   Útest_PolyRing___getitem__m   s
    rQ   c                  C   s|   t dtt} | jdu sJ | jdu s(J t dtt} | jdu sBJ | jdu sPJ t dtt} | jdu sjJ | jdu sxJ d S )Nr!   TFr   r$   )r   r   r   Zis_univariateZis_multivariaterK   r'   r'   r(   Útest_PolyRing_is_u   s    rR   c                     s|   t dt\}   fddtdD }|  |¡tt|  krPd d  d ksVn J t dt\} |  g d¢¡d	ksxJ d S )
Nr!   c                    s    g | ]} d  d |  d qS ©r;   r   r'   ©Ú.0Úi©r!   r'   r(   Ú
<listcomp>   r*   z%test_PolyRing_add.<locals>.<listcomp>r<   r;   é   r$   )r;   r=   r:   é   )r   r   Úranger   r   ©r7   ÚFr'   rW   r(   Útest_PolyRing_add   s
    2r^   c                     s   t dt\}   fddtdD }|  |¡tt|  krp d d d   d d   d	 d
   d ksvn J t dt\} |  g d¢¡dksJ d S )Nr!   c                    s    g | ]} d  d |  d qS rS   r'   rT   rW   r'   r(   rX      r*   z%test_PolyRing_mul.<locals>.<listcomp>r<   é   rY   r>   éÎ   iè  r;   i±  r$   )r;   r   r=   é   )r   r   r[   r   r   r\   r'   rW   r(   Útest_PolyRing_mul   s
    Rrb   c                  C   s   t d\} }}}tdtt}t| d|  d|  ||jd|j  d|j  fksVJ tdtt}t| d|  |d  ||jd|j  |jd  fksJ t| d| |d g||jd|j |jd gfksÒJ tdtt}td|t}t| d| |  d|d  |  | ||||jd|j	 |j  d|j	d  |j  fksHJ 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s4J tdtd }t|dd\}}|jt tdtd ¡ksvJ |jdksJ ||j |¡ksJ d S )	Núx,y,z,tr   r;   r   r+   T)Ú	extensionr'   )r   r   r   r   r   r!   r"   r#   r   r+   r   r   r0   Úalgebraic_fieldr/   Z
from_sympy)r!   r"   r#   r+   r7   ÚRtÚrÚar'   r'   r(   Ú
test_sring   s(    ::6^^^"ri   c                  C   s*   t dt\} }}}t|| | s&J d S r3   r4   r6   r'   r'   r(   Útest_PolyElement___hash__µ   s    rj   c                  C   s  t dtt\} }}|| d| |  dkdks2J || d| |  d| | kdksZJ d|| d| |  kdkszJ 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 || ||  dkdks2J d|| ||  kdksPJ || d| |  dkdksrJ || 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sBJ d|| ||  kdks`J | jtdd  kr| jksn J | jd  kr€| jksªn J t dt\}}t d|\} }}|d	 | | |d	 kdksêJ |d	 | | |d
 kdksJ d S )Nr,   r=   r>   FTr   r    r+   r   r<   )r   r   r   Zoner   )r7   r!   r"   rf   r+   r'   r'   r(   Útest_PolyElement___eq__¹   s2     ( ("*"*(""rk   c                  C   sÔ   t dt\} }}| d|  k r:|d   k r:|d k s@n J | d|  krj|d   krj|d kspn J |d |d   kr|  kr| dks n J |d |d   krÊ|  krÊ| dksÐn J d S )Nr,   r    r;   r   )r   r   rM   r'   r'   r(   Útest_PolyElement__lt_le_gt_ge__Þ   s
    000rl   c                  C   sN   t dt\} }}}|| d|  }| ¡ }||ks6J d|d< ||ksJJ d S )Nr   r   r:   ©r    r    r    )r   r   Úcopy)r7   r!   r"   r#   rE   Úgr'   r'   r(   Útest_PolyElement_copyç   s    rp   c                     s(  t dt\} }}}d|d  | || |  d|d   d | j\ }}d d  |  | |  d|d   d }|ksJ  ¡ |ksJ td\ }}d d  |  | |  d|d   d }|ksØJ   ||¡|ksîJ tt fdd t dt\} | d ¡ dks$J d S )	Nr   r   r;   r:   r    c                      s
      ¡S rL   )Úas_exprr'   ©ÚXrE   r'   r(   r)     r*   z*test_PolyElement_as_expr.<locals>.<lambda>r$   )r   r   r   rq   r   rN   )r7   r!   r"   r#   ÚYÚZro   r'   rr   r(   Útest_PolyElement_as_exprñ   s    ,,,rv   c                     sþ  t d\} }t| |ft\ }}}  d¡}|dkrDt| jsHJ   ¡}||krft| jsjJ   |  | ¡}||| | krt| jsJ   |  | |    ¡}||| | ||  | krât| jsæJ   d |  | d | d   d ¡}||d | | |d |d   d krHt| jsLJ 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   r;   r:   r   c                      s      d ¡S )Nr    ©Ú	from_exprr'   ©r7   r!   r'   r(   r)     r*   z,test_PolyElement_from_expr.<locals>.<lambda>c                      s      d ¡S ©Nr;   rw   r'   ry   r'   r(   r)     r*   c                      s      d td ¡S )Nr:   r;   )rx   r   r'   ry   r'   r(   r)     r*   r$   )
r   r   r   rx   Ú
isinstanceÚdtyper   r   r   rN   )r"   r#   rs   rt   ru   rE   rg   r]   r'   ry   r(   Útest_PolyElement_from_expr  s*    

 ,*< 
r}   c                  C   sö  t dt\} }}}| d ¡ t u s(J | d ¡ dks<J |d  ¡ dksPJ d|d  |  ¡ dkslJ ||d  |  ¡ dksJ |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sTJ | d |¡t u snJ | 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s8J |d  |¡dksPJ d|d  |  |¡dkspJ ||d  |  |¡dksJ 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    r;   r   r=   r:   r$   )r   r   Zdegreer   r6   r'   r'   r(   Útest_PolyElement_degree%  s8       (  (  (r   c                  C   sX  t dt\} }}}| d ¡ t u s(J | d ¡ dks<J |d  ¡ dksPJ d|d  |d |   ¡ dkstJ ||d  |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 |   |¡dks.J ||d  |d |   |¡dksVJ 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sPJ | d |¡t u sjJ | 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 t dt\} | d ¡ t u s>J | d ¡ dksTJ d S r~   )r   r   Ztail_degreer   r6   r'   r'   r(   Útest_PolyElement_tail_degreeH  s8    $$(((0((0((0r   c                  C   sr   t dt\} }}}| d ¡ t t t fks2J | d ¡ dksFJ |d | |d |d    ¡ dksnJ d S )Nr   r   r    rD   r;   r   )r   r    r;   )r   r   Údegreesr   r6   r'   r'   r(   Útest_PolyElement_degreesk  s     r   c                  C   sr   t dt\} }}}| d ¡ t t t fks2J | d ¡ dksFJ |d | |d |d    ¡ dksnJ d S )Nr   r   r    rD   r;   r   r?   )r   r   Ztail_degreesr   r6   r'   r'   r(   Útest_PolyElement_tail_degreesr  s     r   c                     sN  t dtt\} dd      dd   d    d¡dksRJ tt fdd   ¡d	ksvJ   ¡d	ksJ   ¡d	ksJ   d  ¡dksŽJ     ¡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ksJJ d S )Nr   r   r;   r:   é   r    c                      s
      d¡S rH   ©Úcoeffr'   ©rE   r'   r(   r)   ~  r*   z(test_PolyElement_coeff.<locals>.<lambda>r   éÿÿÿÿc                      s      dd   ¡S )Nr   r;   r   r'   ©rE   r!   r"   r'   r(   r)     r*   c                      s         ¡S rL   r   r'   ©rE   r!   r"   r#   r'   r(   r)     r*   c                      s      dd  ¡S )Nr:   r   r   r'   )rE   r#   r'   r(   r)     r*   r$   )r   r   r   r   r   rN   rK   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sFJ tdd| | tdd|  jtddksvJ d S ©Nr,   r   r    r;   r<   )r   r   r   ZLCrM   r'   r'   r(   Útest_PolyElement_LC  s    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sfJ d S )	Nr,   r   ©r   r   r    r;   ©r    r   r<   ©r    r    )r   r   r   ZLMrM   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sNJ tdd| | tdd|  jdtddfksJ t d	t\} | djd
ks J | djdks²J d S )Nr,   r   r   r    r;   r   r<   r   r$   )r'   r   )r'   r    )r   r   r   ÚLTr   rM   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spJ d S r   )r   r   r   Zleading_monomrM   r'   r'   r(   Útest_PolyElement_leading_monom¥  s    r   c                  C   s   t dtt\} }}| d ¡ dks&J tdd|  ¡ tdd| ksJJ tdd| | tdd|   ¡ tdd| | ksJ d S r   )r   r   r   Zleading_termrM   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sjJ t d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krÎ| d¡  krÎddgksÔn J | t¡| d¡  krøddgksþn J t d
tt\} }}||d  d|d  |d   }| ¡ | t¡  krh| d¡  krhddgksnn J | t¡| d¡  krddgksn J t dt\} | d ¡ dgksÀJ d S )Nr   r;   r   r<   r=   r?   r    ©r   r   r   ©r   r   r<   r,   r:   r   )rS   r;   )©r    r:   r    r   r$   )r'   r   )r   r   Útermsr   r   r   )r7   r!   r"   r#   r   rE   r'   r'   r(   Útest_PolyElement_terms±  s    (0 8* >.r   c                  C   s  t dt\} }}}|d d |d d  |d d   ¡ }|g d¢ksJJ t dtt\} }}||d  d|d  |d   }| ¡ | t¡  kr®| d	¡  kr®d
dgksŽn J | t¡| d¡  krØdd
gksÞn J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  krH| d¡  krHdd
gksNn J | t¡| d	¡  krvd
dgks|n J d S )Nr   r;   r   r<   r=   )r?   r   r   r,   r:   r   rS   r   r   )r   r   Úmonomsr   r   r   )r7   r!   r"   r#   r   rE   r'   r'   r(   Útest_PolyElement_monomsÅ  s    ( 8* >r   c                  C   s  t dt\} }}}|d d |d d  |d d   ¡ }|tddtddtddgks^J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  krÂ| d	¡  krÂddgksÈn J | t¡| d
¡  krìddgksòn J t dtt\} }}||d  d|d  |d   }| ¡ | t¡  kr\| d
¡  kr\ddgksbn J | t¡| d	¡  krddgksn J d S )Nr   r;   r   r<   r=   r    r,   r:   r   r   )r   r   Úcoeffsr   r   r   )r7   r!   r"   r#   r   rE   r'   r'   r(   Útest_PolyElement_coeffsÖ  s    ($ 8* >r   c                     sØ  t dt\}  t dt\}}t d|\}}}td|  dddksNJ t t   krxddks~n J t|  t|    kr°ddks¶n J t|  | t| |    kròddd	ksøn J t  t    kr0d
d iks6n J t |  t|     krtddkszn J t |  | t| |     krÂdddksÈn 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rhddksnn J t dt\}}}ttt| |  t| | tt   krÎtdttdksÔn J d S )Nr+   úu,vr   r   r    ©rA   ©r   r    r   ©rA   rD   ©r@   rD   ©r@   rC   rD   rA   ©r@   rA   ©r@   rC   rA   c                      s     S rL   r'   r'   ©r+   r!   r'   r(   r)   ö  r*   z*test_PolyElement___add__.<locals>.<lambda>c                      s     S rL   r'   r'   r§   r'   r(   r)   ÷  r*   c                      s     S rL   r'   r'   ©r+   Úur'   r(   r)   ø  r*   c                      s     S rL   r'   r'   rš   r'   r(   r)   ù  r*   ©rm   rD   ©r   r   Údictr   Ú	TypeErrorr
   r   r   ©rf   ÚRuvÚvÚRxyzr"   r#   ÚFuvr'   ©r+   r©   r!   r(   Útest_PolyElement___add__ç  s&    08B>DN4rŽ   c                     sü  t dt\}  t dt\}}t d|\}}}td|  dddksNJ t  t   kr|d dksn J t |  t|    kržd d	ksŸn J t |  | t| |    krdd d
ksn J t   t    krDd d iksJn J t  |  t|     krd dksn J t  |  | t| |     krÞdd dksän 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 dksn J t dt\}}}ttt | |  t| | tt   kròtdtt dksøn J d S )Nr+   r   r   r   r    éýÿÿÿr    r¢   r£   r€   rA   r¥   rŠ   c                      s     S rL   r'   r'   r§   r'   r(   r)     r*   z*test_PolyElement___sub__.<locals>.<lambda>c                      s     S rL   r'   r'   r§   r'   r(   r)     r*   c                      s     S rL   r'   r'   rš   r'   r(   r)     r*   c                      s     S rL   r'   r'   rš   r'   r(   r)     r*   rª   r«   r®   r'   r³   r(   Útest_PolyElement___sub__  s&    4<JBHR8r¶   c                     s\  t dt\}  t dt\}}t d|\}}t t   krXdiks^n J td   td     krd ddks¢n J td   td     kràd ddksæn J td   td     kr(d ddks.n J t d  t d    krpd ddksvn J td  |  t| d     krÀd ddksÆn J td  |  td |     krd ddksn J td  |  t| d     kr`d ddksfn J t | d  t|  d    kr°d ddks¶n J td |   t| d     kr d ddksn J td |   td|      krPd ddksVn J td |   t| d     kr d ddksŠn J t|  d  t|  d    krðd ddksön J td	 |   t| d	     krFd	 d	 dd
ksLn 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øn J t dt\}}ttt |  t|  tt   krRdttiksXn J d S )Nr+   r   r   rA   r;   r    )rA   rC   )r@   rC   r   )rA   r¡   rC   c                      s      S rL   r'   r'   ©r+   r!   r#   r'   r(   r)   9  r*   z*test_PolyElement___mul__.<locals>.<lambda>c                      s      S rL   r'   r'   r·   r'   r(   r)   :  r*   c                      s      S rL   r'   r'   ©r+   r©   r#   r'   r(   r)   ;  r*   c                      s      S rL   r'   r'   rž   r'   r(   r)   <  r*   rm   r«   )rf   r¯   r°   r±   r"   r²   r'   )r+   r©   r!   r#   r(   Útest_PolyElement___mul__!  s4    .DDHHPPPPPPPPV2r¹   c            	         sÔ  t dt\} }}dd  d d d d ks6J dd  d d d ksVJ d d  ¡kspJ d   ¡d ksJ d d  d  ks®J d   d ksÊJ d d d  d d d  ksöJ d d  d ¡dksJ d  d  d   d ¡  krPksVn 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rz||fksn J   ¡    kr¢|ksšn J   ¡    krÊ|ksÐn J tt fd"d dd  d   d dd  d  d   | d  }}  
¡t   krP||fksVn J   ¡    krx|ks~n J   ¡    kr |ksŠn J tt fd#d dd  dd   dd   d  d d d  d   dd  d$  d% d  }}  
¡t   krJ||fksPn J   ¡    krr|ksxn J   ¡    kr|ks n 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sbn J   ¡    kr|ksn J   ¡    kr¬|ks²n J tt fd+d t dt\} d d d d   d d | d }}  
¡t   kr,||fks2n J   ¡    krT|ksZn J   ¡    kr||ksn 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,n J   ¡    k	rN|k	sTn J   ¡    k	rv|k	s|n J tt fd1d t dt\} }d |d  |   | | d }}  
¡t   k	rô||fk	sún J   ¡    k
r|k
s"n J   ¡    k
rD|k
sJn J   ¡|k
s^J d |d  |   | d|d   }}  
¡t   k
r¶||fk
sŒn J   ¡    k
rÞ|k
sän J   ¡    kr|ksn J tt fd2d d |d   |    | d|d   }}  
¡t   kr|||fksn J   ¡    kr€|ksªn J   ¡    krÌ|ksÒn J tt fd3d d |d  d d|    | d  }}  
¡t   kr>||fksDn J   ¡    krf|ksln J   ¡    kr|ksn J tt fd4d t dt\} }d |d  |   | | d }}  
¡t   kr||fksn J   ¡    kr4|ks:n J   ¡    kr\|ksbn J   ¡|ksvJ d |d  |   | d|d   }}  
¡t   krÎ||fksÔn J   ¡    krö|ksün J   ¡    kr|ks$n J tt fd5d d |d   |    | d|d   }}  
¡t   kr||fksn J   ¡    krŒ|ksÂn J   ¡    krä|ksên J tt fd6d d |d  d d|    d |d  d|d   }}  
¡t   krf||fksln J   ¡    kr|ksn J   ¡    kr¶|ksŒn J tt fd7d d S )8Nr   r;   r<   r   r    r   r   r=   r+   r   r¢   c                      s     d     S rz   r'   r'   )r©   r!   r'   r(   r)   c  r*   z.test_PolyElement___truediv__.<locals>.<lambda>c                      s     S rL   r'   r'   r§   r'   r(   r)   e  r*   c                      s     S rL   r'   r'   r§   r'   r(   r)   f  r*   c                      s     S rL   r'   r'   rš   r'   r(   r)   g  r*   c                      s     S rL   r'   r'   rš   r'   r(   r)   h  r*   r!   c                      s
      ¡S rL   ©Údivr'   ©rE   ro   r'   r(   r)   m  r*   c                      s
   t  S rL   ©Údivmodr'   rŒ   r'   r(   r)   n  r*   c                      s
      ¡S rL   ©Úremr'   rŒ   r'   r(   r)   o  r*   c                      s     S rL   r'   r'   rŒ   r'   r(   r)   p  r*   c                      s
      ¡S rL   ©Úquor'   rŒ   r'   r(   r)   q  r*   c                      s     S rL   r'   r'   rŒ   r'   r(   r)   r  r*   c                      s
      ¡S rL   ©Úexquor'   rŒ   r'   r(   r)   s  r*   r,   c                      s
      ¡S rL   rº   r'   rŒ   r'   r(   r)   x  r*   c                      s
   t  S rL   rœ   r'   rŒ   r'   r(   r)   y  r*   c                      s
      ¡S rL   r¿   r'   rŒ   r'   r(   r)   z  r*   c                      s     S rL   r'   r'   rŒ   r'   r(   r)   {  r*   c                      s
      ¡S rL   rÁ   r'   rŒ   r'   r(   r)   |  r*   c                      s     S rL   r'   r'   rŒ   r'   r(   r)   }  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   ~  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)     r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)     r*   r>   é   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)     r*   é	   é   é,   é6   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)      r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   ª  r*   rZ   é   é4   éo   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   ²  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   Ä  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   Ì  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   Ô  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   æ  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   î  r*   c                      s
      ¡S rL   rÃ   r'   rŒ   r'   r(   r)   ö  r*   )r   r   rÂ   r.   r   r   r¬   r   r­   ÚZeroDivisionErrorr»   rŸ   rÀ   r   rÄ   )	r7   r"   r#   rf   r¯   r°   r±   Úqrg   r'   )rE   ro   r+   r©   r!   r(   Útest_PolyElement___truediv__G  s   $  , @66(.((6.((F".((N2.((.((62.((.((.((.((".((.((.((.((".((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sbJ  d   d¡  kr€  d¡  kr€d	|d  d
|  d ksªn J  d   d¡  krø  d¡  krød|d  d|d   d|  d ksþn J  d	   d	¡  kr^  d	¡  kr^d|d	  d|d   d|d   d|  d ksdn J  d   d¡  krÐ  d¡  krÐd|d  d|d	   d|d   d|d   d|  d ksÖn 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rÞ  d¡  krÞ|ksän 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¬n J d S ),Nr!   r;   r   r   r    c                      s    d S )Nr   r'   r'   r   r'   r(   r)   þ  r*   z*test_PolyElement___pow__.<locals>.<lambda>r   r<   é   rÆ   r_   é$   rÉ   é   é   é`   éØ   éQ   r=   é    éð   iÐ  i8  i*  éó   r   r>   r+   i@Ôÿÿi,
  é1   l      M¿l     3urZ   l     L]² l    @LV é
   l    Aìecl    ÇF	l   `V i°
IiÁöW )r   r   r   r   rN   Z_pow_genericÚ_pow_multinomial)r7   r!   r"   r#   ro   r+   r'   r   r(   Útest_PolyElement___pow__ø  s<    HTfr(:"
ÿ
ÿ
ÿ
þ
þþrÝ   c            	      C   s<  t dtt\} }|d d|d   d }|d }|d d|  d }d}| |g¡|g|fksbJ t dtt\} }|d d|  d }| | d	g¡|gd
fks€J 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sJ |d d	 || d	 g}|d	 |g}d| d	 }| |¡||fksÞJ t dt\} | d | d¡dksJ t dt\} | d | d¡tddd
fks8J d S )Nr!   r   rÐ   r;   é*   rÆ   rÒ   éÿÿÿr    r   r,   r<   r_   r   r$   )r   r   )r   r   r   r»   r   )	r7   r!   rE   ro   rÎ   rg   r"   ÚGÚQr'   r'   r(   Útest_PolyElement_div  sJ    40D8 râ   c                  C   s|  t dtt\} }|d d|d   d }|d }d}| |g¡| |g¡d   kr\|ksbn J t dtt\} }}d	|d  | d| |  d	|  d|  d
 }| | dg¡| | dg¡d   krÔdksÚn J | d| g¡| d| g¡d   krd	| d
 ksn J |d }|d }| |g¡| |g¡d   krX|ks^n J ||d  d }|| d |d g}d}| |¡| |¡d   kr®|ksŽn J |d | ||d   |d  }|| d |d d g}|| d }| |¡| |¡d   kr |ks&n J |d d || d g}d| d }| |¡| |¡d   krr|ksxn J d S )Nr!   r   rÐ   r;   rÞ   rß   r    r,   r<   r_   r   )r   r   r   rÀ   r»   )r7   r!   rE   ro   rg   r"   rà   r'   r'   r(   Útest_PolyElement_remP  s.    .06B2. .rã   c                  C   s  t dt\} }d|d   |d d|d   d ¡dd| |d d|  d gfksXJ t dt\} }}| d | d¡dddgfksJ | d | d¡dddgfks¬J | d | d¡dddgfksÎJ | d d| ¡ddd| gfksôJ d|  d| ¡dd| d| gfks J | d d|d  ¡d	dd| gfksLJ 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!   r;   r<   r    )r;   r,   r   r   )r    r;   r   )r;   r    )r   r   Údeflate©r7   r!   r"   rE   ro   r'   r'   r(   Útest_PolyElement_deflatev  s    J"""&,,4  ræ   c            	         sî  t dt\} }}| d ¡ tddfks,J | d ¡ tddfksHJ | tdd ¡ dksbJ | tdd ¡ dks|J d|d  |  ¡ dd|d  | fksšJ |d tdd|   ¡ dd|d  | fksÚJ t dtt\}}}t dtt\ }}|tdd	|d   td
d|d   tdd|d   tdd|d   tdd|d   tdd|d   tdd|  tdd |d tdd|d   tdd|d   td d|d   td!d"|d   td#d"|d   td$d|d   td%d|  td&d g}d'| d(|d   d)|d   d*|d   d+|d   d,|d   d-|d   d.|  d/ d|d  d0|d   d|d   d1|d   d2|d   d3|d   d4|d   d5|  d6 g} fd7d8|D |ksêJ d S )9Nr,   r    r:   r   )r   r:   r;   zx,tl   ùÊO{]K_É$í-é\·WåKÜ.j/%=udLhàL` l     :P·$¯GÌ¢NA3VßCðc8RNe]Ú l   ©HBSWÜ~b]"zZMî}§Eî |uÀ"Õ¿KÉ2 l    h^%==2þpDu.qŽ~@|`:*w
Ìh r>   l   Ù[_+Jê[ŒkíPuä=\L=ªIÅGS{,ð²c.\) o l    P=Kzzdüaê$\0ci}=$?&ø@#uTn0Q r=   l   CNºVO&ilo?¥uTvB¯p5ºy\
$l©$ÖaPÑ-NCR l    Hi)Sbx|5eS6O--:QRbV.r?1lW r<   l   M[Sýµ hlÙó<ÝMÏ6Ÿ>P|oPoÔDugÍe l    Ð[€WGfNQNBÁ3NÖoCBxcBR'å.Cml   Ã.wSK-­Gã¡+~96nzLwGDÉÍ<u)qàGµ	l   °>0I	íB£,Iu!|çJÚ=yÂ9¶-l   @¹VóT×ry![tÔ
¯RdløCHjò\L¬Lf:' l   0Å%H8[JÝ/@)\LMñ3B\_>þmxwr) l   ×$ä><JkðtGl³+oßgÆKàz·ÉeXBOR¢Fl   `%C!+[O;RY.²{À;©°gW!Ýo^@*ß> r_   l   `(s÷xŽ]Yl   i œ4&äm: l   À,8y'X^l   ±¥:ÕW]l    kÌB`l    
ÄOª<âpä{l   ;7>r¬I° l    ``6]j_{l    @åo;bÉ|?l      Tõ=-Él     ÊlFORl     
RtJ)1~M²C©MgKÝbšq«ùcÃL¶e«l   Árýa2ÈU!J'B\KW4Du+Á%B:®N'/|,ç3D`N l    >C_õ=DèmbgrVJ5n,»Oÿ{-[8 ·Dî/7Ê"²l   *×uæQ!ó3'É; ÄPtµSäo"_ ;2g0PZwg
l   À§.ëSö[_iºªák
8Cn|#	v*u0HtS¡l    5u3ÜjÁx]L*(ýIIyLÚ1iC©Âo§latÖ1:'É6(l    P­gÿ];meVÎqÌæ'%°op¹Z "ŒMmtä:%63l    P*71}<U1qÕq,Œ+Œ'ÔcíX0rVvQa;ô pA9l    @ir0ê@>/3,«F%*Á;W@ {=5|o&à(Ëc_46l   `k-·@\K'l    4C|	,Ydm l    Loÿ5§R®s l     "#?ÇVq l    @otc?c l      t¢-JOl     Sêz(Gçc                    s   g | ]}|  ¡ d    ¡qS )r    )Úclear_denomsZset_ring)rU   rE   ©ZrZZr'   r(   rX   œ  r*   z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   rç   r   r   )	r7   r!   r"   ZrQQr+   rs   ÚTr]   rà   r'   rè   r(   Útest_PolyElement_clear_denoms  s    ,2ÿþýüûúùÿþýüûúùø
ÿ
þ
ý
ü
û
úùø	

ÿ
þ
ý
ü
û
úùø÷rê   c            
      C   s  t dt\} }}| d| d }}| |¡dks4J | d| d }}| |¡dksXJ | d| d }}| |¡dks|J | d| d }}| |¡dks J | dd| d	  }}| |¡d| d	 dd
fksÖJ d| d	 | d }}| |¡d| d	 d
dfksJ | d| d }}| |¡dks4J | d| d }}| |¡dksZJ | 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s6J 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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 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sFJ | |¡||	|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sÐJ | |¡|td
d|fksðJ t dt\} }}d| |d  d| |  d|  }d|d  }d| }| |¡||| || fksZJ | |¡||| || fks|J d S )Nr,   r   rD   r;   )r;   r    r   éþÿÿÿ)r;   r   r   )r;   r   r   r<   r    )r;   r    r    )r;   r   r    )r;   r    r   )r;   r   r   rc   gÍÌÌÌÌÌ @r   g      ð?)r   r   Z	cofactorsr   r   )
r7   r!   r"   rE   ro   r#   r+   ÚhZcffÚcfgr'   r'   r(   Útest_PolyElement_cofactors¿  sh     "**"*"*"&"&""J,   $"rî   c                  C   sb   t dt\} }}tdd|d  | tdd }tdd| tdd }| |¡|d ks^J d S )Nr,   r    r;   )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sjJ |  |¡| |fksJ | | ¡| |fksJ 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sVJ 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,   r;   r   r<   r    r!   r+   )r   r   Úcancelr   r
   )
r7   r!   r"   rE   ro   r]   rà   ZFxrf   r+   r'   r'   r(   Útest_PolyElement_cancel  s*     ( rò   c                  C   sh   t dt\} }}| d ¡ dks$J | d ¡ dks8J |d d|d   d|  d  ¡ dksdJ d S )Nr,   r   r    r   r<   r;   )r   r   Zmax_normrM   r'   r'   r(   Útest_PolyElement_max_norm9  s    ró   c                  C   sh   t dt\} }}| d ¡ dks$J | d ¡ dks8J |d d|d   d|  d  ¡ dksdJ d S )Nr,   r   r    r   r<   r;   rÛ   )r   r   Zl1_normrM   r'   r'   r(   Útest_PolyElement_l1_normA  s    rô   c                  C   sÒ  t dt\} }tdd|d d  |d d  |d d	  |d
 d  d|d d  |d d	  |d d	   d|d d   d|d d   }| |d ¡tdd|d d  |d d  |d d	  |d
 d  d|d  |d d	  |d d	   d|d   ks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   r=   r   r_   r    r>   r<   r   rÛ   r;   i 	  r:   rÓ   i`  rY   é@  )r   r   Údiff)r7   rs   rE   r'   r'   r(   Útest_PolyElement_diffI  s
    ~v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sŠJ  dddksžJ |  |¡} d|jd d ksÜJ  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   r<   c                      s     S rL   r'   r'   r   r'   r(   r)   Y  r*   z+test_PolyElement___call__.<locals>.<lambda>c                      s
    ddS )Nr   r    r'   r'   r   r'   r(   r)   Z  r*   c                      s    t ddS ©Nr    r:   ©r   r'   r   r'   r(   r)   \  r*   r,   r;   r:   é5   c                      s     S rL   r'   r'   r   r'   r(   r)   i  r*   c                      s    dddS )Nr   r    r;   r'   r'   r   r'   r(   r)   j  r*   c                      s    dt ddS rø   rù   r'   r   r'   r(   r)   l  r*   c                      s    t dddS rø   rù   r'   r   r'   r(   r)   m  r*   c                      s    t ddt ddS rø   rù   r'   r   r'   r(   r)   n  r*   )r   r   r   rN   r   rJ   r"   )r7   r!   r"   ZRyr'   r   r(   Útest_PolyElement___call__R  s&    
rû   c                     sê  t dt\} d dd   d  d    d¡}|dkrLt|trPJ 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kr0t||  ¡js4J   dfdfg¡}|dkrjt||  ¡jsnJ   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   r<   r;   r   c                      s      tdd¡S rø   ©Úevaluater   r'   ©rE   r!   r'   r(   r)   w  r*   z+test_PolyElement_evaluate.<locals>.<lambda>r   c                      s      dftddfg¡S rø   rü   r'   r   r'   r(   r)     r*   c                      s      tddfdfg¡S rø   rü   r'   r   r'   r(   r)     r*   c                      s"      tddftddfg¡S rø   rü   r'   r   r'   r(   r)     r*   )	r   r   rý   r{   r	   r   r   rJ   r|   ©r7   rg   r#   r'   r   r(   Útest_PolyElement_evaluatep  s(     ,$"$r   c                     s0  t dt\} d dd   d  d    d¡}|dkrNt|| jsRJ 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 tt fd	d tt fd
d tt fdd d S )Nr!   r   r<   r;   r   c                      s      tdd¡S rø   ©Úsubsr   r'   rþ   r'   r(   r)     r*   z'test_PolyElement_subs.<locals>.<lambda>r   c                      s      dftddfg¡S rø   r  r'   r   r'   r(   r)     r*   c                      s      tddfdfg¡S rø   r  r'   r   r'   r(   r)     r*   c                      s"      tddftddfg¡S rø   r  r'   r   r'   r(   r)     r*   )r   r   r  r{   r|   r   r   rÿ   r'   r   r(   Útest_PolyElement_subs  s      r  c                     sæ  t dt\} d dd   d  d    d¡}|dkrNt|| jsRJ   ¡ ksfJ   d ¡d dd   dd   d k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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   r<   r;   r   r>   c                      s      tdd¡S rø   )Úcomposer   r'   rþ   r'   r(   r)   «  r*   z*test_PolyElement_compose.<locals>.<lambda>r   r    )r   r   r  r{   r|   r   r   )r7   rg   r"   r#   rÎ   r'   rþ   r(   Útest_PolyElement_compose¡  s      8 <Lr  c                     sf  t dt\}  }}   jdks$J    jdks6J    jdksHJ    jdksZJ    d jdkspJ    d jdksJ    d jdksJ    d jdks²J  jdksÀJ  jdksÎJ  jdksÜJ  jdksêJ  | jdksüJ  | jdksJ  | jdks$J  | jdks8J d  jdksLJ d  jdks`J d  jdkstJ 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 s8J  d jdu sLJ d  d jdu sdJ d  d j	du s|J d  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 jdu sJ  d d jdu s0J  d   d jdu sLJ  d d   d jdu slJ 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 sNJ | djdu sbJ d S )Nr   FTr    r   r   r;   r<   r+   é   r:   r©   rÓ   rZ   rÛ   r_   r>   c                      s    j S rL   )Úis_cyclotomicr'   rW   r'   r(   r)   ý  r*   z&test_PolyElement_is_.<locals>.<lambda>r$   )r   r   Zis_generatorZ	is_groundZis_monomialZis_termÚis_zeroZis_oneZis_monicZis_primitiveZ	is_linearZis_quadraticZis_squarefreeZis_irreducibler   r   r  r   r   )r7   r"   r#   Ú_r+   r©   rE   r'   rW   r(   Útest_PolyElement_is_¹  sh     $0r
  c                     sª   t dt\}  }| d d¡j tdttks2J | d d¡ d¡j tdttksXJ t| d d¡ d¡ d¡| jdu sJ ttfdd tt fd	d d S )
Nr   r    r   rG   r#   Fc                      s      d¡  d¡  d¡S r%   rI   r'   rO   r'   r(   r)   
  r*   z'test_PolyElement_drop.<locals>.<lambda>c                      s
      d¡S r%   rI   r'   rW   r'   r(   r)     r*   )	r   r   rJ   r   r   r{   r|   r   rN   )r7   r"   r'   )r!   r#   r(   Útest_PolyElement_drop  s     &*r  c                  C   s   t dt\} }}|d |d  ||  }}|| d }}| |¡||fksNJ | |¡|ks`J | |¡|ksrJ | |¡|ksJ d S )Nr,   r;   r   )r   r   ZpdivZpremZpquoZpexquo)r	  r!   r"   rE   ro   rÎ   rg   r'   r'   r(   Útest_PolyElement_pdiv  s    r  c                  C   sr   t dt\} }d| |d d  }}|d tdd d  }}}| |¡||fksVJ | |¡|||fksnJ d S )Nr!   r;   rÓ   r×   r    )r   r   Z
half_gcdexZgcdex)r	  r!   rE   ro   Úsr+   rì   r'   r'   r(   Útest_PolyElement_gcdex  s
    r  c                  C   sZ   t dt\} }|d d|  d |d d d| d   }}}| |¡|||gksVJ d S ©Nr!   r;   r    )r   r   Zsubresultants©r	  r!   rE   ro   rì   r'   r'   r(   Útest_PolyElement_subresultants!  s    0r  c                  C   sL   t dt\} }|d d|  d |d d d  }}}| |¡|ksHJ d S )Nr!   r;   r    r   )r   r   Z	resultantr  r'   r'   r(   Útest_PolyElement_resultant'  s    (r  c                  C   sŠ   t dt\} }|d d|d   d|  d d }}| ¡ |ksDJ t dt\}}}}t d|\} }||d  ||  | |d d| |   }}| ¡ |ks¢J d S )	Nr!   r   r;   rÆ   é   ipÒÿÿza,b,cr<   )r   r   Zdiscriminant)r	  r!   rE   ro   r]   rh   Ú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sJ | ¡ ||gksªJ d S )Nr!   rÐ   rÅ   rÛ   é   r_   iô  r>   éq  r<   r;   r   rÆ   r=   )r   r   r  Z	decomposer  r'   r'   r(   Útest_PolyElement_decompose:  s    Pr  c                  C   sD   t dt\} }|d d|  d  d¡|d d|  d ks@J d S r  )r   r   Úshift)r	  r!   r'   r'   r(   Útest_PolyElement_shiftD  s    r  c               	   C   sh  t dt\} }td| \}}dd|d   |d  dd|d   |d	   d
d|d	   |d   dd|d	   |d   | dd |  | dd  }| ¡ |d d|d   |d	 d |  d|d	  d  d|d  d|  |d	 d  |d	  d | dd  | d|d	  d  d|d  d|d   d|d	   d|d  d|d	   d  gksdJ d S ) Nr+   r!   i   i	=  r_   r=   i   r  r<   r×   r   é   r;   r    i$ô  éd   é@   rÊ   rÓ   éÈ   rÔ   i N  rÆ   é   i÷ÿÿÿrÐ   i È¯ l      irõ   i  Šl      ^_)r
   r   r   Zsturm)r]   r+   r	  r!   rE   r'   r'   r(   Útest_PolyElement_sturmH  s    |2,>ür!  c                  C   sÌ   t dt\} }|d d|d   |d  d|d   }| ¡ |df|d dfgksVJ ||d d  |d d  |d d  |d  }| ¡ |d d|  d df|d d|  d df|dfgksÈJ d S )Nr!   r=   r;   r<   r   r    )r   r   Zgff_list)r	  r!   rE   r'   r'   r(   Útest_PolyElement_gff_listU  s
    ( 0r"  c                  C   sÜ   t dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fkslJ t dt td¡\} }|  ¡ j}|d d  ¡ d|d dtd |  d |d d|d   d fksØJ d S )Nr!   r   r;   r    r<   rÛ   )r   r   re   r   Z	to_groundr!   Zsqf_norm)r7   r!   rs   r'   r'   r(   Útest_PolyElement_sqf_norm^  s    
J
r#  c                  C   s   t dt\} }|d |d  |d  d }|d d|d   d|  d }|d }|d |d  | d }| ¡ |kszJ | ¡ d|df|dfgfksJ d S )Nr!   r=   r   r;   r    r<   )r   r   Zsqf_partZsqf_list)r	  r!   rE   ro   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spJ d S )Nr!   r=   r   r;   r    )r   r   Zfactor_list)r	  r!   rE   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shJ d S )Nr!   r;   r>   r=   r<   r   r    rY   rÅ   rÓ   rÐ   )r   r   rÜ   )r7   r!   r$  r'   r'   r(   Útest_issue_21410  s    $r(  N)hÚ__doc__Ú	functoolsr   Úoperatorr   r   Zsympy.polys.ringsr   r   r   r   r	   Zsympy.polys.fieldsr
   r   Zsympy.polys.domainsr   r   r   r   r   Zsympy.polys.orderingsr   r   Zsympy.polys.polyerrorsr   r   r   r   Zsympy.testing.pytestr   Z
sympy.corer   r   Zsympy.core.numbersr   r   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   r2   r8   r9   rF   rP   rQ   rR   r^   rb   ri   rj   rk   rl   rp   rv   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   rŽ   r¶   r¹   rÏ   rÝ   râ   rã   ræ   rê   rî   rð   rò   ró   rô   r÷   rû   r   r  r  r
  r  r  r  r  r  r  r  r  r!  r"  r#  r%  r'  r(  r'   r'   r'   r(   Ú<module>   s   "

%	
##
& 2;&5Q!	J
	
	