a
    kºh_Ÿ  ã                   @   s4  d Z ddlmZ ddlmZmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ dd	lmZmZmZmZ dd
lm Z  ddl!m"Z"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3d d! Z4d"d# Z5d$d% Z6d&d' Z7d(d) Z8d*d+ Z9d,d- Z:d.d/ Z;d0d1 Z<d2d3 Z=d4d5 Z>d6d7 Z?d8d9 Z@d:d; ZAd<d= ZBd>d? ZCd@dA ZDdBdC ZEdDdE ZFdFdG ZGdHdI ZHdJdK ZIdLdM ZJdNdO ZKdPdQ ZLdRdS ZMdTdU ZNdVdW ZOdXdY ZPdZd[ ZQd\d] ZRd^d_ ZSd`da ZTdbdc ZUddde ZVdfdg ZWdhdi ZXdjdk ZYdldm ZZdndo Z[dpdq Z\drds Z]dtdu Z^dvdw Z_dxdy Z`dzd{ Zad|d} Zbd~d Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsd d¡ Ztd¢S )£zTest sparse polynomials. é    )Úreduce)ÚaddÚmul)ÚringÚxringÚsringÚPolyRingÚPolyElement)ÚfieldÚ	FracField)Úninf)ÚZZÚQQÚRRÚFFÚEX)ÚlexÚgrlex)ÚGeneratorsErrorÚExactQuotientFailedÚMultivariatePolynomialErrorÚCoercionFailed)Úraises)ÚSymbolÚsymbols)ÚS)Úpi)Úexp)Úsqrtc                  C   s  t td\} }}}ttdttjdks,J tt| ttjdk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(   úJ/var/www/auris/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     $r3   c                  C   s"   t dt\} }}}t| sJ d S ©Nr   ©r   r   Úhash©ÚRr"   r#   r$   r(   r(   r)   Útest_PolyRing___hash__7   s    r9   c                   C   s€   t dtd t dtd ks J t dtd t dtd ks@J t dtd t dtd ks`J t dtd t dtd ksJ t dtd t dtd k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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!   )rA   r<   )rB   r    )rC   r=   )rD   r>   )rE   r?   r%   )r(   r;   )r   r   Zring_new)r8   r"   r#   r$   Úfr(   r(   r)   Útest_PolyRing_ring_newB   s    *4* rG   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(   ©r8   r(   r)   r*   b   r+   z$test_PolyRing_drop.<locals>.<lambda>c                      s      ¡  ¡S ©NrJ   r(   ©r8   r"   r#   r(   r)   r*   c   r+   )r   r   rK   r   r   r   Ú
ValueError©r$   r(   rN   r)   Útest_PolyRing_dropQ   s     " rQ   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!   rH   r<   r$   r    )r   r   r   r   r7   r(   r(   r)   Útest_PolyRing___getitem__e   s
    rR   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_multivariaterL   r(   r(   r)   Útest_PolyRing_is_m   s    rS   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   ©r8   ÚFr(   rX   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 rT   r(   rU   rX   r(   r)   rY      r+   z%test_PolyRing_mul.<locals>.<listcomp>r=   é   rZ   r?   éÎ   iè  r<   i±  r%   )r<   r    r>   é   )r   r   r\   r   r   r]   r(   rX   r)   Útest_PolyRing_mul   s
    Rrc   c                     s
  t dt\ } }}}tt fdd tt fdd   d¡ jksLJ   d¡| | | | ksjJ   d¡| | | |  | |  ||  ||  ||  ksšJ   d¡| | | | | |  | | |  || |  ksæJ   d	¡| | | | ksJ d S )
Núx,y,z,tc                      s
      d¡S ©Néÿÿÿÿ©Úsymmetric_polyr(   rL   r(   r)   r*      r+   z.test_PolyRing_symmetric_poly.<locals>.<lambda>c                      s
      d¡S )Nr>   rg   r(   rL   r(   r)   r*      r+   r   r!   r<   r    r=   )r   r   r   rO   rh   Úone)r"   r#   r$   r,   r(   rL   r)   Útest_PolyRing_symmetric_poly   s    >>rj   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 )	Nrd   r   r<   r    r,   T©Ú	extensionr(   )r   r   r   r   r   r"   r#   r$   r   r,   r   r   r1   Úalgebraic_fieldr0   Ú
