o
    à8Va®¨  ã                   @   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$m%Z%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„ Z.dd„ Z/dd„ Z0d d!„ Z1d"d#„ Z2d$d%„ Z3d&d'„ Z4d(d)„ Z5d*d+„ Z6d,d-„ Z7d.d/„ Z8d0d1„ Z9d2d3„ Z:d4d5„ Z;d6d7„ Z<d8d9„ Z=d:d;„ Z>d<d=„ Z?d>d?„ Z@d@dA„ ZAdBdC„ ZBdDdE„ ZCdFdG„ ZDdHdI„ ZEdJdK„ ZFdLdM„ ZGdNdO„ ZHdPdQ„ ZIdRdS„ ZJdTdU„ ZKdVdW„ ZLdXdY„ ZMdZd[„ ZNd\d]„ ZOd^d_„ ZPd`da„ ZQdbdc„ ZRddde„ ZSdfdg„ ZTdhdi„ ZUdjdk„ ZVdldm„ ZWdndo„ ZXdpdq„ ZYdrds„ ZZdtdu„ Z[dvdw„ Z\dxdy„ Z]dzd{„ Z^d|d}„ Z_d~d„ Z`d€d„ Zad‚dƒ„ Zbd„d…„ Zcd†d‡„ Zddˆd‰„ ZedŠ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)ÚsqrtÚpiÚooÚexpc                  C   s  t tdƒ\} }}}ttdttƒjƒdksJ ‚tt| ttƒjƒdks#J ‚ttdttƒjƒdks0J ‚tt| ||fttƒjƒdks@J ‚ttdttƒjƒdksMJ ‚ttg ttƒjƒdksZJ ‚ttdd	„ ƒ td
t| tƒj	t| kspJ ‚td
dtƒj	t| ks}J ‚td
tdttƒtƒj	t| ksŽJ ‚ttdd	„ ƒ tdƒ}td
ttƒj
tks¤J ‚td
t|ƒj
tks¯J ‚td
tdƒj
tksºJ ‚tdttƒ}tdttƒ}tdttƒ}|j|jd ksÖJ ‚|j|jd ksàJ ‚|j|jksèJ ‚|j|jksðJ ‚|j|jksøJ ‚|j|jksJ ‚d S )NZxyztúx,y,zé   é   )ÚxÚyÚzÚ r   c                   S   s   t dttƒS ©Nr   ©r   r   r   © r'   r'   ú>/usr/lib/python3/dist-packages/sympy/polys/tests/test_rings.pyÚ<lambda>   ó    z(test_PolyRing___init__.<locals>.<lambda>r!   zZZ[t]Útc                   S   s   t dt dttƒtƒS )Nr!   r&   r'   r'   r'   r(   r)   "   ó    r   úx,y)Úmapr   Úlenr   r   r   Úgensr   r   ÚdomainZ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__4   s   r8   c                   C   sD  t dtƒd t dtƒd ksJ ‚t dtƒd t dtƒd u s J ‚t dtƒd t dtƒd ks0J ‚t dtƒd t dtƒd us@J ‚t dtƒd t dtƒd ksPJ ‚t dtƒd t dtƒd us`J ‚t dtƒd t dtƒd kspJ ‚t dtƒd t dtƒd us€J ‚t dtƒd t dtƒd ksJ ‚t dtƒd t dtƒd us J ‚d S )Nr   r   r-   )r   r   r   r'   r'   r'   r(   Útest_PolyRing___eq__8   s            $r9   c               	   C   s  t dtƒ\} }}}|  d¡| dƒksJ ‚|  d| | | ¡d| | | ks)J ‚|d d| |  d|  d|d   d|  d }|  dggdgdggg d	¢gg¡|ksXJ ‚|  ddddddd
œ¡|kshJ ‚|  g d¢¡|kssJ ‚t dtƒ\} |  dg¡| dƒks…J ‚d S )Nr   é   é   r   é   é   é   r    )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_newH   s   *4* rF   c                     sV  t dtƒ\‰ ‰‰} ˆ  ˆ¡tdttƒksJ ‚ˆ  ˆ¡tdttƒks#J ‚ˆ  | ¡tdttƒks0J ‚ˆ  d¡tdttƒks=J ‚ˆ  d¡ d¡tdttƒksMJ ‚ˆ  d¡ d¡ d¡tks\J ‚ˆ  d¡tdttƒksiJ ‚ˆ  d¡tdttƒksvJ ‚ˆ  d¡ d¡td	ttƒks†J ‚ˆ  d¡ d¡ d¡tks•J ‚tt‡ fd
d„ƒ tt‡ ‡‡fdd„ƒ d S )Nr   úy,zzx,zr-   r   r#   r    r;   r!   c                      ó
   ˆ   d¡S ©Nr   ©Údropr'   ©r7   r'   r(   r)   h   ó   
 z$test_PolyRing_drop.<locals>.<lambda>c                      s   ˆ   ˆ¡  ˆ¡S ©NrJ   r'   ©r7   r!   r"   r'   r(   r)   i   ó    )r   r   rK   r   r   r   Ú
ValueError©r#   r'   rO   r(   Útest_PolyRing_dropW   s     rS   c                  C   s~   t dtƒ\} }}}| dd … tdttƒksJ ‚| dd … tdttƒks%J ‚| dd … tdttƒks3J ‚| dd … tks=J ‚d S )Nr   r   r    rG   r;   r#   r   )r   r   r   r   r6   r'   r'   r(   Útest_PolyRing___getitem__k   s
   rT   c                  C   s|   t dttƒ} | jdu sJ ‚| jdu sJ ‚t dttƒ} | jdu s!J ‚| jdu s(J ‚t dttƒ} | jdu s5J ‚| jdu s<J ‚d S )Nr!   TFr   r$   )r   r   r   Zis_univariateZis_multivariaterL   r'   r'   r(   Útest_PolyRing_is_s   s   rU   c                     s~   t dtƒ\} ‰ ‡ fdd„tdƒD ƒ}|  |¡tt|ƒ  kr)dˆ d  d ks,J ‚ J ‚t dtƒ\} |  g d¢¡d	ks=J ‚d S )
