
    g^                        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 Z,d Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;d  Z<d! Z=d" Z>d# Z?d$ Z@d% ZAd& ZBd' ZCd( ZDd) ZEd* ZFd+ ZGd, ZHd- ZId. ZJd/ ZKd0 ZLd1 ZMd2 ZNd3 ZOd4 ZPd5 ZQd6 ZRd7 ZSd8 ZTd9 ZUd: ZVd; ZWd< ZXd= ZYd> ZZd? Z[d@ Z\dA Z]dB Z^dC Z_dD Z`dE ZadF ZbdG ZcdH ZddI ZedJ ZfdK ZgdL ZhdM ZidN ZjdO ZkdP ZldQ ZmdR ZndS ZodT ZpdU ZqdV ZrdW ZsdXS )Yz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                     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    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            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            t          d          }t          d	t          t
                    j
        t
          k    sJ t          d	t          |          j
        t
          k    sJ t          d	t          d          j
        t
          k    sJ t          dt          t
                    }t          dt          t
                    }t          dt          t
                    }|j        |j        d         k    sJ |j        |j        d         k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ d S )Nxyztx,y,z      )xyz r   c                  8    t          dt          t                    S Nr   r	   r   r        X/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/tests/test_rings.py<lambda>z(test_PolyRing___init__.<locals>.<lambda>   s    HQC$8$8 r-   r%   zZZ[t]tc                  `    t          dt          dt          t                    t                    S )Nr%   r+   r,   r-   r.   r/   z(test_PolyRing___init__.<locals>.<lambda>%   s    HS(3C2H2H#$N$N r-   r   x,y)mapr   lenr	   r   r   gensr   r   domainorderr%   r&   )r%   r&   r'   r0   _lexR1R2R3s           r.   test_PolyRing___init__r<      s   VV$$JAq!QxS)).//14444x2s##())Q....xS116771<<<<xAq	2s++011Q6666xB$$)**a////xB$$)**a////
?88999CA$$+r!u4444C#&&-A6666C#r3//55<1EEEE
?NNOOO%==DCS!!'3....CT""(C////CU##)S0000	%S	!	!B	%S	!	!B	'2s	#	#B4271:4271:424<<<<424<<<<424<<<<424<<<<<<r-   c                  \    t          dt                    \  } }}}t          |           sJ d S Nr"   r   r   hashRr%   r&   r'   s       r.   test_PolyRing___hash__rC   7   s,    gr""JAq!Q77NNNNNr-   c                  z   t          dt                    d         t          dt                    d         k    sJ t          dt                    d         t          dt                    d         u sJ t          dt                    d         t          dt                    d         k    sJ t          dt                    d         t          dt                    d         usJ t          dt                    d         t          dt                    d         k    sJ t          dt                    d         t          dt                    d         usJ t          dt                    d         t          dt                    d         k    sJ t          dt                    d         t          dt                    d         usJ t          dt                    d         t          dt                    d         k    sJ t          dt                    d         t          dt                    d         usJ d S )Nr"   r   r2   )r   r   r   r,   r-   r.   test_PolyRing___eq__rE   ;   s   Q4#4#4Q#77777Q4#4#4Q#77777Q4#4#4Q#77777QtGR'8'8';;;;;Q4#4#4Q#77777QtGR'8'8';;;;;Q4r??1#55555QtE2q'99999r??1gr!2!21!55555r??1T'2%6%6q%9999999r-   c            	      l   t          dt                    \  } }}}|                     d           | d          k    sJ |                     d|z  |z  |z            d|z  |z  |z  k    sJ |dz  d|z  |z  z   d|z  z   d|dz  z  z   d|z  z   dz   }|                     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$   )rI   rJ   rK   )rH   r   r   r$   r$   r   r$   r   r   r   r   rH   r   r   r$   r   r   r   ))rL   r$   )rM   rH   )rN   r#   )rO   rI   )rP   rJ   )rQ   rK   r(   )r,   rG   )r   r   ring_new)rB   r%   r&   r'   fs        r.   test_PolyRing_ring_newrT   K   sq   gr""JAq!Q::a==AAaDD    ::ac!eAg!A#a%'))))	1qs1uqsQq!tV#ac)A-A::usQCj999+6771<<<<::!aAZ[hijjkkoppppp::vvvww{|||||	b"BA::wi  AAaDD((((((r-   c                  H   t          dt                    \  }                               t          dt          t                    k    sJ                               t          dt          t                    k    sJ                     |           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                     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
           t          t          fd           d S )Nr"   y,zzx,zr2   r   r'   r$   rH   r%   c                  .                          d          S Nr#   droprB   s   r.   r/   z$test_PolyRing_drop.<locals>.<lambda>k       qvvayy r-   c                  T                                                                   S NrY   rB   r%   r&   s   r.   r/   z$test_PolyRing_drop.<locals>.<lambda>l   s    qvvayy~~a00 r-   )r   r   rZ   r	   r   r   
ValueError)r'   rB   r%   r&   s    @@@r.   test_PolyRing_dropra   Z   s   GR  HAq166!99C00000066!99C00000066!99C00000066!99C00000066!99>>!b# 6 6666666!99>>!!!!$$****66!99C00000066!99C00000066!99>>!b# 6 6666666!99>>!!!!$$****
:(((()))
:00000011111r-   c                  Z   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    sJ | dd          t          k    sJ d S )Nr"   r   r$   rV   rH   r'   r#   )r   r   r	   r   rA   s       r.   test_PolyRing___getitem__rc   n   s    GR  HAq1QRR5HWb#......QRR5HUB,,,,,,QRR5HS"c******QRR5B;;;;;;r-   c                  ,   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 sJ | j        du sJ d S )Nr%   TFr"   r(   )r	   r   r   is_univariateis_multivariater[   s    r.   test_PolyRing_is_rg   v   s    b#A?d""""%%%%"c""A?e####$$$$RA?e####%%%%%%r-   c                  V   t          dt                    \  } fdt          d          D             }|                     |          t	          t          |          cxk    rddz  z  dz   k    sn J t          dt                    \  } |                     g d          dk    sJ d S )	Nr%   c                 ,    g | ]}d z  d |z  z   dz   S rH   r#   r,   .0ir%   s     r.   
<listcomp>z%test_PolyRing_add.<locals>.<listcomp>   )    ,,,Q!Q$1*q.,,,r-   rI   rH      r(   )rH   rJ   rG      )r   r   ranger   r   rB   Fr%   s     @r.   test_PolyRing_addru      s    R==DAq,,,,%((,,,A5588vc1~~44441a4"444444	b"BA55r!!!!!!r-   c                     t          dt                    \  } fdt          d          D             }|                     |          t	          t          |          cxk    r'dz  ddz  z  z   ddz  z  z   dd	z  z  z   d
z   k    sn J t          dt                    \  } |                     g d          dk    sJ d S )Nr%   c                 ,    g | ]}d z  d |z  z   dz   S rj   r,   rk   s     r.   rn   z%test_PolyRing_mul.<locals>.<listcomp>   ro   r-   rI      rp   rK      i  rH   i  r(   )rH   r#   rJ      )r   r   rr   r   r   rs   s     @r.   test_PolyRing_mulr{      s    R==DAq,,,,%((,,,A5588vc1~~SSSSA1a4#ad()BSAX)MPS)SSSSSSS	b"BA55r!!!!!!r-   c                  ^   t          dt                    \  } }}}t          t          fd           t          t          fd                               d          j        k    sJ                     d          | |z   |z   |z   k    sJ                     d          | |z  | |z  z   | |z  z   ||z  z   ||z  z   ||z  z   k    sJ                     d          | |z  |z  | |z  |z  z   | |z  |z  z   ||z  |z  z   k    sJ                     d          | |z  |z  |z  k    sJ d S )	Nx,y,z,tc                  .                          d          S Nsymmetric_polyr[   s   r.   r/   z.test_PolyRing_symmetric_poly.<locals>.<lambda>   s    q//33 r-   c                  .                          d          S )NrJ   r   r[   s   r.   r/   z.test_PolyRing_symmetric_poly.<locals>.<lambda>   s    q//22 r-   r   r$   rH   r#   rI   )r   r   r   r`   r   one)r%   r&   r'   r0   rB   s       @r.   test_PolyRing_symmetric_polyr      sh   B''MAq!Q
:3333444
:2222333A!%''''A!a%!)a-////A!A#!)ac/AaC"7!A#"=!"CCCCCA!A#a%!A#a%-!A#a%"7!A#a%"?????A!A#a%'))))))r-   c                     t          d          \  } }}}t          dt          t                    }t	          | d|z  z   d|z  z             ||j        d|j        z  z   d|j        z  z   fk    sJ t          dt          t                    }t	          | d|z  z   |dz  z             ||j        d|j        z  z   |j        dz  z   fk    sJ t	          | d|z  |dz  g          ||j        d|j        z  |j        dz  gfk    sJ t          dt          t                    }t          d|t                    }t	          | d|z  |z  z   d|dz  z  |z  z   | ||          ||j        d|j	        z  |j        z  z   d|j	        dz  z  |j        z  z   fk    sJ t          dt          t                    }t          d|t                    }t	          | ||z  dz  z   |dz  |z  dz  z   | ||          ||j        |j	        |j        z  dz  z   |j	        dz  |j        z  dz  z   fk    sJ t          dt          t                    }t          d|t                    }t	          | d|z  |z  z   |dz  |z  dz  z   | ||          ||j        d|j        z  |j	        z  z   |j	        dz  |j        z  dz  z   fk    sJ t          d          t          d          z
  }t	          |d          \  }}|j        t          j        t          d          t          d          z             k    sJ |j        dk    sJ ||j                            |          k    sJ d S )	Nr}   r"   rH   r#   r0   T	extensionr,   )r   r	   r   r   r   r%   r&   r'   r   r0   r   r   r6   algebraic_fieldr5   
from_sympy)r%   r&   r'   r0   rB   Rtras           r.   
test_sringr      sA   ##JAq!Q"c""AQqS1Q3AqsQqsU{QqsU':#;;;;;"c""AQqS1Q3AqsQqsU{QSU':#;;;;;!QqS!A#AQqsUACE':#;;;;;	#r3		B"c""AQqSUQq!tVAX%q!Q//AqsQrtVACZ7G!BDRSG)TUTW-7W3XXXXX	#r3		B"c""AQqSUQT!VAX%q!Q//AqsRT!#XaZ7G"$PQ'RSRU+VW-7W3XXXXX	3C	 	 B"c""AQqSUQT!VAX%q!Q//AqsQqsU24Z7G"$PQ'RSRU+VW-7W3XXXXXQ$q''Ad###DAq8r)$q''DGG*;<<<<<<6R<<<<##A&&&&&&&&r-   c                  h    t          dt                    \  } }}}t          ||z  |z            sJ d S r>   r?   rA   s       r.   test_PolyElement___hash__r      s9    gr""JAq!Q!A;;r-   c                     t          dt          t                    \  } }}||z  d|z  |z  z   dk    dk    sJ ||z  d|z  |z  z   d|z  |z  k    dk    sJ d||z  d|z  |z  z   k    dk    sJ d|z  |z  ||z  d|z  |z  z   k    dk    sJ ||z  ||z  z
  dk    dk    sJ d||z  ||z  z
  k    dk    sJ ||z  ||z  z
  dk    dk    sJ d||z  ||z  z
  k    dk    sJ ||z  ||z  z
  dk    dk    sJ d||z  ||z  z
  k    dk    sJ ||z  d|z  |z  z   dk    dk    sJ ||z  d|z  |z  z   d|z  |z  k    dk    sJ d||z  d|z  |z  z   k    dk    sJ d|z  |z  ||z  d|z  |z  z   k    dk    sJ ||z  ||z  z
  dk    dk    sJ d||z  ||z  z
  k    dk    sJ ||z  ||z  z
  dk    dk    sJ d||z  ||z  z
  k    dk    sJ | j        t	          dd          cxk    r| j        k    sn J | j        dcxk    r| j        k    sn J t          dt                    \  }}t          d|          \  } }}|d	z  |z  |z  |d	z  k    dk    sJ |d	z  |z  |z  |d
z  k    dk    sJ d S )Nr2   rJ   rK   FTr   r$   r0   r#   rI   )r   r   r   r   r   )rB   r%   r&   r   r0   s        r.   test_PolyElement___eq__r      s   5"c""GAq!qS1Q3q5[Q5((((qS1Q3q5[QqSU"t++++!A#!A+5((((aCEacAaCEk"t++++qS1Q3Y1%%%%!A#!)%%%%qS1Q3Y1&&&&!A#!)&&&&qS1Q3Y1&&&&!A#!)&&&&qS1Q3q5[Q4''''qS1Q3q5[QqSU"u,,,,!A#!A+4''''aCEacAaCEk"u,,,,qS1Q3Y1&&&&!A#!)&&&&qS1Q3Y1%%%%!A#!)%%%%5Bq!HH%%%%%%%%%%5AbMMEB5"ooGAq!qDF1H1%%%%qDF1H1&&&&&&r-   c                  p   t          dt                    \  } }} | d          |cxk     r|dz  cxk     r	|dz  k     sn J  | d          |cxk    r|dz  cxk    r	|dz  k    sn J |dz  |dz  cxk    r|cxk    r | d          k    sn J |dz  |dz  cxk    r|cxk    r | d          k    sn J d S )Nr2   r$   rH   r#   )r   r   r_   s      r.   test_PolyElement__lt_le_gt_ge__r      s'   5"ooGAq!1Q44!!!!!ad!!!!QT!!!!!!1Q441$$$$1$$$$1$$$$$$a4!Q$!!!!!!!!QQqTT!!!!!!a41a4$$$$1$$$$!$$$$$$$$r-   c                     t          d          \  } }t          t          t          |          t          | |f         t          |          |         fD ]3}t          d|          \  }}t	          d|dz  z  dz             dk    sJ 4t
          t
          |          fD ]3}t          d|          \  }}t	          d|dz  z  dz             dk    sJ 4d S )Nx, yr0   rH   r$   z
2*t**2 + 1zEX(2)*t**2 + EX(1))r   r   r   r   strr   )r%   r&   domrB   r0   s        r.   test_PolyElement__str__r      s    6??DAqB1r!A#w1a1 / /C~~11QT6A:,.....BqE{ 7 7C~~11QT6A:"6666667 7r-   c                      t          dt                    \  } }}}||z  d|z  z   }|                                }||k    sJ d|d<   ||k    sJ d S )Nr"   r#   rG   r$   r$   r$   )r   r   copy)rB   r%   r&   r'   rS   gs         r.   test_PolyElement_copyr      s^    gr""JAq!Q	!ac	A	A6666AiL666666r-   c                  n  
 t          dt                    \  } }}}d|dz  z  |z  ||z  |z  z
  d|dz  z  z   dz   | j        \  
}}d
dz  z  |z  
|z  |z  z
  d|dz  z  z   dz   }|k    sJ                                 |k    sJ t          d          \  }}}	d|dz  z  |z  ||z  |	z  z
  d|	dz  z  z   dz   }|k    sJ                     |||	          |k    sJ t	          t
          
fd           t          dt                    \  }  | d                                          dk    sJ d S )	Nr"   r#   rH   rG   r$   zu,v,wc                  .                                    S r^   )as_expr)XrS   s   r.   r/   z*test_PolyElement_as_expr.<locals>.<lambda>  s    qyy|| r-   r(   )r   r   r   r   r   r`   )rB   r%   r&   r'   YZr   UVWr   rS   s             @@r.   test_PolyElement_as_exprr   	  sr   gr""JAq!Q	!Q$q1Q3q51QT6!A%AiGAq!	!Q$q1Q3q51QT6!A%A666699;;!gGAq!	!Q$q1Q3q51QT6!A%A666699Q1""""
:+++++,,,	b"BA1Q44<<>>Qr-   c                    	 t          d          \  	} }t          	| |ft                    \  }}}                    d          }|dk    rt	          |j                  sJ                     	          }||k    rt	          |j                  sJ                     	| z  |z            }|||z  |z  k    rt	          |j                  sJ                     	| z  |z  	| z  z   	z             }|||z  |z  ||z  z   |z   k    rt	          |j                  sJ                     	dz  | z  |z  	dz  | dz  z  z   dz             }||dz  |z  |z  |dz  |dz  z  z   dz   k    rt	          |j                  sJ t          t          d          g          \  }}|                    t          d                    }||d         k    rt	          ||j                  sJ t          t          	fd           t          t          	fd           t          t          	fd	           t          d
t                    \                      d          }|dk    rt	          |j                  sJ d S )Nr"   r$   r#   rH   rG   r   c                  4                          dz            S Nr$   	from_exprrB   r%   s   r.   r/   z,test_PolyElement_from_expr.<locals>.<lambda>5  s    q{{1Q3// r-   c                  4                          dz            S NrH   r   r   s   r.   r/   z,test_PolyElement_from_expr.<locals>.<lambda>6  s    q{{1a400 r-   c                  T                          dz  t          d          z             S )NrG   rH   )r   r   r   s   r.   r/   z,test_PolyElement_from_expr.<locals>.<lambda>7  s!    q{{1Q3a=99 r-   r(   )
r   r   r   r   
isinstancedtyper   r   r   r`   )
r&   r'   r   r   r   rS   r   rt   rB   r%   s
           @@r.   test_PolyElement_from_exprr     s   gGAq!q!Qi$$JAq!Q	AA66jAG,,666	AA66jAG,,666	AaCEA!A::*Q00:::	AaCEAaCK!O$$A!A!aJq!'$:$:	AqDF1Hq!tAqDy(1,--A1Qq1a419$q(((Z17-C-C(((#a&&??DAq	CFFA!99Aqw//999
://///000
:00000111
:99999:::	b"BA	AA66jAG,,66666r-   c                     t          dt                    \  } }}}t          t          d          k    sJ  | d                                          t          u sJ  | d                                          dk    sJ |dz                                   dk    sJ d|dz  z  |z                                   dk    sJ ||dz  z  |z                                   dk    sJ |dz  |dz  z  |z                                   dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |z                       |          dk    sJ ||dz  z  |z                       |          dk    sJ d|dz  z  |dz  z  |z                       |          dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |z                       |          dk    sJ ||dz  z  |z                       |          dk    sJ d|dz  z  |dz  z  |z                       |          dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |z                       |          dk    sJ ||dz  z  |z                       |          dk    sJ d|dz  z  |dz  z  |z                       |          dk    sJ t          d	t                    \  }  | d                                          t          u sJ  | d                                          dk    sJ d S )
Nr"   z-infr   r$   rH   r#   rJ   rG   r(   )r   r   r   floatdegreerA   s       r.   test_PolyElement_degreer   =  s7   GR  HAq15==    1Q44;;==D    1Q44;;==AE>>q    adFQJ  A%%%%adFQJ  A%%%%qDAIM!!##q((((1Q44;;q>>T!!!!1Q44;;q>>QE>>!!!!!adFQJq!!Q&&&&adFQJq!!Q&&&&adF1a4K!O##A&&!++++1Q44;;q>>T!!!!1Q44;;q>>QE>>!!!!!adFQJq!!Q&&&&adFQJq!!Q&&&&adF1a4K!O##A&&!++++1Q44;;q>>T!!!!1Q44;;q>>QE>>!!!!!adFQJq!!Q&&&&adFQJq!!Q&&&&adF1a4K!O##A&&!++++	b"BA1Q44;;==D    1Q44;;==Ar-   c                  P   t          dt                    \  } }}} | d                                          t          u sJ  | d                                          dk    sJ |dz                                   dk    sJ d|dz  z  |dz  |z  z                                   dk    sJ ||dz  z  |dz  |z  z                                   dk    sJ |dz  |dz  z  |dz  |z  z                                   dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |dz  |z  z                       |          dk    sJ ||dz  z  |dz  |z  z                       |          dk    sJ d|dz  z  |dz  z  |dz  |z  z                       |          dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |dz  |z  z                       |          dk    sJ ||dz  z  |dz  |z  z                       |          dk    sJ d|dz  z  |dz  z  |dz  |z  z                       |          dk    sJ  | d                              |          t          u sJ  | d                              |          dk    sJ |dz                       |          dk    sJ d|dz  z  |dz  |z  z                       |          dk    sJ ||dz  z  |dz  |z  z                       |          dk    sJ d|dz  z  |dz  z  |dz  |z  z                       |          dk    sJ t          dt                    \  }  | d                                          t          u sJ  | d                                          dk    sJ d S )	Nr"   r   r$   rH   r#   rJ   rG   r(   )r   r   tail_degreer   rA   s       r.   test_PolyElement_tail_degreer   b  s   GR  HAq11Q44%%%%1Q44""""E  A%%%%adFQT!VO((**a////adFQT!VO((**a////qDAI1Q++--22221Q44A$&&&&1Q44A!####Eq!!Q&&&&adFQT!VO((++q0000adFQT!VO((++q0000adF1a4K!Q$q& --a00A55551Q44A$&&&&1Q44A!####Eq!!Q&&&&adFQT!VO((++q0000adFQT!VO((++q0000adF1a4K!Q$q& --a00A55551Q44A$&&&&1Q44A!####Eq!!Q&&&&adFQT!VO((++q0000adFQT!VO((++q0000adF1a4K!Q$q& --a00A5555	b"BA1Q44%%%%1Q44""""""r-   c                  B   t          dt                    \  } }}} | d                                          t          t          t          fk    sJ  | d                                          dk    sJ |dz  |z  |dz  |dz  z  z                                   dk    sJ d S )Nr"   r   r$   rQ   rH   r#   )r#   r$   rH   )r   r   degreesr   rA   s       r.   test_PolyElement_degreesr     s    GR  HAq11Q44<<>>dD$/////1Q44<<>>Y&&&&qDFQT!Q$Y''))Y666666r-   c                  B   t          dt                    \  } }}} | d                                          t          t          t          fk    sJ  | d                                          dk    sJ |dz  |z  |dz  |dz  z  z                                   dk    sJ d S )Nr"   r   r$   rQ   rH   r#   rL   )r   r   tail_degreesr   rA   s       r.   test_PolyElement_tail_degreesr     s    GR  HAq11Q444t"444441Q44)++++qDFQT!Q$Y,,..);;;;;;r-   c                  h   t          dt          t                    \  } ddz  z  z  z  z  z
  ddz  z  z   dz                       d          dk    sJ t	          t
          fd                                         dk    sJ                               dk    sJ                               dk    sJ                     dz  z            dk    sJ                     z  z            d	k    sJ                     dz            dk    sJ t	          t
          fd
           t	          t
          fd           t	          t
          fd           t          dt                    \  }  | d                              d          dk    sJ d S )Nr"   r#   rH   rG      r$   c                  .                          d          S rX   coeffrS   s   r.   r/   z(test_PolyElement_coeff.<locals>.<lambda>  s    qwwqzz r-   r   r   c                  @                          ddz  z  z            S )Nr#   rH   r   rS   r%   r&   s   r.   r/   z(test_PolyElement_coeff.<locals>.<lambda>  s    qwwqAvax00 r-   c                  <                           z  z            S r^   r   )rS   r%   r&   r'   s   r.   r/   z(test_PolyElement_coeff.<locals>.<lambda>  s    qwwr!tAv r-   c                  :                          ddz  z            S )NrG   r#   r   )rS   r'   s   r.   r/   z(test_PolyElement_coeff.<locals>.<lambda>  s    qwwqAv r-   r(   )r   r   r   r   r   r`   )rB   rS   r%   r&   r'   s    @@@@r.   test_PolyElement_coeffr     s   gr3''JAq!Q	!Q$q1Q3q51QT6!B&A771::
:))))***771::????771::????771::????771a46??a771Q3q5>>R771a4==A
:000000111
:.......///
:.....///	b"BA1Q44::a==Ar-   c                  h   t          dt          t                    \  } }} | d          j        t          d          k    sJ t          dd          |z  j        t          dd          k    sJ t          dd          |z  |z  t          dd          |z  z   j        t          dd          k    sJ d S Nr2   r   r$   rH   rI   )r   r   r   LCr_   s      r.   test_PolyElement_LCr     s    5"c""GAq!1Q447beeqGGAI>R1XX%%%%qGGAIaK"Qq''!)#'2a88333333r-   c                     t          dt          t                    \  } }} | d          j        dk    sJ t          dd          |z  j        dk    sJ t          dd          |z  |z  t          dd          |z  z   j        dk    sJ d S )	Nr2   r   r   r   r$   rH   r$   r   rI   r$   r$   )r   r   r   LMr_   s      r.   test_PolyElement_LMr     s    5"c""GAq!1Q447fqGGAI>V####qGGAIaK"Qq''!)#'6111111r-   c                     t          dt          t                    \  } }} | d          j        dt          d          fk    sJ t          dd          |z  j        dt          dd          fk    sJ t          dd          |z  |z  t          dd          |z  z   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 )Nr2   r   r   r$   rH   r   rI   r   r(   )r,   r   )r,   r$   )r   r   r   LTr   r_   s      r.   test_PolyElement_LTr     s    5"c""GAq!1Q447vr!uuo%%%%qGGAI>fbAhh/////qGGAIaK"Qq''!)#'FBq!HH+=====	b"BA1Q447g1Q447gr-   c                  j   t          dt          t                    \  } }} | d                                          dk    sJ t          dd          |z                                  |k    sJ t          dd          |z  |z  t          dd          |z  z                                   ||z  k    sJ d S r   )r   r   r   leading_monomr_   s      r.   test_PolyElement_leading_monomr     s    5"c""GAq!1Q441$$$$qGGAI$$&&!++++qGGAIaK"Qq''!)#2244!;;;;;;r-   c                     t          dt          t                    \  } }} | d                                          dk    sJ t          dd          |z                                  t          dd          |z  k    sJ t          dd          |z  |z  t          dd          |z  z                                   t          dd          |z  |z  k    sJ d S r   )r   r   r   leading_termr_   s      r.   test_PolyElement_leading_termr     s    5"c""GAq!1Q44!####qGGAI##%%Aa2222qGGAIaK"Qq''!)#1133r!Awwqy{BBBBBBr-   c                     t          dt                    \  } }}}|dz  dz  |dz  dz  z   |dz  dz  z                                   }|dt          dd          fdt          dd          fd	t          dd          fgk    sJ t          d
t          t                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t                    cxk    r"|                    d          cxk    rddgk    sn J |                    t
                    |                    d          cxk    rddgk    sn J t          d
t          t
                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t
                    cxk    r"|                    d          cxk    rddgk    sn J |                    t                    |                    d          cxk    rddgk    sn J t          dt                    \  }  | d                                          dgk    sJ d S )Nr"   rH   r#   rI   rJ   rL   r$   r   r#   r   r   r   rI   r2   rG   r   )rj   rH   )r$   rG   r$   r   r(   )r,   r#   )r   r   termsr   r   r   )rB   r%   r&   r'   r   rS   s         r.   test_PolyElement_termsr     s\   GR  HAq1T!Vad1f_q!tAv%,,..Egr!Aww''2a77);gr!Aww=OPPPPP%S!!FAq	!Q$1a41A7799TTTTTTTT;:TTTTTTT775>>QWWW--KKKK+{1KKKKKKK%U##FAq	!Q$1a41A7799XXXX!'''*:*:XXXX{K>XXXXXXX773<<1775>>GGGGk;-GGGGGGG	b"BA1Q44::<<G9$$$$$$r-   c                     t          dt                    \  } }}}|dz  dz  |dz  dz  z   |dz  dz  z                                   }|g dk    sJ t          dt          t                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t                    cxk    r"|                    d	          cxk    rd
dgk    sn J |                    t
                    |                    d          cxk    rdd
gk    sn J t          dt          t
                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t
                    cxk    r"|                    d          cxk    rdd
gk    sn J |                    t                    |                    d	          cxk    rd
dgk    sn J d S )Nr"   rH   r#   rI   rJ   )rL   r   r   r2   rG   r   rj   r   r   )r   r   monomsr   r   r   )rB   r%   r&   r'   r   rS   s         r.   test_PolyElement_monomsr     s   GR  HAq1d1fq!tAvo1Q&..00F0000000%S!!FAq	!Q$1a41A88::#MMMM!((5//MMMMff=MMMMMMM88E??ahhw//CCCCFF3CCCCCCC%U##FAq	!Q$1a41A88::%QQQQAHHW,=,=QQQQ&&AQQQQQQQ88C==AHHUOO????/?????????r-   c                  (   t          dt                    \  } }}}|dz  dz  |dz  dz  z   |dz  dz  z                                   }|t          dd          t          dd          t          dd          gk    sJ t          dt          t                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t                    cxk    r"|                    d	          cxk    rddgk    sn J |                    t
                    |                    d
          cxk    rddgk    sn J t          dt          t
                    \  } }}||dz  z  d|dz  z  |dz  z  z   }|                                |                    t
                    cxk    r"|                    d
          cxk    rddgk    sn J |                    t                    |                    d	          cxk    rddgk    sn J d S )Nr"   rH   r#   rI   rJ   r$   r2   rG   r   r   )r   r   coeffsr   r   r   )rB   r%   r&   r'   r   rS   s         r.   test_PolyElement_coeffsr     s   GR  HAq1d1fq!tAvo1Q&..00Fb1ggr!Aww1Q00000%S!!FAq	!Q$1a41A88::#CCCC!((5//CCCCaVCCCCCC88E??ahhw//9999Aq6999999%U##FAq	!Q$1a41A88::%GGGGAHHW,=,=GGGG!QGGGGGG88C==AHHUOO55551v55555555r-   c                  ~  	 t          dt                    \  } t          dt                    \  }}t          d|          \  }	}}t          	d|z  z             dddk    sJ t          	z             t          	z             cxk    r	ddk    sn J t          	|z  z             t          	|z  z             cxk    r	ddk    sn J t          	|z  z   |z             t          	|z  |z   z             cxk    r
