
    sg                       d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZSmTZTmUZUmVZVmWZWmXZX ddlYmZZZ dd	l[m\Z\ dd
l]m^Z^m_Z_m`Z` ddlambZb ddlcmdZd ddlemfZf ddlgmhZh ddlimjZj ddlkmlZlmmZmmnZn ddlompZpmqZq ddlrmsZsmtZtmuZumvZvmwZwmxZx ddlymzZz ddl{m|Z| ddl}m~Z~ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd lmZ dd!lmZ dd"lmZ dd#lmZmZmZ dd$lmZmZmZmZmZmZmZmZmZmZmZ d% Zd& Zd' Zd( Zd) Zd* Zd+ Zd, Zd- Zd. Zd/ Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdB ZdC ZdD ZdE ZdF ZdG ZdH ZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP ZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Zdi Zdj Zdk Zdl Zdm Zdn Zdo Zdp Zdq Zdr Zds Zdt Zdu Zdv Zdw Zdx Zdy Zdz Zd{ Z d| Zd} Zd~ Zd Zd Zd Zd Zd Zd Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d 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Ƅ ZKdǄ ZLdȄ ZMy)zBTests for user-friendly public interface to polynomial functions.     N)<PolyPurePolypolyparallel_poly_from_exprdegreedegree_listtotal_degreeLCLMLTpdivprempquopexquodivremquoexquo
half_gcdexgcdexinvertsubresultants	resultantdiscriminant	terms_gcd	cofactorsgcdgcd_listlcmlcm_listtruncmoniccontent	primitivecompose	decomposesturmgff_listgffsqf_normsqf_partsqf_listsqffactor_listfactor	intervalsrefine_rootcount_roots	all_roots
real_rootsnrootsground_rootsnth_power_roots_polycancelreducedgroebnerGroebnerBasisis_zero_dimensional_torational_factor_listto_rational_coeffs)MultivariatePolynomialErrorExactQuotientFailedPolificationFailedComputationFailedUnificationFailedRefinementFailedGeneratorsNeededGeneratorsErrorPolynomialErrorCoercionFailedDomainErrorOptionError	FlagError)DMPfield)FFZZQQZZ_IQQ_IRREX)	RealField)ComplexField)lexgrlexgrevlex)S4TransitiveSubgroups)Add)_aresame)Tuple)Expr)
Derivativediffexpand)_keep_coeffMul)FloatIIntegerRationaloopi)Pow)Eq)S)Symbol)imre)exp)tanh)sqrt)	Piecewise)sin)Matrix)MatrixSymbol)rootof)signsimp)iterable)SymPyDeprecationWarning)raiseswarns_deprecated_sympywarns)abcdpqtwxyzc                 R    t        | |      D ]  \  }}t        ||z
        dkD  s y y)Ng|=FT)zipabs)r   r   uvs       S/var/www/html/venv/lib/python3.12/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqr   W   s3    Aq	 1q1u:     c                     t        |       t        |      k(  ret        |       r4t        |       t        |      k(  rt        d t	        | |      D              S yt        | t              xr  | j                  |d      S y)Nc              3   :   K   | ]  \  }}t        ||        y wN)
_strict_eq).0r   r   s      r   	<genexpr>z_strict_eq.<locals>.<genexpr>b   s     B1:a+Bs   FTstrict)typerz   lenallr   
isinstancer   eq)r   r   s     r   r   r   ^   se    Aw$q'A;1vQBAq	BBBa&?4144$+??r   c                  R   t        t        t              } t               5  | t        t              z   d d d        t               5  | t        t              z    d d d        t               5  | t        t              z
   d d d        y # 1 sw Y   TxY w# 1 sw Y   ;xY w# 1 sw Y   y xY wr   )r   r   r}   rq   r   s    r   test_Poly_mixed_operationsr   k   s    Q