Nr!   c                    ó    g | ]}ˆ d  d |  d ‘qS ©r;   r   r'   ©Ú.0Úi©r!   r'   r(   Ú
<listcomp>…   ó     z%test_PolyRing_add.<locals>.<listcomp>r<   r;   é   r$   )r;   r=   r:   é   )r   r   Úranger   r   ©r7   ÚFr'   r[   r(   Útest_PolyRing_addƒ   s
   4rc   c                     sž   t dtƒ\} ‰ ‡ fdd„tdƒD ƒ}|  |¡tt|ƒ  kr9ˆ d dˆ d   dˆ d   d	ˆ d
   d ks<J ‚ J ‚t dtƒ\} |  g d¢¡dksMJ ‚d S )Nr!   c                    rV   rW   r'   rX   r[   r'   r(   r\      r]   z%test_PolyRing_mul.<locals>.<listcomp>r<   é   r^   r>   éÎ   iè  r;   i±  r$   )r;   r   r=   é   )r   r   r`   r   r   ra   r'   r[   r(   Útest_PolyRing_mul   s
   Trg   c                  C   sœ  t dƒ\} }}}tdttƒ}t| d|  d|  ƒ||jd|j  d|j  fks+J ‚tdttƒ}t| d|  |d  ƒ||jd|j  |jd  fksNJ ‚t| d| |d gƒ||jd|j |jd gfksiJ ‚tdttƒ}td|tƒ}t| d| |  d|d  |  | ||ƒ||jd|j	 |j  d|j	d  |j  fks£J ‚tdttƒ}td|tƒ}t| || d  |d | d  | ||ƒ||j|j	|j d  |j	d |j d  fksÝJ ‚t
dttƒ}td|tƒ}t| d| |  |d | d  | ||ƒ||jd|j |j	  |j	d |j d  fksJ ‚tdƒtdƒ }t|dd\}}|jt tdƒtdƒ ¡ks9J ‚|jdksAJ ‚||j |¡ksLJ ‚d S )	Núx,y,z,tr   r;   r   r+   T)Ú	extensionr'   )r   r   r   r   r   r!   r"   r#   r   r+   r   r   r1   Úalgebraic_fieldr0   Z
from_sympy)r!   r"   r#   r+   r7   ÚRtÚrÚar'   r'   r(   Ú
test_sring—   s(   ::6\\^"rn   c                  C   s*   t dtƒ\} }}}t|| | ƒsJ ‚d S r3   r4   r6   r'   r'   r(   Útest_PolyElement___hash__³   s   ro   c                  C   s  t dttƒ\} }}|| d| |  dkdksJ ‚|| d| |  d| | kdks-J ‚d|| d| |  kdks=J ‚d| | || d| |  kdksQJ ‚|| ||  dkdks_J ‚d|| ||  kdksmJ ‚|| ||  dkdks{J ‚d|| ||  kdks‰J ‚|| ||  dkdks—J ‚d|| ||  kdks¥J ‚|| d| |  dkdksµJ ‚|| d| |  d| | kdksÉJ ‚d|| d| |  kdksÙJ ‚d| | || d| |  kdksíJ ‚|| ||  dkdksûJ ‚d|| ||  kdks
J ‚|| ||  dkdksJ ‚d|| ||  kdks(J ‚| jtddƒ  kr:| jks=J ‚ J ‚| jd  krL| jksOJ ‚ J ‚t dtƒ\}}t d|ƒ\} }}|d	 | | |d	 kdksoJ ‚|d	 | | |d
 kdks€J ‚d S )Nr-   r=   r>   FTr   r    r+   r   r<   )r   r   r   Zoner   )r7   r!   r"   rk   r+   r'   r'   r(   Útest_PolyElement___eq__·   s2    ( ( ( (*$"&rp   c                  C   sÜ   t dtƒ\} }}| dƒ|  k r|d   k r|d k s!J ‚ J ‚| dƒ|  kr7|d   kr7|d ks:J ‚ J ‚|d |d   krP|  krP| dƒksSJ ‚ J ‚|d |d   kri|  kri| dƒkslJ ‚ J ‚d S )Nr-   r    r;   r   )r   r   rO   r'   r'   r(   Útest_PolyElement__lt_le_gt_ge__Ü   s
   2226rq   c                  C   sN   t dtƒ\} }}}|| d|  }| ¡ }||ksJ ‚d|d< ||ks%J ‚d S )Nr   r   r:   ©r    r    r    )r   r   Úcopy)r7   r!   r"   r#   rE   Úgr'   r'   r(   Útest_PolyElement_copyå   s   ru   c                     s"  t dtƒ\} }}}d|d  | || |  d|d   d ‰| j\‰ }}dˆ d  | ˆ | |  d|d   d }ˆ|ksAJ ‚ˆ ¡ |ksIJ ‚tdƒ\‰ }}dˆ d  | ˆ | |  d|d   d }ˆ|kslJ ‚ˆ ˆ ||¡|kswJ ‚tt‡ ‡fdd„ƒ t dtƒ\} | dƒ ¡ dk d S )	Nr   r   r;   r:   r    c                      s
   ˆ  ˆ ¡S rN   )Úas_exprr'   ©ÚXrE   r'   r(   r)   ÿ   rM   z*test_PolyElement_as_expr.<locals>.<lambda>r$   )r   r   r   rv   r   rQ   )r7   r!   r"   r#   ÚYÚZrt   r'   rw   r(   Útest_PolyElement_as_exprï   s   ,,,r{   c                     sò  t dƒ\‰} }tˆ| |ftƒ\‰ }}}ˆ  d¡}|dkr"t|ˆ jƒs$J ‚ˆ  ˆ¡}||kr3t|ˆ jƒs5J ‚ˆ  ˆ|  | ¡}||| | krLt|ˆ jƒsNJ ‚ˆ  ˆ|  | ˆ|   ˆ ¡}||| | ||  | krqt|ˆ jƒssJ ‚ˆ  ˆd |  | ˆd | d   d ¡}||d | | |d |d   d kr¢t|ˆ jƒs¤J ‚ttdƒgƒ\}}| tdƒ¡}||d krÀt||jƒsÂJ ‚tt	‡ ‡fdd„ƒ tt	‡ ‡fd	d„ƒ tt	‡ ‡fd
d„ƒ tdtƒ\‰ ˆ  d¡}|dkrõt|ˆ jƒs÷J ‚d S )Nr   r    r   r;   r:   r   c                      s   ˆ   dˆ ¡S )Nr    ©Ú	from_exprr'   ©r7   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}   Ú
isinstanceÚdtyper   r   r   rQ   )r"   r#   rx   ry   rz   rE   rl   rb   r'   r~   r(   Útest_PolyElement_from_expr  s*   

 ,*8
r„   c                  C   sä  t dtƒ\} }}}| dƒ ¡ t u sJ ‚| dƒ ¡ dksJ ‚|d  ¡ dks(J ‚d|d  |  ¡ dks6J ‚||d  |  ¡ dksDJ ‚|d |d  |  ¡ dksTJ ‚| dƒ |¡t u s`J ‚| dƒ |¡dkskJ ‚|d  |¡dksvJ ‚d|d  |  |¡dks…J ‚||d  |  |¡dks”J ‚d|d  |d  |  |¡dks§J ‚| dƒ |¡t u s³J ‚| dƒ |¡dks¾J ‚|d  |¡dksÉJ ‚d|d  |  |¡dksØJ ‚||d  |  |¡dksçJ ‚d|d  |d  |  |¡dksúJ ‚| dƒ |¡t u sJ ‚| dƒ |¡dksJ ‚|d  |¡dksJ ‚d|d  |  |¡dks/J ‚||d  |  |¡dks?J ‚d|d  |d  |  |¡dksSJ ‚t dtƒ\} | dƒ ¡ t u seJ ‚| dƒ ¡ dkspJ ‚d S ©	Nr   r   r    r;   r   r=   r:   r$   )r   r   Zdegreer   r6   r'   r'   r(   Útest_PolyElement_degree#  s8    &&  (r†   c                  C   sH  t dtƒ\} }}}| dƒ ¡ t u sJ ‚| dƒ ¡ dksJ ‚|d  ¡ dks(J ‚d|d  |d |   ¡ dks:J ‚||d  |d |   ¡ dksLJ ‚|d |d  |d |   ¡ dks`J ‚| dƒ |¡t u slJ ‚| dƒ |¡dkswJ ‚|d  |¡dks‚J ‚d|d  |d |   |¡dks•J ‚||d  |d |   |¡dks¨J ‚d|d  |d  |d |   |¡dks¿J ‚| dƒ |¡t u sËJ ‚| dƒ |¡dksÖJ ‚|d  |¡dksáJ ‚d|d  |d |   |¡dksôJ ‚||d  |d |   |¡dksJ ‚d|d  |d  |d |   |¡dks J ‚| dƒ |¡t u s-J ‚| dƒ |¡dks9J ‚|d  |¡dksEJ ‚d|d  |d |   |¡dksYJ ‚||d  |d |   |¡dksmJ ‚d|d  |d  |d |   |¡dks…J ‚t dtƒ\} | dƒ ¡ t u s—J ‚| dƒ ¡ dks¢J ‚d S r…   )r   r   Ztail_degreer   r6   r'   r'   r(   Útest_PolyElement_tail_degreeF  s8   $$(&&.&(0((0r‡   c                  C   ór   t dtƒ\} }}}| dƒ ¡ t t t fksJ ‚| dƒ ¡ dks#J ‚|d | |d |d    ¡ dks7J ‚d S )Nr   r   r    rD   r;   r   )r   r    r;   )r   r   Zdegreesr   r6   r'   r'   r(   Útest_PolyElement_degreesi  ó    ,r‰   c                  C   rˆ   )Nr   r   r    rD   r;   r   r?   )r   r   Ztail_degreesr   r6   r'   r'   r(   Útest_PolyElement_tail_degreesp  rŠ   r‹   c                     sH  t dttƒ\} ‰‰‰dˆd  ˆ ˆˆ ˆ  dˆd   d ‰ ˆ  d¡dks)J ‚tt‡ fdd„ƒ ˆ  ˆ¡d	ks;J ‚ˆ  ˆ¡d	ksDJ ‚ˆ  ˆ¡d	ksMJ ‚ˆ  ˆd ˆ ¡dksZJ ‚ˆ  ˆˆ ˆ ¡d
ksgJ ‚ˆ  ˆd ¡dksrJ ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡‡fdd„ƒ tt‡ ‡fdd„ƒ t dtƒ\} | dƒ d¡dk d S )Nr   r   r;   r:   é   r    c                      rH   rI   ©Úcoeffr'   ©rE   r'   r(   r)   |  rM   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 rN   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   rQ   rL   r'   r’   r(   Útest_PolyElement_coeffw  s   ,r”   c                  C   sz   t dttƒ\} }}| dƒjtdƒksJ ‚tddƒ| jtddƒks#J ‚tddƒ| | tddƒ|  jtddƒks;J ‚d S ©Nr-   r   r    r;   r<   )r   r   r   ZLCrO   r'   r'   r(   Útest_PolyElement_LC  s   4r–   c                  C   sj   t dttƒ\} }}| dƒjdksJ ‚tddƒ| jdksJ ‚tddƒ| | tddƒ|  jdks3J ‚d S )	Nr-   r   ©r   r   r    r;   ©r    r   r<   ©r    r    )r   r   r   ZLMrO   r'   r'   r(   Útest_PolyElement_LM“  s   .rš   c                  C   s¶   t dttƒ\} }}| dƒjdtdƒfksJ ‚tddƒ| jdtddƒfks'J ‚tddƒ| | tddƒ|  jdtddƒfksAJ ‚t d	tƒ\} | dƒjd
ksPJ ‚| dƒjdksYJ ‚d S )Nr-   r   r—   r    r;   r˜   r<   r™   r$   )r'   r   )r'   r    )r   r   r   ZLTr   rO   r'   r'   r(   Útest_PolyElement_LT™  s   "4r›   c                  C   st   t dttƒ\} }}| dƒ ¡ dksJ ‚tddƒ|  ¡ |ks J ‚tddƒ| | tddƒ|   ¡ || ks8J ‚d S r•   )r   r   r   Zleading_monomrO   r'   r'   r(   Útest_PolyElement_leading_monom£  s   4rœ   c                  C   sˆ   t dttƒ\} }}| dƒ ¡ dksJ ‚tddƒ|  ¡ tddƒ| ks%J ‚tddƒ| | tddƒ|   ¡ tddƒ| | ksBJ ‚d S r•   )r   r   r   Zleading_termrO   r'   r'   r(   Útest_PolyElement_leading_term©  s   $>r   c                  C   sÀ  t dtƒ\} }}}|d d |d d  |d d   ¡ }|dtddƒfdtddƒfd	tddƒfgks5J ‚t d
ttƒ\} }}||d  d|d  |d   }| ¡ | t¡  krh| d¡  krhddgkskJ ‚ J ‚| t¡| d¡  kr~ddgksJ ‚ J ‚t d
ttƒ\} }}||d  d|d  |d   }| ¡ | t¡  kr´| d¡  kr´ddgks·J ‚ J ‚| t¡| d¡  krÊddgksÍJ ‚ J ‚t dtƒ\} | dƒ ¡ dgksÞJ ‚d S )Nr   r;   r   r<   r=   r?   r    ©r   r   r   ©r   r   r<   r-   r:   r   )rW   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 :, :,r¢   c                  C   s~  t dtƒ\} }}}|d d |d d  |d d   ¡ }|g d¢ks%J ‚t dttƒ\} }}||d  d|d  |d   }| ¡ | t¡  krX| d	¡  krXd
dgks[J ‚ J ‚| t¡| d¡  krndd
gksqJ ‚ J ‚t dttƒ\} }}||d  d|d  |d   }| ¡ | t¡  kr¤| d¡  kr¤dd
gks§J ‚ J ‚| t¡| d	¡  krºd
dgks½J ‚ J ‚d S )Nr   r;   r   r<   r=   )r?   rž   rŸ   r-   r:   r   rW   r    r   )r   r   Úmonomsr   r   r   )r7   r!   r"   r#   r£   rE   r'   r'   r(   Útest_PolyElement_monomsÃ  s   ( :, :0r¤   c                  C   s’  t dtƒ\} }}}|d d |d d  |d d   ¡ }|tddƒtddƒtddƒgks/J ‚t dttƒ\} }}||d  d|d  |d   }| ¡ | t¡  krb| d	¡  krbddgkseJ ‚ J ‚| t¡| d
¡  krxddgks{J ‚ J ‚t dttƒ\} }}||d  d|d  |d   }| ¡ | t¡  kr®| d
¡  kr®ddgks±J ‚ J ‚| t¡| d	¡  krÄddgksÇJ ‚ J ‚d S )Nr   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   ($ :, :0r¦   c                     sÜ  t dtƒ\} ‰ t dtƒ\}‰}t d|ƒ\}‰}}tˆd|  ƒdddœks'J ‚tˆˆ ƒtˆˆ ƒ  kr=dˆdœks@J ‚ J ‚tˆˆ|  ƒtˆ| ˆ ƒ  krZdˆdœks]J ‚ J ‚tˆˆ|  | ƒtˆ| | ˆ ƒ  kr|ddˆd	œksJ ‚ J ‚tˆˆ ˆ ƒtˆˆˆ  ƒ  kršd
ˆd iksJ ‚ J ‚tˆˆ ˆ|  ƒtˆ| ˆˆ  ƒ  kr»dˆdœks¾J ‚ J ‚tˆˆ ˆ|  | ƒtˆ| | ˆˆ  ƒ  kráddˆdœksäJ ‚ J ‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tdtƒ\}‰}t d|ƒ\}‰}}tˆˆ ƒtˆˆ ƒ  kr5dˆdœks8J ‚ J ‚t dtƒ\}‰}}tttƒˆ| |  ƒtˆ| | ttƒ ƒ  kritdƒttƒdœkslJ ‚ J ‚d S )Nr+   úu,vr   r   r    ©rA   ©r   r    r   ©rA   rD   ©r@   rD   ©r@   rC   rD   rA   ©r@   rA   ©r@   rC   rA   c                      ó   ˆ ˆ S rN   r'   r'   ©r+   r!   r'   r(   r)   ô  ó    z*test_PolyElement___add__.<locals>.<lambda>c                      ó   ˆˆ  S rN   r'   r'   r°   r'   r(   r)   õ  r±   c                      r¯   rN   r'   r'   ©r+   Úur'   r(   r)   ö  r±   c                      r²   rN   r'   r'   r³   r'   r(   r)   ÷  r±   ©rr   rD   ©r   r   Údictr   Ú	TypeErrorr
   r   r   ©rk   ÚRuvÚvÚRxyzr"   r#   ÚFuvr'   ©r+   r´   r!   r(   Útest_PolyElement___add__å  s&   2:D<BL6Zr¿   c                     sü  t dtƒ\} ‰ t dtƒ\}‰}t d|ƒ\}‰}}tˆd|  ƒdddœks'J ‚tˆ ˆ ƒtˆˆ ƒ  kr?dˆ dœksBJ ‚ J ‚tˆ ˆ|  ƒtˆ| ˆ ƒ  kr^dˆ d	œksaJ ‚ J ‚tˆ ˆ|  | ƒtˆ| | ˆ ƒ  kr‚ddˆ d