ddd	k    sn J t          	z  	z             t          		z  z             cxk    rd
dz   ik    sn J t          	z  	|z  z             t          	|z  	z  z             cxk    r	ddk    sn J t          	z  	|z  z   |z             t          	|z  |z   	z  z             cxk    r
dddk    sn J t          t          	fd           t          t          	fd           t          t          fd           t          t          fd           t          dt                    \  }}t          d|          \  }	}}t          	z             t          	z             cxk    r	ddk    sn J t          dt                    \  }	}}t          t          t                    	|z  |z  z             t          	|z  |z  t          t                    z             cxk    r(t          d          t          t                    dk    sn J d S )Nr0   u,vr"   r#   r$   rN   r   r$   r   rN   rQ   rM   rQ   rM   rP   rQ   rN   rM   rN   rM   rP   rN   c                       z   S r^   r,   r0   r%   s   r.   r/   z*test_PolyElement___add__.<locals>.<lambda>      a!e r-   c                       z   S r^   r,   r   s   r.   r/   z*test_PolyElement___add__.<locals>.<lambda>  r   r-   c                       z   S r^   r,   r0   us   r.   r/   z*test_PolyElement___add__.<locals>.<lambda>  r   r-   c                       z   S r^   r,   r   s   r.   r/   z*test_PolyElement___add__.<locals>.<lambda>  r   r-   r   rQ   r   r   dictr   	TypeErrorr   r   r   
r   RuvvRxyzr&   r'   Fuvr0   r   r%   s
          @@@r.   test_PolyElement___add__r    s   bMMEBE2HC1w$$KD!AaAaC==a888888A;;$q1u++EEEEQ1)E)EEEEEEEAaC==D1qMMIIIIq-I-IIIIIIIAaC!QqS1Wq[ 1 1____q]^5_5_______!a==DQqSMM????iQ-???????!ac	??d1Q319ooMMMMQ11M1MMMMMMM!ac	A$qsQw1}"5"5ccccQSTab9c9ccccccc