from_sympy)r"   r#   r$   r,   r8   ÚRtÚrÚar(   r(   r)   Ú
test_sring   s(    ::6^^^"rr   c                  C   s*   t dt\} }}}t|| | s&J d S r4   r5   r7   r(   r(   r)   Útest_PolyElement___hash__¹   s    rs   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   ri   r   )r8   r"   r#   ro   r,   r(   r(   r)   Útest_PolyElement___eq__œ   s2     ( ("*"*(""rt   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   rN   r(   r(   r)   Útest_PolyElement__lt_le_gt_ge__â   s
    000ru   c                  C   s   t d\} }ttt|  t| |f t|  | fD ].}td|\}}td|d  d dks.J q.tt|  fD ].}td|\}}td|d  d dksjJ qjd S )Núx, yr,   r<   r!   z
2*t**2 + 1zEX(2)*t**2 + EX(1))r   r   r   r   Ústrr   )r"   r#   Údomr8   r,   r(   r(   r)   Útest_PolyElement__str__ë   s    &ry   c                  C   sN   t dt\} }}}|| d|  }| ¡ }||ks6J d|d< ||ksJJ d S )Nr   r    r;   ©r!   r!   r!   )r   r   Úcopy)r8   r"   r#   r$   rF   Úgr(   r(   r)   Útest_PolyElement_copyö   s    r}   c            
         s(  t dt\} }}}d|d  | || |  d|d   d | j\ }}d d  |  | |  d|d   d }|ks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!   zu,v,wc                      s
      ¡S rM   )Úas_exprr(   ©ÚXrF   r(   r)   r*     r+   z*test_PolyElement_as_expr.<locals>.<lambda>r%   )r   r   r   r~   r   rO   )
r8   r"   r#   r$   ÚYÚZr|   ÚUÚVÚWr(   r   r)   Útest_PolyElement_as_expr   s    ,,,r   c                     sð  t d\} }t| |ft\ }}}  d¡}|dkrB  |¡sFJ   ¡}||krb  |¡sfJ   |  | ¡}||| | kr  |¡sJ   |  | |    ¡}||| | ||  | krÚ  |¡sÞJ   d |  | d | d   d ¡}||d | | |d |d   d kr>  |¡sBJ ttdg\}}| td¡}||d kr|| |¡sJ tt fdd tt fd	d tt fd
d tdt\   d¡}|dkrè  |¡sìJ d S )Nr   r!   r    r<   r;   r   c                      s      d ¡S ©Nr!   ©Ú	from_exprr(   ©r8   r"   r(   r)   r*   ,  r+   z,test_PolyElement_from_expr.<locals>.<lambda>c                      s      d ¡S ©Nr<   r   r(   r   r(   r)   r*   -  r+   c                      s      d td ¡S )Nr;   r<   )r   r   r(   r   r(   r)   r*   .  r+   r%   )	r   r   r   r   Ú
is_elementr   r   r   rO   )r#   r$   r   r   r   rF   rp   r^   r(   r   r)   Útest_PolyElement_from_expr  s*    