œks…J ‚ J ‚tˆ ˆ ˆ ƒtˆˆˆ  ƒ  kr¢dˆ d iks¥J ‚ J ‚tˆ ˆ ˆ|  ƒtˆ| ˆˆ  ƒ  krÅdˆ dœksÈJ ‚ J ‚tˆ ˆ ˆ|  | ƒtˆ| | ˆˆ  ƒ  kríddˆ dœksðJ ‚ J ‚tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tt‡ ‡fdd„ƒ tdtƒ\}‰}t d|ƒ\}‰}}tˆ ˆ ƒtˆˆ ƒ  krCdˆ dœksFJ ‚ J ‚t dtƒ\}‰}}tttƒ ˆ| |  ƒtˆ| | ttƒ ƒ  krytdƒttƒ dœks|J ‚ J ‚d S )Nr+   r§   r   r   r    éýÿÿÿr¨   rª   r«   r¬   rA   r­   r®   c                      ó   ˆ ˆ S rN   r'   r'   r°   r'   r(   r)     r±   z*test_PolyElement___sub__.<locals>.<lambda>c                      ó   ˆˆ  S rN   r'   r'   r°   r'   r(   r)     r±   c                      rÁ   rN   r'   r'   r³   r'   r(   r)     r±   c                      rÂ   rN   r'   r'   r³   r'   r(   r)     r±   rµ   r¶   r¹   r'   r¾   r(   Útest_PolyElement___sub__  s&   6>H@FP:^rÃ   c                     sp  t dtƒ\} ‰ t dtƒ\}‰}t d|ƒ\}‰}‰tˆˆ ƒtˆˆ ƒ  kr-dˆiks0J ‚ J ‚tdˆ ˆ ˆ ƒtˆd ˆ ˆ ƒ  krPdˆ ddœksSJ ‚ J ‚tˆd ˆ ˆ ƒtdˆ ˆ ˆ ƒ  krsdˆ ddœksvJ ‚ J ‚tdˆ ˆ ˆ ƒtˆd ˆ ˆ ƒ  kr–dˆ ddœks™J ‚ J ‚tˆˆ d ˆ ƒtˆˆ d ˆ ƒ  kr¹dˆ ddœks¼J ‚ J ‚tdˆ ˆ | ˆ ƒtˆ| d ˆ ˆ ƒ  kràdˆ ddœksãJ ‚ J ‚tˆd ˆ | ˆ ƒtdˆ | ˆ ˆ ƒ  kr	dˆ ddœksJ ‚ J ‚tdˆ ˆ | ˆ ƒtˆ| d ˆ ˆ ƒ  kr2dˆ ddœks5J ‚ J ‚tˆˆ | d ˆ ƒtˆ| ˆ d ˆ ƒ  kr[dˆ ddœks^J ‚ J ‚tdˆ | ˆ ˆ ƒt|ˆ d ˆ ˆ ƒ  kr„dˆ ddœks‡J ‚ J ‚tˆd | ˆ ˆ ƒtd| ˆ ˆ ˆ ƒ  kr­dˆ ddœks°J ‚ J ‚tdˆ | ˆ ˆ ƒt|ˆ d ˆ ˆ ƒ  krÖdˆ ddœksÙJ ‚ J ‚tˆ| ˆ d ˆ ƒt|ˆ ˆ d ˆ ƒ  krÿdˆ ddœksJ ‚ J ‚td	ˆ ˆ|  ˆ ƒtˆ| d	 ˆ ˆ ƒ  kr+d	ˆ d	ˆ dd
œks.J ‚ J ‚tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tt‡ ‡‡fdd„ƒ tdtƒ\}‰}t d|ƒ\}‰}‰tˆˆ ƒtˆˆ ƒ  kr‚dˆiks…J ‚ J ‚t dtƒ\}‰}‰tttƒˆ | ˆ ƒtˆ| ˆ ttƒ ƒ  kr³dttƒiks¶J ‚ J ‚d S )Nr+   r§   r   rA   r;   r    )rA   rC   )r@   rC   r   )rA   r©   rC   c                      ó   ˆ ˆ ˆ S rN   r'   r'   ©r+   r!   r#   r'   r(   r)   7  r*   z*test_PolyElement___mul__.<locals>.<lambda>c                      ó   ˆˆ  ˆ S rN   r'   r'   rÅ   r'   r(   r)   8  r*   c                      rÄ   rN   r'   r'   ©r+   r´   r#   r'   r(   r)   9  r*   c                      rÆ   rN   r'   r'   rÇ   r'   r(   r)   :  r*   rr   r¶   )rk   rº   r»   r¼   r"   r½   r'   )r+   r´   r!   r#   r(   Útest_PolyElement___mul__  s4   0FFFFNRRRRRRRX4TrÈ   c            	         s   t dtƒ\} ‰}}dˆd  d d ˆd d ksJ ‚dˆd  d d ˆd ks+J ‚ˆd d  ˆ¡ˆks8J ‚ˆd ˆ  ˆ¡ˆd ksGJ ‚ˆd d ˆ ˆˆd  ksWJ ‚ˆd ˆ ˆ ˆd kseJ ‚ˆd d dˆ  ˆd ˆd d  ks{J ‚ˆd d  dˆ ¡dksŠJ ‚ˆd ˆ ˆd  ˆd ˆ  ˆd ¡  kr¦ˆks©J ‚ J ‚t dtƒ\} ‰}}tˆd d |d d  |d d   ¡ ƒdksÌJ ‚t dtƒ\} ‰}}tˆd d |d d  |d d   ¡ ƒdksïJ ‚t d	tƒ\}‰t d
tƒ\}‰}t d|ƒ\}‰}}tˆd ˆ ˆ ˆ ƒˆddœksJ ‚tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ tt‡‡fdd„ƒ t dtƒ\} ‰ˆd dˆ  d | dƒ‰ ‰tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ t dtƒ\} ‰}ˆ| dˆ  d | dƒ‰ ‰tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fdd„ƒ tt	‡ ‡fd d„ƒ tt	‡ ‡fd!d„ƒ t dtƒ\} ‰ˆd d dˆ d ‰ ‰| dƒˆd d }}ˆ  
ˆ¡tˆ ˆƒ  kr:||fks=J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krO|ksRJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krd|ksgJ ‚ J ‚tt‡ ‡fd"d„ƒ dˆd  ˆd  ˆ d dˆd  dˆ  d ‰ ‰| dƒˆ }}ˆ  
ˆ¡tˆ ˆƒ  kr¨||fks«J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr½|ksÀJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krÒ|ksÕJ ‚ J ‚tt‡ ‡fd#d„ƒ dˆd  dˆd   dˆd   dˆ  d ˆd dˆ  d ‰ ‰dˆd  d$ˆ  d%ˆ d }}ˆ  
ˆ¡tˆ ˆƒ  kr(||fks+J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr=|ks@J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krR|ksUJ ‚ J ‚tt‡ ‡fd&d„ƒ dˆd  dˆd   dˆd   dˆd   ˆ ˆd dˆd   d' ‰ ‰dˆ d$ d(ˆd  dˆd   d)ˆ  d* }}ˆ  
ˆ¡tˆ ˆƒ  kr´||fks·J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krÉ|ksÌJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krÞ|ksáJ ‚ J ‚tt‡ ‡fd+d„ƒ t dtƒ\} ‰ˆd d dˆ d ‰ ‰ˆd d | dƒ}}ˆ  
ˆ¡tˆ ˆƒ  kr||fks"J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr4|ks7J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krI|ksLJ ‚ J ‚tt‡ ‡fd,d„ƒ dˆd  ˆd  ˆ d dˆd  dˆ  d ‰ ‰tddƒˆ td-d.ƒ td/d.ƒˆ td0d.ƒ }}ˆ  
ˆ¡tˆ ˆƒ  krŸ||fks¢J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr´|ks·J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krÉ|ksÌJ ‚ J ‚tt‡ ‡fd1d„ƒ t dtƒ\} ‰}ˆd |d  ˆ| ‰ ‰ˆ| | dƒ}}ˆ  
ˆ¡tˆ ˆƒ  kr	||fksJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr|ks!J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr3|ks6J ‚ J ‚ˆ  ˆ¡|ks@J ‚ˆd |d  ˆ| ‰ ‰ˆ| d|d  }}ˆ  
ˆ¡tˆ ˆƒ  krm||fkspJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr‚|ks…J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr—|ksšJ ‚ J ‚tt‡ ‡fd2d„ƒ ˆd |d  ˆ | ‰ ‰ˆ | d|d  }}ˆ  
ˆ¡tˆ ˆƒ  krÓ||fksÖJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krè|ksëJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krý|ks J ‚ J ‚tt‡ ‡fd3d„ƒ ˆd |d  dˆ d|  ‰ ‰| dƒˆ }}ˆ  
ˆ¡tˆ ˆƒ  kr7||fks:J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krL|ksOJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kra|ksdJ ‚ J ‚tt‡ ‡fd4d„ƒ t dtƒ\} ‰}ˆd |d  ˆ| ‰ ‰ˆ| | dƒ}}ˆ  
ˆ¡tˆ ˆƒ  kr¡||fks¤J ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr¶|ks¹J ‚ J ‚ˆ  ˆ¡ˆ ˆ   krË|ksÎJ ‚ J ‚ˆ  ˆ¡|ksØJ ‚ˆd |d  ˆ| ‰ ‰ˆ| d|d  }}ˆ  
ˆ¡tˆ ˆƒ  kr||fksJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr|ksJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr/|ks2J ‚ J ‚tt‡ ‡fd5d„ƒ ˆd |d  ˆ | ‰ ‰ˆ | d|d  }}ˆ  
ˆ¡tˆ ˆƒ  krk||fksnJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr€|ksƒJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr•|ks˜J ‚ J ‚tt‡ ‡fd6d„ƒ ˆd |d  dˆ d|  ‰ ‰ˆd |d  d|d  }}ˆ  
ˆ¡tˆ ˆƒ  kr×||fksÚJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   krì|ksïJ ‚ J ‚ˆ  ˆ¡ˆ ˆ   kr|ksJ ‚ J ‚tt‡ ‡fd7d„ƒ d S )8Nr   r;   r<   r   r    r   r   r=   r+   r§   rª   c                      s   ˆ ˆ d ˆ ˆ   S r€   r'   r'   )r´   r!   r'   r(   r)   a  r,   z.test_PolyElement___truediv__.<locals>.<lambda>c                      ó   ˆ ˆ S rN   r'   r'   r°   r'   r(   r)   c  r±   c                      ó   ˆˆ  S rN   r'   r'   r°   r'   r(   r)   d  r±   c                      rÉ   rN   r'   r'   r³   r'   r(   r)   e  r±   c                      rÊ   rN   r'   r'   r³   r'   r(   r)   f  r±   r!   c                      ó
   ˆ   ˆ¡S rN   ©Údivr'   ©rE   rt   r'   r(   r)   k  rM   c                      ó
   t ˆ ˆƒS rN   ©Údivmodr'   rÎ   r'   r(   r)   l  rM   c                      rË   rN   ©Úremr'   rÎ   r'   r(   r)   m  rM   c                      ó   ˆ ˆ S rN   r'   r'   rÎ   r'   r(   r)   n  r±   c                      rË   rN   ©Úquor'   rÎ   r'   r(   r)   o  rM   c                      rÉ   rN   r'   r'   rÎ   r'   r(   r)   p  r±   c                      rË   rN   ©Úexquor'   rÎ   r'   r(   r)   q  rM   r-   c                      rË   rN   rÌ   r'   rÎ   r'   r(   r)   v  rM   c                      rÏ   rN   rÐ   r'   rÎ   r'   r(   r)   w  rM   c                      rË   rN   rÒ   r'   rÎ   r'   r(   r)   x  rM   c                      rÔ   rN   r'   r'   rÎ   r'   r(   r)   y  r±   c                      rË   rN   rÕ   r'   rÎ   r'   r(   r)   z  rM   c                      rÉ   rN   r'   r'   rÎ   r'   r(   r)   {  r±   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   |  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   †  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   Ž  rM   r>   é   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   –  rM   é	   é   é,   é6   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   ž  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   ¨  rM   r_   é   é4   éo   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   °  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   Â  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   Ê  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   Ò  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   ä  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   ì  rM   c                      rË   rN   r×   r'   rÎ   r'   r(   r)   ô  rM   )r   r   rÖ   r/   r¡   r   r·   r   r¸   ÚZeroDivisionErrorrÍ   rÑ   rÓ   r   rØ   )	r7   r"   r#   rk   rº   r»   r¼   Úqrl   r'   )rE   rt   r+   r´   r!   r(   Útest_PolyElement___truediv__E  s  $  ,>44(0**60**F"0**N20**0**620**0**0**0**"0**0**0**0**"0**rã   c                     s°  t dttƒ\} }d| d ‰ ˆ d dksJ ‚ˆ d ˆ ksJ ‚tt‡ fdd„ƒ |d |d ks1J ‚ˆ d ˆ  d¡  krSˆ  d¡  krSd	|d  d