9mmmmm$$$
9mmmmm$$$
9mmmmm$$$
9mmmmm$$$UBHC1w$$KD!AaA;;$q1u++EEEEQ1)E)EEEEEEEw##KD!Aa21Q4!A2#7#7````r!uuY[\^Y_Y_;`;`````````r-   c                    	 t          dt                    \  } t          dt                    \  }}t          d|          \  }	}}t          	d|z  z
            dddk    sJ t           	z             t          	z
            cxk    r
d dk    sn J t           	|z  z             t          	|z  z
            cxk    r
d d	k    sn J t           	|z  z   |z             t          	|z  |z   z
            cxk    rdd d
k    sn J t           	z  	z             t          		z  z
            cxk    rd dz   ik    sn J t           	z  	|z  z             t          	|z  	z  z
            cxk    r
d dk    sn J t           	z  	|z  z   |z             t          	|z  |z   	z  z
            cxk    rdd dk    sn J t          t          	fd           t          t          	fd           t          t          fd           t          t          fd           t          dt                    \  }}t          d|          \  }	}}t           	z             t          	z
            cxk    r
d dk    sn J t          dt                    \  }	}}t          t          t                     	|z  |z  z             t          	|z  |z  t          t                    z
            cxk    r)t          d          t          t                     dk    sn J d S )Nr0   r   r"   r#   r$   r   r   r   r   rN   r   r   c                       z
  S r^   r,   r   s   r.   r/   z*test_PolyElement___sub__.<locals>.<lambda>-  r   r-   c                       z
  S r^   r,   r   s   r.   r/   z*test_PolyElement___sub__.<locals>.<lambda>.  r   r-   c                       z
  S r^   r,   r   s   r.   r/   z*test_PolyElement___sub__.<locals>.<lambda>/  r   r-   c                       z
  S r^   r,   r   s   r.   r/   z*test_PolyElement___sub__.<locals>.<lambda>0  r   r-   r   r   r  s
          @@@r.   test_PolyElement___sub__r    s   bMMEBE2HC1w$$KD!AaAaC==b999999Q<<4A;;GGGGaQB*G*GGGGGGGQqS>>T!A#']]KKKK!.K.KKKKKKKQqS1acAgk!2!2aaaa!PQ_`^`6a6aaaaaaa1q>>T!ac']]AAAAy1"q&.AAAAAAA1qs
tAaC!A#IOOOOaQB2O2OOOOOOO1qs
Q4!a!A##6#6eeeeaTUcdbd:e:eeeeeee
9mmmmm$$$
9mmmmm$$$
9mmmmm$$$
9mmmmm$$$UBHC1w$$KD!AaQ<<4A;;GGGGaQB*G*GGGGGGGw##KD!AaB!A#a%  D1QB$8$8bbbb1[]^`[a[aZa<b<bbbbbbbbbr-   c                  
  	 t          dt                    \  } t          dt                    \  }}t          d|          \  }}	t          z            t          z            cxk    rdik    sn J t          dz  z  	z             t          dz  z  	z             cxk    rdz  ddk    sn J t          dz  z  	z             t          dz  z  	z             cxk    rdz  ddk    sn J t          dz  z  	z             t          dz  z  	z             cxk    rdz  ddk    sn J t          z  dz  	z             t          z  dz  	z             cxk    rdz  ddk    sn J t          dz  z  |z  	z             t          |z  dz  z  	z             cxk    rdz  ddk    sn J t          dz  z  |z  	z             t          dz  |z  z  	z             cxk    rdz  ddk    sn J t          dz  z  |z  	z             t          |z  dz  z  	z             cxk    rdz  ddk    sn J t          z  |z  dz  	z             t          |z  z  dz  	z             cxk    rdz  ddk    sn J t          dz  |z  z  	z             t          |z  dz  z  	z             cxk    rdz  ddk    sn J t          dz  |z  z  	z             t          d|z  z  z  	z             cxk    rdz  ddk    sn J t          dz  |z  z  	z             t          |z  dz  z  	z             cxk    rdz  ddk    sn J t          |z  z  dz  	z             t          |z  z  dz  	z             cxk    rdz  ddk    sn J t          d	z  |z   z  	z             t          |z   d	z  z  	z             cxk    rd	z  d	z  dd