**:
r   c                  C   sü  t dt\} }}}ttdks"J | d ¡ tu s6J | d ¡ dksJJ |d  ¡ dks^J d|d  |  ¡ dkszJ ||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s8J d|d  |d  |  |¡dks`J | d |¡tu sxJ | 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sXJ d|d  |  |¡dksxJ ||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   z-infr   r!   r<   r    r>   r;   r%   )r   r   r   ÚfloatZdegreer7   r(   r(   r)   Útest_PolyElement_degree4  s:       (  (  (r   c                  C   sN  t dt\} }}}| d ¡ tu s&J | d ¡ dks:J |d  ¡ dksNJ d|d  |d |   ¡ dksrJ ||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sRJ 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sJJ | d |¡tu sbJ | d |¡dkszJ |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 s4J | d ¡ dksJJ d S )	Nr   r   r!   r<   r    r>   r;   r%   )r   r   Ztail_degreer   r7   r(   r(   r)   Útest_PolyElement_tail_degreeY  s8    $$(((0((0((0r   c                  C   sl   t dt\} }}}| d ¡ tttfks,J | d ¡ dks@J |d | |d |d    ¡ dkshJ d S )Nr   r   r!   rE   r<   r    )r    r!   r<   )r   r   Údegreesr   r7   r(   r(   r)   Útest_PolyElement_degrees|  s    r   c                  C   sl   t dt\} }}}| d ¡ tttfks,J | d ¡ dks@J |d | |d |d    ¡ dkshJ d S )Nr   r   r!   rE   r<   r    r@   )r   r   Ztail_degreesr   r7   r(   r(   r)   Útest_PolyElement_tail_degrees  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 rI   ©Úcoeffr(   ©rF   r(   r)   r*     r+   z(test_PolyElement_coeff.<locals>.<lambda>r   rf   c                      s      dd   ¡S )Nr    r<   r   r(   ©rF   r"   r#   r(   r)   r*     r+   c                      s         ¡S rM   r   r(   ©rF   r"   r#   r$   r(   r)   r*     r+   c                      s      dd  ¡S )Nr;   r    r   r(   )rF   r$   r(   r)   r*     r+   r%   )r   r   r   r   r   rO   rL   r(   r   r)   Útest_PolyElement_coeff  s    ,r   c                  C   sz   t dtt\} }}| djtdks(J tdd| jtddksFJ tdd| | tdd|  jtddksvJ d S ©Nr-   r   r!   r<   r=   )r   r   r   ZLCrN   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LMrN   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   rN   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_monomrN   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_termrN   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   )rT   r<   )©r!   r;   r!   r   r%   )r(   r    )r   r   Útermsr   r   r   )r8   r"   r#   r$   rš   rF   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   rT   r§   r   )r   r   Úmonomsr   r   r   )r8   r"   r#   r$   rª   rF   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   )r8   r"   r#   r$   r¬   rF   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!   ©rB   ©r   r!   r   ©rB   rE   ©rA   rE   ©rA   rD   rE   rB   ©rA   rB   ©rA   rD   rB   c                      s     S rM   r(   r(   ©r,   r"   r(   r)   r*     r+   z*test_PolyElement___add__.<locals>.<lambda>c                      s     S rM   r(   r(   r¶   r(   r)   r*     r+   c                      s     S rM   r(   r(   ©r,   Úur(   r)   r*   	  r+   c                      s     S rM   r(   r(   r·   r(   r)   r*   
  r+   ©rz   rE   ©r   r   Údictr   Ú	TypeErrorr
   r   r   ©ro   Ú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³   rB   rŽ   rµ   c                      s     S rM   r(   r(   r¶   r(   r)   r*   $  r+   z*test_PolyElement___sub__.<locals>.<lambda>c                      s     S rM   r(   r(   r¶   r(   r)   r*   %  r+   c                      s     S rM   r(   r(   r·   r(   r)   r*   &  r+   c                      s     S rM   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   rB   r<   r!   )rB   rD   )rA   rD   r    )rB   r°   rD   c                      s      S rM   r(   r(   ©r,   r"   r$   r(   r)   r*   J  r+   z*test_PolyElement___mul__.<locals>.<lambda>c                      s      S rM   r(   r(   rÆ   r(   r)   r*   K  r+   c                      s      S rM   r(   r(   ©r,   rž   r$   r(   r)   r*   L  r+   c                      s      S rM   r(   r(   rÇ   r(   r)   r*   M  r+   rz   rº   )ro   rŸ   r¿   rÀ   r#   rÁ   r(   )r,   rž   r"   r$   r)   Útest_PolyElement___mul__2  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 ttfdd d   d ksŒJ ttfdd d d  d ¡d	ksìJ d  d  d   d ¡  kr&ks,n J t dt\} }}td d |d d  |d d
   ¡ d	kstJ 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rP||fksVn J   ¡    krx|ks~n J   ¡|ksJ tt fd#d tt fd$d dd  d   d
 d
d  d  d   | d	  }}  ¡t   kr&||fks,n J   ¡    krN|ksTn J   ¡|kshJ tt fd%d tt fd&d d
d  dd   dd   d  d d d  d   d
d  d'  d( d  }}  ¡t   kr ||fks&n J   ¡    krH|ksNn J   ¡|ksbJ tt fd)d tt fd*d d
d
  dd   dd   dd    d dd   d+   d
 d' d,d  dd   d-  d.  }}  ¡t   kr2||fks8n J   ¡    krZ|ks`n J   ¡|kstJ tt fd/d tt fd0d t dt\} d d d d   d d | d
 }}  ¡t   kr||fksn J   ¡    kr*|ks0n J   ¡|ksDJ tt fd1d tt fd2d dd  d   d
 d