|  d ksVJ ‚ J ‚ˆ d ˆ  d¡  kr~ˆ  d¡  kr~d|d  d|d   d|  d ksJ ‚ J ‚ˆ d	 ˆ  d	¡  kr¯ˆ  d	¡  kr¯d|d	  d|d   d|d   d|  d ks²J ‚ J ‚ˆ d ˆ  d¡  kræˆ  d¡  kræd|d  d|d	   d|d   d|d   d|  d kséJ ‚ J ‚t dttƒ\} }}}|d | d| |d   d|  d ‰ |d |d  d	|d	  |d   d|d  | |  d|d  |  d	|d  |d	   d
| |d  |  d	| |d   d|d   d|  d }ˆ d ˆ  d¡  krnˆ  d¡  krn|ksqJ ‚ J ‚t dtƒ\} }d|d	  d|d   d  ‰ d!|d  d"|d#   d$|d
   d%|d&   d'|d   d(|d   d)|d	   d*|d   d+ }ˆ d	 ˆ  d	¡  krÓˆ  d	¡  krÓ|ksÖJ ‚ J ‚d S ),Nr!   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Ú   rd   é$   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   rQ   Z_pow_genericÚ_pow_multinomial)r7   r!   r"   r#   rt   r+   r'   r   r(   Útest_PolyElement___pow__ö  s<   JVbn(˜<"
ÿ
ÿ
ÿ
þ
þþ@rñ   c            	      C   s6  t dttƒ\} }|d d|d   d }|d }|d d|  d }d}| |g¡|g|fks1J ‚t dttƒ\} }|d d|  d }| | d	ƒg¡|gd
fksRJ ‚t dttƒ\} }|d d|  d }| | dƒg¡td	dƒ|d  | d	 gd
fks~J ‚t dttƒ\} }}d|d  | d| |  d|  d|  d }| | dƒg¡d|d  | ||  d|  | d gd
fksÀJ ‚| d| g¡d|d  | d	 gd| d fksÛJ ‚|d	 }|d	 }| |g¡d
g|fksðJ ‚||d  d	 }|| d	 |d	 g}|dg}d}| |¡||fksJ ‚|d | ||d   |d  }|| d	 |d d	 g}|| d	g}|| d	 }| |¡||fksHJ ‚|d d	 || d	 g}|d	 |g}d| d	 }| |¡||fkslJ ‚t dtƒ\} | dƒ | dƒ¡dks€J ‚t dtƒ\} | dƒ | dƒ¡tddƒd
fks™J ‚d S )Nr!   r   rä   r;   é*   rÚ   ræ   é…ÿÿÿr    r   r-   r<   rd   r   r$   )r   r   )r   r   r   rÍ   r   )	r7   r!   rE   rt   râ   rl   r"   ÚGÚQr'   r'   r(   Útest_PolyElement_div  sJ   40B6 *rö   c                  C   s~  t dttƒ\} }|d d|d   d }|d }d}| |g¡| |g¡d   kr/|ks2J ‚ J ‚t dttƒ\} }}d	|d  | d| |  d	|  d|  d
 }| | dƒg¡| | dƒg¡d   krldksoJ ‚ J ‚| d| g¡| d| g¡d   krŒd	| d
 ksJ ‚ J ‚|d }|d }| |g¡| |g¡d   kr¬|ks¯J ‚ J ‚||d  d }|| d |d g}d}| |¡| |¡d   krÖ|ksÙJ ‚ J ‚|d | ||d   |d  }|| d |d d g}|| d }| |¡| |¡d   kr|ksJ ‚ J ‚|d d || d g}d| d }| |¡| |¡d   kr:|ks=J ‚ J ‚d S )Nr!   r   rä   r;   rò   ró   r    r-   r<   rd   r   )r   r   r   rÓ   rÍ   )r7   r!   rE   rt   rl   r"   rô   r'   r'   r(   Útest_PolyElement_remN  s.   008@0, 04r÷   c                  C   s  t dtƒ\} }d|d   |d d|d   d ¡dd| |d d|  d gfks,J ‚t dtƒ\} }}| dƒ | dƒ¡dddgfksEJ ‚| dƒ | dƒ¡dddgfksVJ ‚| dƒ | dƒ¡dddgfksgJ ‚| dƒ d| ¡ddd| gfkszJ ‚d|  d| ¡dd| d| gfksJ ‚| dƒ d|d  ¡d	dd| gfks¤J ‚d|d   d|d  ¡d	d| d| gfks½J ‚|d |d  |d |  d }|d |d
  |d |  d }| |¡d|d |d  ||  d ||d
  ||  d gfksJ ‚d S )Nr!   r;   r<   r    )r;   r-   r   r™   )r    r;   r   )r;   r    )r   r   Zdeflate©r7   r!   r"   rE   rt   r'   r'   r(   Útest_PolyElement_deflatet  s   J"""&**2  Lrù   c            	         sî  t dtƒ\} }}| dƒ ¡ tdƒdfksJ ‚| dƒ ¡ tdƒdfks$J ‚| tddƒƒ ¡ dks1J ‚| tddƒƒ ¡ dks>J ‚d|d  |  ¡ dd|d  | fksTJ ‚|d tddƒ|   ¡ dd|d  | fksmJ ‚t dttƒ\}}}t dttƒ\‰ }}|tdd	ƒ|d   td