A		! 	CF
		! 	CF
		! 	CF
 	   s#   BB)BBBB&c                  h
   t        d      } t        j                  dddt        |       j                  t         | d       | d      g|       k(  sJ t        j                  dddt        |       j                  t         | d       | d      g|       k(  sJ t        j                  dddt        |       j                  t         | d       | d      g|       k(  sJ t        j                  dddt        |       j                  t         | d       | d      g|       k(  sJ t        j                  dddt        t        f|       j                  t         | d       | d	      g | d      gg|       k(  sJ t        j                  dddt        
      j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        d      j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        
      j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        d      j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  dddt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  dt        t              it        d      t        t        t              t        z  t        d      k(  sJ t        j                  dt        it        d      t        t        t        z  t        d      k(  sJ t        j                  ddit        t        fd      t        t        t        z  t        t        d      k(  sJ t        j                  dt        it        t        fd      t        t        t        z  t        t        d      k(  sJ y )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rN   r   F)r   	compositerU   r   r   rP   r   r   )rO   r   	from_dictr   reprL   r   rP   rQ   ru   r   Ks    r   test_Poly_from_dictr   u   sh   
1A>>!1Q((+sAaD!A$</CD D D>>!1Q((+sAaD!A$</CD D D >>1..1cS!A$!q5IJ J J>>1..1cS!A$!q5IJ J J >>1a0	18adAaD\AaD6$:A >? ? ? >>aA,Q/33sBqE2a5>27NNNN>>!1D**-#beRU^R1HI I I >>!1R)),RUBqENB0GH H H>>!1R)),RUBqENB0GH H H >>$$'C31r!u~r+BC C C>>$003sBqE2a5>27NO O O >>2//2sc2a5"Q%."6MN N N>>2//2sc2a5"Q%."6MN N N >>4Q.qEBSVAXq&' ' '>>4)!u=QqS!D!" " ">>61+QFeDQqS!Qt$% % %>>61+QFeDQqS!Qt$% % %r   c                     t        d      } t        j                  ddgt        |       j                  t         | d       | d      g|       k(  sJ t        j                  ddgt        |       j                  t         | d       | d      g|       k(  sJ t        j                  ddgt              j                  t        t        d      t        d      gt              k(  sJ t        j                  ddgt        d      j                  t        t        d      t        d      gt              k(  sJ t        j                  ddgt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  ddgt        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  d	d
gt              j                  t        t        d
      gt              k(  sJ t        j                  d
d	gt              j                  t        t        d
      t        d      gt              k(  sJ t        t        d        y )Nr   r   r   r   r   r   Tr   r         ?        c                  F    t        j                  g gt        t        f      S )Nr   )r   	from_listr   r    r   r   <lambda>z%test_Poly_from_list.<locals>.<lambda>   s    t1a&0Q r   )rO   r   r   r   r   rL   rP   rQ   rT   r|   r?   r   s    r   test_Poly_from_listr      s   
1A>>1a&q3773!ad|Q;OOOO>>1a&q3773!ad|Q;OOOO>>1a&q)--beRU^R1HHHH>>1a&q599S"Q%AQS=TTTT>>1a&q488CA1PR<SSSS>>1a&q488CA1PR<SSSS>>1c(+//33y"3EEEE>>3(+//33C7I23NNNN
&(QRr   c                      t        t        dz   t        t              t        t        dz   t        d      t        t        t        z   t        t        t              t	        d       t        j
                        k(  sJ t        j
                         j                  t          d        d      g       k(  sJ t        j
                  t              j                  t        t        d      t        d      gt              k(  sJ t        j
                  t              j                  t        t        d      t        d      gt              k(  sJ t        j
                  t              k(  sJ t        j
                  t               j                  t          d        d      g       k(  sJ t        j
                  t        t              j                  t        t        d      t        d      gt              k(  sJ t        j
                  t        t              j                  t        t        d      t        d      gt              k(  sJ t        j
                  t              t        t        dz   t        d	      k(  sJ t        t         fd
       t        t        fd       t        t        fd       t        j
                  t        t        f      t        t        dz   t        t        d      k(  sJ t        j
                  t        t        ft              t        t        dz   t        t        d      k(  sJ t        j
                  t        t        ft              t        t        dz   t        t        d      k(  sJ t        j
                  t        t        fd      t        t        dz   t        t        d      k(  sJ t	        d       t        j
                        k(  sJ t        j
                  t              j                  t        t        d      t        d      gt              k(  sJ t        t        fd       t        j
                         j                  t          d        d      g       k(  sJ t        j
                  t              k(  sJ t        j
                  t        t              j                  t        t        d      t        d      gt              k(  sJ t        t        fd       t        j
                  t               j                  t          d        d      g       k(  sJ t	        d       t        j
                        k(  sJ t        j
                  t              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                         j                  t          d      g  d        d      gg       k(  sJ t        j
                  t              t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t        t        t                 t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t        t        t                 t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t              t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t        t        t                 t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t        t        t                 t        t        t        z   t        t        t                 k(  sJ t        t        fd       t        j
                  t        t        f      k(  sJ t        j
                  t        t        ft              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        ft              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        f       j                  t          d      g  d        d      gg       k(  sJ t        j
                  t        t        f      j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        ft              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        ft              j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        f       j                  t          d      g  d        d      gg       k(  sJ t        j
                  t        t        fd      j                  t        t        d      gt        d      t        d      ggt              k(  sJ t        j
                  t        t        fd      j                  t        t        d      gt        d      t        d      ggt              k(  sJ y )N   r   r   r   modulusr   r   r   ZZ[x]c                  <    t        j                  t               S Nr   r   	from_polyr   )r   fs   r   r   z%test_Poly_from_poly.<locals>.<lambda>   s    4>>!!A#F r   c                  D    t        j                   t        t              S r   r   r   r   rP   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>       4>>!!B#G r   c                  D    t        j                   t        t              S r   r   r   r   rQ   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   rP   rQ   r   r   zFF(3)c                  :    t        j                   t              S Nr   )r   r   rQ   gs   r   r   z%test_Poly_from_poly.<locals>.<lambda>   s    4>>!B#? r   r   c                  D    t        j                   t        t              S r   r   r   r   rQ   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  D    t        j                   t        t              S r   )r   r   r   rP   hs   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  D    t        j                   t        t              S r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  <    t        j                   t        d      S Nr   r   )r   r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>       4>>!!Q#G r   c                  D    t        j                   t        t              S r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  D    t        j                   t        t              S r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  <    t        j                   t        d      S r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   Tr   )r   r   rP   r   rO   r   r   rL   rQ   r|   rH   )r   r   r   r   s   @@@@r   test_Poly_from_polyr      s;	   QUAb!AQUAq!AQUAq$A
1A>>!!!!>>!A&**c1Q41,.BBBB>>!B'++sBqE2a5>2/FFFF>>!B'++sBqE2a5>2/FFFF>>!!$)))>>!!A.22c1Q41,6JJJJ>>!!B/33sBqE2a5>27NNNN>>!!B/33sBqE2a5>27NNNN>>!!$QUAg(FFFF
>FG
>GH
>GH>>!1a&)T!a%Ad-KKKK>>	Ar#&*1q5!Qt&DE E E>>	Ar#&*1q5!Qt&DE E E>>	A#&*1q5!Qw&GH H H 	1A>>!!!!>>!B'++sBqE2b6?B/GGGG
>?@>>!A&**c1Q41,.BBBB>>!!$)))>>!!B/33sBqE2b6?B7OOOO
>GH>>!!A.22c1Q41,6JJJJ
1A>>!!!!>>	"cS2a5'BqE2a5>!:B?@ @ @>>	"cS2a5'BqE2a5>!:B?@ @ @>>!A&**cAaD6AaD!A$<2H!.LLLL>>!!$QUAbe(DDDD
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>!!$QUAbe(DDDD
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>!1a&)Q...>>	Ar##&3#1wA1.G*LM M M>>	Ar##&3#1wA1.G*LM M M>>	Aq""%#qtfqtQqTl-CQ)GH H H >>	AsRUGbeRU^#<bAB B B>>	Ar##&3#1wA1.G*LM M M>>	Ar##&3#1wA1.G*LM M M>>	Aq""%#qtfqtQqTl-CQ)GH H H >>	Ad$$'C3A"Q%A/H"+MN N N>>	Ad$$'C3A"Q%A/H"+MN N Nr   c                  
   t        t        d        t        t        d        t        d      } t        j                  t
        dz   |       j                  t         | d       | d      g|       k(  sJ t        j                  t        dz   |       j                  t         | d       | d      g|       k(  sJ t        j                  t
        dz   t
        |       j                  t         | d       | d      g|       k(  sJ t        j                  t        dz   t        |       j                  t         | d       | d      g|       k(  sJ t        j                  t
        t        z   |       j                  t         | d      g | d       | d      gg|       k(  sJ t        j                  t
        t        z   t
        t        |       j                  t         | d      g | d       | d      gg|       k(  sJ t        j                  t
        dz         j                  t        t        d      t        d      gt              k(  sJ t        j                  t        dz         j                  t        t        d      t        d      gt              k(  sJ t        j                  t
        dz   t
              j                  t        t        d      t        d      gt              k(  sJ t        j                  t        dz   t              j                  t        t        d      t        d      gt              k(  sJ t        j                  t
        dz   t              j                  t        t        d      t        d      gt              k(  sJ t        j                  t        dz   t              j                  t        t        d      t        d      gt              k(  sJ t        j                  t
        dz   t
        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  t        dz   t        t              j                  t        t        d      t        d      gt              k(  sJ t        j                  t
        dz   t
        t        t              j                  t        t        d      gt        d      ggt              k(  sJ t        j                  t        dz   t
        t        t              j                  t        t        d      t        d      ggt              k(  sJ y )	Nc                  H    t        j                  t        j                        S r   )r   	from_exprrm   Zeror   r   r   r   z%test_Poly_from_expr.<locals>.<lambda>  s    T^^AFF%; r   c                  >    t        j                  t        d            S Nr   )r   r   rm   r   r   r   r   z%test_Poly_from_expr.<locals>.<lambda>  s    T^^AaD%9 r   r   r   r   r   r   r   )
r|   rE   rO   r   r   r   r   rL   r   rP   )F3s    r   test_Poly_from_exprr     s   
;<
9:	AB>>!a%+//31r!u~r3JJJJ>>!a%+//31r!u~r3JJJJ>>!a%2.22c2a5"Q%."6MMMM>>!a%2.22c2a5"Q%."6MMMM>>!a%+//3A"Q%A7PRT3UUUU>>!a%Ab155r!ug1rRSu~=VXZ9[[[[>>!a% $$RUBqENB(????>>!a% $$RUBqENB(????>>!a%#''31r!u~r+BBBB>>!a%#''31r!u~r+BBBB>>!a%+//31r!u~r3JJJJ>>!a%+//31r!u~r3JJJJ>>!a%2.22c2a5"Q%."6MMMM>>!a%2.22c2a5"Q%."6MMMM>>!a%Ab155r!ug1w=OQS9TTTT>>!a%Ab155r!uben=Mr9RRRRr   c            	         t         t           } t         | t        dz         t        |       j                  t         | t        dz         g|       k(  sJ | j                         } t         | t        dz         t        |       j                  t         | t        dz         g|       k(  sJ t        t           } t         | t        dz         t        |       j                  t         | t        dz         g|       k(  sJ | j                         } t         | t        dz         t        |       j                  t         | t        dz         g|       k(  sJ t        j                  t              } t         | t        d      t        d      g      t        |       j                  t         | t        d      t        d      g      g|       k(  sJ | j                         } t         | t        d      t        d      g      t        |       j                  t         | t        d      t        d      g      g|       k(  sJ t        j                  t              } t         | t        d      t        d      g      t        |       j                  t         | t        d      t        d      g      g|       k(  sJ | j                         } t         | t        d      t        d      g      t        |       j                  t         | t        d      t        d      g      g|       k(  sJ t        j                  t              } t         | ddg      t        |       j                  t         | ddg      g|       k(  sJ y )Nr   r   )rP   r   r   r   r   rL   	get_fieldrQ   old_poly_ringalgebraic_fieldrf   )doms    r   test_poly_from_domain_elementr   /  s   
Q%CAaC!C(,,S1XJ0DDDD
--/CAaC!C(,,S1XJ0DDDD
Q%CAaC!C(,,S1XJ0DDDD
--/CAaC!C(,,S1XJ0DDDD


1
CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ
--/CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ


1
CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ
--/CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ


Q
CQFQs+//3QF}c3JJJJr   c            
      >   t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d	        t        t        d
        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        t        d        t        d      t        dt              k(  sJ t        t        dz  z  t        t        z  z   t        z   } t        t        t        t        dt              | k(  sJ t        t        t        t        t        g      t              | k(  sJ t        t        t        t        gt              | k(  sJ t        t        t        t        ft              | k(  sJ t        i t        t        t              } | j                  t        t        t        fk(  r| j                         dk(  sJ t        t        t        t        z  t        t        z  z   t        t              t              t        t        t        z  t        t        z  z   t              k(  sJ t        dt        dz  z  dt        z  z   dz   d      j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   d      j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   d       j                         g d!k(  sJ t        t         d"        t        dt        dz  z  d#z  t        t#        dd#      z  z   dz   d      j                         t#        dd#      t#        dd#      dgk(  sJ t%        t        dt        dz  z  d#z  t        t#        dd#      z  z   dz   d       j                         g d$      sJ t        d%t        dz  z  d&t        z  z   dz   d      j                         g dk(  sJ t        d%t        dz  z  d&t        z  z   dz   d      j                         g dk(  sJ t        d%t        dz  z  d&t        z  z   dz   d       j                         g d!k(  sJ t        t         d'        t        d(t        dz  z  d)t        z  z   dz   d      j                         t#        d*d+      t#        d,d+      dgk(  sJ t        d(t        dz  z  d)t        z  z   dz   d       j                         g d-k(  sJ t        dddd.t        t              t        t        dz  t        z  dt        z  t        dz  z  z   dt        z  t        z  z   t        t              k(  sJ t        t        dz  dz   t&        /      j)                         t+        j,                  t&              k(  sJ dt        d#z  z  t        d0z  z
  t        dz  z   t        dz  z
  d1z   } t        | t        d2d34      t        dt        d#z  z  t        d0z  z
  t        dz  z   t        dz  z
  dz   t        d2d34      k(  sJ t        | t        d2d54      t        dt        d#z  z  d6t        d0z  z  z   t        dz  z   d6t        dz  z  z   dz   t        d2d54      k(  sJ t/        t        t        dz  t        z   d7z         j)                         t0              sJ t/        t        t        dz  t        z   t&        z   d7z         j)                         t2              sJ y )8Nc                  :    t        t        dz   t        t              S Nr   r   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>I  s    DQ1$5 r   c                  \    t        t        t        z   t        t        t        t                 S r   r   r   r   rP   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>K      DQ1RU$C r   c                  \    t        t        t        z   t        t        t        t                 S r   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>L  r   r   c                  .    t        t        t        d      S )NT)	symmetricr   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>N  s    QT : r   c                  >    t        t        dz   t        dt              S )Nr   r   )r   r   r   r   rQ   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>O  s    QUAq D r   c                  >    t        t        dz   t        t        d      S )Nr   T)r   gaussianr   r   rP   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>Q  s    QUAb4 H r   c                  6    t        t        dz   t        dd      S )Nr   r   T)r   r   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>R  s    QUAq4 H r   c                  R    t        t        dz   t        t        t        d      g      S )Nr   r   r   	extension)r   r   rP   rs   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>T  s    QUAbT!WI N r   c                  J    t        t        dz   t        dt        d      g      S )Nr   r   r   r  )r   r   rs   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>U  s    QUAqT!WI N r   c                  >    t        t        dz   t        t        d      S )Nr   Tr  r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>W  s    QUAbD I r   c                  6    t        t        dz   t        dd      S )Nr   r   Tr  r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>X  s    QUAqD I r   c                  >    t        t        dz   t        t        d      S )Nr   Tr   greedyr   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>Z  s    QUAb F r   c                  >    t        t        dz   t        t        d      S )Nr   Tr   rN   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>[  s    QUAb E r   c                  >    t        t        dz   t        t        d      S )Nr   Fr
  r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>]  s    QUAb G r   c                  >    t        t        dz   t        t        d      S )Nr   Fr  r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>^  s    QUAb F r   c                  6    t        t        dz   t        dd      S )Nr   r   rY   )r   orderr   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>`  s    QUAq(P r   c                  4    t        t        dz   t        d      S )Nr   rY   r  r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>a  s    QUAW(E r   c                      t        ddd      S )Nr   r   r   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>c  s    TaA,%7 r   c                      t        ddg      S Nr   r   r  r   r   r   r   z"test_Poly__new__.<locals>.<lambda>d  s    T1a&\ r   c                      t        d      S )Nr   r   r  r   r   r   r   z"test_Poly__new__.<locals>.<lambda>e  s
    T&\ r   c                      t        d      S r   r  r   r   r   r   z"test_Poly__new__.<locals>.<lambda>g  
    T!W r   zx-xr   r   )r   r   r   r   r   rP   r   )r   r   r   rQ   rT   )      @       @r   c                  d    t        dt        dz  z  dz  t        t        dd      z  z   dz   d      S )Nr   r   r   r   rP   r   )r   r   rh   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>|  s/    4!Q$q1Xa^3C(Ca(GPT#U r   r   )g333333?g?r   r  r  c                  J    t        dt        dz  z  dt        z  z   dz   d      S )N@r    @r   rP   r   r   r   r   r   r   z"test_Poly__new__.<locals>.<lambda>  s#    4AqD3q5(81(<T#J r   r   r!     
      )r   r!  r   )r  r   r   r   r     i    Tr   r   F   r   )r|   rF   rJ   NotImplementedErrorrE   r   r   r   r   r   iterr   r   r   as_expr
all_coeffsrH   rh   r   rf   
get_domainrQ   r   r   rV   rW   r   s    r   test_Poly__new__r0  H  sO   
?56
?CD
?CD
;:;
;DE
;HI
;HI
;NO
;NO
;IJ
;IJ
;FG
;EF
;GH
;FG
 PQ
 EF
78
12
12
_-;$q!*$$$	!Q$1qAA!"A&!+++aAY#q(((Aq	1"""Aq	1"""RAqA66aAY199;!#333QqS1Q3Y1%q)T!A#!)Q-????!Q$1q .99;yHHH!Q$1q .99;yHHH!Q$1q .99;NNN
>UV	!Q$q1Xa^##a'66@jlxPQST~W_`acdWeghFij j jQq!tVAX(1a.((1,T:EEGZ Z Z AqD3q5 1$T2==?9LLLAqD3q5 1$T2==?9LLLAqD3q51T++5:<?K K K >JKAqD3q5 1$T2==?HRQSDTV^_aceVfhiCjjjjAqD3q5 1$T2==??RRRAq11a8QT!Vac!Q$h1Q&1-. . . 1qA&113r7I7I!7LLLL	!Q$A1q1u$u,A1et4Qq!tVad]QT!AE)A-q%	   1eu5Qq!tVeAqDj 1a4'%A+591e	-- - - d1a4!8c>*557CCCd1a4!8a<#-.99;\JJJr   c                  l    t        t        dz  dz         j                  t        dz  dz   t        fk(  sJ y r  )r   r   argsr   r   r   test_Poly__argsr3    s.    1q>1a4!8Q-///r   c                  8   t        t        t        z
  t        t        z
  z  t              j                  t        fk(  sJ t        t        t        z
  t        t        z
  z  t              j                  t        fk(  sJ t        t        t        z
  t        t        z
  z  t              j                  t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t              j                  t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t              j                  t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t        t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t        t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t        t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z        j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t        t        d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t              j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  t        t        t        d      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  dd	
      j                  t        t        t        fk(  sJ t        t        t        z
  t        t        z
  z  dd
      j                  t        t        t        fk(  sJ y )Nz	x > p > q)sortz	p > x > qz	p > q > xr   wrtr   r   zq > x)r7  r5  zp > x)r   r   r   r   r   r   r   r   test_Poly__gensr8    s   QQ#((QD000QQ#((QD000QQ#((QD000QQA&++1v555QQA&++1v555QQAq)..1a);;;QQAq)..1a);;;QQAq)..1a);;;QQ %%!Q222QQk277Aq!9DDDQQk277Aq!9DDDQQk277Aq!9DDDQQAq{;@@Q1IMMMQQS)..1a);;;QQS)..1a);;;QQS)..1a);;;QQQ',,Aq	999QQQ',,Aq	999QQQ',,Aq	999QQAqc277Aq!9DDDQQSw7<<Aq	IIIQQSw7<<Aq	IIIr   c                      t        t              j                  t        dt        t              k(  sJ t        t        dz        j                  t        dt        t              k(  sJ y )Nr   r   r   )r   r   zerorP   rQ   r   r   r   test_Poly_zeror;    sD    7<<41R0000!9>>T!Qr2222r   c                      t        t              j                  t        dt        t              k(  sJ t        t        dz        j                  t        dt        t              k(  sJ y )Nr   r   r   )r   r   onerP   rQ   r   r   r   test_Poly_oner>    sD    7;;$q!B////!9==DAb1111r   c                  "   t        t        d        t        d      } t        t        t        d      j                  t        t        t        d            dd  t         | d      gg g|       t         | d       | d      gg|       fk(  sJ t        t        d        t        t        d        t        t        d	        t        t        dz   t              j                  t        t        dz   t                    dd  t        t        d      t        d      gt              t        t        d      t        d      gt              fk(  sJ t        t        dz   t        d
      j                  t        t        dz   t                    dd  t        t        d      t        d      gt              t        t        d      t        d      gt              fk(  sJ t        t        dz   t              j                  t        t        dz   t        d
            dd  t        t        d      t        d      gt              t        t        d      t        d      gt              fk(  sJ t        t        dz   t              j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        d
      j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t              j                  t        t        dz   t        t        d
            dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t        d
      j                  t        t        dz   t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        d
            dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t        d
      j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t        d
            dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t              j                  t        t        dz   t        t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        d
      j                  t        t        dz   t        t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t              j                  t        t        dz   t        t        d
            dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t        d
      j                  t        t        dz   t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        d
            dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t        d
      j                  t        t        dz   t        t                    dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t        d
            dd  t        t        d      gt        d      ggt              t        t        d      gt        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t        d
      j                  t        t        dz   t        t                    dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz   t        t              j                  t        t        dz   t        t        d
            dd  t        t        d      t        d      ggt              t        t        d      t        d      ggt              fk(  sJ t        t        dz  t        z   t        t              j                  t        t        dz  t        d      z   t        d            t        t        dz  t        z   t        d      t        t        dz  t        d      z   t        d      fk(  sJ t        dt              \  }}}t        t        t        z  t        d      j                  t        t        t         z  t        z  t        d            dd  t        | |d      g|j#                               t        ||z   |d      g|j#                               fk(  sJ t        t        t        z  t        d      j                  t        t        t         z  t        z  t        d            dd  t        | |d      g|j#                               t        ||z   |d      g|j#                               fk(  sJ t        t$        d        t        t&        dz  t&        dz  z   t        z   t&        d      }t        t&        dz  t&        dz  z   t        z   t&        d      }|j                  |      dd  |j(                  |j(                  fk(  sJ y )Nc                  F    t        t              j                  t              S r   r   r   _unifyr   r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s    d1gnnQ&7 r   r   r   r   r   r   c                  t    t        t        t        d      j                  t        t        t        d            S )Nr   r   r   rA  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s$    d1a&;&B&B41VWCX&Y r   c                  z    t        t        t        t              j                  t        t        t        d            S Nr   r   )r   r   r   rB  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s"    d1am&:&:41a;P&Q r   c                  z    t        t        t        d      j                  t        t        t        t                    S rE  rA  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s"    d1a&;&B&B41a=&Q r   rQ   r   Tr&  zQQ<sqrt(2) + I>za,bZZ[a]zZZ(a,b)zZZ(a)c                  l    t        t        t        dz  t        dz  t        z  z   t        d      d      S )Nr   TrM   ZZ(x)r   )r   r   r   r   r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s'    4QTAqDF]AT(JSZ#[ r   zQQ(x)zQQ[x])r|   rC   rO   r   r   rB  r   rL   rP   rQ   rf   rR   unifyrs   rN   r   r   	to_domainrH   r   r   )r   FABr   r   s         r   test_Poly__unifyrO    s   
78	AB1a ''Q1(=>qrBbeWbM2beRU^$4b 9G; ; ; ;
YZ
QR
QRAq>  a!eQ04	beRU^R	 #r!ubenb"9:; ; ;Aq&--d1q5!n=abA	beRU^R	 #r!ubenb"9:; ; ;Aq>  a!eQt!<=abA	beRU^R	 #r!ubenb"9:; ; ; Aq>  a!eQ!23AB7	r!ug1w	$cBqE7RUG*<b&ABC C CAq&--d1q5!Q.?@D	r!ug1w	$cBqE7RUG*<b&ABC C CAq>  a!eQ$!?@D	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQN3AB7	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ@D	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ$$?@D	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQ1$56qr:	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ1BCABG	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ1T$BCABG	r!ug1w	$cBqE7RUG*<b&ABC C C Aq>  a!eQ!23AB7	r!ubenr	"C"Q%A(8"$=>? ? ?Aq&--d1q5!Q.?@D	r!ubenr	"C"Q%A(8"$=>? ? ?Aq>  a!eQ$!?@D	r!ubenr	"C"Q%A(8"$=>? ? ? Aq!##DQN3AB7	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!D)00a!eQ@D	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!##DQ$$?@D	r!ubenr	"C"Q%A(8"$=>? ? ? Aq!##DQ1$56qr:	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ1BCABG	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ1T$BCABG	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQ1$56qr:	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!D)00a!eQ1BCABG	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!##DQ1T$BCABG	r!ubenr	"C"Q%A(8"$=>? ? ? 1q!D)//QTDG^QRV0WX!Q$(A&78$q!td1g~qYj:klm m m E2GAq!!Qw'..tAaCE1Y/OPQRQST	a1Y	&QqS!A$K(GHI I I !Qw'..tAaCE1Y/OPQRQST	a1Y	&QqS!A$K(GHI I I >[\QTAaCZ!^Qw/AQTAaCZ!^Qw/A88A;qr?quuaeen,,,r   c                     t        t        dz  dz         j                  t        hk(  sJ t        t        dz  t        t        z  z         j                  t        t        t        hk(  sJ t        t        dz  t        t        z  z   t              j                  t        t        t        hk(  sJ t        t        dz  t        t        t        z        z         j                  t        t        t        hk(  sJ t        t        dz  t        t        t        z        z   t              j                  t        t        t        hk(  sJ t        t        dz  t        t        t        z        z   t        t              j                  t        t        t        hk(  sJ t        dt        z   t        dz  z   t        t        t              j                  t        hk(  sJ t        t        t        t              z   t              j                  t        t        hk(  sJ y Nr   r   r   )r   r   free_symbolsr   r   ru   rU   r   r   r   test_Poly_free_symbolsrS  $  sc   1q>&&1#---1qs
((Q1I5551qs
A++1ay8881s1Q3x --!Q:::1s1Q3x#00Q1I===1s1Q3x2.;;1ayHHHA1aA&33s:::CF
A++1v555r   c                     t        t        dz  dz         j                  t               k(  sJ t        t        dz  t        t
        z  z         j                  t               k(  sJ t        t        dz  t        t
        z  z   t              j                  t        t
        hk(  sJ t        t        dz  t        t        t
        z        z         j                  t               k(  sJ t        t        dz  t        t        t
        z        z   t              j                  t        t
        hk(  sJ t        t        dz  t        t        t
        z        z   t        t              j                  t        t
        hk(  sJ y rQ  )r   r   rR  setr   r   ru   rU   r   r   r   test_PurePoly_free_symbolsrV  /  s   AqD1H**ce333AqD1Q3J,,555AqD1Q3J"//Aq6999AqD3qs8O$11SU:::AqD3qs8OQ'44A>>>AqD3qs8OQr2??Aq6IIIr   c                  X   t        t        t              t        t        t              k(  du sJ t        t        t        t              t        t        t              k(  du sJ t        t        t              t        t        t        t              k(  du sJ t        t        t        t        t                 t        t        t              k(  du sJ t        t        t              t        t        t        t        t                 k(  du sJ t        t        t
        z  t        t
              t        t        t              k(  du sJ t        t        t        t
              t        t        t              k(  du sJ t        t        t              t        t        t        t
              k(  du sJ t        t        dz  dz   t              t        t
        dz  dz   t
              k(  du sJ t        t
        dz  dz   t
              t        t        dz  dz   t              k(  du sJ t        t        t        t              } t        t        t        t              }| j                  |      du sJ | j                  |      du sJ | j                  |d      du sJ | j                  |d      du sJ t        d      }t        |dz  t        dz  z   t        dz  z  t        dz  t        z  z
  t        d      } t        |dz  t        dz  z   t        dz  z  t        dz  t        z  z
  t        d	      }| |k(  du sJ y )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))
r   r   rQ   rP   r   r   r   nern   r   )r   r   rX  s      r   test_Poly__eq__rZ  8  sq   AJ$q!*$---Ab!T!QZ/E999AJ$q!B//E999Abe$Q
2u<<<AJ$q!BqE22u<<<1aOtAqz)e333AqMT!QZ'E111AJ$q!Q-'E111A1adQh!22u<<<A1adQh!22u<<<Q"AQ"A447e447d??44$45(((44$44'''	B	r!tad{AqD 1a46)1Z	@A	r!tad{AqD 1a46)1Z	@AFur   c                  `   t        t        t              t        t        t              k(  du sJ t        t        t        t              t        t        t              k(  du sJ t        t        t              t        t        t        t              k(  du sJ t        t        t        t        t                 t        t        t              k(  du sJ t        t        t              t        t        t        t        t                 k(  du sJ t        t        t
        z  t        t
              t        t        t              k(  du sJ t        t        t        t
              t        t        t              k(  du sJ t        t        t              t        t        t        t
              k(  du sJ t        t        dz  dz   t              t        t
        dz  dz   t
              k(  du sJ t        t
        dz  dz   t
              t        t        dz  dz   t              k(  du sJ t        t        t        t              } t        t        t        t              }| j                  |      du sJ | j                  |      du sJ | j                  |d      du sJ | j                  |d      du sJ t        t        t        t              } t        t
        t
        t              }| j                  |      du sJ | j                  |      du sJ | j                  |d      du sJ | j                  |d      du sJ y )NTr   Fr   r   r   )r   r   rQ   rP   r   r   r   rY  r   r   s     r   test_PurePoly__eq__r]  X  su   QNhq!n,555Q"%!Q7D@@@QNhq!B77D@@@Q"Q%(HQN:tCCCQNhq!BqE::tCCCQqS!Q8Aq>1e;;;Q1!Q/E999QNhq!Q//E999QTAXq!XadQh%::tCCCQTAXq!XadQh%::tCCCAb!AAb!A447d??447e44$45(((44$44'''Ab!AAb!A447d??447e44$45(((44$44'''r   c                      t        t        t        t        dz  dz               t              du sJ t        t        t        t        dz  dz               t              du sJ y )Nr   r   T)r   r   r   r   r   r   r   test_PurePoly_Polyr_  {  sO    htAqD1H~.9TAAAd8AqD1H-.5===r   c                  ,   t        dt        z        j                         t        k(  sJ t        dt        z  d      j                         t        k(  sJ t        dt        z  d      j                         t        k(  sJ t        t        dz        j                         t        k(  sJ t        t        d        t        t        dz  d      j                         t        k(  sJ t        t        dt        z        j                         t              sJ y )Nr   rP   r   rQ   c                  *    t        t        dz  d      S )Nr   rP   r   r   r   r   r   r   z&test_Poly_get_domain.<locals>.<lambda>  s    4!D#9 r   皙?)	r   r   r/  rP   rQ   r|   rH   r   rV   r   r   r   test_Poly_get_domainrc    s    !9!R'''!D!,,."444!D!,,."444!9!R'''
>9:!D!,,."444d3q5k,,.	:::r   c                     t        dt        z  dz         j                  t              t        dt        z  dz         k(  sJ t        dt        z  dz         j                  d      t        dt        z  dz         k(  sJ t        dt        z  dz         j                  t              t        dt        z  dz   d      k(  sJ t        dt        z  dz         j                  d      t        dt        z  dz   d      k(  sJ t        t        dd      t        z  t        dd      z         j                  d      t        dt        z  d	z         k(  sJ t        dt        z  d	z         j                  d      t        t        dd      t        z  t        dd      z         k(  sJ t        t        d
        t        t        d        t        t        d        y )Nr   r   rP   rQ   r   r#  rT   rb  皙?c                  R    t        t        dz  dz         j                  t              S r  )r   r   
set_domainrP   r   r   r   r   z&test_Poly_set_domain.<locals>.<lambda>  s    4!a=#;#;B#? r   c                  P    t        t        dz   d      j                  t              S )Nr   r   r   )r   r   rg  rQ   r   r   r   r   z&test_Poly_set_domain.<locals>.<lambda>  s    4Aq#9#D#DR#H r   c                  v    t        t        t        z  t        t              j                  t        t                 S r   )r   r   r   rg  rP   r   r   r   r   z&test_Poly_set_domain.<locals>.<lambda>  s!    D1aO$>$>r!u$E r   )	r   r   rg  rP   rQ   rh   r|   rH   rF   r   r   r   test_Poly_set_domainrj    ss   !a=##B'4!a=888!a=##D)T!A#']:::!a=##B'4!a+EEEE!a=##D)T!A#'$-GGGGB!HQO34??EcRSeVYkIZZZZA''-hq"oa6G(STVX/6Y1ZZZZ
>?@
>HI
?EFr   c                  z    t        t        dz  dz   d      j                         dk(  sJ t        t        d        y )Nr   r   r   c                  H    t        t        dz  dz         j                         S r  )r   r   get_modulusr   r   r   r   z'test_Poly_get_modulus.<locals>.<lambda>  s    DAN$>$>$@ r   )r   r   rm  r|   rG   r   r   r   test_Poly_get_modulusrn    s3    1q!$002a777
?@Ar   c                     t        t        dz  dz   d      j                  d      t        t        dz  dz   d      k(  sJ t        t        dz  dz   d      j                  d      t        t        dz  dz   d      k(  sJ t        t        dz  dz         j                  d      t        t        dz  dz   d      k(  sJ t        t        d        y )Nr   r   r   r   r   c                  J    t        t        dz  dz         j                  d      S r  )r   r   set_modulusr   r   r   r   z'test_Poly_set_modulus.<locals>.<lambda>  s    4!a=#<#<Q#? r   )r   r   rq  r|   rH   r   r   r   test_Poly_set_modulusrr    s    	1q!([^tAqD1Ha/HI I I	1q!([^tAqD1Ha/HI I I 1q>%%a(DA1,EEEE
>?@r   c                  p    t        t        dz         j                  d      t        t        dz         k(  sJ y )Nr   r   r   )r   r   
add_groundr   r   r   test_Poly_add_groundru    +    A;!!!$QU333r   c                  p    t        t        dz         j                  d      t        t        dz
        k(  sJ y Nr   r   )r   r   
sub_groundr   r   r   test_Poly_sub_groundrz    rv  r   c                  v    t        t        dz         j                  d      t        dt        z  dz         k(  sJ y rx  )r   r   
mul_groundr   r   r   test_Poly_mul_groundr}    s/    A;!!!$QqS1W555r   c                      t        dt        z  dz         j                  d      t        t        dz         k(  sJ t        dt        z  dz         j                  d      t        t        dz         k(  sJ y )Nr   r'  r   r   )r   r   
quo_groundr   r   r   test_Poly_quo_groundr    s\    !a=##A&$q1u+555!a=##A&$q1u+555r   c                      t        dt        z  dz         j                  d      t        t        dz         k(  sJ t        t        d        y )Nr   r'  c                  J    t        dt        z  dz         j                  d      S Nr   r   )r   r   exquo_groundr   r   r   r   z(test_Poly_exquo_ground.<locals>.<lambda>  s    QqS1W(B(B1(E r   )r   r   r  r|   r@   r   r   r   test_Poly_exquo_groundr    s;    !a=%%a(DQK777
 EFr   c                      t        t         dz   t              j                         t        t        t         dz   t                    cxk(  rt        t        dz   t              k(  sJ  J y r   )r   r   r   r   r   r   test_Poly_absr    sK    Q? CaR!VQ$8JDQNJJJJJr   c                      t        t         dz   t              j                         t        t         dz   t               cxk(  rt        t        dz
  t              k(  sJ  J y r   )r   r   negr   r   r   test_Poly_negr    sI    Q? T1"q&!_$4FQUAFFFFFr   c                     t        dt              j                  t        dt                    t        dt              k(  sJ t        dt              t        dt              z   t        dt              k(  sJ t        dt              j                  t        dt                    t        dt              k(  sJ t        dt        t              t        dt              z   t        dt        t              k(  sJ t        dt              j                  t        dt        t                    t        dt        t              k(  sJ t        dt        t              t        dt        t              z   t        dt        t              k(  sJ t        dt              t        z   t        t        dz   t              k(  sJ t	               5  t        dt              t        t              z    d d d        t        t        t              dz   t        t        dz   t              k(  sJ dt        t        t              z   t        t        dz   t              k(  sJ y # 1 sw Y   lxY wNr   r   )r   r   addr   r}   ru   r   r   r   test_Poly_addr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DAqM9991a=41a=(DAqM9991:>T!a%^+++		! Q
SV 1:>T!a%^+++tAqz>T!a%^+++	    ;!IIc                     t        dt              j                  t        dt                    t        dt              k(  sJ t        dt              t        dt              z
  t        dt              k(  sJ t        dt              j                  t        dt                    t        dt              k(  sJ t        dt        t              t        dt              z
  t        dt        t              k(  sJ t        dt              j                  t        dt        t                    t        dt        t              k(  sJ t        dt        t              t        dt        t              z
  t        dt        t              k(  sJ t        dt              t        z
  t        dt        z
  t              k(  sJ t	               5  t        dt              t        t              z
   d d d        t        t        t              dz
  t        t        dz
  t              k(  sJ dt        t        t              z
  t        dt        z
  t              k(  sJ y # 1 sw Y   lxY w)Nr   r   r   )r   r   subr   r}   ru   r   r   r   test_Poly_subr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DQN:::1a=41a=(DQN:::1:>T!a%^+++		! Q
SV 1:>T!a%^+++tAqz>T!a%^+++	 r  c                     t        dt              j                  t        dt                    t        dt              k(  sJ t        dt              t        dt              z  t        dt              k(  sJ t        dt              j                  t        dt                    t        dt              k(  sJ t        dt        t              t        dt              z  t        dt        t              k(  sJ t        dt              j                  t        dt        t                    t        dt        t              k(  sJ t        dt        t              t        dt        t              z  t        dt        t              k(  sJ t        dt              t        z  t        t        t              k(  sJ t	               5  t        dt              t        t              z   d d d        t        t        t              dz  t        dt        z  t              k(  sJ dt        t        t              z  t        dt        z  t              k(  sJ y # 1 sw Y   lxY w)Nr   r   r'     r   )r   r   mulr   r}   ru   r   r   r   test_Poly_mulr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DAqM9991a=41a=(DAqM9991:>T!QZ'''		! Q
SV 1:>T!A#q\)))tAqz>T!A#q\)))	 s   8!IIc                     t        t              t        z  t        t        dz  t        d      k(  sJ t        t        t              z  t        t        dz  t        d      k(  sJ dt        t              z  t        dt        z  t        d      k(  sJ t        d      t        t              z  t        dt        z  t        d      k(  sJ t        t              t        d      z  t        dt        z  t        d      k(  sJ y )Nr   rP   r   )r   r   rm   r   r   r   test_issue_13079r    s    719QT1T2222T!W9QT1T2222d1g:bdAd3333R5a=DAq666671R5=DAq6666r   c                      t        t        t        z  t        t              j                         t        t        dz  t        dz  z  t        t              k(  sJ y Nr   )r   r   r   sqrr   r   r   test_Poly_sqrr    s:    !Q? DAadAq$9999r   c                  8   t        t        t              j                  d      t        t        dz  t              k(  sJ t        t        t              j                  t        d            t        t        dz  t              k(  sJ t        dt        z  t        t              j                  d      t        dt        dz  z  t        t              k(  sJ t        dt        z  t        t              j                  t        d            t        dt        dz  z  t        t              k(  sJ t        dt        z  t        z  t        t              dz  t        dt        dz  z  t        dz  z  t        t              k(  sJ t        t        d        t        t        d	        y )
Nr#  r   r'     r   r   iW  c                  N    t        t        t        z  dz   t        t              dz  S )Nr   r   r   r   r   r   r   r   r   ztest_Poly_pow.<locals>.<lambda>  s    d1Q37Aq1B7 r   c                  V    t        t        t        z  dz   t        t              t        z  S r   r  r   r   r   r   ztest_Poly_pow.<locals>.<lambda>  s    d1Q37Aq114 r   )r   r   powrg   r   r|   	TypeErrorr   r   r   test_Poly_powr  	  s   1:>>"aeQ///1:>>'"+&$q"ua.888!Q?q!T"QT'1a%8888!Q?wqz*d2ad7Aq.AAAA!Aq!a4AqDAq!#<<<<
978
945r   c                     t        t        dz        t        t              }} |t        dt              }}t        | |      ||fk(  sJ | |z  |k(  sJ | |z  |k(  sJ t        | t              ||fk(  sJ | t        z  |k(  sJ | t        z  |k(  sJ t        dt              t        dt              }}t        d|      ||fk(  sJ d|z  |k(  sJ d|z  |k(  sJ t        t              t        t              z  dk(  sJ t        t        dz        t        t              z  t        k(  sJ t        t              t        t        dz        z  dt        z  k(  sJ y )Nr   r   r   )r   r   divmod)r   r   r   rs       r   test_Poly_divmodr    s?   1:tAwqAd1ajqA!Q<Aq6!!!6Q;;q5A::!Q<Aq6!!!6Q;;q5A::1:tAqzqA!Q<Aq6!!!6Q;;q5A::747?a1:d1g"""741:1$$$r   c                  <	   t        t        t        z   t        t              t        t        t        z   t        t              k(  du sJ t        t        t        z   t              t        t        t        z   t        t              k(  du sJ t        t        t        z   t        t              t        t        t        z   t              k(  du sJ t        t        t        z   t              t        t        t        z   t              k(  du sJ t        t        t        z   t              t        t        t        z   t              k(  du sJ t        t        t        z   t        t              t        t        z   k(  du sJ t        t        t        z   t              t        t        z   k(  du sJ t        t        t        z   t        t              t        t        z   k(  du sJ t        t        t        z   t              t        t        z   k(  du sJ t        t        t        z   t              t        t        z   k(  du sJ t        t        t        z   t        t              t        t        t        z   t        t              k7  du sJ t        t        t        z   t              t        t        t        z   t        t              k7  du sJ t        t        t        z   t        t              t        t        t        z   t              k7  du sJ t        t        t        z   t              t        t        t        z   t              k7  du sJ t        t        t        z   t              t        t        t        z   t              k7  du sJ t        t        t        z   t        t              t        t        z   k7  du sJ t        t        t        z   t              t        t        z   k7  du sJ t        t        t        z   t        t              t        t        z   k7  du sJ t        t        t        z   t              t        t        z   k7  du sJ t        t        t        z   t              t        t        z   k7  du sJ t        t        t              t        t              k(  du sJ t        t        t              t        t              k7  du sJ y )NTF)r   r   r   ru   r   r   r   test_Poly_eq_ner  -  s0   Q1a!eQ!22t;;;QNd1q5!Q//E999Q1a!eQ/E999QNd1q5!n,555QNd1q5!n,555Q1Q&4///QNa!e#,,,Q1Q&4///QNa!e#,,,QNa!e#,,,Q1a!eQ!22u<<<QNd1q5!Q//D888Q1a!eQ/D888QNd1q5!n,666QNd1q5!n,666Q1Q&5000QNa!e#---Q1Q&5000QNa!e#---QNa!e#---AJ#a& U***AJ#a& T)))r   c                  x    t        t        dt                    dusJ t        t        dt                    dusJ y )Nr   Tr   F)boolr   r   r   r   r   test_Poly_nonzeror  J  s4    DAJ4'''DAJ5(((r   c                  ^   t        dt              j                  du sJ t        dt              j                  du sJ t        dt              j                  du sJ t        dt              j                  du sJ t        t        dz
  t              j                  du sJ t        t        dz
  dz  t              j                  du sJ t        t        dz
  t              j
                  du sJ t        dt        z  dz
  t              j
                  du sJ t        dt        z  dz   t              j                  du sJ t        dt        z  dz   t              j                  du sJ t        dt              j                  du sJ t        t        t              j                  du sJ t        t        t        z   t        z   dz         j                  du sJ t        t        t        z  t        z  dz         j                  du sJ t        t        t        z  t        z   dz         j                  du sJ t        t        t        z  t        z  dz         j                  du sJ t        t        t        z        j                  du sJ t        t        t        z  dz         j                  du sJ t        t        dz  t        t        z  z         j                  du sJ t        t        dz  t        t        z  z         j                  du sJ t        t              j                  du sJ t        t        t        z        j                  du sJ t        t        t        z        j                  du sJ t        t              j                  du sJ t        t        dz  t        d	z  z   t        d
z  z
  t        dz  z   t        dz  z
  t        dz  z   dz         j                   du sJ t        t        dz  t        d	z  z   t        d
z  z
  t        dz  z
  t        dz  z
  t        dz  z   dz         j                   du sJ y )Nr   Tr   Fr   r   r'  r     r#  r     )r   r   is_zerois_oneis_sqfis_monicis_primitive	is_groundr   r   	is_linearis_quadraticis_monomialis_homogeneousis_univariateis_multivariateis_cyclotomicr   r   r   test_Poly_propertiesr  O  s   1:%%%1:&&&1:$$$1:%%%Aq>  D(((Q
A%%...Aq>""d***!a$$---!a((D000!a((E1111:4'''1:5(((A	A((D000!A	?$$---!a!))T111!A	?''5000!9  D(((!a=$$---1qs
**d2221qs
**e3337  D(((!9""e+++!9$$,,,7""e+++	2221$q!t+ad2Q688EO O O	2221$q!t+ad2Q688EN N Nr   c                  `   t        t        dz  t        z   dz         j                  du sJ t        t        dz  dt        z  z   dz         j                  du sJ t        dt        z  dz   d      j                  du sJ t        dt        dz  z  dt        z  z   dz   d      j                  du sJ y )	Nr   r   TFr   r      r   )r   r   is_irreducibler   r   r   test_Poly_is_irreducibler  z  s    1q1,,4441qs
Q..%777!a$33t;;;!Q$1q "-<<EEEr   c                  R   t        t        dz         j                  t        d      dk(  sJ t        t        dz         j                  t        t              t        t        dz         k(  sJ t        t        dz         j                  t        t              t        t        dz         k(  sJ t        t        t        z  t              j                  t        t              t        dz  k(  sJ t        t        t        z  t              j                  t        t              t        dz  k(  sJ y )Nr   r   r   )r   r   subsr   r   r   r   test_Poly_subsr    s    A;Aq!Q&&&A;Aq!T!a%[000A;Aq!T!a%[000!Q<Q"ad***!Q<Q"ad***r   c                     t        t        dz         j                  t              t        t        dz         k(  sJ t        t        dz         j                  t              t        t        dz         k(  sJ t	        t
        d        t        t        dz         j                  t        t              t        t        dz         k(  sJ t        t        dz         j                  t        t              t        t        dz         k(  sJ t        t        t        z         j                  t        t              t        t        t        z         k(  sJ t        t        t        z         j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z         j                  t        t              t        t        t        z         k(  sJ t        t        t        z         j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z         j                  t        t              t        t        t        z         k(  sJ t	        t
        d        t        t        t        z   t              j                  t        t              t        t        t        z   t              k(  sJ t        t        t        z   t              j                  t        t              t        t        t        z   t              k(  sJ t	        t
        d        t	        t
        d        y )Nr   c                  T    t        t        t        z         j                  t              S r   )r   r   r   replacer   r   r   r   r   z#test_Poly_replace.<locals>.<lambda>  s    DQK$7$7$: r   c                  ^    t        t        t        z         j                  t        t              S r   r   r   r   r  r   r   r   r   z#test_Poly_replace.<locals>.<lambda>      DQK$7$71$= r   c                  h    t        t        t        z   t              j                  t        t              S r   r  r   r   r   r   z#test_Poly_replace.<locals>.<lambda>      DQN$:$:1a$@ r   c                  h    t        t        t        z   t              j                  t        t              S r   r  r   r   r   r   z#test_Poly_replace.<locals>.<lambda>  r  r   )r   r   r  r   r|   rG   r   r   r   r   r   test_Poly_replacer    s   A;q!T!a%[000A;q!T!a%[000
?:;A;q!$QU333A;q!$QU333A;q!$QU333A;q!$QUAq(9999A;q!$QU333A;q!$QUAq(9999A;q!$QU333
?=>Aq>!!!Q'4Aq>999Aq>!!!Q'4Aq>999
?@A
?@Ar   c                  Z   t        t        d        t        t        t        z   t        t              j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              j                  t        t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              j                  t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              j                  t              t        t        t        z   t        t              k(  sJ y )Nc                  ^    t        t        t        z         j                  t        t              S r   )r   r   r   reorderr   r   r   r   r   z#test_Poly_reorder.<locals>.<lambda>  r  r   r6  )r|   rG   r   r   r   r  r   r   r   test_Poly_reorderr    sM   
?=>Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$$+tAE1a/@@@@Aq!$$$+tAE1a/@@@@r   c                  (   t        t        dz  t        t        dz  z  z   t        t        t              j	                  t              } | j                         t        dz  t        t        dz  z  z   k(  r| j                  t        t        fk(  sJ t        t        t        z  t        z
  t        t        t              j	                  d      t        t        t        z  t        z
  t        t              k(  sJ t        t        d        t        t        d        y )Nr   r   c                      t        t        t        dz  z  t        dz  z   t        t              j                  t              S r  r   r   r   ltrimr   r   r   r   z!test_Poly_ltrim.<locals>.<lambda>  s*    D1a4!Q$1$=$C$CA$F r   c                  n    t        t        t        z  t        z
  t        t              j                  d      S )Nr   r  r   r   r   r   z!test_Poly_ltrim.<locals>.<lambda>  s"    D1q!Q$7$=$=b$A r   )	r   r   r   r   r  r-  r   r|   rG   r   s    r   test_Poly_ltrimr    s    QTAadF]Aq!$**1-A99;!Q$1a4-'AFFq!f,<<<!aAq!''*d1Q37Aq.AAAA
?FG
?ABr   c                  >   t        t        t        z  dz   t        t        t              j	                  t        t              du sJ t        t        t        z  t        z   t        t        t              j	                  t        t              du sJ t        t        d        y )Nr   TFc                      t        t        t        dz  z  t        dz  z   t        t              j                  t              S r  )r   r   r   has_only_gensr   r   r   r   r   z)test_Poly_has_only_gens.<locals>.<lambda>  s*    D1a4!Q$1$=$K$KA$N r   )r   r   r   r   r  r|   rF   r   r   r   test_Poly_has_only_gensr    si    !aAq!//15===!aAq!//15>>>
?NOr   c                  D   t        dt        z  dz   d      j                         t        dt        z  dz   d      k(  sJ t        dt        z  dz   d      j                         t        dt        z  dz   d      k(  sJ t        t        d        t        t
        d        y )Nr   r   rP   r   rQ   c                  H    t        t        dz  dz         j                         S r  r   r   to_ringr   r   r   r   z#test_Poly_to_ring.<locals>.<lambda>  s    4!a=#8#8#: r   c                  L    t        dt        z  dz   d      j                         S )Nr   r   r   r   r  r   r   r   r   z#test_Poly_to_ring.<locals>.<lambda>  s    QqS1Wa 8 @ @ B r   )r   r   r  r|   rH   rI   r   r   r   test_Poly_to_ringr    s    !a%--/4!a3MMMM!a%--/4!a3MMMM
>:;
;BCr   c                  r   t        dt        z  dz   d      j                         t        dt        z  dz   d      k(  sJ t        dt        z  dz   d      j                         t        dt        z  dz   d      k(  sJ t        t        dz  dz   d      j                         t        t        dz  dz   d      k(  sJ t        dt        z  dz   d      j                         t        dt        z  dz   d      k(  sJ t        dt        z  d	z         j                         t        dt        z  d	z         k(  sJ y )
Nr   r   rP   r   rQ   r   r   r  r   )r   r   to_fieldr   r   r   test_Poly_to_fieldr    s   !a%..0D1q4NNNN!a%..0D1q4NNNN!a%..0D1q4NNNN!a#,,.$qsQw2JJJJA%%'4A+<<<<r   c                  B   t        dt        z        j                         t        dt        z        k(  sJ t        t        dz        j                         t        t        dz        k(  sJ t        dt        z        j                         t        t        dz        k(  sJ y )Nr   re  r#  )r   r   to_exactr   r   r   test_Poly_to_exactr    sw    !94!9,,,!94!9,,,A;!T!B$Z///r   c                     t        t        dz  dz   t        t        t                 } | j	                         t        t        dz  dz   t        d      k(  sJ | j	                  d      t        t        dz  dz   t        d      k(  sJ t        dt        t              j	                         t        dt        t              k(  sJ y )	Nr   r   r   rP   TrM   rQ   r   )r   r   rQ   r   retractr   s    r   test_Poly_retractr    s    QTAXqA'A99;$q!tax488889949 DA1T$BBBB1a=  "d1am333r   c                     t        t        dz  dt        dz  z  z   dt        z  z   dz         } | j                  dd      t        dt              k(  sJ | j                  dd      t        dt              k(  sJ | j                  dd      t        dt        z  dz   t              k(  sJ | j                  dd      t        dt        dz  z  dt        z  z   dz   t              k(  sJ | j                  dd      t        t        dz  dt        dz  z  z   dt        z  z   dz   t              k(  sJ | j                  t        dd      t        dt              k(  sJ | j                  t        dd      t        dt              k(  sJ | j                  t        dd      t        dt        z  dz   t              k(  sJ | j                  t        dd      t        dt        dz  z  dt        z  z   dz   t              k(  sJ | j                  t        dd      t        t        dz  dt        dz  z  z   dt        z  z   dz   t              k(  sJ t        t        dz  dz         }|j                  dd      t        dt              k(  sJ y )Nr   r   r'  r   r   )r   r   slicer\  s     r   test_Poly_slicer    s   QTAadF]QqS 1$%A771a=DAJ&&&771a=DAJ&&&771a=D1q!,,,,771a=D1a4!A#!115555771a=DA!Q$1!4q!8!<<<<771atAqz)))771atAqz)))771atAaC!GQ////771atAadFQqSL1$4a8888771atAqD1QT6MAaC$7!$;Q????QTAXA771a=DAJ&&&r   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      ddgk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d	      ddgk(  sJ y )
Nr   r   r   r   r   r   r   r'  r   rX   rY   )r   r   coeffsr   r   r   r   test_Poly_coeffsr    sN   1:1#%%%1:1#%%%!a""$A...!Q$1q !$++-:::!Q$1q !$++-:::!Q$1a41$%,,U31v===!Q$1a41$%,,W5!Q???r   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g d	k(  sJ t        t        t        dz  z  dt        dz  z  t        d
z  z  z         j                  d      ddgk(  sJ t        t        t        dz  z  dt        dz  z  t        d
z  z  z         j                  d      ddgk(  sJ y )Nr   r   r   r   r   r   r   r   r   r'  )r'  r   r   r   rX   r   r   r   r   rY   )r   r   monomsr   r   r   r   test_Poly_monomsr    sR   1:4&(((1:4&(((!a""$t444!Q$1q !$++-1CCCC!Q$1q !$++-1CCCC!Q$1a41$%,,U37GGGG!Q$1a41$%,,W5&&9IIIIr   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        d	z  z  dt        z  z   dz   t              j                         g d
k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      ddgk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      ddgk(  sJ y )Nr   r   r   r   r   r   r   r   r   r   )r  r   r   r  r'  )r  r   r   r  r   rX   r  r   r  r   rY   )r   r   termsr   r   r   r   test_Poly_termsr    sg   1:),,,1:),,,!a!!#	9'====!Q$1q !$**,0QQQQ!Q$1q !$**,0QQQQ	!Q$1a41#eEl{K.HI I I	!Q$1a41#eGnk0JK K Kr   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ y )Nr   r   r   r   r  r'  )r   r   r   r   r   )r   r   r.  r   r   r   test_Poly_all_coeffsr     s    1:  "qc)))1:  "qc)))!a&&(QF222!Q$1q !$//1Y>>>!Q$1q !$//1_DDDr   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g d	k(  sJ y )
Nr   r   r   r   r   r   r  r'  )r  r   r  r   r   )r   r   
all_monomsr   r   r   test_Poly_all_monomsr  *  s    1:  "tf,,,1:  "tf,,,!a&&(T4L888!Q$1q !$//15GGGG!Q$1q !$//15SSSSr   c                     t        dt              j                         dgk(  sJ t        dt              j                         dgk(  sJ t        dt        z  dz   t              j                         ddgk(  sJ t        dt        dz  z  dt        z  z   dz   t              j                         g dk(  sJ t        dt        d	z  z  dt        z  z   dz   t              j                         g d
k(  sJ y )Nr   r  r   r  r   r   r   r  r'  )r  )r
  r   )r  r   r   r  )r   r   	all_termsr   r   r   test_Poly_all_termsr  4  s    1:!i[0001:!i[000!a%%'Iy+AAAA!Q$1q !$..0)* * *!Q$1q !$..0?@ @ @r   c                      t        t        dz  dt        z  z   dz         } t        t        dz  dt        z  z   dz         }d }| j                  |      |k(  sJ d }| j                  |      |k(  sJ y )Nr      i  r'  c                      | \  }|dd|z
  z  z  S Nr#  r   r   monomcoeffks      r   funcz test_Poly_termwise.<locals>.funcD  s    b1q5k!!r   c                 &    | \  }|f|dd|z
  z  z  fS r  r   r  s      r   r  z test_Poly_termwise.<locals>.funcJ  s#    tUBQK'''r   )r   r   termwise)r   r   r  s      r   test_Poly_termwiser  @  ss    QTBqD[3AQTAaCZ!^A" ::dq   ( ::dq   r   c                     t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        t        t              j                         dk(  sJ t        t        dz   t              j                         dk(  sJ t        t        dz  dz   t              j                         dk(  sJ t        t        dz  t        z   dz   t              j                         dk(  sJ y )Nr   r   r   r   )r   r   lengthr   r   r   test_Poly_lengthr  Q  s    1:!###1:!###1:!###Aq>  "a'''1q!##%***1q1a '')Q...r   c                     t        dt              j                         i k(  sJ t        dt        t        t              j                         i k(  sJ t        dt              j                         ddik(  sJ t        dt        t        t              j                         ddik(  sJ t        t        dz  dz   t              j                         dddk(  sJ t        t        dz  dz   t        t        t              j                         dddk(  sJ t        dt        dz  z  t        z  t        dz  z  d	t        z  t        z  z   d
t        z  t        z  z         j                         dd	d
dk(  sJ y )Nr   r   r   r   r   r   r   r   )r  r   ))r   r   r   r   r'  r   )r   r   r   r   r   r   r   r   r   )r   r   as_dictr   r   r   r   r   test_Poly_as_dictr%  [  s<   1:2%%%1a##%+++1:D!9,,,1a##%)Q7771q!$$&!*<<<<1q!Q"**,A!0LLLL!Q$qA!A%!A-.668=, , , ,r   c                      t        dt              j                         dk(  sJ t        dt        t        t              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        t        t              j                         dk(  sJ t        t        dz  dz   t              j                         t        dz  dz   k(  sJ t        t        dz  dz   t        t        t              j                         t        dz  dz   k(  sJ t        dt        dz  z  t        z  t        dz  z  dt        z  t        z  z   dt        z  t        z  z         j                         dt        dz  z  t        z  t        dz  z  dt        z  t        z  z   dt        z  t        z  z   k(  sJ t        t        dz  dt        z  t        dz  z  z   t        z
  t        t                j                         t         t        dz  z   dt        z  t        dz  z  z   k(  sJ  j                  t        di      dt        z
  dt        dz  z  z   k(  sJ  j                  t        d	i      d
dt        z  z   t        dz  z   k(  sJ  j                  t        dt        d	i      dk(  sJ  j                  dd	      dk(  sJ t        t         fd       y )Nr   r   r   r   r'  r      r#  r  iH   i{  c                  2     j                  t        di      S r   )r-  r   r   s   r   r   z#test_Poly_as_expr.<locals>.<lambda>  s    AIIq!f$5 r   )r   r   r-  r   r   r|   rF   r   s   @r   test_Poly_as_exprr*  i  sV   1:1$$$1a##%***1:1$$$1a##%***1q!$$&!Q$(2221q!Q"**,1q888	!Q$qA!A!A%''.wyAadF1HQTMAaCE4IAaCPQE4QR R R 	QTAaC1H_q !Q'A99;1"q!t)ac!Q$h....99aVQAqD 000099aVRT	AqD 000099aAq\"c)))99Q?c!!!
?56r   c                  "   t        t        dz  t        t        z  z
  dt        z  z   t        d      j                         t        t        dz  dt        dz  z  z   dt        d	z  z  z   t        dz  z   dt        dz  z  z
  d
z   t        d      k(  sJ y )Nr'     Tr   r  r   r#  iB  r  iAF rQ   r   )r   r   rf   liftr   r   r   test_Poly_liftr/    s    1qs
RT!1t499;QUQq"uW_s1a4x'!Q$.QT9EAt	  r   c                  .   t        dt              j                         dt        dt              fk(  sJ t        dt              j                         dt        dt              fk(  sJ t        t        t              j                         dt        t        t              fk(  sJ t        t        dz  t              j                         dt        t        t              fk(  sJ t        t        dz  t              j                         dt        t        t              fk(  sJ t        t        dz  t        z  t        dz  z  t        d	z  t        dz  z  z         j                         d
t        t        t        z  t        z  t        dz  t        z  z         fk(  sJ y )Nr   r   r   r   r  r,  )r,  r  r'  )r   r   r  )r   r   deflater   r   r   r   r   test_Poly_deflater2    s7   1:D$q!*#55551:D$q!*#55551:D$q!*#55551a=  "tT!QZ&88882q>!!#tAqz'::::	1Qq"uq!tArEz!##*79T!A#a%!Q$q&.=Q0RS S Sr   c                     t        t        dz  t        z  t        t        dz  z  z   t        t        z  z   dz   t              } | j                         t        t        dz  t        z  t        t        dz  z  z   t        t        z  z   dz   t        t              k(  sJ | j                  d      t        t        dz  t        z  t        t        dz  z  z   t        t        z  z   dz   t        t              k(  sJ y )Nr   r   r   T)front)r   r   r   injectr   s    r   test_Poly_injectr6    s    QT!Va1f_qs"Q&*A88:ad1fqAvo!3a7A>>>>88$841Q1a4!A#(=(A1a#HHHHr   c            	      V   t        t        dz  t        z  t        t        dz  z  z   t        t        z  z   dz   t        t              } | j                  t              t        t        t        dz  z  t        dz  t        z   t        z  z   dz   t        d      k(  sJ | j                  t              t        t        t        dz  z  t        dz  t        z   t        z  z   dz   t        d      k(  sJ t        t        z   t        z   t
        z   t        z   }t        |t        t        t        t
        t              }|j                  t              t        |t        t        t
        t        d      k(  sJ |j                  t        t              t        |t        t
        t        d      k(  sJ |j                  t        t        t              t        |t
        t        d      k(  sJ |j                  t              t        |t        t        t        t
        d	      k(  sJ |j                  t
        t              t        |t        t        t        d
      k(  sJ |j                  t        t
        t              t        |t        t        d      k(  sJ t        t        d        t        t        d        y )Nr   r   r   r   r   ZZ[y]zZZ[x, y]zZZ[x, y, z]zZZ[w]zZZ[t, w]zZZ[z, t, w]c                      t        t        t        z  t        t        t        t                 j                  t              S r   )r   r   r   rP   r   ejectr   r   r   r   z!test_Poly_eject.<locals>.<lambda>  s$    QqS!Qr!u = C CA F r   c                  r    t        t        t        z  t        t        t              j	                  t              S r   )r   r   r   r   r:  r   r   r   r   z!test_Poly_eject.<locals>.<lambda>  s     QqS!Q(:(@(@(C r   )
r   r   r   r:  r   r   r   r|   rI   r+  )r   exr   s      r   test_Poly_ejectr=    s   QT!Va1f_qs"Q&1-A771:a1f1q!|3a77KKKK771:a1f1q!|3a77KKKK	
QQ	BRAq!QA771:b!Q1W====771a=DQ1Z@@@@771atB1]CCCC771:b!Q1W====771a=DQ1Z@@@@771atB1]CCCC
;FG
 CDr   c                     t        t        t        t              j                         t        t        t              k(  sJ t        t        t        z  t        t              j                         t        t        t        z  t        t              k(  sJ t        dt        t              j                         t        dt        t              k(  sJ y r   )r   r   r   excluder   r   r   test_Poly_excluder@    s}    1a=  "d1aj000!Q?""$QqS!Q7771a=  "d1am333r   c                  ,   t        dt        t              j                  d      dk(  sJ t        dt        t              j                  d      dk(  sJ t        dt        t              j                  d      dk(  sJ t        dt        t              j                  d      dk(  sJ t	        t
        d        t	        t
        d        t        dt        t              j                  t              dk(  sJ t        dt        t              j                  t              dk(  sJ t        dt        t              j                  d      dk(  sJ t        dt        t              j                  d      dk(  sJ t	        t
        d	        t	        t
        d
        y )Nr   r  r   r   c                  J    t        dt        t              j                  d      S )Nr   r   r   r   _gen_to_levelr   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqM$?$?$C r   c                  J    t        dt        t              j                  d      S rx  rD  r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqM$?$?$C r   r   r   c                  R    t        dt        t              j                  t              S r   )r   r   r   rE  r   r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqM$?$?$B r   c                  J    t        dt        t              j                  d      S )Nr   r   rD  r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqM$?$?$D r   )r   r   r   rE  r|   rG   r   r   r   test_Poly__gen_to_levelrI    s6   1a=&&r*a///1a=&&r*a///1a=&&*a///1a=&&*a///
?CD
?CD1a=&&q)Q...1a=&&q)Q...1a=&&s+q0001a=&&s+q000
?BC
?DEr   c                     t        dt              j                         t         u sJ t        dt              j                         dk(  sJ t        t        t              j                         dk(  sJ t        dt              j                  d      t         u sJ t        dt              j                  d      dk(  sJ t        t        t              j                  d      dk(  sJ t        dt              j                  t              t         u sJ t        dt              j                  t              dk(  sJ t        t        t              j                  t              dk(  sJ t        dt              j                  d      t         u sJ t        dt              j                  d      dk(  sJ t        t        t              j                  d      dk(  sJ t	        t
        d        t	        t
        d        t	        t
        d        t        dt        t              j                         dk(  sJ t        dt        z  t        t              j                         dk(  sJ t        t        t        z  t        t              j                         dk(  sJ t        dt        t              j                  t              dk(  sJ t        dt        z  t        t              j                  t              dk(  sJ t        t        t        z  t        t              j                  t              dk(  sJ t        dt        t              j                  t              dk(  sJ t        dt        z  t        t              j                  t              dk(  sJ t        t        t        z  t        t              j                  t              dk(  sJ t        dt              t         u sJ t        dt              dk(  sJ t        t        t              dk(  sJ t        t        t        dz  z  t              dk(  sJ t        t        t        dz  z  t              dk(  sJ t        t        t        dz  z  t              dk(  sJ t        t              dk(  sJ t	        t        d	        t	        t        d
        t	        t
        d        t	        t
        d        t        t        dt              t              t         u sJ t        t        dt              t              dk(  sJ t        t        t        dz  t        dz  z   t                    dk(  sJ t        t        t        dz  t        dz  z   t        t              d      dk(  sJ t        t        t        dz  t        dz  z   t              t              dk(  sJ t        t        t        dz  t        dz  z   t        dz  z   t              t              dk(  sJ y )Nr   r   genr   c                  B    t        dt              j                  d      S Nr   rK  r   r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJ$5$5!$5$< r   c                  J    t        dt              j                  t              S rN  )r   r   r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJ$5$5!$5$< r   c                  B    t        dt              j                  d      S )Nr   r   rK  rO  r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJ$5$5#$5$> r   r   c                  :    t        t        dz  t        dz  z         S r  r   r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    fQTAqD[1 r   c                  <    t        t        dz  t        dz  z   d      S Nr   r   r   rS  r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    fQTAqD[!4 r   c                  "    t        t        d      S )Ng?r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    F1cN r   c                  J    t        t        dz  t        dz  dz   z  t              S rU  rW  r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    F1a4A?A$> r   r   r'  )
r   r   r   ri   r|   rG   r   r   rj   r  r   r   r   test_Poly_degreerY    s   1:2#%%%1:!###1:!###1:#s***1:#q(((1:#q(((1:#s***1:#q(((1:#q(((1:%",,,1:%***1:%***
?<=
?<=
?>?1a=!Q&&&!Q?!!#q(((!Q?!!#q(((1a=A&!+++!Q?!!a!(A---!Q?!!a!(A---1a=A&!+++!Q?!!a!(A---!Q?!!a!(A---!Q<B3!Q<1!Q<1!AqD&!!!!!AqD&!!!!!AqD&!!!!":??
912
945
?23
?>?$q)A2#%%%$q)A!###$q!tAqDy#$)))$q!tad{Aq)1-222$q!tad{A&*a///$q!tad{QT)1-q1Q666r   c                  l   t        dt              j                         t         fk(  sJ t        dt        t              j                         t         t         fk(  sJ t        dt        t        t
              j                         t         t         t         fk(  sJ t        dt              j                         dk(  sJ t        dt        t              j                         dk(  sJ t        dt        t        t
              j                         dk(  sJ t        t        dz  t        z  t        dz  t
        dz  z  z   dz         j                         dk(  sJ t        dt              dk(  sJ t        t        t              d	k(  sJ t        t        t        dz  z        d
k(  sJ t        t        d        y )Nr   r   r   r   r   r   r   )r   r   r   r   r%  c                      t        d      S r   )r   r   r   r   r   z'test_Poly_degree_list.<locals>.<lambda>  s
    k!n r   )r   r   r   ri   r   r   r|   rB   r   r   r   test_Poly_degree_listr\     sa   1:!!#v---1a=$$&B3*4441a'')rcB3_<<<1:!!#t+++1a=$$&&0001a'')Y6661QAad"Q&'335BBBq!$$$q!$$$qAv&(((
45r   c                     t        t        dz  t        z  t        dz  t        dz  z  z   dz         j	                         dk(  sJ t        t        dz  t        dz  z         j	                         dk(  sJ t        t        t        z  t        z  t        dz  z         j	                         dk(  sJ t        t        dz  t        z   dz         j	                         dk(  sJ t	        t        t        z  t        dz  z         dk(  sJ t	        t        t        z  t        dz  z   t        t              dk(  sJ t	        d      dk(  sJ t	        t        t        dz  t        dz  z   t        dz  z               dk(  sJ t	        t        t        dz  t        dz  z   t        dz  z   t                    dk(  sJ t	        t        t        dz  t        dz  z   t        dz  z   t              t              dk(  sJ t	        t        t        dz  t        t        z  t        z  z   t        dz  t        dz  z  z   t        dz  z   t              t              dk(  sJ y )	Nr   r   r   r   r'  r   	   r   )r   r   r   r   r	   r   r   r   test_Poly_total_degreer_    s   1QAad"Q&'446!;;;1q!t))+q000!A1**,1111q1**,111!ad
#q(((!ad
Aq)Q...?aQTAqD[1a4/01Q666QTAqD[1a4/34999QTAqD[1a4/3Q71<<<QTAaCE\AqDAI51<Q?CqHHHr   c                     t        t        dz  t        z         j                  t              t        t        dz  t        t        z  z         k(  sJ t        t        t        z         j                  t              t        t        t        z   t        t        t              k(  sJ t        t        t        dz  z         j                  t              t        t        t        z  t        dz  z         k(  sJ y r  )r   r   r   
homogenizer   r   r   r   test_Poly_homogenizerb  !  s    1Q<""1%ad1Q3h777!9"d1Q31a&8888!Q$<""1%ac!Q$h777r   c                  j   t        dt        t              j                         t         u sJ t        dt        t              j                         dk(  sJ t        t        t        t              j                         dk(  sJ t        t        t        z  t        t              j                         dk(  sJ t        t        dz   t        t              j                         J t        t        t        z  t        z   t        t              j                         J t        t        dz  dt        dz  z  t        dz  z  z   dt        z  t        dz  z  z         j                         dk(  sJ t        t        dz  dt        dz  z  t        dz  z  z   dt        z  t        dz  z  z         j                         J y )Nr   r   r   r   r   r^  r'  )r   r   r   homogeneous_orderri   r   r   r   test_Poly_homogeneous_orderre  '  sV   1a=**,3331a=**,1111a=**,111!Q?,,.!333Aq!..0888!aA002:::1qAvad{"QqSAX-.@@BaGGG1qAvad{"QqSAX-.@@BJJJr   c                     t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d      dk(  sJ y )	Nr   r   r   r   r   rX   rY   r  )r   r   r
   r   r   r   r   test_Poly_LCrg  4  s:   1:==?a1:==?a!Q$
A!!#q(((!Q$1a41$%((/1444!Q$1a41$%((1Q666a1fqAvad{"%0A555a1fqAvad{"'2a777r   c                      t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ y )Nr   r   r   )r   r   TCr   r   r   test_Poly_TCrj  @  s`    1:==?a1:==?a!Q$
A!!#q(((r   c                     t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ y )Nr   r   r   r   r   rX   rY   )r   r   ECr   r   r   r   test_Poly_ECrm  F  s    1:==?a1:==?a!Q$
A!!#q(((!Q$1a41$%((/1444!Q$1a41$%((1Q666r   c                      t        dt              j                  d      dk(  sJ t        dt              j                  t              dk(  sJ t        dt              j                  d      dk(  sJ t        dt              j                  t              dk(  sJ t        t        dz  t              j                  d      dk(  sJ t        t        dz  t              j                  t        dz        dk(  sJ t        t        dz  t              j                  t        dz        dk(  sJ t        t        dz  t              j                  t        dz        dk(  sJ t        dt        z  t        dz  z  dz   t        t              j                  d      dk(  sJ t        dt        z  t        dz  z  dz   t        t              j                  t        t        dz  z        dk(  sJ t        dt        z  t        z  t	        d      z  d	t        z  z   t        t                 j                  t              d	k(  sJ   j                  t              dk(  sJ   j                  t        t        z        dt	        d      z  k(  sJ   j
                         j                  t              dt        z  t	        d      z  d	z   k(  sJ t        t         fd
       t        t        d        t        t        d        t        t        d        y )Nr   r   r  r   r^  r   r         c                  0      j                   t              S r   )r  r   r   s   r   r   z!test_Poly_coeff.<locals>.<lambda>e  s    
 r   c                  D    t        t        dz         j                  d      S )Nr   r   r   r   coeff_monomialr   r   r   r   z!test_Poly_coeff.<locals>.<lambda>g  s    tAE{99!< r   c                  R    t        t        dz         j                  dt        z        S Nr   r   rs  r   r   r   r   z!test_Poly_coeff.<locals>.<lambda>h  s    tAE{99!A#> r   c                  `    t        t        dz         j                  dt        z  t        z        S rv  )r   r   rt  r   r   r   r   r   z!test_Poly_coeff.<locals>.<lambda>i  s!    tAE{99!A#a%@ r   )
r   r   rt  r   rq   r-  r  r|   r+  
ValueErrorr   s   @r   test_Poly_coeffry  O  sf   1:$$Q'1,,,1:$$Q'1,,,1:$$Q'1,,,1:$$Q'1,,,1a=''*a///1a=''1-2221a=''1-2221a=''1-222!AqD1a#2215:::!AqD1a#221QT6:a???RT!VCF]RT!1a(A1A"$$$1A!###1AaC Bs1vI---199;Q2a4A;#3333
 23
:<=
:>?
:@Ar   c                     t        dt              j                  d      dk(  sJ t        dt              j                  d      dk(  sJ t        dt              j                  d      dk(  sJ t        dt              j                  d      dk(  sJ t        t        dz  t              j                  d      dk(  sJ t        t        dz  t              j                  d      dk(  sJ t        t        dz  t              j                  d      dk(  sJ t        t        dz  t              j                  d      dk(  sJ t        dt        z  t        dz  z  dz   t        t              j                  dd      dk(  sJ t        dt        z  t        dz  z  dz   t        t              j                  dd      dk(  sJ t	        t
        d        y )	Nr   r   r  r   r^  r   r   c                  f    t        t        t        z  dz   t        t              j                  d      S r   )r   r   r   nthr   r   r   r   ztest_Poly_nth.<locals>.<lambda>{  s"    tAaC!GQ266q9 r   )r   r   r|  r   r|   rx  r   r   r   test_Poly_nthr}  l  su   1:>>!!!!1:>>!!!!1:>>!!!!1:>>!!!!1a=Q1$$$1a=Q1$$$1a=Q1$$$1a=Q1$$$!AqD1a#''1-222!AqD1a#''1-222
:9:r   c                  "   t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      d	k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d
      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d      t        dz  t        dz  z  k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d
      t        t        dz  z  k(  sJ y )Nr   r   r   r   r  r   r   rX   r  rY   r  r  )r   r   r   r   r   r   r   test_Poly_LMr  ~  sN   1:==?d"""1:==?d"""!Q$
A!!#t+++!Q$1a41$%((/6999!Q$1a41$%((1V;;;a1fqAvad{"%0AqDAI===a1fqAvad{"'2a1f<<<r   c                     t        t        dz  t        dz  z  t        z  t        dz  t        z  t        dz  z  z   t        t        z  t        z  z   dz         } d }| j	                  d      dk(  sJ | j	                  |      dk(  sJ y )	Nr   r   r   c                 *    t        t        |             S r   )tuplereversed)r  s    r   r   z+test_Poly_LM_custom_order.<locals>.<lambda>  s    E(5/2 r   rX   r  )r   r   r   r!  )r   r   r   r   r   )r   rev_lexs     r   test_Poly_LM_custom_orderr    sz    QT!Q$Yq[1a46!Q$;&1Q.23A2G44e4	)))44g4)+++r   c                     t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      d	k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d
      dk(  sJ y )Nr   r   r   r   r   r   r   rX   r  rY   r  )r   r   EMr   r   r   r   test_Poly_EMr    s    1:==?d"""1:==?d"""!Q$
A!!#t+++!Q$1a41$%((/6999!Q$1a41$%((1V;;;r   c                  (   t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d	      d
k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d	      dt        dz  z  t        dz  z  k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z   d      t        t        dz  z  k(  sJ y )Nr   r  r   r  r   )r  r   r   r   rX   r  rY   r  r  )r   r   r   r   r   r   r   test_Poly_LTr    sR   1:==?i'''1:==?i'''!Q$
A!!#y000!Q$1a41$%((/;>>>!Q$1a41$%((1[@@@a1fqAvad{"%0AadF1a4K???a1fqAvad{"'2a1f<<<r   c                     t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt        dz  z  t        z   t              j                         dk(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d	      d
k(  sJ t        t        t        dz  z  dt        dz  z  t        dz  z  z         j                  d      dk(  sJ y )Nr   r  r   r  r   )r   r   r   r   rX   r  rY   r  )r   r   ETr   r   r   r   test_Poly_ETr    s    1:==?i'''1:==?i'''!Q$
A!!#y000!Q$1a41$%((/;>>>!Q$1a41$%((1[@@@r   c                      t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ y Nr   r   r   )r   r   max_normr   r   r   test_Poly_max_normr    sY    A;!Q&&&A;!Q&&&A;!Q&&&r   c                      t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ t        dt              j                         dk(  sJ y r  )r   r   l1_normr   r   r   test_Poly_l1_normr    sY    A; A%%%A; A%%%A; A%%%r   c                  T   t        t        dz   t              j                         \  } }| dk(  r4|t        t        dz   t        d      k(  r |j                         t        k(  sJ t        t        dz  dz   t              j                         \  } }| dk(  r4|t        t        dz   t        d      k(  r |j                         t
        k(  sJ t        t        dz  dz   t              j                  d      \  } }| dk(  r4|t        t        dz   t        d      k(  r |j                         t        k(  sJ t        t        t        z  dz   t              j                  d      \  } }| t        k(  r?|t        t        t        z   t        d      k(  r |j                         t        t           k(  sJ t        t        d	z  t        d      z   t        d
      j                         \  } }| d	k(  r@|t        t        d	t        d      z  z   t        d
      k(  r |j                         t        k(  sJ t        t        d	z  t        d      z   t        d
      j                  d      \  } }| d	k(  r@|t        t        d	t        d      z  z   t        d
      k(  r |j                         t        k(  sJ y )Nr   r   rP   r   rQ   T)convertr8  r   rU   )	r   r   clear_denomsr/  rP   rQ   r   rs   rU   )r  r   s     r   test_Poly_clear_denomsr    sk   q1ua.--/KE4A:$$	Aq# #24??#4#:; ; qsQw"//1KE4A:$$	Aq# #24??#4#:; ; qsQw"///=KE4A:$$	Aq# #24??#4#:; ; qsQw"///=KE4A:$$	Aq#" "&5doo&72a5&@A A qsT!W}a5BBDKE4A:$$	Ad1gIq#' '+:4??+<+BC C 	!d1gq''3|D|'A E4A:$$	Ad1gIq#' '+:4??+<+BC C+Br   c                     t        t        dz  t        z  dz   t              } t        t        dz  t        z   t              }| j                  |      t        t        dz  t        z   t              t        t        t        dz  z  t        dz  z   t              fk(  sJ | j	                  t
              } |j	                  t
              }| j                  |      | |fk(  sJ y )Nr   r   r   )r   r   r   rat_clear_denomsrg  rU   r\  s     r   test_Poly_rat_clear_denomsr    s    QT!VaZAQTAXqAa 	adQh	D1a4!Q$234 4 4 	
RA	RAa QF***r   c                  `   t        ddt        d      dz  z  z  dddt        d      z  z   t        d      dz  z  z  d	t        d      z  ddt        d      z  z   t        d      dz  z  z  z   z  d
dt        d      dz  z  z  dt        d      dz  z  z  ddt        d      z  z   t        d      dz  z  z  dddt        d      z  z   t        d      dz  z  z  d	t        d      z  ddt        d      z  z   t        d      dz  z  z  z   z  z
  d
dt        d      dz  z  z  ddt        d      z  z   t        d      dz  z  z  dddt        d      z  z   t        d      dz  z  z  d	t        d      z  ddt        d      z  z   t        d      dz  z  z  z   z  z   ddt        d      dz  z  z  dt        d      dz  z  z  dddt        d      z  z   t        d      dz  z  z  d	t        d      z  ddt        d      z  z   t        d      dz  z  z  z   z  z   t              } | t        dt        d      k(  sJ y )Nlwf8*-    r   r   l   >< i^     i#  l   4$isDl   R r      l   wf8*- r   rU   r   )r   rm   rs   r   r   s    r   test_issue_20427r    s   b1Q46l*OUDJ>A$q&=" -"$1$t*$<eDJ?A$q&>" %"-" #%0QqT!V%<Q1a[%H%
d4j.KaDFJ$ &$%4ec$t*n6L	
1a6 & d+USd^-CqtAv,NN&O&PP
 b1Q46l
"ECT
N$:ad1f#E
ET$Z/1Q46::]T
>CT
N*ad1f5>6 	677 :I	!QJ :AaDF:,ec$t*n.D!Q-OO
T

"ECT
N$:ad1f#E
EF:G	G IJ		KA Q$''''r   c                  >   t        t        dz         j                         t        t        dz  dz  t        z         k(  sJ t        t        dz         j                  t              t        t        dz  dz  t        z         k(  sJ t        t        dz         j                  t        df      t        t        dz  dz  t        z         k(  sJ t        t        t        z  dz         j                  t              t        t        dz  t        z  dz  t        z         k(  sJ t        t        t        z  dz         j                  t              t        t        t        dz  z  dz  t        z         k(  sJ t        t        t        z  dz         j                  t        t              t        t        dz  t        z  dz  t        dz  dz  z         k(  sJ t        t        t        z  dz         j                  t        t              t        t        t        dz  z  dz  t        dz  dz  z         k(  sJ t        t        t        z  dz         j                  t        df      t        t        dz  t        z  dz  t        dz  dz  z         k(  sJ t        t        t        z  dz         j                  t        df      t        t        t        dz  z  dz  t        dz  dz  z         k(  sJ t        t        t        z  dz         j                  t        t              t        t        dz  t        dz  z  dz  t        t        z  z         k(  sJ t        t        t        z  dz         j                  t        t              t        t        dz  t        dz  z  dz  t        t        z  z         k(  sJ y )Nr   r   r   r  r'  )r   r   	integrater   r   r   r   test_Poly_integrater    s   A;  "d1a46A:&6666A;  #tAqDFQJ'7777A;  !Q(DAa!,<<<<!a=""1%ad1fQhl);;;;!a=""1%a1fQhl);;;;!a=""1a(DAaAqDF1B,CCCC!a=""1a(D1a4AqDF1B,CCCC!a=""Aq6*d1a46!8ad1f3D.EEEE!a=""Aq6*d1QT6!8ad1f3D.EEEE!a=""1a(DAad1qs1B,CCCC!a=""1a(DAad1qs1B,CCCCr   c                     t        t        dz  t        z         j                         t        dt        z  dz         k(  sJ t        t        dz  t        z         j                  t              t        dt        z  dz         k(  sJ t        t        dz  t        z         j                  t        df      t        dt        z  dz         k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t              t        dt        z  t        dz  z  t        z         k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t              t        dt        dz  z  t        z  t        z         k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        t              t        dt        dz  z  t        t              k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        t              t        dt        dz  z  t        t              k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        df      t        dt        dz  z  t        t              k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        df      t        dt        dz  z  t        t              k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        t              t        dt        z  t        z  dz         k(  sJ t        t        dz  t        dz  z  t        t        z  z         j                  t        t              t        dt        z  t        z  dz         k(  sJ y )Nr   r   r'  )r   r   ra   r   r   r   r   test_Poly_diffr    s   1q> D1qM1111q>q!T!A#']2221q>1v&$qsQw-7771QT	AaC %%a(D1QTA,>>>>1QT	AaC %%a(D1a4A,>>>>1QT	AaC %%a+tAadFAq/AAAA1QT	AaC %%a+tAadFAq/AAAA1QT	AaC %%q!f-a1fa1CCCC1QT	AaC %%q!f-a1fa1CCCC1QT	AaC %%a+tAaCEAI>>>1QT	AaC %%a+tAaCEAI>>>r   c                     t        t        t        dz  t        z               t        dt        z  dz         k(  sJ t        t        t        dz  t        z         t        d      t        t        t        dz  t        z         t              k(  sJ t        t        t        dz  t        z         t              j	                         t        dt        z  dz         k(  sJ y )Nr   r   Fevaluate)ra   r   r   r`   doitr   r   r   test_issue_9585r    s    QTAX4!a=000QTAXE241q>1%& & &d1a4!8na(--/4!a=@@@r   c                     t        dt              j                  d      dk(  sJ t        dt              j                  d      dk(  sJ t        t        t              j                  d      dk(  sJ t        dt              j                  dd      dk(  sJ t        dt              j                  dd      dk(  sJ t        t        t              j                  dd      dk(  sJ t        dt              j                  t        d      dk(  sJ t        dt              j                  t        d      dk(  sJ t        t        t              j                  t        d      dk(  sJ t        dt              j                  dd      dk(  sJ t        dt              j                  dd      dk(  sJ t        t        t              j                  dd      dk(  sJ t        t        d        t        t        d        t        t        d        t        dt        t
              j                  d      t        dt
              k(  sJ t        d	t
        z  t        t
              j                  d      t        d	t
        z  t
              k(  sJ t        t        t
        z  t        t
              j                  d      t        dt
        z  t
              k(  sJ t        dt        t
              j                  t        d      t        dt
              k(  sJ t        d	t
        z  t        t
              j                  t        d      t        d	t
        z  t
              k(  sJ t        t        t
        z  t        t
              j                  t        d      t        dt
        z  t
              k(  sJ t        dt        t
              j                  t
        d      t        dt              k(  sJ t        d	t
        z  t        t
              j                  t
        d      t        d
t              k(  sJ t        t        t
        z  t        t
              j                  t
        d      t        dt        z  t              k(  sJ t        t        t
        z  t
        z   t        t
              j                  t        di      t        dt
        z  t
              k(  sJ t        t        t
        z  t
        z   t        t
              j                  t
        di      t        dt        z  dz   t              k(  sJ t        t        t
        z  t
        z   t        t
              j                  t        dt
        di      dk(  sJ t        t        t
        z  t
        z   t        t
              j                  t        dt
        di      dk(  sJ t        t        t
        z  t
        z   t        t
              j                  d      dk(  sJ t        t        t
        z  t
        z   t        t
              j                  ddg      dk(  sJ t        t        dz   d      j                  t        j                        t        dd	      k(  sJ t        t        dz   d      j                  t        d	            t        d	      dz   k(  sJ t        t        d        t        t        d        t        d      } d	| z  t        z  d	| z  z
  t        d	z  z   dz   t        d	z  d	t        z  z
  dz   z  }t        t        d	z  | dz
  t        z  z   | z
  dz   t        d      }|j                  t        dz   t        dz
  z        |k(  sJ t        t        d	z  | dz
  t        z  z   | z
  dz   t        t
        d      }|j                  t        dz   t        dz
  z        t        |t
        d      k(  sJ y )Nr   r   r   r   c                  B    t        dt              j                  dd      S Nr   r   r   r   evalr   r   r   r   z test_Poly_eval.<locals>.<lambda>.  s    DAJOOAq$9 r   c                  J    t        dt              j                  t        d      S r  )r   r   r  r   r   r   r   r   z test_Poly_eval.<locals>.<lambda>/  s    DAJOOAq$9 r   c                  B    t        dt              j                  dd      S )Nr   r   r   r  r   r   r   r   z test_Poly_eval.<locals>.<lambda>0  s    DAJOOC$; r   {   r   r  r  r  1   0   )r  r   rP   r   r   c                  n    t        t        t        z  t        z   t        t              j                  d      S )N)r  r   r  )r   r   r   r  r   r   r   r   z test_Poly_eval.<locals>.<lambda>J  s"    tAaC!GQ277	B r   c                  h    t        t        dz   d      j                  t        j                  d      S )Nr   rP   r   Fauto)r   r   r  rm   Halfr   r   r   r   z test_Poly_eval.<locals>.<lambda>K  s%    QU4 8 = =aff5 = Q r   alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r  r|   rG   r   rm   r  rh   rs   rx  rI   rn   r   )r  resultr   r   s       r   test_Poly_evalr    s   1:??1"""1:??1"""1:??1"""1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??3"a'''1:??3"a'''1:??3"a'''
?9:
?9:
?;<Q?"d3l222!Q?"d1Q3l222!Q?"d1Q3l222Q?1%c1555!Q?1%ac1555!Q?1%ac1555Q?1%c1555!Q?1%b!444!Q?1%ac1555!aA##QF+tAaC|;;;!aA##QF+tAaC!GQ/????!aA##Q1aL1R777!aA##Q1aL1R777!aA##F+r111!aA##QF+r111Ad#((0HQNBBBAd#((a1T!Wq[@@@
:BC
;QR 7OEgai!E'!AqD(1,q!taczA~>FQTUQYM!E)A-qEA661q51q5/"f,,,QTUQYM!E)A-q!KHA661q51q5/"d61]&KKKKr   c                      t        dt        z  t        z  dt        z  z   t        z   dt        z  z         }  | d      t        dt        z  dt        z  z   dz         k(  sJ  | dd      t        dt        z  dz         k(  sJ  | ddd      dk(  sJ y )Nr   r   r   r  r"  r   -   )r   r   r   r   r   s    r   test_Poly___call__r  W  s    QqSUQqS[1_qs"#AQ44!ac	A&&&&Q7d1Q38n$$$Q1:r   c                     t        t        dz
  t        dz  dz
  gt              d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        t        dz
  t              t        dz  dz
  gt              d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        dz
  t        t        dz  dz
  t              gt              d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        t        dz
  t              t        t        dz  dz
  t              gt              d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        dz
  t        dz  dz
  gt        t              d   t        t        dz
  t        t              t        t        dz  dz
  t        t              gk(  sJ t        t        t        dz
  t              t        dz  dz
  gt        t              d   t        t        dz
  t        t              t        t        dz  dz
  t        t              gk(  sJ t        t        dz
  t        t        dz  dz
  t              gt        t              d   t        t        dz
  t        t              t        t        dz  dz
  t        t              gk(  sJ t        t        t        dz
  t              t        t        dz  dz
  t              gt        t              d   t        t        dz
  t        t              t        t        dz  dz
  t        t              gk(  sJ t        t        dz
  t        dz  dz
  g      d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        t        dz
  t              t        dz  dz
  g      d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        dz
  t        t        dz  dz
  t              g      d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        t        t        dz
  t              t        t        dz  dz
  t              g      d   t        t        dz
  t              t        t        dz  dz
  t              gk(  sJ t        dt        dz  dz
  g      d   t        dt              t        t        dz  dz
  t              gk(  sJ t        dt        dz  dz
  g      d   t        dt              t        t        dz  dz
  t              gk(  sJ t        dt        t        dz  dz
  t              g      d   t        dt              t        t        dz  dz
  t              gk(  sJ t        dt        t        dz  dz
  t              g      d   t        dt              t        t        dz  dz
  t              gk(  sJ t        t        dz  dz
  dg      d   t        t        dz  dz
  t              t        dt              gk(  sJ t        t        dz  dz
  dg      d   t        t        dz  dz
  t              t        dt              gk(  sJ t        t        t        dz  dz
  t              dg      d   t        t        dz  dz
  t              t        dt              gk(  sJ t        t        t        dz  dz
  t              dg      d   t        t        dz  dz
  t              t        dt              gk(  sJ t        t        t        t        t              t        t        t        t              gt        t        d      d   t        t        t        t        d      t        t        t        t        d      gk(  sJ t	        t
        d        y )	Nr   r   r   rX   r  rP   r   c                      t        ddg      S r  )r   r   r   r   r   z.test_parallel_poly_from_expr.<locals>.<lambda>  s    '>1v'F r   )r   r   r   r   r|   rA   r   r   r   test_parallel_poly_from_exprr  _  s   "	
Q1q1!%)!a%^T!Q$(A5F$GH H H"	a!eQA"A''(*.21q5!nd1a4!8Q>O-PQ Q Q"	
QQTAXq!"A''(*.21q5!nd1a4!8Q>O-PQ Q Q"D	Aq%1q!$$&'(**+-15a!eQadQhPQAR0ST T T #	
Q1q1a!!"$(,QUAq(941q!Q;O'PQ Q Q"D	Aq%a4!8$$$%'+/Aq!+<d1a4!8QPQ>R*ST T T"AE4	1q!, $! $(Q1$5tAqD1Ha7K#LM M M"DQND	1q!5 $! $(Q1$5tAqD1Ha7K#LM M M #	
Q1q"&q1ua.$q!tax2C!DE E E"	a!eQA"$$%'+/Aq>41q!;L*MN N N"	
QQTAXq!"$$%'+/Aq>41q!;L*MN N N"	a!eQadQh*+--.048QNDAPQSTDU3VW W W #	
AqD1H"1aj$q!tax*;<= = ="	
AqD1H"1aj$q!tax*;<= = ="	
DA1  !#'+Aqz41q!3D&EF F F"	
DA1  !#'+Aqz41q!3D&EF F F #	
A1"1a4!8Q/a<= = ="	
A1"1a4!8Q/a<= = ="	adQh	A  !#'+AqD1Ha'8$q!*&EF F F"	adQh	A  !#'+AqD1Ha'8$q!*&EF F F #DAqM41a=#A1auUVWX	aAd	#T!Q$%?@A A A FGr   c                     t         dz  t        dz  z
  t         t        z
  }} t         t        z   d}}| |||fD cg c]  }t        |t         t               c}\  }}}}|j                  |      ||fk(  sJ |j	                  |      |k(  sJ |j                  |      |k(  sJ |j                  |      |k(  sJ t        | |      ||fk(  sJ t	        | |      |k(  sJ t        | |      |k(  sJ t        | |      |k(  sJ t        | |t         t              ||fk(  sJ t	        | |t         t              |k(  sJ t        | |t         t              |k(  sJ t        | |t         t              |k(  sJ t        | |t         t        f      ||fk(  sJ t	        | |t         t        f      |k(  sJ t        | |t         t        f      |k(  sJ t        | |t         t        f      |k(  sJ t        ||      ||fk(  sJ t	        ||      |k(  sJ t        ||      |k(  sJ t        ||      |k(  sJ t        | |d      ||fk(  sJ t	        | |d      |k(  sJ t        | |d      |k(  sJ t        | |d      |k(  sJ t        ||d      ||fk(  sJ t	        ||d      |k(  sJ t        ||d      |k(  sJ t        ||d      |k(  sJ t        t        d        t        t        d        t        t        d        t        t        d	        y c c}w )
Nr   r   TpolysFc                      t        dd      S Nr'  r   )r   r   r   r   r   ztest_pdiv.<locals>.<lambda>      d1aj r   c                      t        dd      S r  )r   r   r   r   r   ztest_pdiv.<locals>.<lambda>  r  r   c                      t        dd      S r  )r   r   r   r   r   ztest_pdiv.<locals>.<lambda>  r  r   c                      t        dd      S r  )r   r   r   r   r   ztest_pdiv.<locals>.<lambda>  s    fQl r   )	r   r   r   r   r   r   r   r|   rB   )	r   r   r   r  r   rL  GQRs	            r   	test_pdivr    s   a4!Q$;AqAq5!qA+,aA,8Q41a=8JAq!Q66!9A66!9>>66!9>>88A;!1:!Q1:??1:??!Q<11a1v%%%1aq   1aq   !Q1"""1q!f!Q'''1q!f"""1q!f"""!QA1$$$1:!Q1:??1:??!Q<11D!aV+++1D!Q&&&1D!Q&&&!Qd#q(((1E"q!f,,,1E"a'''1E"a'''!Qe$)))
01
01
01
23Q 9s   Lc                     t         dz  t        dz  z
  t         t        z
  ct         t        z   d}} | |fD cg c]  }t        |t         t               c}\  }}}}|j                  |      ||fk(  sJ |j	                  |      |k(  sJ |j                  |      |k(  sJ |j                  |      |k(  sJ t              | |fk(  sJ t	              |k(  sJ t              | k(  sJ t              | k(  sJ t        t         t              | |fk(  sJ t	        t         t              |k(  sJ t        t         t              | k(  sJ t        t         t              | k(  sJ t        t         t        f      | |fk(  sJ t	        t         t        f      |k(  sJ t        t         t        f      | k(  sJ t        t         t        f      | k(  sJ t        ||      ||fk(  sJ t	        ||      |k(  sJ t        ||      |k(  sJ t        ||      |k(  sJ t        d      ||fk(  sJ t	        d      |k(  sJ t        d      |k(  sJ t        d      |k(  sJ t        ||d      | |fk(  sJ t	        ||d      |k(  sJ t        ||d      | k(  sJ t        ||d      | k(  sJ t        t        d        t        t        d        t        t        d        t        t        d	        t         dz  d
z   dt         z  dz
  cdt         dz  d
z   }}t         dz  d
z   d}
}	t              |	|
fk(  sJ t        d      |	|
fk(  sJ t        d      ||fk(  sJ t        t              ||fk(  sJ t        t              |	|
fk(  sJ t        t        d      |	|
fk(  sJ t        t        d      ||fk(  sJ t        t        d      |	|
fk(  sJ t        t        d      |	|
fk(  sJ t	              |
k(  sJ t	        d      |
k(  sJ t	        d      |k(  sJ t	        t              |k(  sJ t	        t              |
k(  sJ t	        t        d      |
k(  sJ t	        t        d      |k(  sJ t	        t        d      |
k(  sJ t	        t        d      |
k(  sJ t              |	k(  sJ t        d      |	k(  sJ t        d      |k(  sJ t        t              |k(  sJ t        t              |	k(  sJ t        t        d      |	k(  sJ t        t        d      |k(  sJ t        t        d      |	k(  sJ t        t        d      |	k(  sJ t         dz  dt         z  t         dz  c} t              | k(  sJ t        d      | k(  sJ t        t        fd       t        t        fd       t        t              | k(  sJ t        t        d      | k(  sJ t        t        fd       t        t        d      | k(  sJ t        t        d      | k(  sJ t        t         dz        t        t               cj                        \  } } | j                         j                  r|j                         j                  sJ j	                        }|j                         j                  sJ j                        }  | j                         j                  sJ j                        }  | j                         j                  sJ t        t         t        z   t               t        dt         z  t        z   t               cj                        \  } } | j                         j                  r|j                         j                  sJ t        ddt        z  z   t         t               }t        d
t        z
  t         t               }  |j                  | d      t        dt         d      t        ddt        z  z   t         d      fk(  sJ  |j                  | d      t        t#        d
       dz  dt        z  dz  z   t         d      t        dt         d      fk(  sJ dt         dz  z  dt         z  z   dz   dt         z  dz   t        t              dfk(  sJ y c c}w )Nr   r   Tr  Fc                      t        dd      S r  )r   r   r   r   r   ztest_div.<locals>.<lambda>      c!Qi r   c                      t        dd      S r  )r   r   r   r   r   ztest_div.<locals>.<lambda>  r  r   c                      t        dd      S r  )r   r   r   r   r   ztest_div.<locals>.<lambda>  r  r   c                      t        dd      S r  r   r   r   r   r   ztest_div.<locals>.<lambda>  s    eAqk r   r   r'  r   r  r   r   r  c                       t         d      S NFr  r  r\  s   r   r   ztest_div.<locals>.<lambda>  s    a(? r   c                  (    t         t              S r   r   rP   r\  s   r   r   ztest_div.<locals>.<lambda>  s    a2(> r   c                  *    t         t        d      S )NFr  r  r\  s   r   r   ztest_div.<locals>.<lambda>  s    a2E(J r   r   rR   rS   r#  )r   r   r   r   r   r   r   r|   rB   rP   rQ   r@   r/  is_ZZis_Fracrf   rR   rm   )r   r  r   rL  r  r  r  qzrzqqrqr   r   r   s               @@r   test_divr    s   a4!Q$;ADAqq5!qA+,aA,8Q41a=8JAq!Q5581v558q==558q==771:??q!9Aq!9>>q!9>>A;!q!Q?q!f$$$q!Q?aq!Q?aAq!!!!q!aVA&&&q!aV!!!q!aV!!!A1v!###q!9Aq!9>>q!9>>A;!q!4 QF***q!4 A%%%q!4 A%%%AT"a'''q!5!aV+++q!5!Q&&&q!5!Q&&&AU#q(((
/0
/0
/0
12a4!8QqS1WDAq1qBqS1WaBq!9R   q!$B8+++q!% RH,,,q!BB8+++q!BB8+++q!BT*r2h666q!BU+Bx777q!BT*r2h666q!BU+Bx777q!9??q!$2%%%q!% B&&&q!B2%%%q!B2%%%q!BT*b000q!BU+r111q!BT*b000q!BU+r111q!9??q!$2%%%q!% B&&&q!B2%%%q!B2%%%q!BT*b000q!BU+r111q!BT*b000q!BU+r111dAaC1GAq!A;!AD!Q&&&
 ?@
 >?Ab!Q&&&Abt,111
 JKAbt,111Abu-2221:tAwDAq558DAq1<<>ALLN$8$888	aA<<>	aA1<<>	
A1<<>!Q<ac!eQDAq558DAq1<<>!!alln&<&<<< 	QqsUAd#AQqS!D!A155	a6	"DQqS!F$CDE E E155	qteAg!Aoq	0$q!F2KLM M M 	
!Q$AA	!aAq!BAq6)))e 9s   dc                  l    t        t        dt        z        \  } }t        | dz
        dk  sJ |dk(  sJ y )Ng>,p ?g3!	@g+=r   )r   r   r   )r   r  s     r   test_issue_7864r  ;  s<    q"1$%DAqq##$u,,,6M6r   c                     dt         z  t         dz  dz
  }} t         dz  t        dd      d}}}| ||||fD cg c]  }t        |t         d       c}\  }}}}	}
|j                  |      ||
fk(  sJ |j	                  |      ||	|
fk(  sJ |j                  |      |k(  sJ t        | |      ||fk(  sJ t	        | |      |||fk(  sJ t        | |      |k(  sJ t        | |t               ||fk(  sJ t	        | |t               |||fk(  sJ t        | |t               |k(  sJ t        | |t         f      ||fk(  sJ t	        | |t         f      |||fk(  sJ t        | |t         f      |k(  sJ t        ||      ||
fk(  sJ t	        ||      ||	|
fk(  sJ t        ||      |k(  sJ t        | |d	      ||
fk(  sJ t	        | |d	      ||	|
fk(  sJ t        | |d	      |k(  sJ t        ||d
	      ||fk(  sJ t	        ||d
	      |||fk(  sJ t        ||d
	      |k(  sJ t        dd      dk(  sJ t	        dd      dk(  sJ t        dd      dk(  sJ t        t        d        t        t        d        t        t        d        y c c}w )Nr   r      r   r   rQ   r   Tr  Fd   i  )r'  )r  r   r'  r   r   r   c                  @    t        t        dz   dt        z  dz   d      S Nr   r   Fr  )r   r   r   r   r   r   ztest_gcdex.<locals>.<lambda>g  s    
1q5!A#' F r   c                  @    t        t        dz   dt        z  dz   d      S r  )r   r   r   r   r   r   ztest_gcdex.<locals>.<lambda>h  s    a!eQqS1W5 A r   c                  @    t        t        dz   dt        z  dz   d      S r  )r   r   r   r   r   r   ztest_gcdex.<locals>.<lambda>i  s    q1uacAgE B r   )r   rh   r   r   r   r   r|   rI   )r   r   sr   r   r   rL  r  rm   THs              r   
test_gcdexr  A  s   Q31r	qAdHR$a!qA891aAH!d1a-HMAq!Q<<?q!f$$$771:!Q"""88A;!a1v%%%A;1a)###!Q<1aA1a&(((Aq>aAY&&&!Q?aaQD!aV+++AtAq	)))!Q"""a1v%%%A;1a)###!Q<1a$'Aq6111AT"q!Qi///!Qd#q(((a%(QF222AU#1ay000!Qe$)))c4 H,,,d{***!Q<1
;FG
;AB
;BCI Is   Jc                     t        dt        dz  dz  z
  t        dz  dz  z   t        dz  dz  z
        } t        dt        dz  z  dz  dt        dz  z  dz  z   t        dz  dz  z   dz         }| j                  d	      |k(  sJ y )
Nr   r   r'  ro  r  i  =   r   r  )r   r   revertr\  s     r   test_revertr  l  s    QAaZ!Q$r'!AqDH,-AR1WS[1QT6"9$q!tAv-12A88A;!r   c                     t         dz  dt         z  z
  dz   t         dz  dz
  dt         z  dz
  }}} t        |       t        |      t        |      }}}|j                  |      |||gk(  sJ t        | |      | ||gk(  sJ t        | |t               | ||gk(  sJ t        | |t         f      | ||gk(  sJ t        ||      |||gk(  sJ t        | |d      |||gk(  sJ t        ||d      | ||gk(  sJ t        t        d        y )Nr   r   Tr  Fc                      t        dd      S r  )r   r   r   r   r   z$test_subresultants.<locals>.<lambda>  s    mAq&9 r   )r   r   r   r|   rB   r   r   r   rL  r  r  s         r   test_subresultantsr  s  s   dQqSj1nadQh!a!qA1gtAwQ!qA??1!Q***A1a)+++Aq!aAY...At$Aq	111A1a)+++AT*q!Qi777AU+1ay888
9:r   c                     t         dz  dt         z  z
  dz   t         dz  dz
  d}}} t        |       t        |      }}|j                  |      |k(  sJ t        | |      |k(  sJ t        | |t               |k(  sJ t        | |t         f      |k(  sJ t        ||      |k(  sJ t        | |d      |k(  sJ t        ||d      |k(  sJ t        | |d      || |dt         z  dz
  gfk(  sJ t         t        z
  t         t        z
  t        t        z
  }}} t        |       t        |      t        |      }}}|j                  |      |k(  sJ t        | |      |k(  sJ t        | |t               |k(  sJ t        | |t         f      |k(  sJ t        ||      |k(  sJ t        | |d      |k(  sJ t        ||d      |k(  sJ t        t        d        y )	Nr   r   r   Tr  F)
includePRSc                      t        dd      S r  )r   r   r   r   r   z test_resultant.<locals>.<lambda>  s    i1o r   )r   r   r   r   r   r|   rB   r  s         r   test_resultantr    s   dQqSj1nadQh!qA7DGqA;;q>QQ?aQ1"""QA4 A%%%Q?aQ&!+++Q'1,,,Qd+Aq!A#'?/CCCC!eQUAE!qA1gtAwQ!qA;;q>QQ?aQ1"""QA4 A%%%Q?aQ&!+++Q'1,,,
56r   c                  |   t         dz  dt         dz  z  z   dt         z  z   dz
  d}} t        |       }|j                         |k(  sJ t        |       |k(  sJ t        | t               |k(  sJ t        | t         f      |k(  sJ t        |      |k(  sJ t        | d      |k(  sJ t        |d      |k(  sJ t        t         dz  z  t        t         z  z   t
        z   t        dz  d	t        z  t
        z  z
  }} t        |       t        |      }}|j                         |k(  sJ t        |       |k(  sJ t        | t         t        t        t
              |k(  sJ t        | t         t        t        t
        f      |k(  sJ t        |      |k(  sJ t        | d      |k(  sJ t        |d      |k(  sJ t        t        d
        y )Nr   r   r^     ipTr  Fr'  c                      t        d      S Nr'  )r   r   r   r   r   z#test_discriminant.<locals>.<lambda>  s
    l1o r   )r   r   r   r   r   r   r|   rB   r   r   rL  r  s       r   test_discriminantr    s   a4!AqD&=1Q3#VqAQA>>q   ?a1"""A4 A%%%?a&!+++'1,,,QT6AaC<!QTAaCE\qA7DGqA>>q   ?a1aA&!+++Aq!Q<(A---?a&!+++'1,,,
56r   c                     t        t        dz   t        dz   z  t              } t        | j                               ddgk(  sJ | j	                         dk(  sJ t        t        dz  dt        dz  z  z
  dz   t              } | j                  d      }t        | j                  |            g dk(  sJ | j	                  |      dk(  sJ y )Nr   r   r   r'  r   rC  )r   r   r'  )r   r   sorteddispersionset
dispersionshift)fpgps     r   test_dispersionr    s     
q1uq1uoq	!B"""$%!Q///==?a	adQq!tVma	#B	"B"""2&'9444==!!!r   c                     t         dz  dz
  t         dz  dz
  t         dz  dt         z  z
  dz   g} t        |       t         dz
  k(  sJ t        | d      t        t         dz
        k(  sJ t        g       dk(  sJ t        ddg      dk(  sJ t        g d      dk(  sJ t        t         t        dz   z  t         t        z  z
  t         dz  z
  g      dk(  sJ t        g t               }|j                  r|t
        j                  u sJ t        g t         d      }|j                  r|j                  sJ t        d      }t        || g      t        | |g      cxk(  r|k(  sJ  J t        t        d	        y )
Nr   r   r   Tr  r   r'  r  r  *   c                      t        g d      S NTr  )r   r   r   r   r   ztest_gcd_list.<locals>.<lambda>      hr&> r   )r   r   r   r   	is_Numberrm   r   is_Polyr  rs   r|   rB   )rL  r   r   s      r   test_gcd_listr    sT   	
A1a4!8QTAaCZ!^,AA;!a%AT"d1q5k111B<1QFq   I!###QBZ!A#%",-.!333
2q/C==SAFF]**
2q
%C;;3;;&&QAQG1"a 16Q66666
>?r   c                  ,   t         dz  dz
  t         dz  dz
  t         dz  dt         z  z
  dz   g} t        |       t         dz  t         dz  z
  dt         dz  z  z
  t         dz  z
  t         z   dz   k(  sJ t        | d      t        t         dz  t         dz  z
  dt         dz  z  z
  t         dz  z
  t         z   dz         k(  sJ t        g       dk(  sJ t        ddg      dk(  sJ t        g d      d	k(  sJ t        t         t        d
z   z  t         t        z  z
  t         d
z  z
  g      dk(  sJ t        g t               }|j                  r|t
        j                  u sJ t        g t         d      }|j                  r|j                  sJ t        t        d        y )Nr   r   r   r   r'  Tr  r  ro  r  r   c                      t        g d      S r  )r    r   r   r   r   ztest_lcm_list.<locals>.<lambda>  r  r   )r   r    r   r   r  rm   Oner  r  r|   rB   )rL  r   s     r   test_lcm_listr    sm   	
A1a4!8QTAaCZ!^,AA;!Q$A+!Q$.A59A====AT"d1a4!Q$;1a4+?!Q$+F+JQ+N&OOOOB<1QFq   I"$$$QBZ!A#%",-.!333
2q/C==SAEE\))
2q
%C;;3::%%
>?r   c                     t         dz  dz
  t         dz  dz
  }} t         dz  t         z   dz   t         dz   }}t         dz
  t         dz  t         dz  z   t         z
  dz
  }}| |||||fD cg c]  }t        |       c}\  }}}	}
}}|j                  |      ||	|
fk(  sJ |j                  |      |k(  sJ |j	                  |      |k(  sJ t        | |      |||fk(  sJ t        | |      |k(  sJ t	        | |      |k(  sJ t        | |t               |||fk(  sJ t        | |t               |k(  sJ t	        | |t               |k(  sJ t        | |t         f      |||fk(  sJ t        | |t         f      |k(  sJ t	        | |t         f      |k(  sJ t        ||      ||	|
fk(  sJ t        ||      |k(  sJ t	        ||      |k(  sJ t        | |d      ||	|
fk(  sJ t        | |d      |k(  sJ t	        | |d      |k(  sJ t        ||d      |||fk(  sJ t        ||d      |k(  sJ t	        ||d      |k(  sJ dt         dz  z  dz
  dt         z  dz
  }} |dt         z  dz   d}}}t        | |      |||fk(  sJ t        | |      |k(  sJ t	        | |      | k(  sJ dt         dz  z  dz
  dt         z  dz
  }} |dt         z  dz   d}}}t        | |      |||fk(  sJ t        | |      |k(  sJ t	        | |      | k(  sJ t        d	d
      dk(  sJ t        d	d
      dk(  sJ t	        d	d
      dk(  sJ t         dz  dt         z  z
  dz
  t         dz  dt         dz  z  z
  t         z   dz
  }} t         dz  dt         dz  z  z
  dt         dz  z  z
  dt         z  z
  dz
  }t         dz
  t         dz   t         dz  dz   }}}t        | |d      |||fk(  sJ t        | |d      |k(  sJ t	        | |d      |k(  sJ t         dz  d	t         z  z   dz   t         dz  dt         dz  z  z   t         z   dz   }} t         dz  d	t         dz  z  z   d	t         dz  z  z   d	t         z  z   dz   }t         dz   t         dz   t         dz  dz   }}}t        | |dd      |||fk(  sJ t        | |dd      |k(  sJ t	        | |dd      |k(  sJ t        d      t        d       }}t        ||      t        ||      cxk(  rt        d      k(  sJ  J t        d      t        d       }}t        ||      t        ||      cxk(  rt        d      k(  sJ  J t        t        t         dz
  t               t        t        t         z  t                     t        dt         t              k(  sJ t        t        d        t        t        d        t        dt               } t        dt               }t	        | |      t        dt               k(  sJ t        dt               } t        ddgt               }| |fD ]F  }t	        |d      dk(  sJ t	        d|      dk(  sJ t	        ||       dk(  sJ t	        | |      dk(  rFJ  dt         dz  z  t         z   dz   } t        | t              }t        | t              }|j                  |      |k(  sJ |j	                  |      |k(  sJ |j                  |      |j                         k(  sJ |j	                  |      |j                         k(  sJ t        | |       | k(  sJ t	        | |       | k(  sJ t        | | t              t        |       k(  sJ t	        | | t              t        |       k(  sJ y c c}w )Nr   r   r   r'  Tr  Fr   r  r  )r   r'  r   ro  r  r   r   r)  r  r   c                       t        t              S r   )r   r   r   r   r   r   ztest_gcd.<locals>.<lambda>>  
    c!f r   c                       t        t              S r   )r   r   r   r   r   r   ztest_gcd.<locals>.<lambda>?  r  r   r   r   )r   r   r   r   r   rs   rf   rR   r|   r  rP   rQ   r"   )r   r   r  r   r   r  r   rL  r  rm   r  r  r  lr   r   ipfzpfqs                      r   test_gcdr!    s|   a4!8QTAXqAa4!8a<QqAq5!Q$A+/A%qA+,aAq!*<>Qa>Aq!Q1;;q>aAY&&&558q==558q==Q?q!Qi'''q!9>>q!9>>Q1!Q***q!Q<1q!Q<1QA4 Q1I---q!aT?aq!aT?aQ?q!Qi'''q!9>>q!9>>Q&1a)333q!4 A%%%q!4 A%%%Q'Aq!9444q!5!Q&&&q!5!Q&&&q!t8c>3q53;qAQc!qAQ?q!Qi'''q!9>>q!9>>q!t8c>3q53;qAQc!qAQ?q!Qi'''q!9>>q!9>>Q?i'''q!9>>q!9??a4!A#:>1a4!AqD&=1,q0qA	1qAv!Q$1$q(A!eQUAqD1H!qAQ2&1a)333q!R A%%%q!R A%%%a4!A#:>1a4!AqD&=1,q0qA	1qAv!Q$1$q(A!eQUAqD1H!qAQ27Aq!9DDDq!R51Q666q!R51Q6667T!WHqAq!9Aq	,T!W,,,,,8d2hYqAq!9Aq	,T!W,,,,,tAE1~tAaC|,Q$0GGGG
9n%
9n%RAQ
Aq!9Q
"""Q
AaVQAV 1ayA~~1ayA~~1ayA~~1ayA~~	 	
!Q$
QA
q
C
q
C773<3773<3773<399;&&&773<399;&&&q!9>>q!9>>q!B58+++q!B58+++E ?s   %])c            	      b   t        t        dd      t              sJ t        t        dt        z  d      t              sJ t        dd      dk(  sJ t        dt        z  d      dk(  sJ t        t        t	        dd      t	        dd            t              sJ t        t        t	        dd      t        z  t	        dd            t              sJ t        t	        dd      t	        dd            t	        dd      k(  sJ t        t	        dd      t        z  t	        dd            dk(  sJ t        t        dd      t
              sJ t        t        dt        z  d      t
              sJ t        dd      dk(  sJ t        dt        z  d      dk(  sJ t        t        ddd	
      d      dk(  sJ y )Nr   r^  r   r'  r   r  g      "@r   Fr  )r   r   rg   r   rh   re   rd   r   r   r   test_gcd_numbers_vs_polysr#  [  sp   c!Qi)))c!A#qk7+++q!9>>qsA;!c(1a.(1a.98DDDc(1a.*HQN;XFFFx1~x1~.(1a.@@@x1~a!Q0A555c#smU+++c#a%ou---sC=Cs1uc?c!!! s1a%(!,111r   c            
      	   t        d      dk(  sJ t        dt              dk(  sJ t        t        dz
        t        dz
  k(  sJ t        t         dz
        t         dz
  k(  sJ t        dt        z  dz         dt        z  dz   k(  sJ t        dt        z  dz         t        ddt        z  dz   d      k(  sJ t        t        dz  t        z  t        t        dz  z  z         t        t        z  t        dz  t        dz  z   z  k(  sJ t        dt        dz  z  t        z  dt        z  t        dz  z  z         dt        z  t        z  t        dz  t        dz  z   z  k(  sJ t        t        dz  t        z  dz  t        t        dz  z  dz  z         t        t        z  dz  t        dz  t        dz  z   z  k(  sJ t        t        dz  t        z  dt        z  t        dz  z  z         t        t        z  t        dz  dt        dz  z  z   z  k(  sJ t        dt        dz  z  t        z  dt        z  t        dz  z  z         dt        z  t        z  t        dz  dt        dz  z  z   z  k(  sJ t        dt        dz  z  t        z  dz  dt        z  t        dz  z  dz  z         t        t        z  t	        dd	      z  dt        dz  z  dt        dz  z  z   z  k(  sJ t        d
t        dz  z  t        z  dt        z  t        dz  z  z         t        t        z  d
t        dz  z  dt        dz  z  z   z  k(  sJ t        t        d
t        z  dz         d
t        z  dz         sJ t        ddt        z  z   t        t        t        z  z   z  d      dt        z  dz   t        t        z  t        z   z  k(  sJ t        ddt        z  z   t        t        t        ddt        z  z         z  z   z  dd      dt        z  t        dz   z  t        t        dt        dz   d            dz   z  k(  sJ t        t        t        t        t        z  z         d      t        t        t        dz   z        k(  sJ t        dt        z  dt        z  dt        z  t        z  z         } t        |       t        dt        z  dt        z  t        dz   z        k(  sJ t        | d      t        dt        z  dt        z  t        dz   z        k(  sJ t        t        d        y )Nr   r   r   r  r'  Fr  r      r  gffffff@rb   T)rb   deepr'  c                  &    t        t        dk        S r  )r   r   r   r   r   r   z test_terms_gcd.<locals>.<lambda>  s    iA. r   )r   r   rd   r   rh   r]   ru   rl   r   r|   r  r   s    r   test_terms_gcdr+  r  sK   Q<1Q?aQUq1u$$$aR!VQ&&&QqS1W1q(((QqS1WQ!a%!@@@@QT!Va1f_%1adQTk)::::Qq!tVAX!AqD()QqSUAqD1a4K-@@@@QT!VAX!Q$q()QqSUAqD1a4K-@@@@QT!Vac!Q$h&'1Q31qAv+>>>>Qq!tVAX!AqD()QqSUAqD1QT6M-BBBBQq!tVAXaZ!A#ad(1*,-1Xa_1Da1fqQRTUQUvo1VVVVSAXaZ#a%1*,-1c!Q$hQT6I1JJJJIc!eai(#a%!)444a!A#gAaC(7	
1q1Q37  a!A#gAc!ac'lN 23EM	!QUSQA67!;<= = =SQqS\-Aq1uI   
AaC1qs1u	BR=BqsAaCQK0000Rd#r!A#qsAE{';;;;
9./r   c                     t         dz  dt         dz  z  z   dt         dz  z  z   dt         dz  z  z   dt         z  z   dz   t         dz  t         dz  z
  t         dz  z   t         z
  }} t        |       t        |      }}|j                  d      |k(  sJ t        | d      |k(  sJ t        | dt               |k(  sJ t        | dt         f      |k(  sJ t        |d      |k(  sJ t        | dd      |k(  sJ t        |dd      |k(  sJ dt         dz  z  dt         dz  z  z   dt         dz  z  z   dt         dz  z  z   dt         z  z   d	z   t         dz   t         dz  z   t         z
  d	z   }} t        |       t        |      }}|j                  d      |k(  sJ t        | d      |k(  sJ t        | dt               |k(  sJ t        | dt         f      |k(  sJ t        |d      |k(  sJ t        | dd      |k(  sJ t        |dd      |k(  sJ t        t         dz  dt         z  z   dz   d
      } | j                  d      t        t         dz  d	z   d
      k(  sJ y )Nr   r   r'  r   r  Tr  Fr   r   )r   r   r!   r  s       r   
test_truncr-    sO   a4!AqD&=1QT6!AadF*QqS014adQTkAqD6H16LqA7DGqA771:??A;!Aq>QAt!!!A;!AT"a'''AU#q(((QT6AadF?Qq!tV#a1f,qs2Q6A1q8H18LqA7DGqA771:??A;!Aq>QAt!!!A;!AT"a'''AU#q(((QTAaCZ!^Q'A771:adQh2222r   c                  0   dt         z  dz
  t         t        j                  z
  }} t        | d      t        |      }}|j	                         |k(  sJ t	        |       |k(  sJ t	        | t               |k(  sJ t	        | t         f      |k(  sJ t	        |      |k(  sJ t	        | d      |k(  sJ t	        |d      |k(  sJ t        t        d        t	        dt         dz  z  d	t         z  z   d
z   d      t         dz  dt         z  z   dz   k(  sJ t        t        d        t	        dt         dz  z  dt         z  z   dz         dt         dz  z  dt         z  z   dz   k(  sJ t	        dt         dz  z  dt         z  z   d
z   d      t         dz  t         z
  dz   k(  sJ y )Nr   r   rQ   r   Tr  Fc                      t        d      S r  )r"   r   r   r   r   ztest_monic.<locals>.<lambda>  
    eAh r   r  r'  r  r   c                  D    t        dt        z  dt        z  z   dz   d      S )Nr   r  r   Fr  )r"   r   r   r   r   r   ztest_monic.<locals>.<lambda>  s    acAaCi!m%(H r   r  g      @g      @r   r  r   r   )r   rm   r  r   r"   r|   rB   r@   r  s       r   
test_monicr2    s|   Q37AJqA$aqA779>>8q==A;!QD>Q8q==$1$$$% A%%%
./1a4!A#!.!Q$1*q.@@@
 HIQTCE!C'(C1Hs1u,<s,BBBB1a4!A#!1-AA===r   c                     dt         z  dz   t        dt         z  dz         }} |j                         dk(  sJ t        |       dk(  sJ t        t        d        t        dt         z  d      } | j                         dk(  sJ y )Nr'  r   c                      t        d      S r  )r#   r   r   r   r   ztest_content.<locals>.<lambda>  s
    gaj r   r   r   r   )r   r   r#   r|   rB   )r   rL  s     r   test_contentr5    ss    Q37D1qMqA99;!1:??
01QqS!A99;!r   c                     dt         z  dz   dt         z  dz   }} t        |       t        |      }}|j                         d|fk(  sJ t        |       d|fk(  sJ t        | t               d|fk(  sJ t        | t         f      d|fk(  sJ t        |      d|fk(  sJ t        | d      d|fk(  sJ t        |d      d|fk(  sJ t        t        d        t        dt         z  d	      } t        d
t         z  t
              }| j                         d| fk(  sJ |j                         d|fk(  sJ t        t        d            t        d      k(  sJ y )Nr'  r   r   Tr  Fc                      t        d      S r  )r$   r   r   r   r   z test_primitive.<locals>.<lambda>  
    il r   r   r   r  r   r   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r   r   r$   r|   rB   rT   rm   r  s       r   test_primitiver9    sW   Q37AaC!GqA7DGqA;;=QF"""Q<Aq6!!!Q?q!f$$$Q!Q'''Q<Aq6!!!Qd#1v---Qe$A...
23QqS!ASU2A;;=QF""";;=S!H$$$Q*+,	
"#$ $ $r   c                     t         dz  dt         dz  z  z   dt         dz  z  z   dt         dz  z  z   dt         d	z  z  z   d
t         dz  z  z
  dt         z  z
  dz   } t         d	z  d
t         z  z
  dz   }t         dz  dt         z  z   }t        t        | ||f      \  }}}|j                  |      |k(  sJ t        ||      | k(  sJ t        ||t               | k(  sJ t        ||t         f      | k(  sJ t        ||      |k(  sJ t        ||d      |k(  sJ t        ||d      | k(  sJ |j	                         ||gk(  sJ t	        |       ||gk(  sJ t	        | t               ||gk(  sJ t	        | t         f      ||gk(  sJ t	        |      ||gk(  sJ t	        | d      ||gk(  sJ t	        |d      ||gk(  sJ t        t        d        t        t        d        t        t         d
z  t        d
z  z
  t         t        z
  t         t              t         d
z  d
t         z  t        z  z
  k(  sJ t        t         d
z  t        d
z  z
  t         t        z
  t        t               t        d
z   d
t         z  t        z  z   k(  sJ y )Nr  r  r#     r  i  r  q  r'  r   r   r^  r   Tr  Fc                      t        dd      S r  )r%   r   r   r   r   ztest_compose.<locals>.<lambda>	  s    gam r   c                      t        d      S r  )r&   r   r   r   r   ztest_compose.<locals>.<lambda>	  r8  r   )r   mapr   r%   r&   r|   rB   r   r  s         r   test_composer@    si   	21b53q!t8#c!Q$h.QT9AadFBRTIAMA	1qs
QA	1qs
A$Aq	"GAq!99Q<11a=A1aq   1a!!###1a=A1at$)))1au%***;;=QF"""Q<Aq6!!!Q?q!f$$$Q!Q'''Q<Aq6!!!Qd#1v---Qe$A...
34
231a4!Q$;Aq!,1qs1u<<<1a4!Q$;Aq!,A!A===r   c                      t        t        dz  dt        z  z
  dz   t              j                  d      t        t        dz  dt        z  z   dz   t              k(  sJ y r  )r   r   r  r   r   r   
test_shiftrB  		  sI    1qs
Q"((+tAqD1Q3JNA/FFFFr   c                      t        t        t        z  t        t        g      j                  ddg      t        t        dz   t        dz   z  t        t        g      k(  sJ y rx  )r   r   r   
shift_listr   r   r   test_shift_listrE  	  sE    !aU&&!u-qsQqSkAa51IIIIr   c            
      x	   t        t        dz  dt        z  z
  dz   t              j                  t        t        dz         t        t        dz
              t        dt              cxk(  rUt        t        dz
  dz  t        dz  dt        z  z
  dz   j	                  t        t        dz   t        dz
  z        z        k(  sJ  J t        t        dz  t        dz  z
  dz   t              j                  t        t        dz         t        t        dz
              t        dt        dz  z  dz  t        dd      z   t              cxk(  rUt        t        dz
  dz  t        dz  t        dz  z
  dz   j	                  t        t        dz   t        dz
  z        z        k(  sJ  J t        t        dz  dt        z  z
  dz   t              j                  t        t        t        j                  z         t        t        dz
              t        t        dd      t              cxk(  rct        t        dz
  dz  t        dz  dt        z  z
  dz   j	                  t        t        t        j                  z   t        dz
  z        z        k(  sJ  J t        t        dz  dt        z  z
  dz   t              j                  t        t        dz         t        t        t        j                  z
              t        t        dd      t              cxk(  rqt        t        t        j                  z
  dz  t        dz  dt        z  z
  dz   j	                  t        t        dz   t        t        j                  z
  z        z        k(  sJ  J t        t        dz  dt        z  z
  dz   t              j                  t        t        dz         t        t        t        j                  z
              t        t        dd      t        d	      cxk(  rqt        t        t        j                  z
  dz  t        dz  dt        z  z
  dz   j	                  t        t        dz   t        t        j                  z
  z        z        k(  sJ  J t        t        d
        t        t        d        t        t        d        t        t        d        t        t        d        y )Nr   r   r'  r   r   r^  r   rT   r   c                      t        t        t        z        j                  t        t        dz         t        t        dz
              S r   )r   r   r   	transformr   r   r   r   z test_transform.<locals>.<lambda>(	  s+    tAaCy224A;QUL r   c                      t        t              j                  t        t        dz         t        t        dz
              S r   r   r   rH  r   r   r   r   r   z test_transform.<locals>.<lambda>)	  '    tAw00a!ed1q5kJ r   c                      t        t              j                  t        t        dz         t        t        dz
              S r   rJ  r   r   r   r   z test_transform.<locals>.<lambda>*	  rK  r   c                      t        t              j                  t        t        t        z  dz         t        t        dz
              S r   rJ  r   r   r   r   z test_transform.<locals>.<lambda>+	  s+    tAw00acAgQUL r   c                      t        t              j                  t        t        dz         t        t        t        z  dz
              S r   rJ  r   r   r   r   z test_transform.<locals>.<lambda>,	  s+    tAw00a!ed1Q37mL r   )
r   r   rH  r8   r  rh   rm   r  r|   rx  r   r   r   test_transformrO  	  s   1qs
Q",,T!a%[$q1u+FQ
EAz1a4!A#:>//AEAE?CCDE E E E E 1qs
Q",,T!a%[$q1u+FQq!tVAXA&*EAz1a4!A#:>//AEAE?CCDE E E E E 1qs
Q",,T!aff*-=tAE{KXa^QJAz1a4!A#:>//AJQ3GHHIJ J J J J 1qs
Q",,T!a%[$q166z:JKXa^QOAFF
Q1qs
Q44QQQVV8LMMNO O O O O
 1qs
Q",,T!c']DQVV<LMXa^Qt,QAFF
Q1qs
Q44QS1qvv:8NOOPQ Q Q Q Q :LM
:JK
:JK
:LM
:LMr   c                  z   t         t        t         d      c} dt        dt         d      }}| j                         | |gk(  sJ t              |gk(  sJ t        t               |gk(  sJ t        t         f      |gk(  sJ t        |       | |gk(  sJ t        d      | |gk(  sJ t        | d      |gk(  sJ t        t        d        t        t
        fd       t        t        d	      d
t        dz  z  z  t         dz  z  t        d      dt        dz  z  z  t         dz  z  z
  t        d      d
t        dz  z  z  t         dz  z  z   t        d      dt        dz  z  z  t         dz  z  z
  t        dd      t         z  z   t        dd      z
  t         d      t              t        t         dz  dt         dz  z  z
  t        dz  dz  t         z  z   dt        dz  z  dz  z
  t         d      t        dt         dz  z  dt         z  z
  t        dz  dz  z   t         d      t        t        dd      t        dz  dz  z
  t         z  dt        dz  z  dz  z   t         d      t        dt        dz  z  d t        dz  z  z
  dt        d!z  z  z
  d"d#t        dz  z  z
  d$t        dz  z  z   z  t         d      gk(  sJ y )%NrQ   r   r   Tr  Fc                      t        d      S r  r'   r   r   r   r   ztest_sturm.<locals>.<lambda>;	  r0  r   c                      t         d      S r  rR  r   s   r   r   ztest_sturm.<locals>.<lambda><	  s    ae 4 r   i   i	=  r  r   i   r<  r'  r  r      r   i$  zZZ(pi)r  @   r'  r     i N  r^  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r'   r|   rB   rI   rm   rj   rh   )rL  r   r  r   s      @r   
test_sturmrY  /	  s   d1T"DAqd1a%qA779A81vA;1a&   QD>aV###81v$Aq6)))% QF***
./
;45QtWeBEk"1a4'tWc"a%i A%&rUE"a%K A%& sVSQY1$% a!	"
 a
  !	3A 8	adSAXoAb
*RAXb[8!H	M	a1fs1unr1uRx'8	<	xq!BE"H,a/"RU(2+=q	R	~b!e#hr1un4qRx?.S\]_ab]bSbBbehikmninenBnoqr  |D  
E	FF F Fr   c                  D    t         dz  dt         dz  z  z   t         dz  z
  dt         dz  z  z
   t               j                         t        t               dft        t         dz         dfgk(  sJ t               t         dft         dz   dfgk(  sJ t        t         fd       t         t         dz
  dz  z  t         dz
  dz  z  t         dz
  dz  z  t         dz
  z   t               j                         t        t         dz  dt         z  z
  dz         dft        t         dz  dt         z  z
  dz         dft        t               dfgk(  sJ t               t         dz  dt         z  z
  dz   dft         dz  dt         z  z
  dz   dft         dfgk(  sJ t        t         fd       y )Nr   r   r'  r   r   c                      t               S r   r)   r   s   r   r   ztest_gff.<locals>.<lambda>R	      A r   c                      t               S r   r\  r   s   r   r   ztest_gff.<locals>.<lambda>Z	  r]  r   )r   r   r(   r|   r+  r   s   @r   test_gffr_  L	  s   	1qAv1qAv%A747A,a!ea0@!AAAAA;Aq6AE1:....
/	1q51*a!eaZQ
*AE2A7QTAaCZ!^a#!#'1qs
Q#7";d1gq\"K K K KA;AqD1Q3JNA.A!a0CaVLLLL
/r   c                  4   t        d      t        d      }} t        | t        z  |t        z  z   t        t        | |f      }|j	                         t        dt        dz  z  dt        dz  z  t        dz  z  z
  dt        dz  z  z   t        t        d      k(  sJ y )	Nr   r   r&  r'  r  r^  rQ   r   )rs   r   r   r   norm)r   r   r   s      r   	test_normrb  ]	  s|    7DGqAQqS1Q3Y1A/A668tAadFR1WQT\1AadF:AqNNNNr   c            	         t        t        dz  dz
  t        d            dgt        dz  dt        d      z  t        z  z
  dz   t        dz  dt        dz  z  z
  dz   fk(  sJ t        t        dz  dz
  t        d            dgt        dz  dt        d      z  t        z  z
  dz
  t        dz  dt        dz  z  z
  dz   fk(  sJ t        t        dz  dz
  t        d            j                         dgt        t        dz  dt        d      z  t        z  z
  dz   t        t        d            t        t        dz  dt        dz  z  z
  dz   t        d      fk(  sJ t        t        dz  dz
  t        d            j                         dgt        t        dz  dt        d      z  t        z  z
  dz
  t        t        d            t        t        dz  dt        dz  z  z
  dz   t        d      fk(  sJ y )	Nr   r   r&  r   r'  r#  rQ   r   )r*   r   rs   r   r   r   r   test_sqf_normrd  c	  s   AqD1HQ0
adQtAwYq[ 1$adR1Wnq&89: : :AqD1HQ0
adQtAwYq[ 1$adR1Wnq&89: : : 1qDG,557
d1a4!DG)A+%)1Q@1a4"QT'>A%q6	88 8 8 1qDG,557
d1a4!DG)A+%)1Q@1a4"QT'>A%q6	88 8 8r   c            	      .   t         dz  t         dz  z
  t         dz  z
  dz   } t         dz  dt         dz  z  z   dt         z  z   dz   }t         dz
  }t         dz  t         dz  z   t         z
  dz
  }t        t        | |||f      \  }}}}|j                         |k(  sJ t        |       |k(  sJ t        | t               |k(  sJ t        | t         f      |k(  sJ t        |      |k(  sJ t        | d      |k(  sJ t        |d      |k(  sJ |j	                         d|df|dfgfk(  sJ t	        |       d|df|dfgfk(  sJ t	        | t               d|df|dfgfk(  sJ t	        | t         f      d|df|dfgfk(  sJ t	        |      d|df|dfgfk(  sJ t	        | d      d|df|dfgfk(  sJ t	        |d      d|df|dfgfk(  sJ |j                         |df|dfgk(  sJ t        t        d	        t        d      dk(  sJ t	        d      dg fk(  sJ t        dt         dz  z  dz   d
z        dt         dz  dz   d
z  z  k(  sJ t        |       ||dz  z  k(  sJ t        | t               ||dz  z  k(  sJ t        | t         f      ||dz  z  k(  sJ t         dz  t        dz  z   }t        | |z        ||dz  z  |z  k(  sJ t        | |z  t               ||dz  z  |z  k(  sJ t        | |z  t         f      ||dz  z  |z  k(  sJ t        t         dz
        t         dz
  k(  sJ t        t          dz
        t          dz
  k(  sJ t        t         dz
        t         dz
  k(  sJ t        dt         z  dz
        t        ddt         z  dz
  d      k(  sJ t        dt         z  dz
  dt         z  dz
  z        t        dd      dt         z  dz
  t         dz
  z  z  k(  sJ t        t        t         dz  dt         z  z
  dz               t         dz
  dz  k(  sJ dt         z   t         dt         z   z  z
  t         dz  z   } t        |       dk(  sJ t         dz  dt         z  z   dz   dz  } t        |       t         dz   dz  k(  sJ t	        |       dt         dz   dfgfk(  sJ t        t        t        dz
  dz  t        dz   z  t         dz   z              t        dz
  dz  t        t        dz   t         dz   z        z  k(  sJ t        t        t        dz
  dz  t        dz   z  t        dz   z              t        dz
  dz  t        t        dz   t        dz   z        z  k(  sJ t        t        t        t        z
  dz  t        t        z   z  t         dz   z              t        t        z
  dz  t        t        t        z   t         dz   z        z  k(  sJ t        t        t        t        z
  dz  t        t        z   z  t        dz   z              t        t        z
  dz  t        t        t        z   t        dz   z        z  k(  sJ t         dz
  dz  t         dz
  z  t         t        z   dz  z  t        dz
  dz  z  t        dz
  z  }t        |      j	                         dt        t         t        z  t         z
  t        z
  dz         dft        t         dz  t        z  dt         dz  z  z
  t         t        dz  z  z   dt         z  t        z  z
  dt         z  z   dt        dz  z  z
  dt        z  z         dfgfk(  sJ y )Nr   r   r   r   r'  Tr  Fc                      t        d      S r  )r+   r   r   r   r   ztest_sqf.<locals>.<lambda>	  s
    hqk r   r   rT  r  r#  r  l    H/P l    _ % )r   r?  r   r+   r,   sqf_list_includer|   rB   r-   r   rd   rh   rb   r   rf   )	r   r   r   r   rL  r  r  Pr   s	            r   test_sqfri  r	  s-   	1q!tadQA	1qAv!aA	AA	1q!ta!ATAq!Q<(JAq!Q::<1A;!Aq>QAt!!!A;!AT"a'''AU#q(((::<AAA/0000A;11v1v.////Aq>a1a&1a&!12222AtaVaV$4 5555A;11v1v.////AT"qAq6Aq6*:&;;;;AU#QFQF+;'<<<<QFQF#3333
12q6Q;;A;1b'!!!!Q$
Q31q1}#4444q6Qq!tVq!9!Q$q1$<1QT6!!!	1q!tAqs8!Q$z!!!qsA;1QT61*$$$qsQD>a1faZ'''q1u:QrAv;1"q&   q1u:QqsRx=C1Q37U;;;;!b1Q37#$A1q1q58I(JJJJtAqD1Q3JN#$Q
222	A1q5	AqD Aq6Q;;	
A!a+%Aq6a!ek))))A;1A{345555 vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / / 
Q
AEAEA:%q1uqj0!a%8A7!	acAgkAo	"	ad1fqAvo!Q$&1Q.14qAv=!C	DaH& "   r   c                  F2   t         dz  t         dz  z
  t         dz  z
  dz   t         dz   } t         dz
  }t         dz  t         z   dz   }t        t        | ||f      \  }}}}|j                         d|df|df|dfgfk(  sJ t              d| df|df|dfgfk(  sJ t        t               d| df|df|dfgfk(  sJ t        t         f      d| df|df|dfgfk(  sJ t        |      d|df|df|dfgfk(  sJ t        d      d|df|df|dfgfk(  sJ t        |d      d| df|df|dfgfk(  sJ |j	                         |df|df|dfgk(  sJ t        d      dg fk(  sJ t        d      dg fk(  sJ t        t        d      t               t        d      g fk(  sJ t        d	t         z  t               dd	t         fgfk(  sJ t        dt         z  t        z  t               ddt        ft         t        fgfk(  sJ t        t        t         t        z        t               dt         t        z  t        j                  fgfk(  sJ t        d      dk(  rt        d      j                  sJ t        dt         z        dt         dfgfk(  sJ t        dt         dz  z        dt         dfgfk(  sJ t        dt         z        dt         z  k(  sJ t        dt         dz  z        dt         dz  z  k(  sJ t        dt         dz  z  dz   d
z        dt         dz  dz   d
z  z  k(  sJ t              | |dz  z  |z  k(  sJ t        t               | |dz  z  |z  k(  sJ t        t         f      | |dz  z  |z  k(  sJ t         dz  t        dz  z
  t         t        z
  t         t        z   t         dz  dz   f\  }}}	}
t        |z        | |dz  z  |z  ||	z  z  k(  sJ t        |z  t               | |dz  z  |z  ||	z  z  k(  sJ t        |z  t         f      | |dz  z  |z  ||	z  z  k(  sJ t        dd      }t        dd      }t        dd      }
t        t        t         t        z              j                  du sJ t        t        dt         dz  z  dz
              t        d      t        t         dz
  t         dz   z        z  k(  sJ t        t        dt         dz  z  dz               t        d      t        t         dz  dz         z  k(  sJ t        t        t         dz  z  t        z
  |z        t        |z  t         dz
  |z  z  t         dz   |z  z  k(  sJ t        t        t         dz  z  t        z   |z        t        |z  t         dz  dz   |z  z  k(  sJ t        t        t         dz  z  t        z
  t        z        t        t         dz
  z  t         dz   z  t        z  k(  sJ t        t        t         dz  z  t        z   t        z        t        t         dz  dz   z  t        z  k(  sJ t        t        |
dz  dz   |dz   z  |dz
  z  |dz
  dz  z              t        |dz
  dz  |dz
  z        t        |dz         z  t        |
dz  dz         z  }t              |k(  sJ t        |      |k(  sJ t         dz
  dz  |
dz  dz   z  }t        t        |            t              t        |      k(  sJ t        t        d      t         z  dz   t         t               j                         ddfgfk(  sJ t         dz  dz   t              k(  sJ t        t"              t         dz  t"        z
  t         dz  t"        z   z  k(  sJ t        d      t         dz  t"        z
  t         dz  t"        z   z  k(  sJ t        t        d            t         dz  t        d      t         z  z   dz   t         dz  t        d      t         z  z
  dz   z  k(  sJ t        t         dz  dt"        z  t         z  z   dz
        t         dt"        z  z   dz  k(  sJ t         dz  dt"        z  t         z  z   dz
  t              k(  sJ dt         dz  z  t         ddt"        z  z   z  z   dz
  dt"        z  z   t"        t         ddt"        z  z
  z  dz   dt"        z  z   dz  z  }dt         t        d      dz  z   dt"        z  dz  z   dz  z  }t              |k(  sJ t        t$              |k(  sJ t        t&              |k(  sJ t         dz  dt        d      z  t         z  z   dz   t        t        d            t         t        d      z   dz  k(  sJ t        dz  t        d            t         t        d      z   dz  k(  sJ t        t         dz  dt        dz  z  z
  t        d            t         t        d      t        z  z   t         t        d      t        z  z
  z  k(  sJ t        dt         dz  z  dt        dz  z  z
  t        d            dt         t        d      t        z  z   t         t        d      t        z  z
  z  z  k(  sJ t        t         dz
        t         dz
  k(  sJ t        t          dz
        t          dz
  k(  sJ t        t         dz
        t         dz
  k(  sJ t        dt         z  d z
        t)        ddt         z  dz
  d!      k(  sJ t        t         d"z  t         z   dz   d#d$      t         dz  t         z   dz   t         d%z  t         d&z  z
  t         dz  z   t         dz  z
  t         dz  z   t         dz  z
  dz   z  k(  sJ t        t         d"z  t         z   dz   d#d$      t         dz  t         z   dz   t         d%z  d't         d&z  z  z   t         dz  z   d't         dz  z  z   t         dz  z   d't         dz  z  z   dz   z  k(  sJ t         t*        z  t         t        t               z  t*        z  z   t        t*        dz  dt*        z  z   dz   z  t        t        t               z  t*        dz  dt*        z  z   dz   z  z   }t              t         t        t               dz   z  t*        z  k(  sJ t        |      t        t        t               dz   z  t*        dz   dz  z  k(  sJ t        t-        t         dz  dt         z  z   dz   t         dz  dz               t-        t         dz   dz  t         dz   t         dz  t         z
  dz   z        k(  sJ t         dz  dz
  t         dz  dt         z  z   dz   z  t              t         dz   t         dz
  z  t         dz   dz  z  k(  sJ t        t               t         dz   t         dz
  z  t         dz   dz  z  k(  sJ dt         z   t         dt         z   z  z
  t         dz  z   t              dk(  sJ t        t               dk(  sJ t        dt         dz  dt         z  z   dt         z  z   z  dz
        dt         z
  dt         dz  z  z   t         dz  z   ddt         dz  z  z   t         dz  z   z   k(  sJ t        d(      k(  sJ t/        t0        fd)       t/        t2        d*        t        t         t-        t         dz  t        dz  z
  t5        t         dz  t6        dz  z
  dt         z  dt        z  z               g      t         t-        t         t        z
  t         t        z   z  t5        t         t6        z
  t         t6        z   z  t         t        z   t         z  t        z              gk(  sJ t9        t        t         dz  t         z   dz         j                         d   d+   d+   t:              dusJ t9        t;        t         dz  t         z   dz         j                         d   d+   d+   t:              du sJ t        t        t                      t        t                k(  sJ d,t         z  t          dz   z  t         dz
  z  t          t          dz   z  t         dz
  z  t         t         dz
  dz  z  z
  z  t         dz  t         dz
  z  t         t         dz
  z  z
  t         z
  z  d,t         dz  z  t         dz
  dz  z  t         t          dz   z  t          t          dz   z  t         t         dz
  z  z   z  z
  t         dz  t         dz
  dz  z  t         t          t          dz   z  t         dz
  z  t         t         dz
  dz  z  z
  z  z
  z  z
  }t        |      d+k(  sJ t        t        t         dz  t         z         t         z   d-      t        t         t         dz   z        t         z   k(  sJ t        t        t         dz  t         z         t         z  d-      t        t         t         dz   z        t         z  k(  sJ t        t        t         dz              t        t         dz        k(  sJ t        t        d.t         z  dz   d.t        z  dz   z              t)        d/d.t         z  d/z   d.t        z  d/z   d!      k(  sJ t        t        d.t         z  d.z   dz              d0d/t         z  d/z   dz  z  k(  sJ t         dz  t        dz  z  d"t         dz  z  t        z  z   d1t         dz  z  z   d
t         z  t        dz  z  z   d2t         z  t        z  z   d3t         z  z   d4t        dz  z  z   d5t        z  z   d6z   }t        |t               t         dz   t         dz   z  t        dz  d"t        z  z   d1z   z  k(  sJ t        |t         d-      t         dz   t         dz   z  t        dz  d"t        z  z   d1z   z  k(  sJ t        |t        d-      t        dz   t        dz   z  t         dz  d
t         z  z   d4z   z  k(  sJ dt         z  dt=        dd
t         z  z
        z  z   t        d-      t        dd7      k(  sJ t        dd7      dt         z  dt=        d      z  t=        d8t         z        z  z   k(  sJ t        t         dz  t         t        dz  z  z
  t        |t               dt         dft         t        z
  dft         t        z   dfgfk(  sJ t        d      dt        d      z   dt        d      z
  }}}dt*        z   dt*        z
  }}t        ||z        d	| df|dfgfk(  sJ t        ||z        d	| df|dfgfk(  sJ t        ||z        | | dfgfk(  sJ t        t*        |z        d	| dft*        dfgfk(  sJ t        ||z  t               ||z  g fk(  sJ t        ||z  t               ||z  g fk(  sJ t        ||z  t               ||z  g fk(  sJ t        t*        |z  t               t*        |z  g fk(  sJ t        t         t        d      t*        z  z
  t         t        d      t*        z  z   z  t               dt         t        d      t*        z  z
  dft         t        d      t*        z  z   dfgfk(  sJ t        t"        z
  dz  t        t"        z   z  t         dz   z  }t        t        |            |k(  sJ t         t"        z
  dz  t         t"        z   z  t        dz   z  }t        t        |            |k(  sJ t        dz   dz  t        t        d      z   dz  z  t         dz  t         z   dz   dt        d      z  z   dz  z  }t        t        |      d      |k(  sJ t         dz   t        dz  z  t        dz  dz   z  dt"        z  t         dz  z  t        dz  z  t        dz  dz   z  z   dt"        z  t         dz  z  t        z  t        dz  dz   z  z   t         dz  t        dz  dz   z  z   dt         z  t        dz  z  t        dz  dz   z  z
  dt"        z  t         z  t        dz  z  t        dz  dz   z  z   dt"        z  t         z  t        z  t        dz  dz   z  z   dt         z  t        dz  dz   z  z   t        dz  z
  t        dz  t        dz  dz   z  z
  dt"        z  t        dz  z  z   dt"        z  t        dz  z  t        dz  dz   z  z   dt"        z  t        z  z   dt"        z  t        z  t        dz  dz   z  z   dz   dt        dz  dz   z  z   }t        |      t        t"        z
  dz   t        t"        z   z  t         dz  dt         z  z   t        dz  z   dz   z  t        dz  dz   z  k(  sJ y )9Nr   r   r   r   Tr  Fr  r   r   rT  r   positiver  )integerr  )realr   r'  r&  r-  i    iX  i iH i rU  i  iT     iY  r#  r  r  r(  r)  r^  r  r*  r&  c                  (    t         t        d      S )NFr&  r/   r   r   s   r   r   ztest_factor.<locals>.<lambda>R
  s    F1a$> r   c                  0    t        t        dz  dz
  d      S )Nr   r   Tr  rq  r   r   r   r   ztest_factor.<locals>.<lambda>T
  s    fQTAXT: r   r   r  r(  g      ?r   g      ?   M      r     ih  )r'  fractioni)r   r?  r   r.   factor_list_includers   r   rm   r  r/   
is_Integerrn   is_Powr   rb   ru   rU   rf   rR   rS   rd   rj   rl   r|   rG   rK   r^   r   r   r   rq   )r   r   r   rL  UVWr   r   r   r  r  f_zzif_qqier   s2s2ps2npippinr   s                        @r   test_factorr  	  s   	1q!tadQA	AA	AA	1q1ATAq!Q<(JAq!Q==?qAq6Aq6Aq6":;;;;q>a1a&1a&1a&!9::::q!aVaVaV$< ====q1$AAAA'?#@@@@q>a1a&1a&1a&!9::::q%!q!fq!fq!f-E)FFFFq&11v1v1v.F*GGGG  "1v1v1v&>>>>q>aW$$$q>aW$$$tAw"tAwm333Qw"qB7)n444!ax#QFQF+;'<<<<tAaCy!$ac166]O(<<<<!9>fQi2222qsQF8},,,qAv11vh-///!A#;!A#!AqD&>Qq!tV###1QT6A:/"c1a4!8a-&7777!9!Q$q   !Q<1QT6!8###!aT?a1fQh&&&A1a!eQUAqD1H4JAq!Q!A#;1QT6!8ac****!A#q>a1fQh1----!A#t1a4AaC 0000sT"AsD!AsA$qs)##t+++$qAvz"#tAwtQUQUO/D'DDDD$qAvz"#tAwtAqD1H~'====1QT6A:/"adAEA:oq1uqj&@@@@1QT6A:/"adAqD1Hq=&88881QT6A:/"q!a%y!a%'81&<<<<1QT6A:/"q!Q$(|a&7777VQTAXA&A.Az9:;Aa!eaZQ a!e,T!Q$(^;A!9>>!9>>	
Q
AqD1HAVAYA!9QSVAX\1R(A==?qAq6(m+++	1qA!9>>!q!adQhA%::::!d#1q1a4!8'<<<<	T!W"#Q$a"2Q"6AQ	9IA9M!NO O O !Q$1Q,"#AaC!|333	1qs1uqA!9>>QT	Auvax'((61F1H<Aq"r!t)}s"SU*Q..E!afSj.46#:-11E!9!D!U***!D!U***	1qay{QA!tAw'AQK!+;;;;!Q$$q'*q47{Q.>>>>!Q$1a4-473	
T!WQYT!WQY'( ( (!AqD&1QT6/T!W5	AQ	MAQ	M*+, , , !a%=AE!!!1"q&>aR!V###!a%=AE!!!!A#(s1acAg>>>>!R%!)a-$?	
AA1q!tad*QT1AqD81q5@1DEF F F!R%!)a-%@	
AA1uQTz)AqD05A:=	
Aa!e  	!! ! ! 	
"qQx{A	2q51R4<!qQxQ2)9::A!93q6A:r))))!93q6A:Q{2222"	1qs
Q1q" #&(!a%!a!eadQhl5K&LM M M 
AAqD1Q3JN#A!9QQQ
2222!Q<AEAE?AEA:5555	A1q5	AqD A!9>>!Q<1!QTAaCZ!A#%&*+!a%!AqD&.Q$3Qq!tVad*2, 0- - - - !E"a'''
?>?
9:;1bA1eAqD1a4K1qs&CDEF	
BAAq1uq1uoAqy{ CDEF F F QTAX\&&(+A.q18=@DE E EAA**,Q/215xADHI I I $r(tQBx''' 
ArAvA	QBFQU 3aQ
l B	CQT1L F	
AEFF 
ad7AEA:-A26
QBQKq1uI= 1 Aq1uqj1qb1"q&k1q5&9Aq1uqjL&H#IIK
KA !9>> #adQh-!#$/3q!a%y>A3EEEE#adQh-/-QAY1AAAA$q!t*ad+++ &#a%'CE!G,-.#c3q53;A3' ' ' '&#a%)a()T3q53;2B-BBBB	
AadR1WQY	AqD	(1Q3q!t8	3bd1f	<s1u	Dr!Q$w	NQTUVQV	VY\	\B"a=QUQUOQTBqD[2-=>>>>"ad#AA1r!tb8H'IIII"ad#AA1qs
R'HHHH 	
!aA!GnA!$6!$#FFFF!$/1Q33q6#bd)9K3KKKKq!ta1f}aA.	QFQUAJQ
+3- - - - 7AQKT!WSB2vq2vCs3wB3$S!H(=#>>>>s3wB3$S!H(=#>>>>r#vB33$"4444r#v2#q	B7';"<<<<s3w"s3wm333s3w"s3wm333r#vq!bfb\111r#vq!bfb\111DGBJT!WRZ8!<	Qa^Q!d1gbj.!!45A7 7 7 7 a%!q1u	Q	'A&)!!!
a%!q1u	Q	'A&)!!!	
Q
AQK!##QTAX\Ad1gI%=$AAA&)t,111 
Aad
AqD1H!AqDAq!tax 881Q3q!t8A:q!tax;PP	1adQh	A#ad(AqD1H-	.01!Aad
AqD1H0E	F	!AaA	qS!Q$(^	,./d	356T1a4!8_	EGHs1a4x	P A#ad(AqD1H
	 !"!A	& )*!Aq!tax(8	9 <=	= @A!Q$(|	L  !9!a%!QU+QTAaCZ!Q$->-BCQTAXNNNNr   c                     t         dz  dt         z  z   dz   dz  t         dz  dz   z  t         dz  dt         z  z   dz   dz  z  } t         dz  dt         z  z   dz   dz  t        dz  z  t         dz  dt         z  z   dz   dz  dz  t        z  z   t         dz  dt         z  z   dz   dz  z   }t        |       t         dz   dz  t         dz  dz   z  t         dz   dz  z  k(  sJ t        |      t         dz   d	z  t        dz   dz  z  k(  sJ t        |       dt         dz   dft         dz   dft         dz  dz   dfgfk(  sJ t        |      dt        dz   dft         dz   d	fgfk(  sJ t         dz  t        dz  z
  d
z  t         dz  dz   z  } t         dz  t        dz  z   d
z  t         dz  dz   z  }t        |       t         dz   t         t        z
  d
z  z  t         t        z   d
z  z  t         dz  t         dz  z
  t         dz  z   t         dz  z
  t         dz  z   t         z
  dz   z  k(  sJ t        |d      t         dz   t         t        t        z  z
  d
z  z  t         t        t        z  z   d
z  z  t         dz  t         dz  z
  t         dz  z   t         dz  z
  t         dz  z   t         z
  dz   z  k(  sJ t        |       dt         dz   dft         t        z
  d
ft         t        z   d
ft         dz  t         dz  z
  t         dz  z   t         dz  z
  t         dz  z   t         z
  dz   dfgfk(  sJ t        |d      dt         dz   dft         t        t        z  z
  d
ft         t        t        z  z   d
ft         dz  t         dz  z
  t         dz  z   t         dz  z
  t         dz  z   t         z
  dz   dfgfk(  sJ y )Nr   r'  i r   i i  i -1i% ip  i@ r   r  r   r   Tr-  )r   r   r/   r.   rf   r\  s     r   test_factor_larger  
  s   	
A!a("AqD1H-q!taczA~.GGA
Q$1*q.4	1	$1qs
Q'=a'?'A	A	1qs
QE 
A !9Q)1a4!84a!eg5EEEEE!9Qq1uqj0000	AE7#a!eX%6A1FGH H Hq>a1q5!*q1udm!<====	
A1vq!tax(A	
A1vq!tax(A!9	
QQQ/A1	
A212!t22 "#2$ 	%% % % !d#	
QQqS6!!1qs7V"33QTAqD[	
A616!t66 "#6$ 	%% % % q>	
a!eQZ!a%1q5&/AqD	
A=1=!t=d=#%&=')*=+,-</ 0 	11 1 1 q4(	
a!eQZ!ac'6*Q1Wf,=qD1a4K!Q$A%1,q014a@9 : 	;; ; ;r   c                     t        dt        z  dz
        t        ddt        z  dz
  d      k(  sJ t        dt        z  dz
  dt        z  dz
  z        t        t        dd      dt        z  dz
  dt        dz
  z        k(  sJ y )	Nr  r#  r   r   r   Fr  r   )r/   r   rd   rh   r   r   r   test_factor_noevalr  
  su    !A#(s1acAg>>>>1Q38acAg&'3x1~qsQw1q5	+RRRRr   c                  d   t        d      g k(  sJ t        d      g k(  sJ t        t        d      dgk(  sJ t        t              dgk(  sJ t        t        dz        dgk(  sJ t        t        d	z  t        d
z  g      dd	d
dfgk(  sJ t        t        t        d	d      z  t        dd      z
  d
t        z  t        dd      z   z        } | j                  d      ddgk(  sJ | j                         ddgk(  sJ | j                  dd      ddgk(  sJ | j                  d      ddgk(  sJ | j                  t        dd            | j                  d      cxk(  r.t        dd      dfdft        dd      t        dd      fdfgk(  sJ  J | j                  t        dd            | j                  d      cxk(  r.t        dd      dfdft        dd      t        dd      fdfgk(  sJ  J | j                  t        dd            | j                  d       cxk(  r.t        dd!      dfdft        dd      t        dd      fdfgk(  sJ  J | j                  t        dd"            | j                  d#      cxk(  r8t        dd$      t        dd$      fdft        dd      t        dd      fdfgk(  sJ  J t        t        d	d      z  t        dd      z
  d
t        z  t        dd      z   z  } t        | d      ddgk(  sJ t        |       ddgk(  sJ t        | t        dd            t        | d      cxk(  r.t        dd      dfdft        dd      t        dd      fdfgk(  sJ  J t        | t        dd            t        | d      cxk(  r.t        dd      dfdft        dd      t        dd      fdfgk(  sJ  J t        | t        dd            t        | d       cxk(  r.t        dd!      dfdft        dd      t        dd      fdfgk(  sJ  J t        | t        dd"            t        | d#      cxk(  r8t        dd$      t        dd$      fdft        dd      t        dd      fdfgk(  sJ  J t        t        d	z  d	z
  t        d	z  dz
  d%z  z  t        dz   z  d%t        z  dz   dz  z        } | j                         d&t        d'd	      fd%ft        d'd	      dfdfd(d)dt        dd	      fdft        dd	      d	fd%fgk(  sJ t        t        dz  d*z
  t        dz  d+z
  g      t        d,d-      t        d.d/      fddift        d0d1      t        d-d2      fddifgk(  sJ t        t        dz  d*z
  t        dz  d+z
  gd      t        d,d-      t        d.d/      fddift        d0d1      t        d-d2      fddifgk(  sJ t        t        d	z  d*z
  t        d	z  d+z
  g      t        d3d      t        d4d      fddift        d4d      d5fddifd6t        dd      fddift        dd      t        d7d      fddifgk(  sJ t        t        dz   t        d	z   t        dz
  t        dz   dt        dz
  t        dz
  t        d	z
  d	z  g      d8ddifd9ddd:fd;dddd<fd=d%d	ifgk(  sJ t        d	z  d	z
  t        d
z  d
t        d	z  z  z
  d
z   t        dz
  }}} t        | t        d%d
      d>      g k(  sJ t        | t        d%d      d>      t        d%d      t        dd	      fgk(  sJ t        | t        d%d
      d?      d@dt        dd	      fgk(  sJ t        | t        d%d      d?      d@gk(  sJ t        |t        d%d
      A      g k(  sJ t        |t        d%d      A      t        d%d      t        dd	      fd	fgk(  sJ t        |t        d%d
      B      dCdt        dd	      fd	fgk(  sJ t        |t        d%d      B      dCgk(  sJ t        ||gt        d%d
      A      g k(  sJ t        ||gt        d%d      A      t        d%d      t        dd	      fdd	ifgk(  sJ t        ||gt	        d%      d
z  B      d@dd	ifd;ddifdt        dd	      fdd	ifgk(  sJ t        ||gt        d%d      B      d@dd	ifd;ddifgk(  sJ t        t        d	z   t        d	z  d	z
  g      d8ddifd@ddifdDddifgk(  sJ t        t        d	z   t        d	z  d	z
  gdE      d8ddift        d'd	      dfddifdDddifgk(  sJ d%t
        d
z  z  dFt
        dz  z  z
  dGt
        d	z  z  z   dt
        z  z   dGz   } t        |       g k(  sJ t        | ddH      \  }}|g k(  sJ t        dI t        |t        |             D              sJ |t        dJd%      t        dKz  d%z  z
  dft        dJd%      t        dKz  d%z  ft        t        dJd%      z  t        dKd%      fdt        dKd%      t        dKz  d%z  z   fgk(  sJ t        | ddt        dd      L      \  }}|g k(  sJ t        dM t        |t        |             D              sJ t        t        dN        t        t        dO        t        t        dP        y )QNr   r   T)r-   r   )r   r   rT  )r   rT  r   r'  r   r   r,  r   i  r   r   r  r%  )r  r   )r  r   )fastr-   )r  r#  epsre  r   i  U   r  r  {Gz?i  gMbP?i  i'  -C6?i  r   r  rC  )r   r   r   )r  r   rV     K      e   #   i5  k   r^  iiir  G   )r  r  r  r   r   r   )r   r   r  )r   r   )infr-   )supr-   r  r   r  r  )r  r   r%  r      r  )r   r-   c              3      K   | ]b  \  \  }}}t        |      t        |      cxk  xr t        |      k  nc xr+ t        |      t        |      cxk  xr t        |      k  nc  d y wr   rp   ro   r   r   r   r  s       r   r   z!test_intervals.<locals>.<genexpr>   d      J(v1q !ur!u$r!u$ 	*U*U*  J   A(A*i(   )r   r-   r  c              3      K   | ]b  \  \  }}}t        |      t        |      cxk  xr t        |      k  nc xr+ t        |      t        |      cxk  xr t        |      k  nc  d y wr   r  r  s       r   r   z!test_intervals.<locals>.<genexpr>+  r  r  c                  0    t        t        dz  dz
  d      S Nr   r   r  r0   r   r   r   r   r   z test_intervals.<locals>.<lambda>.  s    yA{C r   c                  L    t        t        dz  dz
        j                  d      S r  )r   r   r0   r   r   r   r   z test_intervals.<locals>.<lambda>/  s     tAqD1H~77K7H r   c                  H    t        t        dz  dz
  t        dz  dz
  gd      S )Nr   r   r   r  r  r   r   r   r   z test_intervals.<locals>.<lambda>1  s"    Iq!taxA&:L r   )r0   r   r   rh   rm   r   r   r   r5   rf   r|   rx  )r   r   r   	real_partcomplex_parts        r   test_intervalsr  
  s   Q<2Q<2QD!fX---Q<K=(((QV///adAqD\"A!'=&>>>>aA"a01Q3!S9I3IJKA;;4; Wh$7777;;=\=9999;;Dd;+/BBBB;;D;!lM%BBBB;;8Ar?;+q{{s{/C OBa
 !	$Q"a'I1&MNO O O O O;;8As+;,0E OBa
 !	$Q"a'I1&MNO O O O O;;8At,;-1G PBq
!1	%"a(2q/(JA'NOP P P P P;;8Au-;.!++&+2I aBxD1
2A	6(2q/8TVXY?9[]^8_`a a a a a 
8Aq>	HRO	+acHQ4D.DEAQD!gx%8888Q<L-8888QHQO,	!0E OBa
 !	$Q"a'I1&MNO O O O OQHQ,-1$1G OBa
 !	$Q"a'I1&MNO O O O OQHQ-.)A52I PBq
!1	%"a(2q/(JA'NOP P P P PQHQ./9QF3K aBxD1
2A	6(2q/8TVXY?9[]^8_`a a a a a 	adQhAA%q1u-qsQwl:;A;;=xA
	#xA&;Q%?	hq!n
q	!Xa^Q$7#;	== = =
 adSj!Q$*-.BXc2.
/!Q	8HS#<NPXY[]^P_;`cdfgbh:ijk k k adSj!Q$*-D9BXc2.
/!Q	8HS#<NPXY[]^P_;`cdfgbh:ijk k k adSj!Q$*-.CXc1-
.A	78C;KS:QTUWXSY9ZxA
!Q	(HROXb!_+MPQSTv*V	XX X X a!eQUAE1q5!QUAEAEA:NO
QF	hA!5
aA 8"QF+	-- - - dQh1qAv)1q5!qAQHQN5;;;QHQN58Aq>8TUWX>:Z9[[[[QHQN5(QQRTUDW9XXXXQHQN5(CCCQHQN+r111QHQN+(1a.(1a.1QST0U/VVVVQHQN+HQPQN@SUV?W/XXXXQHQN+>>>aV!Q0B666aV!Q0x1~xPQST~6VYZ\]X^5_4````aV	"" aV$v1v&6!Xa^9LqRSf8UVW W W	
AHQN$)1Aq6(:VaV<L'MN N N a!eQTAX&'
QF	hA/&1a&1ABC C Ca!eQTAX&t4
QF	xA3aV<v1v>NOP P P 	
!Q$AqD2ad7"RT)B.AQ<2't>I|?? J,/fQi,HJ J J J Xc1-"Q6:%c1-qtAv6xQ//"aAQ!B$q& 89; ; ; ;
 (t8Ar?SI|?? J,/fQi,HJ J J J :CD
:HI
LNr   c            	          t        t        dz  dz
          j                  ddd      dk(  sJ  j                  ddd      dk(  sJ  j                  ddd       dt        d	d      fk(  sJ  j                  ddd       t        d
d      dfk(  sJ  j                  ddd      dt        d	d      fk(  sJ  j                  ddd      t        d
d      dfk(  sJ  j                  dddd      dt        d	d      fk(  sJ  j                  dddd      t        d
d      dfk(  sJ  j                  ddt        dd            t        dd      t        dd      fk(  sJ  j                  ddd      t        dd      t        dd      fk(  sJ t	        t
         fd       t	        t         fd       t	        t         fd       t        dz  dz
   t         ddd      dt        d	d      fk(  sJ t         ddd      t        d
d      dfk(  sJ t         dddd      dt        d	d      fk(  sJ t         dddd      t        d
d      dfk(  sJ t         ddt        dd            t        dd      t        dd      fk(  sJ t         ddd      t        dd      t        dd      fk(  sJ t	        t
        d        t	        t         fd       t	        t         fd       y )Nr   r   r   )stepsr%  r  r   r  r   rC  T)r  r  r  r  ro  r,  r  r  c                  2     dz  j                  ddd      S )Nr   r   T)	check_sqfr1   r   s   r   r   z"test_refine_root.<locals>.<lambda>F  s    QT$6$6q!t$6$L r   c                  .     dz  j                  dd      S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>H      ad%7%71%= r   c                  .     dz  j                  dd      S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>I  r  r   c            	      4    t        dddt        dd            S )Nr   r   r  r  r  )r1   rh   r   r   r   r   z"test_refine_root.<locals>.<lambda>V  s    K1aXa=M$N r   c                  >    t               j                  ddd      S Nr   r   r   r  )r   r1   r   s   r   r   z"test_refine_root.<locals>.<lambda>X  s    tAw221a[2I r   c                  "    t         ddd      S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>Y  s    {1aD r   )r   r   r1   rh   r|   rG   rD   rx  r   s   @r   test_refine_rootr  4  s   QTAXA==AQ='6111==Rq=)X555==AT=*q(1a..AAAA==Rt=,"a"0EEEE==AQ='Ax1~+>>>>==Rq=)hr1or-BBBB==AQT=2q(1a.6IIII==Rqt=4"a"8MMMM==A8As#3=4"b9I8TVXZK[8\\\\==A4=(Xb"-=xB?O,PPPP
?LM
=>
=>	1qAq!Qa(QA,????q"b*xA.CCCCq!Qad38Aq>7JJJJq"b5(2q/29NNNNq!QHQ$45(2r:JHUWY[L\9]]]]q!QD)hr2.>R@P-QQQQ
?NO
:IJ
:DEr   c                     t        t        dz  dz
        dk(  sJ t        t        dz  dz
  t               dk(  sJ t        t        dz  dz
  t              dk(  sJ t        t        dz  dz
  t         t              dk(  sJ t        t        dz  dz
  d      dk(  sJ t        t        dz  dz
  d      dk(  sJ t        t        dz  dz
  d      dk(  sJ t        t        dz  dz
  d      dk(  sJ t        t        dz  dz
  dd      dk(  sJ t        t        dz  dz
  dd      dk(  sJ t        t        dz  dz
  dd      dk(  sJ t        t        dz  dz
  dd      dk(  sJ t        t        dz  dz         dk(  sJ t        t        dz  dz   dt        z        dk(  sJ t        t        dz  dz   dt        z        dk(  sJ t        t        dz  dz   dt        z  dt        z        dk(  sJ t        t        dz  dz   d      dk(  sJ t        t        dz  dz   d      dk(  sJ t        t        dz  dz   t               dk(  sJ t        t        dz  dz   t              dk(  sJ t        t        dz  dz   t        dz  t              dk(  sJ t        t        dz  dz   t         t         dz        dk(  sJ t	        t
        d	        y )
Nr   r  r  )r  r  r  r   r   r   c                      t        d      S r   r2   r   r   r   r   z"test_count_roots.<locals>.<lambda>}  s
    KN r   )r2   r   ri   rf   r|   rG   r   r   r   test_count_rootsr  \  s   q!tax A%%%q!taxbS)Q...q!taxbS)Q...q!taxbSrc2a777q!taxR(A---q!taxR(A---q!taxQ'1,,,q!taxQ'1,,,q!taxRQ/1444q!taxRQ/1444q!taxRQ/1444q!taxRQ/1444q!tax A%%%q!taxRT*a///q!taxRT*a///q!taxRTr!t4999q!taxQ'1,,,q!taxQ'1,,,q!taxaR(A---q!taxaR(A---q!taxaRTr2a777q!taxaRaRT2a777
?23r   c                      t        dt        dz  z  dt        dz  z  z
  dt        z  z   dz           j                  d      t        dd      k(  sJ  j                  d      dk(  sJ  j                  d      dk(  sJ t	        t
         fd       t        t        d	z  t        z   dz         j                  d      t        t        dz  t        dz  z
  dz   d      k(  sJ y )
Nr   r   r   r'  r   r   r   c                  &     j                  d      S )Nr   )rootr   s   r   r   z test_Poly_root.<locals>.<lambda>  s    qvvay r   r   )r   r   r  rh   r|   
IndexErrorrx   r   s   @r   test_Poly_rootr    s    Qq!tVa1f_qs"Q&'A66!9Q'''66!9>>66!9>>
:()1q1""1%1q!ta)CCCCr   c                     t        t              dgk(  sJ t        t        d      dgk(  sJ t        t        dz        g dk(  sJ t        t        dz  d      dgk(  sJ t        t        t        dz  t        z   dz   z        t        t        dz  t        z   dz   d      dgk(  sJ t        t        t        dz  t        z   dz   z  d      t        t        dz  t        z   dz   d      dfdgk(  sJ t        t        dz  t        dz  t        z   dz   z        t        t        dz  t        z   dz   d      dddgk(  sJ t        t        dz  t        dz  t        z   dz   z  d      t        t        dz  t        z   dz   d      dfdgk(  sJ t        t        d	z  d	z
  d
      t        t        d	z  d	z
  dd
      t        t        d	z  d	z
  dd
      gk(  sJ d	t        dz  z  dt        d	z  z  z
  dt        z  z   dz   } t        dz  t        z   dz   }t        |       j                         t	        dd	      d	d	gk(  sJ t        |      j                         t        |d      gk(  sJ y )Nr   Fmultipler   r   r   r  r   r   radicalsr   r'  r   )r4   r   rx   r   rh   r\  s     r   test_real_rootsr    sm   a=QCa%(VH444ady(((adU+x777aAA&'F1a4!8a<,CQ+GGGGaAA&7V	1q1a>=$<& & & & 	1adQhl!'1q1a!8!Q BC C CadAqD1HqL)E:	1q1aA@$?& & & & adQh/1a4!8Q/1a4!8Q/4
 
 
 

 	
!Q$1a4!A#!A	1q1A7HROQ#::::7F1aL>111r   c            	         dt         dz  z  dt         dz  z  z
  dt         z  z   dz   } t        dd      ddg}t        |       t        |       j                         cxk(  r|k(  sJ  J t         dz  t         z   dz   }t	        |d      t	        |d      t	        |d      g}t        |      t        |      j                         cxk(  r|k(  sJ  J t        t         dz  dz
        t        d       t        d      gk(  sJ t        t         dz  dz
  d	      t        d       dft        d      dfgk(  sJ t        t         dz  dz
  d
      t	        t         dz  dz
  dd
      t	        t         dz  dz
  dd
      gk(  sJ t         dz  t         z
  dz
  }t        |      t	        |d      t	        |d      t	        |d      t	        |d      t	        |d      gk(  sJ y )Nr   r   r   r'  r   r   r   Fr  r  r   )r   rh   r3   r   rx   rs   )r   frootsr   grootsr   s        r   test_all_rootsr    s   	!Q$1a4!A#!Ar1oq!$FQ<47,,.8&88888	1q1AQlF1aL&A,7FQ<47,,.8&88888QTAXDG8T!W"5555QTAX.T!WHa=47A,2OOOOQTAX.q!taxU+q!taxU+3   
 	
1q1AQ<q!fQlF1aL&A,q!   r   c                  d   t        dt              j                         g k(  sJ t        dt              j                         g k(  sJ t        t        dz  dz
  t              j                         ddgk(  sJ t        t        dz  dz   t              j                         dt        z  dt        z  gk(  sJ t        t        dz  dz
  t              j                         } | ddgk(  sJ t        t        dz  dz   t              j                         } | dt        z  dt        z  gk(  sJ t        t        dz  dz  t	        dd      z
  t              j                         } | ddgk(  sJ t        t        dz  dz  t	        dd      z   t              j                         } | dt        z  dt        z  gk(  sJ t        t        dz  dt        z  z   t              j                         ddt        z  z   ddt        z  z
  gk(  sJ t        t        dz  dt        z  z   t        t              j                         ddt        z  z   ddt        z  z
  gk(  sJ t        dt        z  d	z         j                         d
gk(  sJ t        t        dz  t        z   dz   d      } t        d      }t        | d         j                  d|      t        j                  u sJ t        | d         dk(  sJ t        | d         t        d
d      k(  sJ t        | d         j                  d|      t        j                  u sJ t        | d         t        d
d      k(  sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        d      }t        | d         j                  d|      t        j                  u sJ t        | d         dk(  sJ t        | d         t        d
d      k(  sJ t        | d         j                  d|      t        j                  u sJ t        | d         t        d
d      k(  sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        | d         j                  d|      t        j                  u sJ t        t        d        t        t        d        t        t        dz  dz
        ddgk(  sJ t        t        dz  dz
        } | ddgk(  sJ t        t        t        z         dt        z  gk(  sJ t        t        dt        z  z         dt        z  gk(  sJ t        t        d        t        t        dz  dz
        }|j                  d      |j!                         D cg c]  } |j"                  d       c}k(  sJ t%        t        t        dz  dt        dz  z  z   dt        dz  z  z   d t        d!z  z  z   d"t        d#z  z  z   d$t        d%z  z  z   d&t        dz  z  z   d't        dz  z  z   d(z         j                  d            d)k(  sJ t%        t        d*t        dz  z  dz
        j                               d+k(  sJ y c c}w ),Nr   r   r         r   r   r&  rb  re  g      r   )nz1e-5ghW!'r   gJ5ogJ5o?gP?gg'r'  gg'?z1e-6c                  T    t        t        t        z   t              j                         S r   r   r   r   r5   r   r   r   r   ztest_nroots.<locals>.<lambda>  s    QUA 5 5 7 r   c                  J    t        t        t        z         j                         S r   r  r   r   r   r   ztest_nroots.<locals>.<lambda>  s    QU0B0B0D r   g       c                      t        d      S Nr   r5   r   r   r   r   ztest_nroots.<locals>.<lambda>  s
    F1I r   r  r  r  i  r  i@  r#  iV  r  i  r  i\ i ie z[-1.7 - 1.9*I, -1.7 + 1.9*I, -1.7 - 2.5*I, -1.7 + 2.5*I, -1.0*I, 1.0*I, -1.7*I, 1.7*I, -2.8*I, 2.8*I, -3.4*I, 3.4*I, 1.7 - 1.9*I, 1.7 + 1.9*I, 1.7 - 2.5*I, 1.7 + 2.5*I]gV瞯<z%[-31622776.6016838, 31622776.6016838])r   r   r5   rf   rh   re   rp   
epsilon_eqrm   truero   falser|   rI   r?   rG   r3   r  str)rootsr  r   r   s       r   test_nrootsr    s   1:"$$$1:"$$$1q!##%$4441q!##%$q&#a%888A1$$&ET3KA1$$&ET!VSUO###Aa(1a.(!,335ET3KAa(1a.(!,335ET!VSUO###1qs
A%%'D3q5L#A++FFFF	1qs
A$$*FHAsSU{0KL L L A##%$///1a4!8a<1%E
-CeAh<""8S1QVV;;;eAh<3eAh<5q>)))eAh<""8S1QVV;;;eAh<5q>)))eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;
-CeAh<""8S1QWW<<<eAh<3eAh<5q>)))eAh<""8S1QWW<<<eAh<5q>)))eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<
;78
&(DE!Q$(c{***1a4!8ET3K!a%=T!VH$$$!ac'?tAvh&&&
?-. 	QTAXA88A;1;;=9a3133q69999tArEBq"uH$s1b5y042:=ad
AqD[!#)!Q$;/18A> q	    tE!Q$JM"))+,1XYYY :s   ^-c                  :   t         dz  dt         dz  z  z
  dt         dz  z  z   t         dz  z
  } t        |       j                         t        j                  dt        j
                  dik(  sJ t        |       t        j                  dt        j
                  dik(  sJ y )Nr  r'  r   r   )r   r   r6   rm   r  r   r   s    r   test_ground_rootsr    s|    	1qAv!Q$A%A7!aeeQ%::::?quua3333r   c                      t         dz  t         dz  z
  dz   t         dz  t         z
  dz   dz  } t         dz  dz   dz  }t         dz  t         z   dz   dz  }t         dz
  dz  }t        d      k(  sJ t        t        fd       t        t        fd       t	        t        d            | k(  sJ t	        t        d            |k(  sJ t	        t        d            |k(  sJ t	        t        d            |k(  sJ t        t
        d        y )	Nr'  r   r   c                      t         d      S r  r7   r   s   r   r   z+test_nth_power_roots_poly.<locals>.<lambda>  s    3Aq9 r   c                  $    t         t              S r   )r7   r   r   s   r   r   z+test_nth_power_roots_poly.<locals>.<lambda>  s    3Aq9 r   r   r  c                  D    t        t        t        z   dt        t              S r  )r7   r   r   r   r   r   r   z+test_nth_power_roots_poly.<locals>.<lambda>&  s    0D	Aq!Q1 r   )r   r7   r|   rx  r/   r?   )f_2f_3f_4f_12r   s       @r   test_nth_power_roots_polyr    s	   	1q!taAa4!8a<!
Ca4!8a-Ca4!8a<!
CEA:D1%***
:9:
:9:&q!,-444&q!,-444&q!,-444&q"-.$666
& ) r   c                     t        t        dz  t        dz  z   t        dz  z   t        z   dz         } | j                  }t        dt        z  t
        z  dz        }t        | j                               D cg c]  \  }} |||      s| c}}dgk(  sJ t        t        d        t        t        d        t        t        d        t        t        d	        t        t        d
        y c c}}w )Nr'  r   r   r   r   c                  R    t        t        dz   t              j                  dd      S Nr   r   r   )r   r   rQ   	same_rootr   r   r   r   z test_same_root.<locals>.<lambda>1  s    4Ab)33Aq9 r   c                  b    t        t        dz  dz   t        d            j                  dd      S )Nr   r   r   r   r   )r   r   rO   r  r   r   r   r   z test_same_root.<locals>.<lambda>3  s&    41qA/99!Q? r   c                  X    t        t        dz  dz   t              j                  dd      S Nr   r   r   r   )r   r   rR   r  r   r   r   r   z test_same_root.<locals>.<lambda>5  s"    4Q
40::1a@ r   c                  t    t        t        t        dz  z  dz   t        t                 j	                  dd      S r  )r   r   r   rP   r  r   r   r   r   z test_same_root.<locals>.<lambda>7  s*    4AqD1RU3==aC r   c                  `    t        t        t        z  dz   t              j	                  dd      S r  )r   r   r   rP   r  r   r   r   r   z test_same_root.<locals>.<lambda>9  s"    4A	"-771= r   )r   r   r  rq   rf   rj   	enumerater3   r|   rG   rI   r?   )r   r   r0r  r  s        r   test_same_rootr  *  s    QTAqD[1a4!#a'(A	
B	QURZ!^	B#AKKM2@$!QbBiA@QCGGG
?9;
;?A
;@B
;CE
&=? As   5C+C+c                     t        t        dz  dz
  t        dz
  z  j                  t        t        dt        d      z   z  i            } t	        | t              dt         dt        d      z   z  dz  dz   dft         dt        d      z   z  dz
  dft         dt        d      z   z  dz   dfgfk(  sJ t        t        dz  dz
  t        dz
  z  j                  t        t        ddt        dd      z  z   z  i            } t	        | t              J y )Nr   r   r  r'  )rb   r   r  rs   r=   rh   r   s    r   test_torational_factor_listr  <  s
   Aa!A#$$a1tAw;%89:A"1a(R
Qa[	!	a	#
Qa[	A	q!
Qa[	A	q!2# -$ $ $ $ 	Aa!A#$$a1q(1a./@+@(A%BCDA"1a(000r   c                  <   t        d      dk(  sJ t        d      dk(  sJ t        t              t        k(  sJ t        t              t        u sJ t        d      dk(  sJ t        dt              dk(  sJ t        dt              dk(  sJ d	t        d
z  z  d	z
  d
t        z  d
z
  d
t        z  d
z   df\  } }}}| |||fD cg c]  }t        |t               c}\  }}}}|j                  |      d||fk(  sJ t        | |f      d||fk(  sJ t        | |ft              d||fk(  sJ t        | |ft        f      d||fk(  sJ t        ||f      d||fk(  sJ t        | |fd      d||fk(  sJ t        ||fd      d||fk(  sJ t        d
z  d
z
  t        t	        d
      z   z  } t        |       | k(  sJ t        | d      t        t	        d
      z
  k(  sJ t        d
z  d
z
  t        t	        d
      z
  z  } t        |       | k(  sJ t        | d      t        t	        d
      z   k(  sJ t        t        d
z  d	z  dz
  t        d
z  dz
  f      dt        d
z   d
fk(  sJ t        t        d
z  t
        z
  t        t
        z
  z        dt        t
        z
  z  t        d
z  t
        z
  z  k(  sJ t        t        d
z  t
        d
z  z
  t        t
        z
  z  t              t        t
        z   k(  sJ t        t        d
z  t
        d
z  z
  t        t
        z
  z  t
              t        t
        z   k(  sJ t        t        d
z  t
        d
z  z
  t        t
        z
  z        t        t
        z   k(  sJ t        t        dz  dz
  t        d
z  dz
  z        t        d
z  t        z   dz   t        dz   z  k(  sJ t        t        dz  d
z  t        j                  z
  t        d
z  dz
  z        t        d
z  t        z   dz   d
t        z  d
z   z  k(  sJ t        t        d
t        z        d
t        t              z  z   dz   t        t              dz   z        t        t              dz   k(  sJ t        t        d
z  t        d
z  z
  t              } t        t        t        z
  t              }t        t        t        z   t        d      }t        dt        d      }t        | |f      d||fk(  sJ t        dz  t	        d
      d
z
  t        d
z  z  z   d
t	        d
      z  dz   t        z  z
  dt	        d
      z  z
  } t        d
z  d
z
  }t        | |fd      dt        d
z  d
t        z  z
  dz
  t        t	        d
      z
  fk(  sJ t        dt        z  dz   t              } t        t        dz   t        dz  z   t        dz  z   t        dz  z
  d
t        d
z  z  z   dt        z  z
  dz   t              }t        | |f      d|  | fk(  sJ t        t        dz  dz   t              } t        t        dz  dz   t              }| j                  |      t        d      dz  t        t        dz   t        t              t        t        dz   t        t              fk(  sJ | j                  |d      t        dt        z  dz   t        t              t        dt        z  dz   t        t              fk(  sJ dt        z   dt        z   dddfdt        z   dt        z
  ddt        z
  dt        z   fdt        z
  dt        z   ddt        z
  dt        z   fdt        z
  dt        z
  dddfg}	|	D ]  \  } }}
}}t        | |f      d||fk(  sJ t        | t              }t        |t              }t        |t              }t        |t              }|j                  |      |
|
|z  |fk(  sJ |j                  j                  |j                        |j                  |j                  fk(  sJ |j                  j                  |j                  d      |j                  |j                  fk(  rJ  t        t
        t
        d      } t        dt
        d      }| j                  |      dt        t
        t
        d      t        dt
        d      fk(  sJ | j                  |d      t        t
        t
        d      t        dt
        d      fk(  sJ t        dt        z  t
        z  t        z   t
        d      } t        d
t        d
z  z  t
        z  t
        d      }| j                  |d      t        dt
        z  dz   t
        d      t        d
t        z  t
        z  t
        d      fk(  sJ dt        z  d	t
        z  z
  dt        t
        z
  d
z  z  z    t        t
        z
  t         t
        z   d
z   z  z  } t        |       j                  dk(  sJ t        t        dz
        }t        t        dz         }d|d
z  z  d
z   |d
z   dz   z  |d
z  z  d
z  d|d
z  z  d
z   d|d
z  z  d
z   z  |z  |z  z   d|d
z  z  d
z   |d
z  z  |d
z  z  z
  d|d
z  z  d
z   |d
z   dz   z  |d
z  z  d
z  z   d|d
z  z  d
z   |d
z  z  |d
z  z  z
  d
t	        |d
z  |d
z  z  d z         z  z  d|d
z  z  d
z    |z  |d
z  z  d
z  d|d
z  z  d
z   |d
z  z  |z  d
z  z
  d|d
z  z  d
z   |z  |d
z  z  d
z  d|d
z  z  d
z   |d
z  z  |z  d
z  z   z  d
|d
z  |d
z  z  d z   t        dd
      z  z  z  z   } t        |       j                  dk(  sJ t!        d!d"      }t#        |t        d
z  dz
  z  t        dz   z  t        dkD  ft        d
z   t        d
z  d
t        z  z   z  df      }t#        |t        dz
  z  t        dkD  fdt        z  df      }t        |      |k(  sJ t        d
|z        d
|z  k(  sJ t        d|z         d|z   k(  sJ t        t        d
z  dz
  t        dz   z  |z        t        dz
  |z  k(  sJ t        t        d
z  dz
  t        dz   z  |z         t        dz
  |z   k(  sJ t#        t        d
z  dz
  t        dz   z  t        dkD  ft        d
z   t        d
z  d
t        z  z   z  df      }t#        t        dz
  t        dkD  fdt        z  df      }t        |      |k(  sJ t        d
|z        d
|z  k(  sJ t        d|z         d|z   k(  sJ t        t        d
z  dz
  t        dz   z  |z        t        dz
  |z  k(  sJ t        t        d
z  dz
  t        dz   z  |z         t        dz
  |z   k(  sJ t        d#d$      }t        |d%      t        j$                  u sJ  |j&                  t        d
      t        j$                  u sJ t)        |      t        j$                  u sJ t+        d&dd      }t        |d'   dz         |d'   dz   k(  sJ t-        |d(   |d)   dz  |d*   z  z         d|d+   z  t        z  z
  }t        |      t        t-        |d(   |d)   dz  |d*   z  z         z  d|d+   z  z
  t        z  k(  sJ t        t        d
z  dz   t        t.        z
  z        t        t.        z   k(  sJ y c c}w ),Nr   r   r  )r   r   r   r   r"  r   r#  r'  r   r   Tr  F)r  r   rG  r   r&  r  r^  r  r  r   )includer$  r   rI  r   g{Gzt?r  r  rM  )commutativeap	  (2*1*(x - 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2*1*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) -
        1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x)/x - 1/x)*(((-x + 1/x)/((x*(x - 1/x)**2)) +
        1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x - 1/x)) - 1/x)*((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1 + (x - 1/x)/(x - 1/x))/((x*((x -
        1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x))) + ((x - 1/x)/((x*(x - 1/x))) + 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) + 1/x)/(2*x +
        2*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x
        - 1/x)) - 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))/(2*x -
        (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x) - 1 + (x -
        1/x)/(x - 1/x))/((x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2)
        - 1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x
        - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 2*((x - 1/x)/((x*(x -
        1/x))) + 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2/x) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)/(x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2))
        - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x -
        1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x)) + (x - 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 1/xr  )	_signsimpMr   )r   r'  r  )r'  r   r%  )r8   r   ri   r   rs   r   rm   r  rq   r   rQ   r   r   is_Mulrr   rh   rn   rt   NaNr  ry   rw   ru   rf   )r   r   r   r   r   rL  r  rh  r  pairsr  pfpgpppqrM  p1p2p3p4r  exprs                         r   test_cancelr  H  s?   !9>>!9>>!9>>":&>Y&&&&!	)))&!	)))1a4!QqS1WacAgq0JAq!Q()1a|5!41:5JAq!Q88A;1a)###1a&>aAY&&&1a&!Aq	)))1a&1$Aq!9,,,1a&>aAY&&&1a&%!Q2221a&&1a)333	
AAQK A!9>>!E"a$q'k111	
AAQK A!9>>!E"a$q'k1111a46A:qsQw'(QAqM999 1a4!8a!e$%AEAqD1H)====1a4!Q$;Q'+q1u4441a4!Q$;Q'+q1u4441a4!Q$;Q'(AE1111a4!8adQh'(QTAX\AE,BBBB1a46AFF?QTAX./AqD1HqL1Q373KKKK3qs8aAh&*SVaZ89SVaZGGGQTAqD[!AQUAAQUAg&AQ'"A1a&>aAY&&&	1Q!QT!!QtAwY]A$55$q'	AA	1qA1a&D)aA!aT!W-MMMMRTAXqAadUQT\AqD 1a4'!AqD&01Q36:A>A1a&>a!aR[(((QqS1WaAQqS1WaA88A;1Q46QUAb!QUAb!# # # # 88At8$QqS2Xq$QqS2Xq$)& & & &
 
QAq!Q	
QAr2a4A&	
QAr1Q3!$	
QAq!Q	E # G1eQq!f~!Q***!QZ!QZ!QZ!QZyy}b" 5555vv}}RVV$(8888vv}}RVVT}2rvvrvv6FFFFG 	Q'"AQ'"A88	$q!G,d1a.HIJ J J88At8$Q'"DAg$>)@ @ @ @ 	QqSUQY'*AQq!tVAXq)A88At8$QqS1Wa($qs1ua*H)J J J J Q$1*ua!eaZ'
'(1q5A26A:*>?A!9t###QWAQWA
QT'A+A		"1a4	'	)R1Wq[2ad7Q;,G,I!,K	KrRSUVRVwYZ{\]_`\`N`abdeaeNe	eiklmoplpipstitxy{|x|w|  @A  xA  iB  CD  FG  CG  iG  HI  iI  
I  MO  PQ  ST  PT  MT  WX  MX  Z[  ]^  Z^  L^  _`  bc  _c  Lc  
c  fg  hl  mn  pq  mq  rs  uv  rv  mv  y  m  h@  f@  	Aad7Q;	!Q$	q	 Bq!tGaKA#5a#7#9	9R1Wq[!OAqD<PQR<RVXYZ\]Y]V]`aVacdfgcgUghiUijkUk<klnoqrtuquvwyzvzqz  ~D  rD  GO  PQ  ST  GU  qU  oU  	V	VA!9t### 	s&A	Aq!taxL!a%(!a%0AEAqD1Q3J3G2N	OB	Aq1uIq1u%!T{	3B":!B$<1R4!b&>QV###1a4!8a!e$R'(QUBJ6661a4!8a!e$r)*q1ul:::	QTAXA&A.!a%!Q$1*1Et0L	MB	QUQU#ac4[	1B":!B$<1R4!b&>QV###1a4!8a!e$R'(QUBJ6661a4!8a!e$r)*q1ul::: 	
 H@ A 	AB !u%...166!Q<155   A;!%% 	S!QA!C&1*3!+++qw41qw../!ag+/AD$<Ac!D'AdGaK!D',A"ABBQ4[PTUUUUU1a4!8a!e$%Q...E 6s   >zc                  <   t        t        dz  dt        z  z   dz   t        d      j                         \  } }| k(  sJ |t        j                  k(  sJ t        t        dz  dt        z  z   dz   t        d      j                         \  } }| j                         k(  sJ |t        j                  k(  sJ t        t        dz  dz  t        d      dz  t        z  z   t        d      dz  z   t        d      j                         \  } }| t        t        dz  dt        z  z   dz   t        d      k(  sJ |dk(  sJ t        t        dz  dz  t        d      dz  t        z  z   t        d      dz  z   t        d      j                         \  } }| t        t        dz  dt        z  z   d	z   t        d      k(  sJ |dk(  sJ t        t        t        z  t        t              t        t        fd
       t        t        d      t        t        fd       y )Nr   r   r'  rP   r   rQ   r   r  r  c                  $     j                         S r   )make_monic_over_integers_by_scaling_rootsr   s   r   r   z@test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>      qJJL r   rT   c                  $     j                         S r   r  r   s   r   r   z@test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>  r  r   )
r   r   r  rP   r=  r  rm   r   r|   rx  )r   r   r   s     @r   .test_make_monic_over_integers_by_scaling_rootsr    s   QTAaCZ!^Qt,A668DAq6M6;;QTAaCZ!^Qt,A668DAq		;;QT!Vad1fqj 1Q46)1T:A668DAqQTAaCZ!^Qt44446M6QT!Vad1fqj 1Q46)1T:A668DAqQTAaCZ"_a55556M6QqS!QA
:LMQtA
:LMr   c                      t        t        dz  dz
        } | j                  d      \  }}|t        j                  k(  sJ |du sJ y )Nr'  r   T)by_nameF)r   r   galois_groupr[   D4)r   r  alts      r   test_galois_groupr    sI    Q!VaZA^^D^)FAs%(((((%<<r   c            	      0   dt         dz  z  t        dz  z   t         dz  z
  t        dz  z   } t         dz  t         z
  t        dz  t        z
  g}dt         z  dg}t         dz  t        dz  z   t        z   }t        | |      ||fk(  sJ t        | |t         t              ||fk(  sJ t        |      }|j	                  |       ||fk(  sJ t        dt         z  t         t              t        dt         t              g}t        t         dz  t        dz  z   t        z   t         t              }t        t        | |d      ||f      sJ t        t        | |t         t        d      ||f      sJ t        |d      }t        |j	                  |       ||f      sJ dt         dz  z  t        dz  z   dt        z  z   } t        t         dz  t        dz  z   dz
  t         t        z  dz
  g      }t         dz  t         t        dz  z  dz  z
  t         t        z  dz  z   t        dz  dz  z   t        dz  dz  z
  t        dz  dz  z   t        dz   dz  t        dz  dz  z   t        t        dd      z  z   g}d	}t        | |      ||fk(  sJ |j	                  |       ||fk(  sJ t        | |d
      d   d	k7  sJ |j	                  | d
      d   d	k7  sJ |j                  |       du sJ |j                  | dz         d
u sJ t        ddgt               dgd	fk(  sJ t        t        d        y )Nr   r'  r   r   Tr  r  r   r   Fr  c                      t        ddg      S r   )r9   r   r   r   r   ztest_reduced.<locals>.<lambda>E  s    ga!o r   )r   r   r9   r:   reducer   r   rh   containsr|   rB   )r   r  r  r  r  s        r   test_reducedr    s   	!Q$A1q!t#A	
A1a4!8A	
1aA	1q!taA1a=QF"""1aA1a&(((A88A;1a&   	ac1a$q!Q-(AQTAqD[1_a#Aga$/!Q888gaAq51v>>>$AahhqkAq6***	!Q$A!A!Q$A+/1Q37+,A	
A!Q$q1Q3q5	 1a46	)AqDF	2QT!V	;adU1Wq!tAv=MPQRZ[\^_R`P`=`aA	A1a=QF"""88A;1a&   1ae$Q'1,,,88AE8"1%***::a=D   ::a!e%%%1qc11#q)))
56r   c            
         t        g t        t        t              g k(  sJ t        t        dz  dz   t        dz  t        z  t        dz  z   gt        t        d      dt        dz  z   dt        dz  z   gk(  sJ t        t        dz  dz   t        dz  t        z  t        dz  z   t        t        z  t        dz  z  gt        t        t        d      dt        dz  z   t        dz  dt        dz  z   gk(  sJ t        t        dz  dz   t        dz  t        z  t        dz  z   gt        t        dd	
      t	        dt        dz  z   t        t              t	        dt        dz  z   t        t              gk(  sJ t        t        dz  dz   t        dz  t        z  t        dz  z   t        t        z  t        dz  z  gt        t        t        dd	
      t	        dt        dz  z   t        t        t              t	        t        dz  t        t        t              t	        dt        dz  z   t        t        t              gk(  sJ t        t        dz  dz
  t        dz  dz
  g      t        dz
  gk(  sJ t        t        t        dz  d      t        t        dz  d      g      t        dz
  gk(  sJ dt        dz  z  t        t        z  z   dt        z  z
  dz
  dt        z  dt        z  t        z  z   t        dz  z   t        dt        z  z
  t        t        z  z   dt        dz  z  z
  g} t        dz  t        dz  t        dz  z  z
  dt        z  t        dz  z  t        z  z
  dt        z  t        dz  z  z   t        dz  t        dz  z  z   dz
  }t        | t        t        t        dd      }|dt        z   t        z   dt        z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   t        dz  z   ddt        z  z   t        dz  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   ddt        z  z   dt        z  z   t        t        z  z   dt        dz  z  z   t        dz  z   t        dz  z   ddt        z  z   t        dz  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   t        dz  z   gk(  sJ t        ||t        t        t        ddd	      \  }}t        t        ||j                        D cg c]
  \  }}||z   c}}|      t	        |d      k(  sJ t        t        z  dt        z  z
  dt        dz  z  t        dz  z
  g} t        | t        t        d      t        dz  dt        z  z
  t        dz  dt        dz  z  z
  t        t        z  dt        z  z
  gk(  sJ t        | t        t        d      t        dz  dt        dz  z  z
  t        dz   dt        dz  z  z   t        t        z  dt        z  z
  gk(  sJ t        | dd	      t        dz  dt        z  z
  t        dz  dt        dz  z  z
  t        t        z  dt        z  z
  gk(  sJ t        dgt              dgk(  sJ t        t        dz  dt        z  z   gt        t              dt        dz  z  dt        z  z   gk(  sJ t        t        d        t        t        dz  dz
  t        dz  dz   gd      t        dz   gk(  sJ t        t        dz  dz
  t        dz  dz   gd      t        dz   gk(  sJ t        t        d        y c c}}w )Nr   r   r'  r   rX   r  r   rZ   Tr  r  r   r^  r  r   Fr)  r  )r   r   r  r   )r  rN   r  r   c                      t        dg      S r   )r:   r   r   r   r   ztest_groebner.<locals>.<lambda>p  s    hsm r   
buchbergermethodf5bc                  0    t        t        t        gd      S )Nunknownr#  )r:   r   r   r   r   r   r   ztest_groebner.<locals>.<lambda>u  s    xAyA r   )r:   r   r   r   r   rl   r9   sumr   r  r|   rB   rx  )rL  r   r  r  r  r   r   s          r   test_groebnerr)  H  st   B1a B&&&QTAXq!tAv1}-q!5Aa!Q$hPRUVXYUYPYEZZZZQTAXq!tAv1}ac!Q$h7Aq	RWY\]_`\`W`bcefbfhilmoplphpVqqqqQTAXq!tAv1}-q!5M	a!Q$h1	tBAIq!456 6 6QTAXq!tAv1}ac!Q$h7Aq	Y]^	b1a4iAq	!41aA#6QAXq!Q8OPQ Q Q QTAXq!tax()a!eW444R1a["QT1+./AE7:::	
1a4!A#!	a	1qs1uq!t!3Q1Wqs]Qq!tV5KLA	1q!tAqDy1Q3q!t8A:%1QT	1AqDAI=AAAq!Q%8AQQqS1QT6)AadF2Qq!tV;adBQqS1a4!AqD&(1QT61AadF:Qq!tVCa1fLQqS1Q31$qAv-14q!t;QqS1a4!AqD&(1QT61AadF:Qq!tVCadJL L L L
 1aAq!uDIDAqQ1A1115a9KKKK	
1qsAadFQTM"AAq!9-	
A!QTAadF]AaC!A#I./ / /Aq!9-	
A!Q$A!Q$!ac	23 3 3AYd3	
A!QTAadF]AaC!A#I./ / / QCs"""QTCE\NAq)c!Q$hQ.>-????
34QTAXq!tax(>1q5'IIIQTAXq!tax(7AE7BBB
:AB' 2s   ]
c                  
   t         t        z   t        z   t        z   t         t        z  t         t        z  z   t        t        z  z   t        t        z  z   t         t        z  t        z  t         t        z  t        z  z   t         t        z  t        z  z   t        t        z  t        z  z   t         t        z  t        z  t        z  dz
  g} t	        | t         t        t        t        t
              }dt         z  dt        dz  z  z   dt        dz  z  z
  dt        z  z
  dt        z  dt        z  z   dt        dz  z  z
  dt        dz  z  z   dt        z  z   dt        dz  z  dt        d	z  z  z   dt        d
z  z  z
  dt        dz  z  z
  dt        z  t        dz  z  dt        z  z   t        dz  z
  dt        dz  z  z   dt        z  z   t        dz  t        dz  z
  t        dz  z
  dz   g}t	        | t         t        t        t        t              |k(  sJ |j                  t              |k(  sJ dt        dz  z  dt        dz  z  z   dt        d
z  z  z
  dt        dz  z  z
  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z   dt        z  z
  dz   dt        z  t        dz  z  dt        z  t        d
z  z  z
  dt        z  t        dz  z  z   dt        z  t        dz  z  z   dt        z  t        dz  z  z   dt        z  t        dz  z  z
  dt        z  t        z  z
  dt        z  z   dt        dz  z  z
  dt        d
z  z  z
  dt        dz  z  z   dt        dz  z  z   dt        dz  z  z   dt        z  z
  dz   g} t	        | t        t        t
              }dt        z  dt        dz  z  z   d t        d
z  z  z
  d!t        dz  z  z
  d"t        dz  z  z   d#t        dz  z  z   d$t        dz  z  z   d%t        z  z
  d&z   dt        dz  z  dt        dz  z  z   dt        d
z  z  z
  dt        dz  z  z
  dt        dz  z  z
  dt        dz  z  z   dt        dz  z  z   dt        z  z
  dz   g}t	        | t        t        t              |k(  sJ |j                  t              |k(  sJ t        dz  t        z
  dt        z  z
  dz   d't        z  t        dz  z   t        z   dz
  g} t	        | t        t        t              }t        dz  t        z
  dt        z  z
  dz   t        dz  dt        z  z
  t        z   dz
  g}t	        | t        t        t
              |k(  sJ |j                  t
              |k(  sJ y )(Nr   r  r'  r   r^  r   r   r   r#  r  r  r  $   r     N   i  i   l   i   i  i8  i  rX  r(     i   rW  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 r  )r   r   r   r   r:   rY   rX   fglmr   r   r   )rL  r  rN  s      r   	test_fglmr2  x  s   	
QQ!ac	AaC!A#-qs1uqs1u}qs1u/Dqs1u/LaPQcRSeTUgXYkZAAq!Qe,A 	
!a1fqAv!#	!ac	AadFQq!tV#ac)	!Q$1b51QT6!AadF*	!AqD1Q3A!Q$&1,	21q!ta	A Aq!Q-22266#;!	
1a4"QT'	Bq!tG	#c!Q$h	.AqD	83q!t8	Cc!Q$h	NQTUVQV	VYZ	ZAad
SU1a4Z#a%1*,tAvad{:SU1a4ZG#a%PQSTPT*TWZ[\W\]^W^^A	1a4	ad(	#%(AX	.04QT		:<?1H	EGJ1u	MOQ	R	SA 	Aq&A 	a"4QT"99<NqRSt<SSQT!	"$71$<	=?STUWXTX?X	YQT!	"$9!$;	<>S	T 	
!Q$AqD2ad7"SAX-1a47#ad(BSAXMPSTUPUUXYY		A Aq!3'1,,,66#;!	
AAaC!	RTAqD[1_q01AAq$A 	
1q1Q3	1qs
Q	A
 Aq!5)Q...66%=Ar   c                     t        t        t        gt        t              du sJ t        t        dz  t        dz  z   gt        t              du sJ t        t        t        t        gt        t        t              du sJ t        t        t        t        gt        t        t        t              du sJ t        t        z  t        z
  t        t        z  t        z
  t        t        z  t        z
  g} t        | t        t        t              du sJ t        dz  dt        z  t        z  z
  dz   t        t        dz  z  t        t        dz  z  z   dt        dz  z  dt        dz  z  z
  g} t        | t        t        t              du sJ y )NTr   r   Fr   r  )r<   r   r   r   r   )rL  s    r   test_is_zero_dimensionalr4    s!   1vq!,4441q!t}a3u<<<1ay!Q2d:::1ay!Q15>>>	
1q!A#'1Q37#Aq!Q*d222	
A!A	1QT6AadF?AadFQq!tVO<Aq!Q*d222r   c                     t         t        z  dt        z  z
  dt        dz  z  t         dz  z
  g} t        | t         t        d      }t        dz  dt        z  z
  t         dz  dt        dz  z  z
  t         t        z  dt        z  z
  g}|D cg c]  }t        |t         t               }}t        | dgz   t         t        d      |k(  sJ t	        |t
              du sJ t        |      dk(  sJ |d   |d   k(  r|d   j                  rJ |d   |d   k(  r|d   j                  rJ |d   |d   k(  r|d   j                  rJ |dd  |dd  k(  rt        d |dd  D              rJ |d d |d d k(  rt        d	 |dd  D              rJ |j                  |k(  sJ |j                  |k(  sJ |j                  t         t        fk(  sJ |j                  t        k(  sJ |j                  t        k(  sJ ||k(  sJ |t!        |      k(  sJ ||k(  sJ |t!        |      k(  sJ |g k7  sJ t        | t         t        dd
      }|d   |d   k(  r|d   j                  sJ |d   |d   k(  r|d   j                  sJ |d   |d   k(  r|d   j                  sJ |dd  |dd  k(  rt#        d |dd  D              sJ |d d |d d k(  rt#        d |dd  D              sJ y c c}w )Nr   rZ   r  r   r   Tr   c              3   4   K   | ]  }|j                     y wr   r  r   r   s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>       %?Aaii%?   c              3   4   K   | ]  }|j                     y wr   r7  r8  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  r9  r:  r   c              3   4   K   | ]  }|j                     y wr   r7  r8  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>       !;!))!;r:  c              3   4   K   | ]  }|j                     y wr   r7  r8  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  r=  r:  )r   r   r:   r   r   r;   r   r  anyexprsr  r   r   rP   r  rZ   r  r   )rL  r  r  r   rh  s        r   test_GroebnerBasisrA    s   	
1qsAadFQTM"AAq	*A	
A!QTAadF]AaC!A#I.A!"$A$q!Q-$A$AGQ3q888a'4///q6Q;;Q41Q4<!,,Q41Q4<!,,Q41Q4<!,,QR5AabE>#%?12%?"???Ra5AbqE>#%?12%?"???77a<<77a<<66aV88r>>77g6M6a==6M6a==7N7Aq	6AQ41Q4<AaDLL((Q41Q4<AaDLL((Q41Q4<AaDLL((QR5AabE>c!;QqrU!;;;;Ra5AbqE>c!;QqrU!;;;;;E 	%s   Kc                     t        t              t        t        t              k(  sJ t        t              t        t        t              k(  sJ t        t        t        z         t        t        t        z   t        t              k(  sJ t        t        t	        t              z         t        t        t	        t              z   t        t	        t                    k(  sJ t        t        t        z   t              t        t        t        z   t        t              k(  sJ t        t        t	        t              z   t	        t                    t        t        t	        t              z   t	        t              t              k(  sJ t        t        t        z  dt        z  t
        dz  z  z   dz         t        t        t        z  dt        z  t
        dz  z  z   dz   t        t        t
              k(  sJ t        dt        t
        z   dz  z  dz
        t        dt        dz  z  dt        z  t
        z  z   dt
        dz  z  z   dz
  t        t
              k(  sJ t        t        t        t
        z   dz  z  dz
        t        t        t        dz  z  dt        z  t        z  t
        z  z   t        t
        dz  z  z   dz
  t        t        t
              k(  sJ t        dt        z  t        t
        z   dz  z  dz
        t        dt        z  t        dz  z  dt        z  t        z  t
        z  z   dt        z  t
        dz  z  z   dz
  t        t        t
              k(  sJ t        dt        t
        z   dz  z  t        z
  dz
        t        dt        dz  z  dt        z  t
        z  z   dt
        dz  z  z   t        z
  dz
  t        t        t
              k(  sJ t        t        t        t
        z   dz  z  t        z
  dz
        t        t        t        dz  z  dt        z  t        z  t
        z  z   t        t
        dz  z  z   t        z
  dz
  t        t        t
              k(  sJ t        dt        z  t        t
        z   dz  z  t        z
  dz
        t        dt        z  t        dz  z  dt        z  t        z  t
        z  z   dt        z  t
        dz  z  z   t        z
  dz
  t        t        t
              k(  sJ t        t        t        z  t        t        z   dz  z   t        t
        z   dz  z         t        dt        z  t
        z  dt        z  t        z  z   t        dz  z   t
        dz  z   dt        dz  z  z   t        t        t
              k(  sJ t        t        t        z  t        t        z   z  t        t
        z   dz  z        t        t        dz  t        dz  z  t        t        dz  z  t
        dz  z  z   t        t        dz  z  t
        dz  z  z   dt
        z  t        dz  z  t        dz  z  z   dt        z  t
        z  t        dz  z  z   t        t        dz  z  z   t        t        t
              k(  sJ t        t        t        t        z   t
        z   t        t        t
                    t        t        t        z   t
        z   t        t        t
              k(  sJ t        t        t        z   dz  t              t        t        dz  dt        z  t        z  z   t        dz  z   t        t        t                 k(  sJ t        t        t        z   dz  t              t        t        dz  dt        z  t        z  z   t        dz  z   t        t        t                 k(  sJ t        dt              t        dt              k(  sJ t        t        d        t        t        t        z   t        t              t        t        t        z   t        t              k(  sJ t        t        t        z   t        t              t        t        t        z   t        t              k(  sJ t        dt        z  dz   dz  d	z  z   t        d
      d	z  z   } t        |       j                         | j                         k(  sJ t        t        dz   z  t        d      dz  z   }t        |      j                         |j                         k(  sJ y )Nr6  r   r,  r   r'  r   r   c                      t        d      S r   )r   r   r   r   r   ztest_poly.<locals>.<lambda>  r  r   r   r  )r   r   r   r   ru   r   rP   r|   rE   rm   r-  rb   )expr1expr2s     r   	test_polyrF    s   7d1aj   7d1aj   A;$q1ua++++CF
tAAJ3q6::::A1a!eQ!2222CF
A'4CF
CFA+FFFF!ac!Q$h#$QqS1Q3q!t8^b-@!Q(JJJJ1q51*q !T!AqD&1Q3q5.1QT6*AA*Eq!%LLLL	1q51*q!!AqD&1Q3q57"2Qq!tV";a"?AqIJ J J!	A  qs1a4x!A#a%'1AaC1H<q@!QJK K K 	A  "1QT6AaCE>AadF#:Q#>#BAq!LM M M	A  "1QT6AaCE!G#3a1f#<q#@1#DaANO O O!QUQJ"Q&'4!AqD1Q3q570BQFQ$F 111 !1a,) ) ) ) !q1uqj AEA:-.QqSUQqSU]QT!AqD(1QT611a;< < <!QUQUQJ&'QT!Q$Y1a41$qAvad{2QqSAXT6 aCE!Q$J!"1a4()*Aq	22 2 2 QUQY1a()T!a%!)Q1-EEEEQ
A$q!tac!e|ad':Abe"LLLLQ
A$q!tac!e|ad':Abe"LLLL1:a###
_- Aq!QUAq 1111Aq!QUAq 1111 1q1Q1a'E; ELLN222qsGad1fE; ELLN222r   c            	      ,   t        dt        dz   d      } t        t        j                  t              t        k(  sJ t        t        j
                  t              t         k(  sJ t        t        d      t              dt        z  k(  sJ t        t        d      t              dt        z  k(  sJ t        t        j                  dt        z        dt        z  k(  sJ t        t        d      t        dz        t        k(  sJ t        t        d      t        t                    dt        t              z  k(  sJ t        t        d      t        dz         | k(  sJ t        t        dt        z        dk(  sJ t        t        dz   t        d            | k(  sJ t        t        j                  t        j                        t        j                  k(  sJ t        ddd      }t        t        d      |      t        d|d      k(  sJ t        d|d      }t        t        j                  |d	
      t        t        j                  |d      k(  sJ t        t        j                  |d
      t        dt        t        j                  |d      d      k(  sJ y )Nr   r   Fr  r   r  r   r   T)clear)
rd   r   rc   rm   r  NegativeOneru   r  rk   r\   )r   r   r   s      r   test_keep_coeffrJ    s   Aq1uu%Aquua A%%%q}}a(QB...qvq!SU***qw"d1f,,,quuac"ac)))qtQqS!Q&&&qtSV$#a&000qtQU#q(((q!A#!###q1uad#q(((qvvquu%///Aq5!Aqua CA$>>>>Aq5!Aqvvq 
U+, , ,qvvq 
CE2UCD D Dr   c                      t         t        t        t              z  t        t         t        z  t              k(  sJ t        t        t              t         z  t        t         t        z  t              k(  sJ y r   )rf   r   r   r   r   r   test_poly_matching_consistencyrL  "  sH     tAqz>T!A#q\)))1:>T!A#q\)))r   c            
      ,   t        t        t        t        t        t        z  z
  t
        t        t        z  z
  z        t        g            t         t        z  t        z  t        t        z  z
  t        t
        z  z   t        t        z  t
        z  z
  k(  sJ y )Nr&  )rb   r/   r   rf   r   r   r   r   r   r   test_issue_5786rN  )  sr    &	
QqS1qs7)*- .23Aa!A#!1Cac!e1KL L Lr   c                  0    G d dt               } t        t        t        t        z  z   z  }ddt        z   z  }t         | |             | |      k(  sJ t        | | |      z         | | |      z   k(  sJ t        | | |      z        | | |      z  k(  sJ y )Nc                       e Zd ZdZy) test_noncommutative.<locals>.fooFN)__name__
__module____qualname__is_commutativer   r   r   foorQ  /  s    r   rV  r   )r_   r   r   r8   )rV  r  r   s      r   test_noncommutativerW  .  s    d 	1qs7A	AE
A#a&>SV###!c!f*SV+++!CF(qQx'''r   c            	         t        t        t        dz  t        t        dz  z  z   t	        t              z   t        d            	 J t        t        t        dz  t	        d      t        dz  z  t        t              z  z   dz   t                    	 J t        t        t        t                    J t        t        t	        d      t        z              J y )Nr   r   rU   r   r   )r>   r   r   r   rs   ru   r   r   r   test_to_rational_coeffsrY  8  s    QTAadF]T!W$a57:>? ? ? QTDGAqDLQ''!+Q/1489 9 9 d1aj)111d4719o.666r   c                      t        t        t        t        z   z        dt        dft        t        z   dfgfk(  sJ t        t        t        t        z   z        dt        dz  t        t        z  z   dfgfk(  sJ y rx  )r.   r   r   r,   r   r   r   test_factor_termsr[  C  sf    q!a%y!a1a&1q5!*)=%>>>>Aq1uI11qs
A&7"8888r   c                  |   t        t        dz  dz   t        d      j                         g dk(  sJ t        t        dz  t        z   dz   t        t        d      j                         dgg ddggk(  sJ t        t        dz  t        z   dz   t        t        t        d      j                         dggg gdgdgggk(  sJ y )Nr   r   rP   r   )r   r   r   r   r   )r   r   as_listr   r   r   r   r   test_as_listr^  I  s    1q!D)113|CCC1q1a4088:sBA>OOOO1q1aAd3;;=78cURDA3*4MN N Nr   c                     t        t        d      t        z        t        d      t        dfgfk(  sJ t        t        d      t        t              z  t        t                    t        d      t        t              dfgfk(  sJ y r  )r.   rs   r   ru   r   r   r   test_issue_11198r`  Q  sd    tAwqy!d1gAx%8888tAws1v~s1v.47c!fa[M2JJJJr   c                      t        t        j                  d      t        z        }  | j                         t        j                  d      t        z  k(  sJ y )Nr  )r   rj   evalfr   r-  r   s    r   test_Poly_precisionrc  V  s:    RXXc]1_A199;"((3-/)))r   c                      t        ddt        d      z   z  t              t        ddt        d      z   z  t        d      k(  sJ y )Nr   r   rU   r   )r   rs   r   r   r   r   r   test_issue_12400re  \  s?    1T!W9q!Ad1gI$/0 0 0r   c                  N   t        t        d      dt        d      z   z  dz  t        d      dt        d      z   z  dz        t        dd      dt        d      z   z  k(  sJ t        t        d      t        dd      z  t        d      t        dd      z        t        d      t        dd	      z  k(  sJ t	        t        dd      t        d      z  t        dd      t        d      z        t        d      t        d      z  dz  k(  sJ t	        dt        d      z  dt        d      z        d
t        d      z  k(  sJ t	        t        d      ddt        dd      z  z   z  dz  t        d      ddt        dd      z  z   z  dz        t        dd      ddt        dd      z  z   z  k(  sJ t        t        dd      t        d      z  t        dd      t        d      z        t        d      dz  k(  sJ t        t        d      t        d      z  dz  t        d      t        d      z  dz        t        d      dz  k(  sJ t        t        d      t        d      z  dz  t        d      t        d      z  dz  t        d      t        d      z  dz  g      t        d      t        dd      z  k(  sJ t        t        d      dt        d      z   z  dz  t        d      dt        d      z   z  dz  t        d      dt        d      z   z  dz  g      dt        d      z   t        dd      z  k(  sJ t	        t        dd      t        d      z  t        dd      t        d      z  t        dd      t        d      z  f      t        dd      t        d      z  k(  sJ t	        t        d      ddt        dd      z  z   z  dz  t        d      ddt        dd      z  z   z  dz  t        d      ddt        dd      z  z   z  dz  g      t        dd      ddt        dd      z  z   z  k(  sJ y )Nr  r   r   r   r#  r'  r   r   r$  r  r  r%  r  r  r  /   r  i  )r   rm   rs   rh   r   r   r   r   test_issue_14364rh  a  s   qtQa[!!#QqT1tAw;%7%:;x2RSVZ[\V]R]?^^^^tAwx1~%tAwx1~'=>$q'(STVX/BYYYYx1~d1g%x1~d1g'=>!B%Q-PQ/QQQqay!DG)$47
222qtQHQN**+A-qtQHQN9J5J/KA/MNRZ[]_`RaefijltuvxylzizezR{{{{x1~d1g%x1~d1g'=>$q'"*LLLqtDH}Q!T"Xb 01T"Xb[@@@ !T"Xa1d2hq!A$tBx-/BCtBxPXYZ\^P_G____!a$q'k"1$adAQK&8&:AaD!d1g+<Nr<QRSYZ]abc]dYdfnoprufvXvvvvAtBx'!QR)@(1a.QUVXQYBYZ[_ghjlm_nostvow_wwww!a!Xa^++,Q.!a!Xa^:K6K0LQ0NPQRTPUWX[\^fghjk^l[lWlPmnoPopqu}  B  DE  vF  JK  NO  QY  Z[  ]^  Q_  N_  J_  v`  `  `  `r   c                  \   t        dd      } d| dz  z  | dz   t        d| dz  z  | dz  dz
  dz  z         z   dz   dz  z  ddt        dd	      z  z  | z  | dz   t        d| dz  z  | dz  dz
  dz  z         z   dz   t        dd	      z  z  z
  d
| z  z   }t        |d      | | dz  dz   z  k(  sJ y )Nr   Trk  r  r   r   r  r'  r   r#  r(  )rn   rs   rh   r/   )r   r  s     r   test_issue_15669rj  s  s    sT"Aq!tGadUT!AqD&AqD1Hq="899A=AA	!Xa^
A1utAadFadQh],B'CCaG(STVW.XXY[]^_[_`D$T"aAl222r   c            	         t        d      } t        | dz
        }t               5  t        t        | dz         t        | dz         gg      }d d d        t	        t
        d      5  |z  ||z  cxk(  r0t        t        | dz  dz
        t        | dz  dz
        gg      k(  sJ  J 	 d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)Nr   r   F)test_stacklevelr   )rn   r   r}   rv   r~   r{   )r   r   r  s      r   test_issue_17988rm  z  s    sAQUA		! 1T!a%[$q1u+./01	&	> L1uAK$q!tax.$q!tax.)I(J!KKKKKKL L1 1L Ls   'B/$AB;/B8;Cc                      t        dt        z   dt        z
  z        dt        z   k(  sJ t        dt        z   dt        z
  z        dk(  sJ y )Nr   r   r   r   )r8   rf   r   r   r   test_issue_18205ro    sD    1q51q5/"a!e+++1q51q5/"a'''r   c                      t         dz  dz   t         dz
  dz  z  t         dz
  dz  z  t         dz
  dz  z  } dt         dz  dz   dft         dz
  dft         dz  dt         z  z
  dz   dfgf}t        |       |k(  sJ y )Nr   r   r   r   r  )r   r,   )r   r  s     r   test_issue_8695rq    s    	
Aa!eaZ1q51*,Az9A1a4!8Q-!a%adQqSj1na-@ABFA;&   r   c                  4    t        t              dz  t        t              z
  dz    t        t         fd       t        t         fd       t        t         fd       t        t         fd       t        t         fd       t        t         fd       y )	Nr   r   c                       t         ddd      S )Nr   r   r  r  r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    KAq$$? r   c                      t         dd      S )Nr   r   r  r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    KB$: r   c                      t               S r   )r4   r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    JrN r   c                      t               S r   r  r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    F2J r   c                      t               S r   )r6   r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    L$4 r   c                      t         d      S r  r  r*  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    $8Q$? r   )ru   r   r|   rG   r*  s   @r   test_issue_19113ry    s`    	QSV	a	B
??@
?:;
?23
?./
?45
??@r   c                     dt         dz  z  dt        d      z  t         z  t        z  z
  t        dz  z   } t        | t        d            dt         t        d      t        z  dz  z
  dz  z  k(  sJ t         t
        z  t         z  t
        t        z  z
  t         t        z  z   t        t        z  t        z  z
  } t        | t              t         t        t        z  z
  t         t
        z  t        z   z  k(  sJ y )Nr   r&  )r   rs   r   r/   rf   r   r   r   s    r   test_issue_19360r{    s    	!Q$471QA%A!tAw'1a4719Q;.?!-C+CCCC	
1Q1qsQqSU"A!q!a!A#g1q%9999r   c                      t        t        t        z   t        t        t              }  | j                         }| |k(  sJ d       | j
                  |j
                  k(  sJ d       y )Nz(Copied polynomial not equal to original.z9Copied polynomial has different generators than original.)r   r   r   r   copyr   )r   r}  s     r   test_poly_copy_equals_originalr~    s[    Aq!QD499;D4< 424<99		! ECE!r   c                      t        t        t        z   t        t        t              } t	        j
                  t	        j                  |             }| |k(  sJ d       | j                  |j                  k(  sJ d       y )Nz.Deserialized polynomial not equal to original.z?Deserialized polynomial has different generators than original.)r   r   r   r   pickleloadsdumpsr   )r   deserializeds     r   &test_deserialized_poly_equals_originalr    si    Aq!QD<<T 23L< :8:99))) KIK)r   c                  z    t        t        t        dz   z  t        dz  z
  t        z
  t              } | t         k(  sJ y rx  )r   r   ri   )r  s    r   test_issue_20389r    s2    AQK!q&(1,a0FbS==r   c                      ddl m}   | d      \  }}t        dt        |z  |z  z   |d|z        } |j                         t        d      k(  sJ y )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   rf   r   rm   )r  r   r  r   s       r   test_issue_20985r    sJ    )5>DAqac!eQ!$D4;;=AaD   r   (N  __doc__r  sympy.polys.polytoolsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   sympy.polys.polyerrorsr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   sympy.polys.polyclassesrL   sympy.polys.fieldsrN   sympy.polys.domainsrO   rP   rQ   rR   rS   rT   rU   sympy.polys.domains.realfieldrV    sympy.polys.domains.complexfieldrW   sympy.polys.orderingsrX   rY   rZ   sympy.combinatorics.galoisr[   sympy.core.addr\   sympy.core.basicr]   sympy.core.containersr^   sympy.core.exprr_   sympy.core.functionr`   ra   rb   sympy.core.mulrc   rd   sympy.core.numbersre   rf   rg   rh   ri   rj   sympy.core.powerrk   sympy.core.relationalrl   sympy.core.singletonrm   r  rn   $sympy.functions.elementary.complexesro   rp   &sympy.functions.elementary.exponentialrq   %sympy.functions.elementary.hyperbolicrr   (sympy.functions.elementary.miscellaneousrs   $sympy.functions.elementary.piecewisert   (sympy.functions.elementary.trigonometricru   sympy.matrices.denserv   "sympy.matrices.expressions.matexprrw   sympy.polys.rootoftoolsrx   sympy.simplify.simplifyry   sympy.utilities.iterablesrz   sympy.utilities.exceptionsr{   sympy.testing.pytestr|   r}   r~   	sympy.abcr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0  r3  r8  r;  r>  rO  rS  rV  rZ  r]  r_  rc  rj  rn  rr  ru  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r*  r/  r2  r6  r=  r@  rI  rY  r\  r_  rb  re  rg  rj  rm  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r#  r+  r-  r2  r5  r9  r@  rB  rE  rO  rY  r_  rb  rd  ri  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r)  r2  r4  rA  rF  rJ  rL  rN  rW  rY  r[  r^  r`  rc  re  rh  rj  rm  ro  rq  ry  r{  r~  r  r  r  r   r   r   <module>r     s   H                :    ( $ > > > 3 9 5 5 <  % '   : : + D D   $ " $ 9 6 6 9 : 8 ' ; * , . > F F 5 5 5 5
*%ZS$YNxS>K2RKj0JD3
2
T-n6J@ (F>
;G B
A4466
G
KG,","* 7:
6%.*:)
(NVF+B2
ACPD=04'(
@
JKET	@!"/,74	SIE(4F&57n6&I8
K	8)7B:;$	=,<	=A'&C6
+(D$?$A8Lt1Hh,4^v*r(DV;7674
"@0@*g,T2. 0F38>*
$0><GJN<F:0"O8M`[O|;<S
nNb%FP!4HD2:.KZ\4,?$	1o/dN8(7V-C`'T3'<T/3dD,*L
(79NK
*0
`$3L(
!A:EK
!r   