d  d  d   tdd
 td3d4 td5d4 td6d4  }}  ¡t   krü||fk	sn J   ¡    k	r$|k	s*n J   ¡|k	s>J tt fd7d tt fd8d t dt\} }d |d  |   | | d	 }}  ¡t   k	rÊ||fk	sÐn J   ¡    k	rò|k	søn J   ¡|k
sJ   ¡    k
r.|k
s4n J d |d  |   | d|d   }}  ¡t   k
r||fk
sn J   ¡    k
rŽ|k
sºn J   ¡|k
sÎJ tt fd9d tt fd:d d |d   |    | d|d   }}  ¡t   krR||fksXn J   ¡    krz|ksn J   ¡|ksJ tt fd;d tt fd<d d |d  d d|    | d	  }}  ¡t   kr||fksn J   ¡    kr<|ksBn J   ¡|ksVJ tt fd=d tt fd>d t dt\} }d |d  |   | | d	 }}  ¡t   krâ||fksèn J   ¡    kr
|ksn J   ¡|ks$J   ¡    krF|ksLn J d |d  |   | d|d   }}  ¡t   kr€||fksªn J   ¡    krÌ|ksÒn J   ¡|ksæJ tt fd?d tt fd@d d |d   |    | d|d   }}  ¡t   krj||fkspn J   ¡    kr|ksn J   ¡|ks¬J tt fdAd tt fdBd d |d  d d|    d |d  d|d   }}  ¡t   kr<||fksBn J   ¡    krd|ksjn J   ¡|ks~J tt fdCd tt fdDd d S )ENr   r<   r=   r    r!   c                      s    d d   S ©Nr<   r!   r(   r(   rX   r(   r)   r*   a  r+   z.test_PolyElement___truediv__.<locals>.<lambda>c                      s    d d d   S rÉ   r(   r(   rX   r(   r)   r*   c  r+   r   r>   r,   r®   r±   c                      s     d     S r   r(   r(   )rž   r"   r(   r)   r*   t  r+   c                      s     S rM   r(   r(   r¶   r(   r)   r*   v  r+   c                      s     S rM   r(   r(   r¶   r(   r)   r*   w  r+   c                      s     S rM   r(   r(   r·   r(   r)   r*   x  r+   c                      s     S rM   r(   r(   r·   r(   r)   r*   y  r+   r"   c                      s
      ¡S rM   ©Údivr(   ©rF   r|   r(   r)   r*   ~  r+   c                      s
   t  S rM   ©Údivmodr(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   ©Úremr(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   ©Úquor(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   ©Úexquor(   rÌ   r(   r)   r*     r+   r-   c                      s
      ¡S rM   rÊ   r(   rÌ   r(   r)   r*     r+   c                      s
   t  S rM   rÍ   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   rÏ   r(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   rÑ   r(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   ¢  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   £  r+   r?   é   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   «  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   ¬  r+   é	   é   é,   é6   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   Ž  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   µ  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   ¿  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   À  r+   r[   é   é4   éo   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   È  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   É  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   Û  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   Ü  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   ä  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   å  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   í  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   î  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*      r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*     r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*   	  r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*   
  r+   c                      s     S rM   r(   r(   rÌ   r(   r)   r*     r+   c                      s
      ¡S rM   rÓ   r(   rÌ   r(   r)   r*     r+   )r   r   rÒ   r   r   r/   rš   r   r»   rŒ   ÚZeroDivisionErrorrË   rÎ   rÐ   rÔ   )	r8   r#   r$   ro   rŸ   r¿   rÀ   Úqrp   r(   )rF   r|   r,   rž   r"   r)   Útest_PolyElement___truediv__X  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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rJ  d¡  krJd|d  d|d   d|d   d|  d ksPn 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 re   r(   r(   r   r(   r)   r*     r+   z*test_PolyElement___pow__.<locals>.<lambda>r=   é   rÖ   r`   é$   rÙ   é   é   é`   éØ   éQ   r>   é    éð   iÐ  i8  i*  éó   r   r?   r,   i@Ôÿÿi,
  é1   l      M¿l     3ur[   l     L]² l    @LV é
   l    Aìecl    ÇF	l   `V i°
IiÁöW )r   r   r   r   rO   Z_pow_genericÚ_pow_multinomial)r8   r"   r#   r$   r|   r,   r(   r   r)   Útest_PolyElement___pow__  s:    HTfr(:"
ÿ
ÿ
ÿ
þ
þþrí   c            	      C   s<  t dtt\} }|d d|d   d }|d }|d d|  d }d}| |g¡|g|fk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`   rf   r%   )r   r    )r   r   r   rË   r   )	r8   r"   rF   r|   rÞ   rp   r#   ÚGÚQr(   r(   r)   Útest_PolyElement_div0  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Ë   )r8   r"   rF   r|   rp   r#   rð   r(   r(   r)   Útest_PolyElement_remk  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©r8   r"   r#   rF   r|   r(   r(   r)   Útest_PolyElement_deflate  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)rV   rF   ©ZrZZr(   r)   rY   Ø  r+   z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   r÷   r   r   )	r8   r"   r#   ZrQQr,   r   ÚTr^   rð   r(   rø   r)   Útest_PolyElement_clear_denoms¥  s    ,2ÿþýüûúùÿþýüûúùø
ÿ
þ
ý
ü
û
úùø	

ÿ
þ
ý
ü
û
úùø÷rú   c            
      C   s  t dt\} }}| d| d }}| |¡dk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   rE   r<   )r<   r!   r   éþÿÿÿ)r<   rf   r   )r<   r   rf   r=   r!   )r<   r!   r!   )r<   rf   r!   )r<   r!   rf   )r<   rf   rf   rd   gÍÌÌÌÌÌ @r    g      ð?)r   r   Z	cofactorsr   r   )