dƒ|d   tddƒ|d   tddƒ|d   tddƒ|d   tddƒ|d   tddƒ|  tddƒ |d tddƒ|d   tddƒ|d   td dƒ|d   td!d"ƒ|d   td#d"ƒ|d   td$dƒ|d   td%dƒ|  td&dƒ g}d'| d(|d   d)|d   d*|d   d+|d   d,|d   d-|d   d.|  d/ d|d  d0|d   d|d   d1|d   d2|d   d3|d   d4|d   d5|  d6 g}‡ fd7d8„|D ƒ|ksuJ ‚d S )9Nr-   r    r:   r   )r   r:   r;   zx,tl   ùÊO{‘]K•_É$í-é\·WåKÜ.j/%=udLhàL` l     :P·$¯GÌœ¢N„A3œVßC„ðc„8RNe]†Ú l   ©HBSWÜ~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^@*ß> rd   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)rY   rE   ©ZrZZr'   r(   r\   »  s    z1test_PolyElement_clear_denoms.<locals>.<listcomp>)r   r   rú   r   r   )	r7   r!   r"   ZrQQr+   rx   ÚTrb   rô   r'   rû   r(   Útest_PolyElement_clear_denomsˆ  s˜   ,2ÿþýüûúùÿþýüûúùø
ÿ
þ
ý
ü
û
úùø
	