k    sn J t          t          	fd           t          t          	fd           t          t          	fd           t          t          	fd           t          dt                    \  }}t          d|          \  }}	t          z            t          z            cxk    rdik    sn J t          dt                    \  }}	t          t          t                    z  |z  	z            t          |z  	z  t          t                    z            cxk    rdt          t                    ik    sn J d S )Nr0   r   r"   rN   rH   r$   )rN   rP   )rM   rP   r#   )rN   r   rP   c                       z  z   S r^   r,   r0   r%   r'   s   r.   r/   z*test_PolyElement___mul__.<locals>.<lambda>S      acAg r-   c                       z  z   S r^   r,   r  s   r.   r/   z*test_PolyElement___mul__.<locals>.<lambda>T  r  r-   c                       z  z   S r^   r,   r0   r   r'   s   r.   r/   z*test_PolyElement___mul__.<locals>.<lambda>U  r  r-   c                       z  z   S r^   r,   r  s   r.   r/   z*test_PolyElement___mul__.<locals>.<lambda>V  r  r-   r   r   )
r   r  r  r  r&   r  r0   r   r%   r'   s
         @@@@r.   test_PolyElement___mul__r  ;  s   bMMEBE2HC1w$$KD!Aa!99QqS		3333i^333333!A	??d1Q3q519ooOOOOQqSQ1O1OOOOOOO!A	??d1Q3q519ooOOOOQqSQ1O1OOOOOOO!A	??d1Q3q519ooOOOOQqSQ1O1OOOOOOO!A	??d1Q3q519ooOOOOQqSQ1O1OOOOOOO!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!Aa!QqSU1Wq[ 1 1SSSS1QR5S5SSSSSSS!QUa  D!a%1q$9$9kkkk1YZ[\Y\ij=k=kkkkkkk
9oooooo&&&
9oooooo&&&
9oooooo&&&
9oooooo&&&UBHC1w$$KD!Aa!99QqS		3333i^333333w##KD!Aa2q
1ac!eBrFFl!3!3JJJJ	2b667JJJJJJJJJr-   c                  &   	
 t          dt                    \  } }}ddz  z  dz
  dz  dz  dz
  k    sJ ddz  z  dz
  dz  dz  k    sJ dz  dz
                                k    sJ dz  z
                                dz
  k    sJ dz  dz
  z  dz  z
  k    sJ dz  z
  z  dz
  k    sJ dz  dz
  dz  z  dz  dz  dz  z
  k    sJ dz  dz
                      dz            dk    sJ dz  z
  dz
  z  dz  z
                      dz
            cxk    rk    sn J t          dt                    \  } }}t          dz  dz  |dz  dz  z   |dz  dz  z                                             dk    sJ t          dt
                    \  } }}t          dz  dz  |dz  dz  z   |dz  dz  z                                             dk    sJ t          d	t                    \  }t          d
t                    \  }}t          d|          \  }}}t          dz  z  z   z            ddk    sJ t          t          fd           t          t          fd           t          t          fd           t          t          fd           t          t          fd           t          dt                    \  } dz  dz  z   dz    | d          c	
t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          dt                    \  } }|z  dz  z   dz    | d          c	
t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd           t          t          	
fd            t          dt                    \  } dz  dz   dz  dz
  c	
 | d          dz  dz   }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd!           ddz  z  dz  z   z   dz   ddz  z  dz  z
  dz   c	
 | d          	}}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd"           ddz  z  ddz  z  z   ddz  z  z   dz  z   dz   dz  dz  z   dz   c	
ddz  z  d#z  z
  d$z  dz   }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd%           ddz  z  ddz  z  z   ddz  z  z   ddz  z  z   z   dz  ddz  z  z   d&z   c	
dz  d#z
  d'dz  z  ddz  z  z   d(z  z
  d)z   }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd*           t          dt
                    \  } dz  dz   dz  dz
  c	
dz  dz    | d          }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd+           ddz  z  dz  z   z   dz   ddz  z  dz  z
  dz   c	
t          dd          z  t          d,d-          z   t          d.d-          z  t          d/d-          z   }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd0           t          dt                    \  } }dz  |dz  z
  |z
  c	
|z    | d          }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          |k    sJ dz  |dz  z   |z
  c	
|z   d|dz  z  }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd1           dz  |dz  z    |z   c	
 |z
  d|dz  z  }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd2           dz  |dz  z   dz  d|z  z
  c	
 | d          	}}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd3           t          dt
                    \  } }dz  |dz  z
  |z
  c	
|z    | d          }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          |k    sJ dz  |dz  z   |z
  c	
|z   d|dz  z  }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd4           dz  |dz  z    |z   c	
 |z
  d|dz  z  }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd5           dz  |dz  z   dz  d|z  z
  c	
dz  |dz  z   d|dz  z  }}	
                    
          t          	
          cxk    r||fk    sn J 	                    
          	
z  cxk    r|k    sn J 	                    
          	
z  cxk    r|k    sn J t          t          	
fd6           d S )7Nr"   rH   rI   r#   r$   r   r   rJ   r0   r   r   c                         dz  z   z   z  S r   r,   )r   r%   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>}  s    aAa!n r-   c                       z  S r^   r,   r   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      ac r-   c                       z  S r^   r,   r   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r  r-   c                       z  S r^   r,   r   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r  r-   c                       z  S r^   r,   r   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r  r-   r%   c                  .                                    S r^   divrS   r   s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      aeeAhh r-   c                  $    t                     S r^   divmodr!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      fQll r-   c                  .                                    S r^   remr!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r"  r-   c                       z  S r^   r,   r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      a!e r-   c                  .                                    S r^   quor!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r"  r-   c                       z  S r^   r,   r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r+  r-   c                  .                                    S r^   exquor!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      aggajj r-   r2   c                  .                                    S r^   r  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r"  r-   c                  $    t                     S r^   r$  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r&  r-   c                  .                                    S r^   r(  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r"  r-   c                       z  S r^   r,   r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r+  r-   c                  .                                    S r^   r-  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r"  r-   c                       z  S r^   r,   r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r+  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r3  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>      

 r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   rK      c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   	      ,   6   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   rq      4   o   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>   r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   c                  .                                    S r^   r1  r!  s   r.   r/   z.test_PolyElement___truediv__.<locals>.<lambda>  r<  r-   )r   r   r.  r4   r   r   r   r   r   ZeroDivisionErrorr   r%  r)  r   r2  )rB   r&   r'   r   r  r  r  qr   rS   r   r0   r   r%   s            @@@@@r.   test_PolyElement___truediv__rR  a  s   GR  HAq1adFQJ>QTAX%%%%adFQJ>QT!!!!qD1H>>!!!!!qD1H>>!A%%%%qD1Ha<1q2w;&&&&qD1Ha<1q5    qD1HqsqsQWQY....qD1H>>!A#!####qD1Hq1u!Q$(A!6!6;;;;!;;;;;; GR  HAq11QAa!Q$q&(//1122a7777GR  HAq11QAa!Q$q&(//1122a7777bMMEBE2HC1w$$KD!AaAa!QqQ#?#?????
9,,,,,---
9kkkkk"""
9kkkkk"""
9kkkkk"""
9kkkkk"""R==DAqa4!A#:>11Q44DAq
.....///
22222333
.....///
mmmmm,,,
.....///
mmmmm,,,
000001115"ooGAq!Q319q=!!A$$DAq
.....///
22222333
.....///
mmmmm,,,
.....///
mmmmm,,,
00000111R==DAqa4!8QqS1WDAq1Q44AqA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333QT6AqD=1q !AqD&1Q3,"2DAq1Q44qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333QT6AadF?Qq!tV#ac)A-q!taczA~DAqQT6AaC<AqA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333QT6AadF?Qq!tV#a1f,q0!Q$1a4-!2CDAqQ37Bq!tGa1f$r!t+b0qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333R==DAqa4!8QqS1WDAqQ37AAaDDqA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333QT6AqD=1q !AqD&1Q3,"2DAqa88A:2r

"Br2JJqL2c2;;$>qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333%__FAqa4!Q$;ADAqq5!!A$$qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!771::????a4!Q$;ADAqq5!AqD&qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333a4!Q$;QDAq261QT6qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333a4!Q$;!ac	DAq1Q44qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333%__FAqa4!Q$;ADAqq5!!A$$qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!771::????a4!Q$;ADAqq5!AqD&qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333a4!Q$;QDAq261QT6qA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 2333a4!Q$;!ac	DAqQ319a1fqA5588va||----1v------5588q1u!!!!!!!!!!5588q1u!!!!!!!!!!
 2 2 2 2 233333r-   c                     t          dt          t                    \  } }d|z  dz   dz  dk    sJ dz  k    sJ t          t          fd           |dz  |dz  k    sJ dz                      d          cxk    r/                    d          cxk    rd|dz  z  d	|z  z   d
z   k    sn J dz                      d          cxk    r8                    d          cxk    rd|dz  z  d|dz  z  z   d|z  z   dz   k    sn J dz                      d          cxk    rA                    d          cxk    r'd|dz  z  d|dz  z  z   d|dz  z  z   d|z  z   dz   k    sn J dz                      d          cxk    rJ                    d          cxk    r0d|dz  z  d|dz  z  z   d|dz  z  z   d|dz  z  z   d|z  z   dz   k    sn J t          dt          t                    \  } }}}|dz  |z  d|z  |dz  z  z
  d|z  z
  dz   |dz  |dz  z  d|dz  z  |dz  z  z
  d|dz  z  |z  |z  z
  d|dz  z  |z  z   d|dz  z  |dz  z  z   d	|z  |dz  z  |z  z   d|z  |dz  z  z
  d