r8   r"   r#   rF   r|   r$   r,   ÚhZcffÚcfgr(   r(   r)   Útest_PolyElement_cofactorsÚ  sh     "**"*"*"&"&""J,   $"rþ   c                  C   sb   t dt\} }}tdd|d  | tdd }tdd| tdd }| |¡|d ks^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
   )
r8   r"   r#   rF   r|   r^   rð   ZFxro   r,   r(   r(   r)   Útest_PolyElement_cancel3  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_normrN   r(   r(   r)   Útest_PolyElement_max_normT  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_normrN   r(   r(   r)   Útest_PolyElement_l1_norm\  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`  rZ   é@  )r   r   Údiff)r8   r   rF   r(   r(   r)   Útest_PolyElement_diffd  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 rM   r(   r(   r   r(   r)   r*   t  r+   z+test_PolyElement___call__.<locals>.<lambda>c                      s
    ddS )Nr   r!   r(   r(   r   r(   r)   r*   u  r+   c                      s    t ddS ©Nr!   r;   ©r   r(   r   r(   r)   r*   w  r+   r-   r<   r;   é5   c                      s     S rM   r(   r(   r   r(   r)   r*     r+   c                      s    dddS )Nr   r!   r<   r(   r(   r   r(   r)   r*     r+   c                      s    dt ddS r  r	  r(   r   r(   r)   r*     r+   c                      s    t dddS r  r	  r(   r   r(   r)   r*     r+   c                      s    t ddt ddS r  r	  r(   r   r(   r)   r*     r+   )r   r   r   rO   r   rK   r#   )r8   r"   r#   ZRyr(   r   r)   Útest_PolyElement___call__m  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Æ|  ¡ |¡sÊJ   dfdfg¡}|dkrú|  ¡ |¡sþJ   d¡}|dkr&|  ¡ |¡s*J   dfdfg¡}|dkr^|  ¡ |¡sbJ   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(   ©rF   r"   r(   r)   r*     r+   z+test_PolyElement_evaluate.<locals>.<lambda>r   c                      s      dftddfg¡S r  r  r(   r   r(   r)   r*   £  r+   c                      s      tddfdfg¡S r  r  r(   r   r(   r)   r*   €  r+   c                      s"      tddftddfg¡S r  r  r(   r   r(   r)   r*   ¥  r+   )	r   r   r  Ú
isinstancer	   r   r   rK   r   ©r8   rp   r$   r(   r   r)   Útest_PolyElement_evaluate  s(     , "r  c                     s*  t dt\} d dd   d  d    d¡}|dkrL|  |¡sPJ tt fdd t dt\} }d dd   d  d    d¡}|dkrŽ|  |¡sžJ   dfdfg¡}|dkrà|  |¡säJ 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)   Útest_PolyElement_subs§  s      r  c                  C   s  t dt\} }}|d |d  }| ¡ \}}}|dks:J | |¡| |ksPJ |d |d  }| ¡ \}}}|dkszJ | |¡| |ksJ || d }| ¡ \}}}|dks¶J | |¡| |ksÌJ |d }| ¡ \}}}|dksîJ | |¡| |ksJ |  d¡}| ¡ \}}}|dks,J | |¡| |ksDJ td\} }| ¡ \}}}|dkslJ | |¡| |ksJ d S )Nr-   r<   r   r;   r    )r   r   Z
symmetrizeÚcomposer   r   )r8   r"   r#   rF   ÚsymrÐ   Úmr(   r(   r)   Útest_PolyElement_symmetrizeŒ  s2    
r  c                     sÞ  t dt\} d dd   d  d    d¡}|dkrL|  |¡sPJ   ¡ ksdJ   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|  |¡sJ   df|dfg¡}|dkr4|  |¡s8J d dd   d | |  d  ||d  d
 ¡}||d  d
 d d||d  d
 d   d||d  d
  | |  d }||krÖ|  |¡sÚJ d S )Nr"   r    r=   r<   r   r?   c                      s      tdd¡S r  )r  r   r(   r  r(   r)   r*   í  r+   z*test_PolyElement_compose.<locals>.<lambda>r   r!   )r   r   r  r   r   r   )r8   rp   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ã   r[   rë   r`   r?   c                      s    j S rM   )Úis_cyclotomicr(   rX   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_monicÚis_primitiveZ	is_linearZis_quadraticZis_squarefreeZis_irreducibler   r   r  r   r   )r8   r#   r$   Ú_r,   rž   rF   r(   rX   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 |  | d d¡ d¡ d¡¡du sJ ttfdd tt fd	d d S )
Nr   r!   r   rH   r$   Fc                      s      d¡  d¡  d¡S r&   rJ   r(   rP   r(   r)   r*   L  r+   z'test_PolyElement_drop.<locals>.<lambda>c                      s
      d¡S r&   rJ   r(   rX   r(   r)   r*   M  r+   )r   r   rK   r   r   r   r   rO   )r8   r#   r(   )r"   r$   r)   Útest_PolyElement_dropE  s     &(r   c                  C   sJ  t dt\} }}}d|d  d|d   d|d  |  d }| dd¡d| d ksZJ | |d¡dksnJ d|d  d| |d  |  d	|d   d	| |d   }| |d¡d|d  | d	|d   ksÖJ | |d¡d| | d	 ksöJ d|d  d| |  d }| |d¡| d
ks,J | |d¡| d
ksFJ d S )Nzx, y, zr=   r    r>   r<   r?   r;   r!   rë   r   )r   r   Z	coeff_wrt)r8   r"   r#   r$   Úpr(   r(   r)   Útest_PolyElement_coeff_wrtO  s    ,<, r"  c                     s<  t dt\ } }| d | |  d|  d  } |¡d| d ksHJ | d d d|  d  } |¡ || ¡  krdksn J  |d¡ dks¢J | | d|   d | |  } |¡|d  d|  d ksäJ  |d¡ ||¡  kr| d  d|   d ks$n J tt fdd	 d S )
Nrv   r<   éüÿÿÿr=   r!   rÕ   r   c                      s      d¡S r&   ©Úpremr(   ©r8   rF   r(   r)   r*   l  r+   z'test_PolyElement_prem.<locals>.<lambda>)r   r   r%  r   rÝ   ©r"   r#   r|   r(   r&  r)   Útest_PolyElement_prem^  s    ($@r(  c                     s  t dt\ } }| d d| d   d| d   d| d  d  } |¡ || ¡  krd| d  d|   d d	|  d
 fksn J | d |d  | |  } |¡ |d¡  krÎ| | dfksÔn J | | d|   d | |  } |¡|d |d  d|  d fks J  ||¡ |d¡  krb| d | d  d|   d fkshn J  d |¡dksJ tt fdd d S )Nr-   r=   r>   r    r;   r<   rÕ   é   iÄÿÿÿéB   r   r!   r   c                      s      d¡S r&   r$  r(   r&  r(   r)   r*   |  r+   z'test_PolyElement_pdiv.<locals>.<lambda>)r   r   Zpdivr   rÝ   r'  r(   r&  r)   Útest_PolyElement_pdivn  s    2H0.Hr+  c                  C   sü   t dt\} }}|d d|d  |  d|d   |d d|   }}| |¡| ||¡  krt|d d|  kszn J | ||¡d|d  d|  d ks¢J |d |d  |d |d   }}| |¡| |d¡  krò|d |d  ksøn J d S )Nrv   r=   r<   r`   r   )r   r   Zpquorõ   r(   r(   r)   Útest_PolyElement_pquo~  s    64("r,  c                     sŸ   t dt\} }}|d |d  ||     ¡  |¡  krP|| ksVn J   |¡  d¡  kr|| d ksn J |d d|  d |d   tt fdd d S )Nrv   r<   r!   r    r?   c                      s
      ¡S rM   )Úpexquor(   rÌ   r(   r)   r*     r+   z)test_PolyElement_pexquo.<locals>.<lambda>)r   r   r-  r   r   rN   r(   rÌ   r)   Útest_PolyElement_pexquo  s    ,2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"   rF   r|   Úsr,   rü   r(   r(   r)   Útest_PolyElement_gcdex  s
    r0  c                  C   s  t dt\} }}|d | ||  ||  }}|d |d  }| |¡|||gksVJ | |d¡| ||¡  kr|||gksn J | ||¡|d | ||  || |d |d  gksÀJ d| | |d d|  |  }}| |¡|d | d|  d| | |d d|  gks J | d|d |d   }}| |¡|d |d  dgks^J |d | ||  | d }}| |¡|d | ||  dgks€J | d| d }}| |¡ddgksÎJ |d | |d |  }}| |¡|d | |d | gksJ d S )Nrv   r<   r    r   rë   r!   )r   r   Zsubresultants)r8   r"   r#   rF   r|   rü   r(   r(   r)   Útest_PolyElement_subresultants  s     0:">$(r1  c                  C   sL   t dt\} }|d d|  d |d d d  }}}| |¡|ksHJ d S )Nr"   r<   r!   r   )r   r   Z	resultant©r  r"   rF   r|   rü   r(   r(   r)   Útest_PolyElement_resultant¶  s    (r3  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"   rF   r|   r^   rq   ÚbÚcr(   r(   r)   Útest_PolyElement_discriminantŒ  s    &.r7  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	decomposer2  r(   r(   r)   Útest_PolyElement_decomposeÉ  s    Pr:  c                     sÂ   t dt\}   d d   d  d¡ d d   d ks@J  d d   d  dg¡ d d   d kstJ t dt\}    ddg¡ d d  ksªJ tt fdd d S )Nr"   r<   r!   rv   c                      s       d¡S r   )Úshiftr(   ©r"   r#   r(   r)   r*   Û  r+   z(test_PolyElement_shift.<locals>.<lambda>)r   r   r;  Z
shift_listr   r   )r  r8   r(   r<  r)   Útest_PolyElement_shiftÓ  s    24&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   r9  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"   rF   r(   r(   r)   Útest_PolyElement_sturmÝ  s    |2,>ürC  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"   rF   r(   r(   r)   Útest_PolyElement_gff_listê  s
    ( 0rD  c                  C   sd   t } t  td¡}|j}td| \}}}td|\}}}|| |  ¡ |d |d  d ks`J d S )Nr<   r-   )r   rm   r   Úunitr   Znorm)ÚkÚKZsqrt2r  r   r   r"   r#   r(   r(   r)   Útest_PolyElement_normó  s    rH  c                  C   sà   t dt td¡\} }|  ¡ j}|d d  ¡ dg|d dtd |  d |d d|d   d fksnJ t dt td¡\} }|  ¡ j}|d d  ¡ dg|d dtd |  d |d d|d   d fksÜJ d S )Nr"   r    r<   r!   r=   rë   )r   r   rm   r   Z	to_groundr"   Zsqf_norm)r8   r"   r   r(   r(   r)   Útest_PolyElement_sqf_normü  s    
L
rI  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"   rF   r|   rü   r!  r(   r(   r)   Útest_PolyElement_sqf_list  s     rJ  c                  C   sø   t dd tdtd d d  t dd dtd d  t dd dtd d  t d d tdtd d d  g} t| dd\}}|jt tdtdtd d  ¡ksºJ |jdksÈJ g }| D ]}| |j |¡¡ qÐ||ksôJ d S )	Nr    rã   rë   r`   r!   Trk   r(   )	r   r   r   r1   r   rm   r0   Úappendrn   )Úitemsr8   rq   ÚresultÚitemr(   r(   r)   Útest_issue_18894  s    ~,rO  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"   rF   rž   r¿   Úwr(   r(   r)   Útest_PolyElement_factor_list  s    rQ  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!   rZ   rÕ   rã   rà   )r   r   rì   )r8   r"   r!  r(   r(   r)   Útest_issue_21410(  s    $rR  c                  C   sN   t d} t|  }|d}| ¡ \}}|dks0J ||ks<J |jdu sJJ d S )Nr"   r   F)r   r   Z	primitiver  )r"   r8   Z	zero_polyZcontZprimr(   r(   r)   Útest_zero_polynomial_primitive.  s    rS  N)uÚ__doc__Ú	functoolsr   Úoperatorr   r   Zsympy.polys.ringsr   r   r   r   r	   Zsympy.polys.fieldsr
   r   Zsympy.polys.densebasicr   Zsympy.polys.domainsr   r   r   r   r   Zsympy.polys.orderingsr   r   Zsympy.polys.polyerrorsr   r   r   r   Zsympy.testing.pytestr   Z
sympy.corer   r   Zsympy.core.singletonr   Zsympy.core.numbersr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   r3   r9   r:   rG   rQ   rR   rS   r_   rc   rj   rr   rs   rt   ru   ry   r}   r   r   r   r   r   r   r   r   r    r¢   r£   r€   r©   r«   r­   rÃ   rÅ   rÈ   rß   rí   rò   ró   rö   rú   rþ   r   r  r  r  r  r  r  r  r  r  r  r   r"  r(  r+  r,  r.  r0  r1  r3  r7  r:  r=  rC  rD  rH  rI  rJ  rO  rQ  rR  rS  r(   r(   r(   r)   Ú<module>   s°   "

%	
%#
& >;&5Q!	'J


	

		