ÿ
þ
ý
ü
û
úùø÷ rý   c            
      C   st  t dtƒ\} }}| dƒ| dƒ}}| |¡dksJ ‚| dƒ| dƒ}}| |¡dks,J ‚| dƒ| dƒ}}| |¡dks>J ‚| dƒ| dƒ}}| |¡dksPJ ‚| dƒd| d	 }}| |¡d| d	 dd
fkskJ ‚d| d	 | dƒ}}| |¡d| d	 d
dfks†J ‚| dƒ| dƒ}}| |¡dks˜J ‚| dƒ| dƒ}}| |¡dksªJ ‚| dƒ| dƒ}}| |¡dks¼J ‚| dƒ| dƒ}}| |¡dksÎJ ‚|d d|  d
 | d
ƒ}}| |¡d
|d d|  d
 d
fksñJ ‚|d d|  d
 | dƒ}}| |¡d
|d d|  d
 dfksJ ‚d|d  d	|  d | dƒ}}| |¡d|d d|  d
 d
fks;J ‚| dƒd|d  d	|  d }}| |¡dd
|d d|  d
 fksaJ ‚d|d  d	|  d |d
 }}| |¡|d
 d| d d
fks…J ‚|d
 d|d  d	|  d }}| |¡|d
 d
d| d fks©J ‚t dtƒ\} }}}}|d d|  d
 d| d }}| |¡|d
 |d
 dfksÕJ ‚|d |d  d|d  |  |d  ||  | |d d|  d
 }}|d
 |d | |d  | |d
 }}}	| |¡|||	fksJ ‚| |¡||	|fks*J ‚t dtƒ\} }}td
dƒ|d  | td
dƒ }td
dƒ| td
dƒ }|d
 }| |¡||td
dƒfksbJ ‚| |¡|td
dƒ|fksrJ ‚t dtƒ\} }}d| |d  d| |  d|  }d|d  }d| }| |¡||| || fks§J ‚| |¡||| || fks¸J ‚d S )Nr-   r   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   rh   gÍÌÌÌÌÌ @r   g      ð?)r   r   Z	cofactorsr   r   )
r7   r!   r"   rE   rt   r#   r+   ÚhZcffZ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   Zgcdrø   r'   r'   r(   Útest_PolyElement_gcd  s    r  c            
      C   sÚ  t dtƒ\} }}d|d  d|d   d|  }d|d  d|  }d| d }d}| |¡||fks5J ‚|  |¡| |fksBJ ‚| | ¡| |fksOJ ‚t dtƒ\} }}tddƒ|d  |d  tddƒ|  }tddƒ|d  tddƒ|  }d| d }d}| |¡||fksŽJ ‚|  |¡| |fks›J ‚| | ¡| |fks¨J ‚tdtƒ\}}t d|ƒ\}}	|d  d d |	 }|	d |d d d  }| |¡|d  d |	 d|	d  d|d   d fksëJ ‚d S )Nr-   r;   r   r<   r    r!   r+   )r   r   Zcancelr   r
   )