|dz  z  z   d|z  z
  dz   }dz                      d          cxk    r                     d          cxk    r|k    sn J t          dt                    \  } }d|dz  z  d|dz  z  z
  dz   d |dz  z  d!|d"z  z  z   d#|d	z  z  z   d$|d%z  z  z   d&|dz  z  z   d'|dz  z  z
  d(|dz  z  z   d)|dz  z  z
  d*z   }dz                      d          cxk    r                     d          cxk    r|k    sn J d S )+Nr%   rH   r#   r   r$   c                       dz  S r   r,   r   s   r.   r/   z*test_PolyElement___pow__.<locals>.<lambda>  s    q2w r-   r   rI      r@  rx   $   rC        `      Q   rJ          i  i8  i*     r"   rK   r0   i@i,
  1   l      Ml     3urq   l     L] l    @LV 
   l    Aecl    F	l   `V i
IiW )r   r   r   r   r`   _pow_generic_pow_multinomial)rB   r%   r&   r'   r   r0   rS   s         @r.   test_PolyElement___pow__rc    s   RDAq	!aAa419999a419999
:'''r7a"ga41>>!$$RRRR(:(:1(=(=RRRR1a4"Q$QRARRRRRRRa41>>!$$]]]](:(:1(=(=]]]]1a4"QPQT'AQTVWXTXAX[]A]]]]]]]a41>>!$$jjjj(:(:1(=(=jjjjAqD2aQRd7ARUXYZ\]Y]U]A]`cde`eAehjAjjjjjjja41>>!$$xxxx(:(:1(=(=xxxxAqD3qRSt8ASVYZ[]^Z^V^A^aefgijfjajAjmpqrmrAruxAxxxxxxxGR''HAq1	1Q1QTAaC!#A	1QT	AadF1a4K!AqD&(1*,qAvax7!AqD&A+E1QPQT	RSSVWXYVYZ[]^Z^V^^abcdfgcgaggjklmjmmpqqAa41>>!$$BBBB(:(:1(=(=BBBBBBBBBBR==DAqq!td1a4i"$A!R%"3ArE"99<LQPRU<RR2	 -ad 2	35B1a45G	HAqD	%ad?	+-4	5A a41>>!$$BBBB(:(:1(=(=BBBBBBBBBBBBr-   c                     t          dt          t                    \  } }|dz  d|dz  z  z
  dz
  }|dz
  }|dz  d|z  z
  dz
  }d}|                    |g          |g|fk    sJ t          dt          t                    \  } }|dz  d|z  z   dz   }|                     | d	          g          |gd
fk    sJ t          dt          t                    \  } }|dz  d|z  z   dz   }|                     | d          g          t	          d	d          |dz  z  |z   d	z   gd
fk    sJ t          dt          t                    \  } }}d|dz  z  |z  d|z  |z  z
  d|z  z   d|z  z
  dz   }|                     | d          g          d|dz  z  |z  ||z  z
  d|z  z   |z
  dz   gd
fk    sJ |                    d|z  g          d|dz  z  |z
  d	z
  gd|z  dz   fk    sJ |d	z
  }|d	z
  }|                    |g          d
g|fk    sJ ||dz  z  d	z   }||z  d	z   |d	z   g}|dg}d}|                    |          ||fk    sJ |dz  |z  ||dz  z  z   |dz  z   }||z  d	z
  |dz  d	z
  g}||z   d	g}||z   d	z   }|                    |          ||fk    sJ |dz  d	z
  ||z  d	z
  g}|d	z   |g}d|z  d	z   }|                    |          ||fk    sJ 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#   rU  rH   *   r@  rW  r$   r   r2   rI   rx   r   r(   )r   r#   )r   r   r   r   r   )	rB   r%   rS   r   rQ  r   r&   GQs	            r.   test_PolyElement_divri  /  s   RDAq	1r!Q$wA	AA	1qs
RAA55!::1#q!!!!RDAq	1qs
QA55!!A$$==aS!H$$$$RDAq	1qs
QA55!!A$$==b1ggadlQ.23Q77777%U##FAq	!Q$q1Q3q51Q31$q(A55!!A$$==a1fQh1nqs2Q6:;Q?????55!A#<<Qq!tVaZ!^,acAg66666	AA	AA55!::1#q!!!!	!Q$
A	
1q!a%A	
BA	A55881v	1Q1a4!Q$A	
1q!Q$(A	
Q
A	A	A55881v	
A1Q37A	
Q
A	!aA55881v	b"BA1Q4488AAaDD>>V####	b"BA1Q4488AAaDD>>bAhh]******r-   c                  n   t          dt          t                    \  } }|dz  d|dz  z  z
  dz
  }|dz
  }d}|                    |g          |                    |g          d         cxk    r|k    sn J t          dt          t                    \  } }}d	|dz  z  |z  d|z  |z  z
  d	|z  z   d|z  z
  d
z   }|                     | d          g          |                     | d          g          d         cxk    rdk    sn J |                    d|z  g          |                    d|z  g          d         cxk    rd	|z  d
z   k    sn J |dz
  }|dz
  }|                    |g          |                    |g          d         cxk    r|k    sn J ||dz  z  dz   }||z  dz   |dz   g}d}|                    |          |                    |          d         cxk    r|k    sn J |dz  |z  ||dz  z  z   |dz  z   }||z  dz
  |dz  dz
  g}||z   dz   }|                    |          |                    |          d         cxk    r|k    sn J |dz  dz
  ||z  dz
  g}d|z  dz   }|                    |          |                    |          d         cxk    r|k    sn J d S )Nr%   r#   rU  rH   re  rf  r$   r2   rI   rx   r   )r   r   r   r)  r   )rB   r%   rS   r   r   r&   rg  s          r.   test_PolyElement_remrk  j  s   RDAq	1r!Q$wA	AAA55!::sA++++!++++++%U##FAq	!Q$q1Q3q51Q31$q(A55!!A$$==AEE11Q44&MM!,111111111155!A#<<155!A#<<?5555acAg555555	AA	AA55!::sA++++!++++++	!Q$
A	
1q!a%A	A5588quuQxx{''''a''''''	1Q1a4!Q$A	
1q!Q$(A	A	A5588quuQxx{''''a''''''	
A1Q37A	!aA5588quuQxx{''''a''''''''r-   c                  f   t          dt                    \  } }d|dz  z                      |dz  d|dz  z  z   dz             dd|z  |dz  d|z  z   dz   gfk    sJ 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|z            ddd|z  gfk    sJ d|z                      d|z            dd|z  d|z  gfk    sJ  | d                              d|dz  z            d	dd|z  gfk    sJ d|dz  z                      d|dz  z            d	d|z  d|z  gfk    sJ |dz  |dz  z  |dz  |z  z   dz   }|dz  |d
z  z  |dz  |z  z   dz   }|                    |          d|dz  |dz  z  ||z  z   dz   ||d
z  z  ||z  z   dz   gfk    sJ d S )Nr%   rH   rI   r$   )rH   r2   r   r   )r$   rH   r#   )rH   r$   )r   r   deflaterB   r%   r&   rS   r   s        r.   test_PolyElement_deflatero    s   R==DAqadFAqD1QT6MA-..4!A#q!taczA~9N2OOOOO%__FAq1Q44<<!&1a&!111111Q44<<!&1a&!111111Q44<<!&1a&!111111Q44<<!!QqS 22222aC==1&1Q3!*!555551Q44<<!Q$FQ!H#55555adFAadF##1ac
';;;;;	1QT	AqDFQA	1QT	AqDFQA99Q<<FQT!Q$Y1_q%8!AqD&1Q3,:J$KLLLLLLLr-   c                    	 t          dt                    \  } }} | d                                          t          d          dfk    sJ  | d                                          t          d          dfk    sJ  | t          dd                                                    dk    sJ  | t          dd                                                    dk    sJ d|dz  z  |z                                   dd|dz  z  |z   fk    sJ |dz  t          dd          |z  z                                   dd|dz  z  |z   fk    sJ t          dt          t                    \  }}}t          dt          t                    \  	}}|t          dd	          |dz  z  z
  t          d
d          |dz  z  z
  t          dd          |dz  z  z
  t          dd          |dz  z  z
  t          dd          |dz  z  z
  t          dd          |dz  z  z
  t          dd          |z  z
  t          dd          z
  |dz  t          dd          |dz  z  z   t          dd          |dz  z  z   t          d d          |dz  z  z   t          d!d"          |dz  z  z   t          d#d"          |dz  z  z   t          d$d          |dz  z  z   t          d%d          |z  z   t          d&d          z   g}d'|z  d(|dz  z  z
  d)|dz  z  z
  d*|dz  z  z
  d+|dz  z  z
  d,|dz  z  z
  d-|dz  z  z
  d.|z  z
  d/z
  d|dz  z  d0|dz  z  z   d|dz  z  z   d1|dz  z  z   d2|dz  z  z   d3|dz  z  z   d4|dz  z  z   d5|z  z   d6z   g}	fd7|D             |k    sJ d S )8Nr2   r$   rG   r#   )r#   rG   rH   zx,tl   O{]K_$-\WK.j/%=udLhL` l     :P$GNA3VCc8RNe] l   HBSW~b]"zZM}E |u"K2 l    h^%==2pDu.q~@|`:*w
h rK   l   [_+J[kPu=\L=IGS{,c.\) o l    P=Kzzda$\0ci}=$?&@#uTn0Q rJ   l   CNVO&ilo?uTvBp5y\
$l$aP-NCR l    Hi)Sbx|5eS6O--:QRbV.r?1lW rI   l   M[S hl<M6>P|oPoDuge l    [WGfNQNB3NoCBxcBR'.Cml   .wSK-G+~96nzLwGD<u)qG	l   >0I	B,Iu!|J=y9-l   @VTry![t
RdlCHj\LLf:' l   0%H8[J/@)\LM3B\_>mxwr) l   $><JktGl+ogKzeXBORFl   `%C!+[O;RY.{;gW!o^@*> rx   l   `(sx]Yl   i 4&m: l   ,8y'X^l   :W]l    kB`l    
O<p{l   ;7>rI l    ``6]j_{l    @o;b|?l      T=-l     lFORl     
RtJ)1~MCMgKbqcLel   ra2U!J'B\KW4Du+%B:N'/|,3D`N l    >C_=DmbgrVJ5n,O{-[8 D/7"l   *uQ!3'; PtSo"_ ;2g0PZwg
l   .S[_ik
8Cn|#	v*u0HtSl    5u3jx]L*(IIyL1iColat1:'6(l    Pg];meVq'%opZ "Mmt:%63l    P*71}<U1qq,+'cX0rVvQa; pA9l    @ir0@>/3,F%*;W@ {=5|o&(c_46l   `k-@\K'l    4C|	,Ydm l    Lo5Rs l     "#?Vq l    @otc?c l      t-JOl     Sz(Gc                 j    g | ]/}|                                 d                                        0S )r$   )clear_denomsset_ring)rl   rS   rZZs     r.   rn   z1test_PolyElement_clear_denoms.<locals>.<listcomp>  s6    ;;;1Q^^a ))#..;;;r-   )r   r   rr  r   r   )
rB   r%   r&   rQQr0   r   Trt   rg  rt  s
            @r.   test_PolyElement_clear_denomsrw    s   %__FAq1Q442a55!*,,,,1Q442a55!*,,,,1R!WW::""$$....1R!WW::""$$....adFQJ$$&&1a1fqj/9999qD2a7719**,,AadFQJ????E2s##HC1E2s##HC1	
Rl  nB  C  C  DE  GH  DH  H  
Hk  m@  A  A  BC  EF  BF  F
Fl  nA  B  B  CD  FG  CG  G
G m  oB  C  C  DE  GH  DH  H
H k  m  @  @  AB  DE  AE  E	
E
 j  l|  }  }  ~  AB  ~B  B
B h  jy  z  z  {|  |
| f  hv  w  w
w 
A()=>>q!tC	C*+@AA!Q$F
G)*>??1D
E *+@AA!Q$F
G *+@AA!Q$F	
G
 )*>??1D
E )*>??A
B ()=>>
?	@A" 
__`	`	fghjkgk	k
l	ghiklhl	l
m 
hhiklhl	l
m 
iijlmim	m	
n
 
iijlmim	m
n 
hhiklhl	l
m 
hhi	i
j 
g
g 
q!t	#	1	$
%	 A	%
& 
!A	%
& 
"!Q$	&	
'
 
"!Q$	&
' 
!A	%
& 
!	"
# 
 
 	!A& <;;;;;;q@@@@@@r-   c                     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    sJ  | d          d|z  d	z   }}|                    |          d|z  d	z   dd
fk    sJ d|z  d	z    | d          }}|                    |          d|z  d	z   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z  d|z  z   d
z    | d
          }}|                    |          d
|dz  d|z  z   d
z   d
fk    sJ |dz  d|z  z   d
z    | d          }}|                    |          d
|dz  d|z  z   d
z   dfk    sJ d|dz  z  d	|z  z   dz    | d          }}|                    |          d|dz  d|z  z   d
z   d
fk    sJ  | d          d|dz  z  d	|z  z   dz   }}|                    |          dd
|dz  d|z  z   d
z   fk    sJ d|dz  z  d	|z  z   dz   |d
z   }}|                    |          |d
z   d|z  dz   d
fk    sJ |d
z   d|dz  z  d	|z  z   dz   }}|                    |          |d
z   d
d|z  dz   fk    sJ t          dt                    \  } }}}}|dz  d|z  z   d
z   d|z  dz   }}|                    |          |d
z   |d
z   dfk    sJ |dz  |dz  z  d|dz  z  |z  z   |dz  z   ||z  z   |z   |dz  d|z  z   d
z   }}|d
z   |dz  |z  |dz  z   |z   |d
z   }	}}|                    |          |||	fk    sJ |                    |          ||	|fk    sJ t          dt                    \  } }}t          d
d          |dz  z  |z   t          d
d          z   }t          d
d          |z  t          d
d          z   }|d
z   }|                    |          ||t          d
d          fk    sJ |                    |          |t          d
d          |fk    sJ t          dt                    \  } }}d|z  |dz  z  d|z  |z  z
  d|z  z   }d|dz  z  }d|z  }|                    |          |||z  ||z  fk    sJ |                    |          |||z  ||z  fk    sJ d S )Nr2   r   rQ   rH   )rH   r$   r   )rH   r   r   )rH   r   r   rI   r$   )rH   r$   r$   )rH   r   r$   )rH   r$   r   )rH   r   r   r}   g @r#   g      ?)r   r   	cofactorsr   r   )
rB   r%   r&   rS   r   r'   r0   hcffcfgs
             r.   test_PolyElement_cofactorsr~    s   5"ooGAq!1Q441qA;;q>>Y&&&&1Q441qA;;q>>Y&&&&1R55!!A$$qA;;q>>Z''''1Q442qA;;q>>Z''''1Q441qqA;;q>>acAgq!_,,,,Q37AAaDDqA;;q>>acAgq!_,,,,1Q441qA;;q>>Y&&&&1R55!!A$$qA;;q>>Z''''1Q442qA;;q>>Z''''1R55!!B%%qA;;q>>[((((a4!A#:>11Q44qA;;q>>aA!a33333a4!A#:>11Q44qA;;q>>aA!a33333QT6AaC<!QQqTTqA;;q>>aA!a333331Q441a4!A#!qA;;q>>aAqD1Q3JN33333QT6AaC<!QUqA;;q>>a!eQqS1Wa00000q5!AqD&1Q3,"qA;;q>>a!eQ!a00000B''MAq!Qa4!A#:>1Q37qA;;q>>a!eQUA.....a419qAvax!Q$&1,q0!Q$1*q.qAa%Aa!Q$*AECsA;;q>>ac]****;;q>>ac]****5"ooGAq!
1Q1q2a77"A
1Q	BqGGA	AA;;q>>aBqGG_,,,,;;q>>aAa!_,,,,5"ooGAq!Aad
SU1Ws1u$AAqDAAA;;q>>a1ac]****;;q>>a1ac]******r-   c                     t          dt                    \  } }}t          dd          |dz  z  |z   t          dd          z   }t          dd          |z  t          dd          z   }|                    |          |dz   k    sJ d S )Nr2   r$   rH   )r   r   gcdrn  s        r.   test_PolyElement_gcdr  *  s    5"ooGAq!
1Q1q2a77"A
1Q	BqGGA5588q1ur-   c                     t          dt                    \  } }}d|dz  z  d|dz  z  z   d|z  z   }d|dz  z  d|z  z   }d|z  dz   }d}|                    |          ||fk    sJ |                     |          | |fk    sJ |                    |           | |fk    sJ t          dt                    \  } }}t          dd          |dz  z  |dz  z   t          dd          |z  z   }t          dd          |dz  z  t          dd          |z  z   }d|z  dz   }d}|                    |          ||fk    sJ |                     |          | |fk    sJ |                    |           | |fk    sJ t	          dt                    \  }}t          d|          \  }}	|dz   dz
  dz  |	z  }|	dz  |dz  dz   dz  z   }|                    |          |dz   dz
  |	z  d|	dz  z  d|dz  z  z   dz   fk    sJ d S )Nr2   rH   r#   rI   r$   r%   r0   )r   r   cancelr   r   )
rB   r%   r&   rS   r   rt   rg  Fxr   r0   s
             r.   test_PolyElement_cancelr  2  sB   5"ooGAq!	!Q$1a4!A#A	!Q$1A	!aA	A88A;;1a&    B;;q>>qb!W$$$$88QB<<QB7""""5"ooGAq!
1Q1q!tb1ggai'A
1Q1r!Awwqy A	!aA	A88A;;1a&    B;;q>>qb!W$$$$88QB<<QB7""""#rNNEBbMMEB
Q$AaA	11q!|A88A;;QTEAIq=!AqD&1QT6/A*=>>>>>>>r-   c                  "   t          dt                    \  } }} | d                                          dk    sJ  | d                                          dk    sJ |dz  d|dz  z  z   d|z  z   dz                                   dk    sJ d S )Nr2   r   r$   r#   rI   rH   )r   r   max_normr_   s      r.   test_PolyElement_max_normr  S  s    5"ooGAq!1Q44==??a1Q44==??aqD1QT6MAaC!#--//1444444r-   c                  "   t          dt                    \  } }} | d                                          dk    sJ  | d                                          dk    sJ |dz  d|dz  z  z   d|z  z   dz                                   dk    sJ d S )Nr2   r   r$   r#   rI   rH   r`  )r   r   l1_normr_   s      r.   test_PolyElement_l1_normr  [  s    5"ooGAq!1Q44<<>>Q1Q44<<>>QqD1QT6MAaC!#,,.."444444r-   c                  "   t          dt                    \  } }t          dd          |d         dz  z  |d         dz  z  |d         d	z  z  |d
         dz  z  d|d         dz  z  |d         d	z  z  |d         d	z  z  z   d|d         dz  z  z   d|d         dz  z  z
  }|                    |d                   t          dd          |d         dz  z  |d         dz  z  |d         d	z  z  |d
         dz  z  d|d         z  |d         d	z  z  |d         d	z  z  z   d|d         z  z   k    sJ |                    |d                   t          dd          |d         dz  z  |d         dz  z  |d         dz  z  |d
         dz  z  d|d         dz  z  |d         d	z  z  |d         dz  z  z   k    sJ |                    |d
                   t          dd          |d         dz  z  |d         dz  z  |d         d	z  z  |d
         z  k    sJ d S )Nzx:11i   rJ   r   rx   r$   rK   rI   r#   r`  rH   i 	  rG   rX  i`  rp   @  )r   r   diff)rB   r   rS   s      r.   test_PolyElement_diffr  c  s<   DAq