r7   r!   r"   rE   rt   rb   rô   ZFxrk   r+   r'   r'   r(   Útest_PolyElement_cancel  s*    ( @r  c                  C   sh   t dtƒ\} }}| dƒ ¡ dksJ ‚| dƒ ¡ dksJ ‚|d d|d   d|  d  ¡ dks2J ‚d S )Nr-   r   r    r   r<   r;   )r   r   Zmax_normrO   r'   r'   r(   Útest_PolyElement_max_norm7  ó   0r  c                  C   sh   t dtƒ\} }}| dƒ ¡ dksJ ‚| dƒ ¡ dksJ ‚|d d|d   d|  d  ¡ dks2J ‚d S )Nr-   r   r    r   r<   r;   rï   )r   r   Zl1_normrO   r'   r'   r(   Útest_PolyElement_l1_norm?  r  r  c                  C   sÌ  t dtƒ\} }tddƒ|d d  |d d  |d d	  |d
 d  d|d d  |d d	  |d d	   d|d d   d|d d   }| |d ¡tddƒ|d d  |d d  |d d	  |d
 d  d|d  |d d	  |d d	   d|d   ks†J ‚| |d ¡tddƒ|d d  |d d  |d d  |d
 d  d|d d  |d d	  |d d   ksÀJ ‚| |d
 ¡tddƒ|d d  |d d  |d d	  |d
  ksäJ ‚d S )Nzx:11i   r=   r   rd   r    r>   r<   r   rï   r;   i 	  r:   rç   i`  r^   é@  )r   r   Zdiff)r7   rx   rE   r'   r'   r(   Útest_PolyElement_diffG  s
   ‚|tLr  c                     sT  t dtƒ\} }d| d ‰ ˆ dƒdksJ ‚ˆ dƒdksJ ‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fd	d„ƒ t d
tƒ\} }}d| |d  d ‰ ˆ ddƒdksSJ ‚ˆ ddƒdks\J ‚|  |¡}ˆ dƒ|jd d ksnJ ‚ˆ dƒ|jd d ks{J ‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ d S )Nr!   r   r    r   r<   c                      ó   ˆ ƒ S rN   r'   r'   r   r'   r(   r)   W  ó    z+test_PolyElement___call__.<locals>.<lambda>c                      s
   ˆ ddƒS )Nr   r    r'   r'   r   r'   r(   r)   X  rM   c                      s   ˆ t ddƒƒS ©Nr    r:   ©r   r'   r   r'   r(   r)   Z  r   r-   r;   r:   é5   c                      r  rN   r'   r'   r   r'   r(   r)   g  r	  c                      s   ˆ dddƒS )Nr   r    r;   r'   r'   r   r'   r(   r)   h  r*   c                      s   ˆ dt ddƒƒS r
  r  r'   r   r'   r(   r)   j  rP   c                      s   ˆ t ddƒdƒS r
  r  r'   r   r'   r(   r)   k  rP   c                      s   ˆ t ddƒt ddƒƒS r
  r  r'   r   r'   r(   r)   l  r   )r   r   r   rQ   r   rK   r"   )r7   r!   r"   ZRyr'   r   r(   Útest_PolyElement___call__P  s&   
r  c                     sÚ  t dtƒ\} ‰ˆd dˆd   dˆ  d ‰ ˆ  ˆd¡}|dkr&t|tƒr(J ‚tt‡ ‡fdd„ƒ t dtƒ\} ‰‰}ˆˆ d dˆˆ d   dˆ ˆ  d ‰ ˆ  ˆd¡}|dkrdt||  ˆ¡jƒsfJ ‚ˆ  ˆdfˆdfg¡}|dkrt||  ˆˆ¡jƒsJ ‚ˆ  ˆd¡}|dkr”t||  ˆ¡jƒs–J ‚ˆ  ˆdfˆdfg¡}|dkr¯t||  ˆˆ¡jƒs±J ‚ˆ  ˆdfˆdf|dfg¡}|dkrÈt|tƒrÊJ ‚tt‡ ‡‡fd	d„ƒ tt‡ ‡‡fd
d„ƒ tt‡ ‡‡fdd„ƒ d S )Nr!   r   r<   r;   r   c                      ó   ˆ   ˆtddƒ¡S r
  ©Úevaluater   r'   ©rE   r!   r'   r(   r)   u  r“   z+test_PolyElement_evaluate.<locals>.<lambda>r   c                      ó   ˆ   ˆdfˆtddƒfg¡S r
  r  r'   r‘   r'   r(   r)   †  ó    c                      ó   ˆ   ˆtddƒfˆdfg¡S r
  r  r'   r‘   r'   r(   r)   ‡  r  c                      ó"   ˆ   ˆtddƒfˆtddƒfg¡S r
  r  r'   r‘   r'   r(   r)   ˆ  ó   " )	r   r   r  r‚   r	   r   r   rK   rƒ   ©r7   rl   r#   r'   r‘   r(   Útest_PolyElement_evaluaten  s(    ,  r  c                     s0  t dtƒ\} ‰ˆd dˆd   dˆ  d ‰ ˆ  ˆd¡}|dkr't|| jƒs)J ‚tt‡ ‡fdd„ƒ t dtƒ\} ‰‰}ˆd dˆd   dˆ  d ‰ ˆ  ˆd¡}|dkr\t|| jƒs^J ‚ˆ  ˆdfˆdfg¡}|dkrst|| jƒsuJ ‚tt‡ ‡‡fd	d„ƒ tt‡ ‡‡fd
d„ƒ tt‡ ‡‡fdd„ƒ d S )Nr!   r   r<   r;   r   c                      r  r
  ©Úsubsr   r'   r  r'   r(   r)   ‘  r“   z'test_PolyElement_subs.<locals>.<lambda>r   c                      r  r
  r  r'   r‘   r'   r(   r)   ›  r  c                      r  r
  r  r'   r‘   r'   r(   r)   œ  r  c                      r  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r't|| jƒs)J ‚ˆ  ˆˆ¡ˆ ks3J ‚ˆ  ˆˆd ¡ˆd dˆd   dˆd   d ksOJ ‚tt‡ ‡fdd„ƒ t d	tƒ\} ‰}}ˆd dˆd   dˆ  d ‰ ˆ  ˆd¡}|dkr‚t|| jƒs„J ‚ˆ  ˆdf|dfg¡}|dkr™t|| jƒs›J ‚ˆd dˆd   dˆ | |  d  ˆ||d  d
 ¡}||d  d
 d d||d  d
 d   d||d  d
  | |  d }||krét|| jƒsëJ ‚d S )Nr!   r   r<   r;   r   r>   c                      r  r
  )Úcomposer   r'   r  r'   r(   r)   ©  r“   z*test_PolyElement_compose.<locals>.<lambda>r   r    )r   r   r  r‚   rƒ   r   r   )r7   rl   r"   r#   râ   r'   r  r(   Útest_PolyElement_composeŸ  s     8 <Lr  c                     sL  t dtƒ\} ‰ }}ˆ ˆ  jdksJ ‚ˆ ˆ  jdksJ ‚ˆ ˆ  jdks$J ‚ˆ ˆ  jdks-J ‚ˆ ˆ  d jdks8J ‚ˆ ˆ  d jdksCJ ‚ˆ ˆ  d jdksNJ ‚ˆ ˆ  d jdksYJ ‚ˆ jdks`J ‚ˆ jdksgJ ‚ˆ jdksnJ ‚ˆ jdksuJ ‚ˆ | jdks~J ‚ˆ | jdks‡J ‚ˆ | jdksJ ‚ˆ | jdks™J ‚dˆ  jdks¢J ‚dˆ  jdks«J ‚dˆ  jdks´J ‚dˆ  jdks½J ‚dˆ  d jdksÈJ ‚dˆ  d jdksÓJ ‚dˆ  d jdksÞJ ‚dˆ  d jdkséJ ‚| dƒjdu sòJ ‚| dƒjdu sûJ ‚| dƒjdu sJ ‚| dƒjdu sJ ‚ˆ d jdu sJ ‚dˆ  d jdu s%J ‚dˆ  d j	du s1J ‚dˆ  d j	du s=J ‚ˆ | | d j