3q		!A$'!A$'!!A$')!B%(2QqtQwYqtQw5FqtQw5NNPQRSTURVXYRYPYY\]^_`a^bde^e\eeA66!A$<<2d1::adAg-adAg5adAg=aeQhFAaDQRSTQUWXQXYZ[\Y]_`Y`I``cdefgheiciiiiii66!A$<<2c!99QqT1W,QqT1W4QqT1W<QrUAXE1Q4QR7
STUVSWYZSZHZ[\]^[_ab[bHbbbbbb66!B%==Bs1IIadAg-adAg5adAg=aeCCCCCCCr-   c                  <   t          dt                    \  } }d|z  dz    d          dk    sJ  d          dk    sJ t          t          fd           t          t          fd           t          t          fd           t          d	t                    \  } }}d|z  |d
z  z   dz    dd          dk    sJ  dd          dk    sJ |                     |          } d          |j        d
z  dz   k    sJ  d          |j        d
z  dz   k    sJ t          t          fd           t          t          fd           t          t          fd           t          t          fd           t          t          fd           d S )Nr%   r#   r$   r   rI   c                                    S r^   r,   r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>s      qqss r-   c                        dd          S )Nr   r$   r,   r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>t  s    qqAww r-   c                  6      t          dd                    S Nr$   rG   r   r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>v  s    11R!WW:: r-   r2   rH   rG   5   c                                    S r^   r,   r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>  r  r-   c                        ddd          S )Nr   r$   rH   r,   r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>  s    qqAqzz r-   c                  8      dt          dd                    S r  r  r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>  s    11Q1Q== r-   c                  8      t          dd          d          S r  r  r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>  s    11R!WWa== r-   c                  T      t          dd          t          dd                    S r  r  r   s   r.   r/   z+test_PolyElement___call__.<locals>.<lambda>  s#    11R!WWb1gg#6#6 r-   )r   r   r   r`   r   rZ   r&   )rB   r%   r&   RyrS   s       @r.   test_PolyElement___call__r  l  s   R==DAq	!aA1Q44199991Q4419999
:{{{{###
:'''
>----...%__FAq	!ad
QA1Q77a<<<<1Q77b====	
B1Q44247Q;1Q44247Q;
:{{{{###
:))))***
>0000111
>0000111
>666677777r-   c                     t          dt                    \  } dz  ddz  z  z   dz  z   dz                       d          }|dk    rt          |t                    rJ t          t          fd           t          dt                    \  } }z  dz  dz  dz  z  z   dz  z  z   dz                       d          }|dk    r(t          ||                               j                  sJ                     dfdfg          }|dk    r)t          ||                               j                  sJ                     d          }|dk    r(t          ||                               j                  sJ                     dfdfg          }|dk    r)t          ||                               j                  sJ                     dfdf|dfg          }|dk    rt          |t                    rJ t          t          fd           t          t          fd	           t          t          fd
           d S )Nr%   r#   rI   rH   r   c                  L                          t          dd                    S r  evaluater   rS   r%   s   r.   r/   z+test_PolyElement_evaluate.<locals>.<lambda>  s    1::aAa#9#9 r-   r"   c                  V                          dft          dd          fg          S r  r  r   s   r.   r/   z+test_PolyElement_evaluate.<locals>.<lambda>  s(    1::1v2a77|.D#E#E r-   c                  V                          t          dd          fdfg          S r  r  r   s   r.   r/   z+test_PolyElement_evaluate.<locals>.<lambda>  s(    1::2a77|aV.D#E#E r-   c                  r                          t          dd          ft          dd          fg          S r  r  r   s   r.   r/   z+test_PolyElement_evaluate.<locals>.<lambda>  s0    1::2a77|aAa\.J#K#K r-   )	r   r   r  r   r
   r   r   rZ   r   rB   r   r'   rS   r%   r&   s      @@@r.   test_PolyElement_evaluater    st   R==DAq	1qAv!aA	

1aA66*Q44666
>99999:::gr""JAq!Q	
1q1acAX:!A%)A	

1aA66jAFF1IIO44666	

QFQF#$$A66jAFF1aLL$677666	

1aA66jAFF1IIO44666	

QFQF#$$A66jAFF1aLL$677666	

QFQFQF+,,A66*Q44666
>EEEEEEFFF
>EEEEEEFFF
>KKKKKKLLLLLr-   c                     t          dt                    \  } dz  ddz  z  z   dz  z   dz                       d          }|dk    rt          || j                  sJ t          t          fd           t          dt                    \  } }dz  ddz  z  z   dz  z   dz                       d          }|dk    rt          || j                  sJ                     dfdfg          }|dk    rt          || j                  sJ t          t          fd           t          t          fd	           t          t          fd
           d S )Nr%   r#   rI   rH   r   c                  L                          t          dd                    S r  subsr   r  s   r.   r/   z'test_PolyElement_subs.<locals>.<lambda>  s    166!R!WW#5#5 r-   r"   c                  V                          dft          dd          fg          S r  r  r   s   r.   r/   z'test_PolyElement_subs.<locals>.<lambda>  s(    166Aq6Ar!Aww<*@#A#A r-   c                  V                          t          dd          fdfg          S r  r  r   s   r.   r/   z'test_PolyElement_subs.<locals>.<lambda>  s(    166Ar!Aww<!Q*@#A#A r-   c                  r                          t          dd          ft          dd          fg          S r  r  r   s   r.   r/   z'test_PolyElement_subs.<locals>.<lambda>  s0    166Ar!Aww<!R!WW*F#G#G r-   )r   r   r  r   r   r   r   r  s      @@@r.   test_PolyElement_subsr    s   R==DAq	1qAv!aA	q!A66jAG,,666
>55555666gr""JAq!Q	1qAv!aA	q!A66jAG,,666	AA  A66jAG,,666
>AAAAAABBB
>AAAAAABBB
>GGGGGGHHHHHr-   c                     t          dt                    \  } }}|dz  |dz  z   }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ |dz  |dz  z
  }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ ||z  dz   }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ |dz   }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ |                     d          }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ t          d          \  } }|                                \  }}}|dk    sJ |                    |          |z   |k    sJ d S )Nr2   rH   r   rG   r#   )r   r   
symmetrizecomposer   r   )rB   r%   r&   rS   symr)  ms          r.   test_PolyElement_symmetrizer    s   5"ooGAq! 	
1q!tA,,..KCa!8888;;q>>C1$$$$ 	
1q!tA,,..KCa!8888;;q>>C1$$$$ 	
!aA,,..KCa!8888;;q>>C1$$$$ 	
AA,,..KCa!8888;;q>>C1$$$$ 	
AA,,..KCa!8888;;q>>C1$$$$ 88DAq,,..KCa!8888;;q>>C1$$$$$$r-   c                     t          dt                    \  } dz  ddz  z  z   dz  z   dz                       d          }|dk    rt          || j                  sJ                               k    sJ                     dz            dz  ddz  z  z   ddz  z  z   dz   k    sJ t          t          fd           t          dt                    \  } }}dz  ddz  z  z   dz  z   dz                       d          }|dk    rt          || j                  sJ                     df|dfg          }|dk    rt          || j                  sJ dz  ddz  z  z   dz  |z  |z  z   dz                       ||dz  z  d	z
            }||dz  z  d	z
  dz  d||dz  z  d	z
  dz  z  z   d||dz  z  d	z
  z  |z  |z  z   dz   }||k    rt          || j                  sJ d S )
Nr%   r#   rI   rH   r   rK   c                  L                          t          dd                    S r  )r  r   r  s   r.   r/   z*test_PolyElement_compose.<locals>.<lambda>  s    199Q1Q#8#8 r-   r"   r$   )r   r   r  r   r   r   r   )rB   r   r&   r'   rQ  rS   r%   s        @@r.   test_PolyElement_composer    sC   R==DAq	1qAv!aA			!QA66jAG,,66699Q??a99Q1A!Q$1a4!7!!;;;;;
>88888999gr""JAq!Q	1qAv!aA			!QA66jAG,,666			Aq6Aq6"##A66jAG,,666	
A!Q$1Qq	 1	$--a1a4!<<A	
1a4!a!Qq!tVaZ!O++a1a4!nQ.>q.@@1DA66jAG,,66666r-   c                     t          dt                    \  } }}z
  j        dk    sJ z
  j        dk    sJ z
  j        dk    sJ z
  j        dk    sJ z
  dz   j        dk    sJ z
  dz   j        dk    sJ z
  dz   j        dk    sJ z
  dz   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 |z  j        dk    sJ |z  j        dk    sJ |z  j        dk    sJ |z  j        dk    sJ dz  j        dk    sJ dz  j        dk    sJ dz  j        dk    sJ dz  j        dk    sJ dz  dz   j        dk    sJ dz  dz   j        dk    sJ dz  dz   j        dk    sJ dz  dz   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z
  j        du sJ dz  dz
  j        du sJ dz  dz   j	        du sJ dz  dz   j	        du sJ |z   |z   dz   j
        du sJ |z  |z  dz   j
        du sJ |z  |z   dz   j        du sJ |z  |z  dz   j        du sJ dz
  j        du sJ dz
  dz  j        du sJ dz  z   dz   j        du sJ dz  dz  z   dz   j        du sJ t          d	t          d
                    \  }}d|z  dz   j        du sJ d|dz  z  d|z  z   dz   j        du sJ t          dt                    \  }}|dz  |dz  z   |dz  z
  |dz  z
  |dz  z
  |dz  z   }|j        du sJ |dz   j        du sJ t#          t$          fd           t          dt                    \  }  | d          j        du sJ  | d          j        du sJ d S )Nr"   FTr$   r#   r   rH   rI   r0      rG   r   rX  rq   r`  rx   rK   c                       j         S r^   )is_cyclotomicr%   s   r.   r/   z&test_PolyElement_is_.<locals>.<lambda>>  s	     r-   r(   )r   r   is_generator	is_groundis_monomialis_termis_zerois_oneis_monicis_primitive	is_linearis_quadraticis_squarefreeis_irreducibler   r   r  r   r   )rB   r&   r'   _r0   r   rS   r%   s          @r.   test_PolyElement_is_r    sh   GR  HAq1E5((((E$$$$E$&&&&E?d""""EAI#u,,,,EAI D((((EAI"d****EAI$&&&&>T!!!!;%=D    9aC&&&&aC?e####aC$$$$aC=D    aC&&&&aC?e####aC%%%%aC=D    aC!G!U****aC!G%''''aC!G E))))aC!G%%%%1Q44<41Q44<5    1Q44;%1Q44;$Et####aC!G&&&&aC!G!T))))aC!G!U****EAIM$,,,,aCEAI E))))aC!GaK%----aCEAI#u,,,,E D((((UQJ%....qD1HqL(D0000qD1Q3JN*e3333RVVDAqaC!G#t++++adFQqSL1,5555R==DAq	2221$q!t+ad2A?e####E D((((
&(?(?(?(?@@@	b"BA1Q44%%%%1Q44$&&&&&&r-   c                     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 sJ t          t          fd           t          t          fd           d S )	Nr"   r$   r   rV   r'   Fc                  z                          d                               d                               d          S r*   rY   )r'   s   r.   r/   z'test_PolyElement_drop.<locals>.<lambda>K  s+    qvvayy~~a0055a88 r-   c                  .                          d          S r*   rY   r  s   r.   r/   z'test_PolyElement_drop.<locals>.<lambda>L  r\   r-   )	r   r   rZ   r	   r   r   r   r   r`   )rB   r&   r%   r'   s     @@r.   test_PolyElement_dropr  D  s   GR  HAq11Q4499Q<<C 8 888881Q4499Q<<Q$b#(>(>>>>>aaddiill''**//22AG<<EEEE
:8888999
:(((()))))r-   c                     t          dt                    \  } }}}d|dz  z  d|dz  z  z   d|dz  z  |z  z   dz   }|                    dd          d|z  dz   k    sJ |                    |d          dk    sJ d|dz  z  d|z  |dz  z  |z  z   d	|dz  z  z   d	|z  |dz  z  z   }|                    |d          d|dz  z  |z  d	|dz  z  z   k    sJ |                    |d          d|z  |z  d	z   k    sJ d|dz  z  d|z  |z  z   dz   }|                    |d           | d
          k    sJ |                    |d           | d
          k    sJ d S )Nzx, y, zrI   r#   rJ   rH   rK   rG   r$   r`  r   )r   r   	coeff_wrt)rB   r%   r&   r'   ps        r.   test_PolyElement_coeff_wrtr  N  s   i$$JAq!Q	!Q$1a4!AqD&("Q&A;;q!!a'''';;q!!!!!	!Q$1QT!bAg%1QT	1A;;q!!Q$q2ad7 22222;;q!!A
****	!Q$1QA;;q!!$$$$;;q!!$$$$$$r-   c                     t          dt                    \  } }| dz  | |z  z   d| z  dz   c}                    |          d|z  dz   k    sJ | dz  dz   d| z  dz
  c}                    |                              ||           cxk    rdk    sn J                     |d           d          k    sJ | |z  d| z  z   dz   | |z   c}                    |          |dz   d|z  z
  dz   k    sJ                     |d                              ||          cxk    r| dz   d| z  z   dz   k    sn J t          t          fd           d S )	Nr   rH   rI   r$   r>  r   c                  @                           d                    S r*   premrB   rS   s   r.   r/   z'test_PolyElement_prem.<locals>.<lambda>k      affQQqTTll r-   )r   r   r  r   rP  r%   r&   r   rB   rS   s      @@r.   test_PolyElement_premr  ]  s   62GAq!a4!A#:qsQwDAq66!991q    a4!8QqS1WDAq66!99q!**********66!Q<<11Q44Q319q=!a%DAq66!99A!a''''66!Q<<166!Q<<::::AqD51Q3;?::::::
2222233333r-   c                  N   t          dt                    \  } }| dz  d| dz  z  z   d| dz  z  z   d| dz  z  dz   c}                    |                              ||           cxk    rd| dz  z  d| z  z   dz   d	| z  d
z
  fk    sn J | dz  |dz  z
  | |z
  c}                    |                              |d          cxk    r| |z   dfk    sn J | |z  d| z  z   dz   | |z   c}                    |          |dz   |dz   d|z  z
  dz   fk    sJ                     ||                              |d          cxk    r| dz   | dz   d| z  z   dz   fk    sn J  d                              |          dk    sJ t          t          fd           d S )Nr2   rI   rJ   r#   rG   rH   r>     iB   r   r$   r   c                  @                           d                    S r*   r  r  s   r.   r/   z'test_PolyElement_pdiv.<locals>.<lambda>{  r  r-   )r   r   pdivr   rP  r  s      @@r.   test_PolyElement_pdivr  m  s   5"ooGAq!a4!AqD&=1QT6!1QT6A:DAq66!99q!HHHH1a4"Q$);SURZ(HHHHHHHa4!Q$;ADAq66!99q!2222Q
222222Q319q=!a%DAq66!99QA!a0000066!Q<<166!Q<<CCCCAEAqD51Q3;?+CCCCCCC1Q4499Q<<6!!!!
2222233333r-   c                     t          dt                    \  } }}|dz  d|dz  z  |z  z
  d|dz  z  z   |dz  d|z  z
  }}|                    |          |                    ||          cxk    r|dz  d|z  z
  k    sn J |                    ||          d|dz  z  d|z  z
  dz   k    sJ |dz  |dz  z
  |dz  |dz  z
  }}|                    |          |                    |d          cxk    r|dz  |dz  z   k    sn J d S )Nr   rI   rH   rx   r   )r   r   pquorn  s        r.   test_PolyElement_pquor  }  s4   62GAq!a4!AqD&(?Qq!tV#QTAaCZqA66!99q!22221qs
22222266!Q<<1QT6AaC<!+++++a4!Q$;1q!tqA66!99q!33331q!t33333333r-   c                     t          dt                    \  } }}|dz  |dz  z
  ||z
  c                                                  |          cxk    r	||z   k    sn J                     |                              d          cxk    r||z   dz   k    sn J |dz  d|z  z   dz   |dz   ct          t          fd           d S )Nr   rH   r$   r#   rK   c                  .                                    S r^   )pexquor!  s   r.   r/   z)test_PolyElement_pexquo.<locals>.<lambda>  s     r-   )r   r   r  r   r   rn  s      @@r.   test_PolyElement_pexquor    s    62GAq!a4!Q$;ADAq88A;;!((1a..1111AE11111188Aq>>QXXa^^8888q1uqy888888a4!A#:>1q5DAq
 3 3 3 3 344444r-   c                      t          dt                    \  } }d|z  |dz  dz
  }}|dz  t          dd           d}}}|                    |          ||fk    sJ |                    |          |||fk    sJ d S )Nr%   rH   rX  r\  r$   )r   r   
half_gcdexgcdex)r  r%   rS   r   sr0   r{  s          r.   test_PolyElement_gcdexr    s    R==DAqQ31r	qAdR2YYJ!qA<<??q!f$$$$771::!Q""""""r-   c                     t          dt                    \  } }}|dz  |z  ||z  z   ||z   }}|dz  |dz  z
  }|                    |          |||gk    sJ |                    |d          |                    ||          cxk    r	|||gk    sn J |                    ||          |dz  |z  ||z  z   ||z   |dz  |dz  z   gk    sJ d|z  |z
  |dz  d|z  z   |z   }}|                    |          |dz  |z   d|z  z   d|z  |z
  |dz  d|z  z   gk    sJ  | d          |dz  |dz  z
  }}|                    |          |dz  |dz  z
  dgk    sJ |dz  |z  ||z  z    | d          }}|                    |          |dz  |z  ||z  z   dgk    sJ  | d           | d          }}|                    |          ddgk    sJ |dz  |z   |dz  |z   }}|                    |          |dz  |z   |dz  |z   gk    sJ d S )Nr   rH   r#   r   r`  r$   )r   r   subresultants)rB   r%   r&   rS   r   r{  s         r.   test_PolyElement_subresultantsr    s   62GAq!a46AaC<QqA	1q!tA??1!Q**** ??1a  Q__Q%:%:GGGGq!QiGGGGGG??1a  QT!Vac\1q5!Q$A+$FFFFFQ37AqD1Q3JNqA??1!Q$(QqS.!A#'1a4"Q$;!GGGGG1Q44A1qA??1!Q$A+q!11111a46AaC<1qA??1!Q$q&1Q3,!222221Q441qA??1!Q''''a4!8QTAXqA??1!Q$(AqD1H!5555555r-   c                      t          dt                    \  } }|dz  d|z  z
  dz   |dz  dz
  d}}}|                    |          |k    sJ d S )Nr%   rH   r$   r   )r   r   	resultantr  r%   rS   r   r{  s        r.   test_PolyElement_resultantr    sY    R==DAqdQqSj1nadQh!qA;;q>>Qr-   c                  h   t          dt                    \  } }|dz  d|dz  z  z   d|z  z   dz
  d}}|                                |k    sJ t          dt                    \  }}}}t          d|          \  } }||dz  z  ||z  z   |z   |dz  d|z  |z  z
  }}|                                |k    sJ d S )	Nr%   r#   rH   r@     ipza,b,crI   )r   r   discriminant)r  r%   rS   r   rt   r   bcs           r.   test_PolyElement_discriminantr    s    R==DAqa4!AqD&=1Q3#VqA>>q    gr""JAq!QQ<<DAqQT6AaC<!QTAaCE\qA>>q      r-   c                  N   t          dt                    \  } }|dz  d|dz  z  z   d|dz  z  z   d|dz  z  z   d	|d
z  z  z   d|dz  z  z
  d|z  z
  dz   }|d
z  d|z  z
  dz   }|dz  d|z  z   }|                    ||          |k    sJ |                                ||gk    sJ d S )Nr%   rU  r>  r`     rx   i  rK   q  rI   rH   r#   r@  rJ   )r   r   r  	decomposer  s        r.   test_PolyElement_decomposer    s    R==DAq	21b53q!t8#c!Q$h.QT9AadFBRTIAMA	1qs
QA	1qs
A99Q??a;;==QF""""""r-   c                     t          dt                    \  } dz  dz  z
  dz                       d          dz  dz  z   dz   k    sJ dz  dz  z
  dz                       dg          dz  dz  z   dz   k    sJ t          dt                    \  }z                      ddg          dz   dz   z  k    sJ t	          t
          fd           d S )Nr%   rH   r$   r   c                  4     z                       d          S r   )shift)r%   r&   s   r.   r/   z(test_PolyElement_shift.<locals>.<lambda>  s    1A r-   )r   r   r  
shift_listr   r   )r  rB   r%   r&   s     @@r.   test_PolyElement_shiftr    s   R==DAqqD1Q3JN!!!$$1qs
Q6666qD1Q3JN&&s++q!taczA~====62GAq!aCQF##!ac{2222
&(>(>(>(>(>?????r-   c            	      ~   t          dt                    \  } }t          d|           \  }}dd|dz  z  z  |dz  z  dd|dz  z  z  |d	z  z  z
  d
d|d	z  z  z  |dz  z  z   dd|d	z  z  z  |dz  z  z
   | d          dz  |z  z    | d          dz  z
  }|                                |dz  d|dz  z  z
  |d	z  dz  |z  z   d|d	z  z  dz  z
  d|dz  z  d|z  z
  |d	z  dz  z   |d	z   dz   | d          dz  z   |z  d|d	z  z  dz  z   d|dz  z  d|dz  z  z
  d|d	z  z  z
  d|dz  z  d|d	z  z  z
  dz   z  gk    sJ d S ) Nr0   r%   i   i	=  rx   rJ   i   r  rI   r\  r#      rH   r$   i$  d   @   rF  rX     rY  i N  r@     irU  i ȯ l      ir  i  l      ^_)r   r   r   sturm)rt   r0   r  r%   rS   s        r.   test_PolyElement_sturmr    s   b>>DAqQ<<DAqeAqDj!Q$s1a4xA!55E!Q$J18LLsTWXY[\X\T\~^_ab^bObbefefgheieijoeopqeqqtutuvwtxtxy|t||A7799	1s1a4x!Q$r'!)#bAgbj0	!Q$QAb 
Q$rAAeHHQJ	!Bq!tGBJ.	ArEHQTM	!M!Q$$6	6QTIaQRdN9RUc9cd	      r-   c                  r   t          dt                    \  } }|dz  d|dz  z  z   |dz  z
  d|dz  z  z
  }|                                |df|dz   dfgk    sJ ||dz
  dz  z  |dz
  dz  z  |dz
  dz  z  |dz
  z  }|                                |dz  d|z  z
  dz   df|dz  d|z  z
  dz   df|dfgk    sJ d S )Nr%   rJ   rH   rI   r#   r$   )r   r   gff_list)r  r%   rS   s      r.   test_PolyElement_gff_listr    s    R==DAq	1qAv1qAv%A::<<QFQUAJ/////	1q51*a!eaZQ
*AE2A::<<QTAaCZ!^Q/!Q$1*q.!1Dq!fMMMMMMMr-   c                     t           } t          j        t          d                    }|j        }t	          d|           \  }}}t	          d|          \  }}}||z  |z                                   |dz  |dz  z  dz
  k    sJ d S )NrH   r2   )r   r   r   unitr   norm)kKsqrt2r  r   r   r%   r&   s           r.   test_PolyElement_normr    s    
A
477##AFE5!nnGAq!5!nnGAq!aC%K1a419q=000000r-   c                  n   t          dt          j        t          d                              \  } }|                                 j        }|dz  dz
                                  dg|dz  dt          d          z  |z  z
  dz   |dz  d|dz  z  z
  dz   fk    sJ t          dt          j        t          d                              \  } }|                                 j        }|dz  dz
                                  dg|dz  dt          d          z  |z  z
  dz
  |dz  d|dz  z  z
  dz   fk    sJ d S )Nr%   r#   rH   r$   rI   r`  )r   r   r   r   	to_groundr%   sqf_norm)rB   r%   r   s      r.   test_PolyElement_sqf_normr    s.   R'Q0011DAq	AqD1H  aS!Q$4771*<q*@!Q$AqD.STBT$UUUUUR'Q0011DAq	AqD1H  aS!Q$4771*<q*@!Q$AqD.STBT$UUUUUUUr-   c                  0   t          dt                    \  } }|dz  |dz  z
  |dz  z
  dz   }|dz  d|dz  z  z   d|z  z   dz   }|dz
  }|dz  |dz  z   |z
  dz
  }|                                |k    sJ |                                d|df|dfgfk    sJ d S )Nr%   rJ   r#   rH   r$   rI   )r   r   sqf_partsqf_list)r  r%   rS   r   r{  r  s         r.   test_PolyElement_sqf_listr     s    R==DAq	1q!tadQA	1qAv!aA	AA	1q!ta!A::<<1::<<AAA/0000000r-   c            
         t          d          dz  t          dt          d          z  dz             dz  z   t          d          dz  dt          d          z  dz  z   t          d          dz  dt          d          z  dz  z   t          d           dz  t          dt          d          z  dz             dz  z   g} t          | d          \  }}|j        t	          j        t          d          t          dt          d          z  dz             z             k    sJ |j        dk    sJ g }| D ]/}|                    |j                            |                     0||k    sJ d S )	Nr#   rX  r`  rx   r$   Tr   r,   )	r   r   r   r6   r   r   r5   appendr   )itemsrB   r   resultitems        r.   test_issue_18894r&    sd   qTT"WtAd1ggIN++A--qttAv$q''	"/Dadd1fqQUVWQXQXyY[|F[^_`a^b^b]bce]ehlmnostuovovmvy{m{h|h|}~h~]~E$'''DAq8r)$q''$qay|2D2D*DEEEEEE6R<<<<F 1 1ah))$//0000;;;;;;r-   c                      t          dt                    \  } }|dz  |dz  z
  |dz  z
  dz   }|dz   }|dz
  }|dz  |z   dz   }|                                d|df|df|dfgfk    sJ d S )Nr%   rJ   r#   rH   r$   )r   r   factor_list)r  r%   rS   r   r  ws         r.   test_PolyElement_factor_listr*    s    R==DAq	1q!tadQA	AA	AA	1q1A==??qAq6Aq6Aq6":;;;;;;;r-   c                      t          dt          d                    \  } }|dz  |dz  z   |dz  z   |dz  z   dz   }|                    d          |dz  |d	z  z   |d
z  z   |dz  z   dz   k    sJ d S )Nr%   rH   rK   rJ   rI   r#   r$   rp   r>  rX  rU  )r   r   rb  )rB   r%   r  s      r.   test_issue_21410r,  '  s    RUUDAq	1q!tadQT!A%Aa  ArEArEMArE$9ArE$AA$EEEEEEEr-   N)t__doc__	functoolsr   operatorr   r   sympy.polys.ringsr   r   r   r	   r
   sympy.polys.fieldsr   r   sympy.polys.densebasicr   sympy.polys.domainsr   r   r   r   r   sympy.polys.orderingsr   r   sympy.polys.polyerrorsr   r   r   r   sympy.testing.pytestr   
sympy.corer   r   sympy.core.singletonr   sympy.core.numbersr   &sympy.functions.elementary.exponentialr   (sympy.functions.elementary.miscellaneousr   r<   rC   rE   rT   ra   rc   rg   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  rR  rc  ri  rk  ro  rw  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r&  r*  r,  r,   r-   r.   <module>r<     s                   G G G G G G G G G G G G G G / / / / / / / / ' ' ' ' ' ' 2 2 2 2 2 2 2 2 2 2 2 2 2 2 , , , , , , , ,E E E E E E E E E E E E ( ' ' ' ' ' & & & & & & & & " " " " " " ! ! ! ! ! ! 6 6 6 6 6 6 9 9 9 9 9 9     D  : : : ) ) )2 2 2(  & & & " " "" " "
* 
* 
*' ' '8  #' #' #'J% % %	7 	7 	7    *- - -># # #J!# !# !#F7 7 7< < <  ,4 4 42 2 2  < < <C C C% % %(@ @ @"6 6 6"a a a:c c c:$K $K $KLo4 o4 o4bC C C:9+ 9+ 9+v$( $( $(LM M M(3A 3A 3AjO+ O+ O+b  ? ? ?B5 5 55 5 5D D D8 8 8<M M M8I I I*%% %% %%N- - -0H' H' H'T* * *% % %4 4 4 4 4 4 4 4 45 5 5# # #6 6 66  ! ! !# # #@ @ @  N N N1 1 1	V 	V 	V	1 	1 	1  	< 	< 	<F F F F Fr-   