du sKJ ‚ˆ | | d j
du sYJ ‚ˆ | | d jdu sgJ ‚ˆ | | d jdu suJ ‚ˆ d jdu sJ ‚ˆ d d jdu s‹J ‚ˆ d ˆ  d jdu s™J ‚ˆ d dˆ   d jdu s©J ‚t d	td
ƒƒ\}}d| d jdu s¾J ‚d|d  d|  d jdu sÐJ ‚t dtƒ\}}|d |d  |d  |d  |d  |d  }|jdu s÷J ‚|d jdu sJ ‚tt‡ fdd„ƒ t dtƒ\} | dƒjdu sJ ‚| dƒjdu s$J ‚d S )Nr   FTr    r   r   r;   r<   r+   é   r:   r´   rç   r_   rï   rd   r>   c                      s   ˆ j S rN   )Úis_cyclotomicr'   r[   r'   r(   r)   û  r	  z&test_PolyElement_is_.<locals>.<lambda>r$   )r   r   Zis_generatorZ	is_groundZis_monomialZis_termZ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'   r[   r(   Útest_PolyElement_is_·  sh    $0r!  c                     sª   t dtƒ\} ‰ }‰| dƒ d¡j tdttƒksJ ‚| dƒ d¡ d¡j tdttƒks,J ‚t| dƒ d¡ d¡ d¡| jƒdu sAJ ‚tt‡fdd„ƒ tt‡ fd	d„ƒ d S )
Nr   r    r   rG   r#   Fc                      s   ˆ   d¡  d¡  d¡S r%   rJ   r'   rR   r'   r(   r)     r   z'test_PolyElement_drop.<locals>.<lambda>c                      rH   r%   rJ   r'   r[   r'   r(   r)   	  rM   )	r   r   rK   r   r   r‚   rƒ   r   rQ   )r7   r"   r'   )r!   r#   r(   Útest_PolyElement_drop  s    &*r"  c                  C   sˆ   t dtƒ\} }}|d |d  || }}|| d}}| |¡||fks'J ‚| |¡|ks0J ‚| |¡|ks9J ‚| |¡|ksBJ ‚d S )Nr-   r;   r   )r   r   ZpdivZpremZpquoZpexquo)r   r!   r"   rE   rt   râ   rl   r'   r'   r(   Útest_PolyElement_pdiv  s   r#  c                  C   sr   t dtƒ\} }d| |d d }}|d tddƒ d}}}| |¡||fks+J ‚| |¡|||fks7J ‚d S )Nr!   r;   rç   rë   r    )r   r   Z
half_gcdexZgcdex)r   r!   rE   rt   Ú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s+J ‚d S ©Nr!   r;   r    )r   r   Zsubresultants©r   r!   rE   rt   rÿ   r'   r'   r(   Útest_PolyElement_subresultants  s   0r(  c                  C   sL   t dtƒ\} }|d d|  d |d d d}}}| |¡|ks$J ‚d S )Nr!   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s"J ‚t dtƒ\}}}}t d|ƒ\} }||d  ||  | |d d| |  }}| ¡ |ksQJ ‚d S )	Nr!   r   r;   rÚ   é   ipÒÿÿza,b,cr<   )r   r   Zdiscriminant)r   r!   rE   rt   rb   rm   ÚbÚcr'   r'   r(   Útest_PolyElement_discriminant+  s   &.r-  c                  C   s®   t dtƒ\} }|d d|d   d|d   d|d   d	|d
   d|d   d|  d }|d
 d|  d }|d d|  }| ||¡|ksKJ ‚| ¡ ||gksUJ ‚d S )Nr!   rä   rÙ   rï   é–   rd   iô  r>   éq  r<   r;   r   rÚ   r=   )r   r   r  Z	decomposer'  r'   r'   r(   Útest_PolyElement_decompose8  s   Pr0  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_shiftB  s   6r2  c               	   C   sf  t dtƒ\} }td| ƒ\}}dd|d   |d  dd|d   |d	   d
d|d	   |d   dd|d	   |d   | dƒd |  | dƒd  }| ¡ |d d|d   |d	 d |  d|d	  d  d|d  d|  |d	 d  |d	  d | dƒd  | d|d	  d  d|d  d|d   d|d	   d|d  d|d	   d  gks±J ‚d S ) Nr+   r!   i   i	=  rd   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)rb   r+   r   r!   rE   r'   r'   r(   Útest_PolyElement_sturmF  s   |2,>ür8  c                  C   sÌ   t dtƒ\} }|d d|d   |d  d|d   }| ¡ |df|d dfgks+J ‚||d d  |d d  |d d  |d  }| ¡ |d d|  d df|d d|  d df|dfgksdJ ‚d S )Nr!   r=   r;   r<   r   r    )r   r   Zgff_list)r   r!   rE   r'   r'   r(   Útest_PolyElement_gff_listS  s
   ( 0Fr9  c                  C   sÜ   t dt tdƒ¡ƒ\} }|  ¡ j}|d d  ¡ d|d dtdƒ |  d |d d|d   d fks6J ‚t dt tdƒ¡ƒ\} }|  ¡ j}|d d  ¡ d|d dtdƒ |  d |d d|d   d fkslJ ‚d S )Nr!   r   r;   r    r<   rï   )r   r   rj   r   Z	to_groundr!   Zsqf_norm)r7   r!   rx   r'   r'   r(   Útest_PolyElement_sqf_norm\  s   
J
Nr:  c                  C   sž   t dtƒ\} }|d |d  |d  d }|d d|d   d|  d }|d }|d |d  | d }| ¡ |ks=J ‚| ¡ d|df|dfgfksMJ ‚d S )Nr!   r=   r   r;   r    r<   )r   r   Zsqf_partZsqf_list)r   r!   rE   rt   rÿ   Úpr'   r'   r(   Útest_PolyElement_sqf_listg  s    $r<  c                  C   st   t dtƒ\} }|d |d  |d  d }|d }|d }|d | d }| ¡ d|df|df|dfgfks8J ‚d S )Nr!   r=   r   r;   r    )r   r   Zfactor_list)r   r!   rE   r´   r»   Úwr'   r'   r(   Útest_PolyElement_factor_listr  s   *r>  c                  C   sl   t dtdƒƒ\} }|d |d  |d  |d  d }| d¡|d |d	  |d
  |d  d ks4J ‚d S )Nr!   r;   r>   r=   r<   r   r    r^   rÙ   rç   rä   )r   r   rð   )r7   r!   r;  r'   r'   r(   Útest_issue_21410~  s   $6r?  N)fÚ__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sympyr   r   r   r   r2   r8   r9   rF   rS   rT   rU   rc   rg   rn   ro   rp   rq   ru   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  r2  r8  r9  r:  r<  r>  r?  r'   r'   r'   r(   Ú<module>   s–    "

%	
##
& 2;&5Q!	J
	
	