
    g                       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Ȅ ZMdS )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                 d    t          | |          D ]\  }}t          ||z
            dk    r dS dS )Ng|=FT)zipabs)r   r   uvs       \/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqr   W   sC    Aq		  1q1u::55 4    c                 D   t          |           t          |          k    rt          |           rIt          |           t          |          k    r't          d t	          | |          D                       S dS t          | t                    o | j        |d          S dS )Nc              3   <   K   | ]\  }}t          ||          V  d S N)
_strict_eq).0r   r   s      r   	<genexpr>z_strict_eq.<locals>.<genexpr>b   s0      BB1:a++BBBBBBr   FTstrict)typerz   lenallr   
isinstancer   eq)r   r   s     r   r   r   ^   s    Aww$q''A;; 	@1vvQBBAq		BBBBBBua&&?414$+?+?+??ur   c                     t          t          t                    } t                      5  | t          t                    z   d d d            n# 1 swxY w Y   t                      5  | t          t                    z    d d d            n# 1 swxY w Y   t                      5  | t          t                    z
   d d d            d S # 1 swxY w Y   d S r   )r   r   r}   rq   r   s    r   test_Poly_mixed_operationsr   k   sn   Q

A		!	!  	CFF

              		!	!  	CFF

              		!	!  	CFF

                 s5   AAA&B

BB#CCCc                     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 d S )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   s   
1A>!1Q( ( ((+sAAaDD!!A$$</C/CD D D D>!1Q( ( ((+sAAaDD!!A$$</C/CD D D D >1. . ..1S!!A$$!q5I5IJ J J J>1. . ..1S!!A$$!q5I5IJ J J J >1a00	18  aaddAAaDD\AAaDD6$:A > >? ? ? ? >aA,,Q///3sBqEE2a55>27N7NNNNN>!1D* * **-beeRUU^R1H1HI I I I >!1R) ) )),RUUBqEENB0G0GH H H H>!1R) ) )),RUUBqEENB0G0GH H H H >$ $ $$'31r!uu~r+B+BC C C C>$0 0 003sBqEE2a55>27N7NO O O O >2/ / //2c2a55"Q%%."6M6MN N N N>2/ / //2c2a55"Q%%."6M6MN N N N >4Q.qEBBBSVVAXq&&&' ' ' '>4)!u===QqS!D!!!" " " ">61+QFeDDDQqS!Qt$$$% % % %>61+QFeDD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            d S )Nr   r   r   r   r   r   Tr   r         ?        c                  H    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&0Q0Q0Q 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3373!aadd|Q;O;OOOOO>1a&q33373!aadd|Q;O;OOOOO>1a&q)))-beeRUU^R1H1HHHHH>1a&q5559S"Q%%AQS=T=TTTTT>1a&q4448CA1PR<S<SSSSS>1a&q4448CA1PR<S<SSSSS>1c(+++/33y"3E3EEEEE>3(+++/33C7I23N3NNNNN
&(Q(QRRRRRr   c                  6    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 d S )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#F#F r   c                  F    t          j         t          t                    S r   r   r   r   rP   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>       4>!!B#G#G#G r   c                  F    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                  F    t          j         t          t                    S r   r   r   r   rQ   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  F    t          j         t          t                    S r   )r   r   r   rP   hs   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  F    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#G#G r   c                  F    t          j         t          t                    S r   r   r   s   r   r   z%test_Poly_from_poly.<locals>.<lambda>   r   r   c                  F    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      so   QUAb!!!AQUAq!!!AQUAq$$$A
1A>!!!!!>!A&&&*c11Q441,.B.BBBBB>!B'''+sBqEE2a55>2/F/FFFFF>!B'''+sBqEE2a55>2/F/FFFFF>!!$$$))))>!!A...2c11Q441,6J6JJJJJ>!!B///3sBqEE2a55>27N7NNNNN>!!B///3sBqEE2a55>27N7NNNNN>!!$$$QUAg(F(F(FFFFF
>FFFFFGGG
>GGGGHHH
>GGGGHHH>!1a&)))T!a%Ad-K-K-KKKKK>	Ar# # #&*1q5!Qt&D&D&DE E E E>	Ar# # #&*1q5!Qt&D&D&DE E E E>	A# # #&*1q5!Qw&G&G&GH H H H 	1A>!!!!!>!B'''+sBqEE2b66?B/G/GGGGG
>????@@@>!A&&&*c11Q441,.B.BBBBB>!!$$$))))>!!B///3sBqEE2b66?B7O7OOOOO
>GGGGHHH>!!A...2c11Q441,6J6JJJJJ
1A>!!!!!>	"  S2a55'BqEE2a55>!:B??@ @ @ @>	"  S2a55'BqEE2a55>!:B??@ @ @ @>!A&&&*cAAaDD6AAaDD!!A$$<2H!.L.LLLLL>!!$$$QUAbe(D(D(DDDDD
>GGGGHHH>	"Q%! ! !$(Q"Q%$@$@$@A A A A
>GGGGHHH>	"Q%! ! !$(Q"Q%$@$@$@A A A A
>GGGGHHH>!!$$$QUAbe(D(D(DDDDD
>GGGGHHH>	"Q%! ! !$(Q"Q%$@$@$@A A A A
>GGGGHHH>	"Q%! ! !$(Q"Q%$@$@$@A A A A
>GGGGHHH>!1a&)))Q....>	Ar# # ##&#1wA1.G*L*LM M M M>	Ar# # ##&#1wA1.G*L*LM M M M>	Aq" " ""%qqttfqqttQQqTTl-CQ)G)GH H H H >	A  sRUUGbeeRUU^#<bAAB B B B>	Ar# # ##&#1wA1.G*L*LM M M M>	Ar# # ##&#1wA1.G*L*LM M M M>	Aq" " ""%qqttfqqttQQqTTl-CQ)G)GH H H H >	Ad$ $ $$'3A"Q%%A/H"+M+MN N N N>	Ad$ $ $$'3A"Q%%A/H"+M+MN N N 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 d S )	Nc                  >    t          j        t          j                  S r   )r   	from_exprrm   Zeror   r   r   r   z%test_Poly_from_expr.<locals>.<lambda>  s    T^AF%;%; r   c                  D    t          j        t          d                    S Nr   )r   r   rm   r   r   r   r   z%test_Poly_from_expr.<locals>.<lambda>  s    T^AaDD%9%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9:::	AB>!a%+++/31rr!uu~r3J3JJJJJ>!a%+++/31rr!uu~r3J3JJJJJ>!a%2...2c22a55""Q%%."6M6MMMMM>!a%2...2c22a55""Q%%."6M6MMMMM>!a%+++/3A""Q%%A7PRT3U3UUUUU>!a%Ab1115rr!uug1rrRSuu~=VXZ9[9[[[[[>!a%  $RUUBqEENB(?(?????>!a%  $RUUBqEENB(?(?????>!a%##'31r!uu~r+B+BBBBB>!a%##'31r!uu~r+B+BBBBB>!a%+++/31r!uu~r3J3JJJJJ>!a%+++/31r!uu~r3J3JJJJJ>!a%2...2c2a55"Q%%."6M6MMMMM>!a%2...2c2a55"Q%%."6M6MMMMM>!a%Ab1115r!uug1w=OQS9T9TTTTT>!a%Ab1115r!uubeen=Mr9R9RRRRRRRr   c            	         t           t                   } t           | t          dz             t          |           j        t           | t          dz             g|           k    s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 |                                 } 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 |                                 } 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 |                                 } 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 d S )Nr   r   )rP   r   r   r   r   rL   	get_fieldrQ   old_poly_ringalgebraic_fieldrf   )doms    r   test_poly_from_domain_elementr   /  su   
Q%CAaC!C(((,SS1XXJ0D0DDDDD
--//CAaC!C(((,SS1XXJ0D0DDDDD
Q%CAaC!C(((,SS1XXJ0D0DDDDD
--//CAaC!C(((,SS1XXJ0D0DDDDD

1

CRUUBqEEN##Qs33373RUUBqEEN@S@S?TVY;Z;ZZZZZ
--//CRUUBqEEN##Qs33373RUUBqEEN@S@S?TVY;Z;ZZZZZ

1

CRUUBqEEN##Qs33373RUUBqEEN@S@S?TVY;Z;ZZZZZ
--//CRUUBqEEN##Qs33373RUUBqEEN@S@S?TVY;Z;ZZZZZ

Q

CQFQs+++/3QF}c3J3JJJJ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|                                 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                                          g dk    sJ t          dt          dz  z  dt          z  z   dz   d                                          g dk    sJ t          dt          dz  z  dt          z  z   dz   d                                           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                                          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                                           g d$          sJ t          d%t          dz  z  d&t          z  z   dz   d                                          g dk    sJ t          d%t          dz  z  d&t          z  z   dz   d                                          g dk    sJ t          d%t          dz  z  d&t          z  z   dz   d                                           g d!k    sJ t          t           d'            t          d(t          dz  z  d)t          z  z   dz   d                                          t#          d*d+          t#          d,d+          dgk    sJ t          d(t          dz  z  d)t          z  z   dz   d                                           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&          /                                          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                                             t0                    sJ t/          t          t          dz  t          z   t&          z   d7z                                             t2                    sJ d S )8Nc                  H    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$5 r   c                  v    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$C$C r   c                  v    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                  L    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 D D r   c                  L    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 H H r   c                  B    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 H H r   c                  h    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!WWI N N N r   c                  ^    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!WWI N N N r   c                  L    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 I I r   c                  B    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 I I r   c                  L    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 F F r   c                  L    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 E E r   c                  L    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 G G r   c                  L    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 F F r   c                  B    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(P(P r   c                  @    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(E(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%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!WW r   zx-xr   r   )r   r   r   r   r   rP   r   )r   r   r   rQ   rT   )      @       @r   c                  x    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>|  s7    4!Q$q1Xa^^3C(Ca(GPT#U#U#U r   r   )g333333?g?r   r  r  c                  V    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#J#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  st   
?55666
?CCDDD
?CCDDD
;::;;;
;DDEEE
;HHIII
;HHIII
;NNOOO
;NNOOO
;IIJJJ
;IIJJJ
;FFGGG
;EEFFF
;GGHHH
;FFGGG
 P PQQQ
 E EFFF
77888
11222
11222
__---;;$q!**$$$$	!Q$1qAA!""A&&!++++aAY##q((((Aq	1""""Aq	1""""RAqA6aAY199;;!#3#3#3#3QqS1Q3Y1%%q))T!A#!)Q-?-?????!Q$1q ...99;;yyyHHHH!Q$1q ...99;;yyyHHHH!Q$1q ...99;;NNNN
>UUVVV	!Q$q1Xa^^##a'6 6 66@jllxPQST~~W_`acdWeWeghFij j j jQq!tVAX(1a..((1,T:::EEGGZ Z Z Z Z AqD3q5 1$T222==??999LLLLAqD3q5 1$T222==??999LLLLAqD3q51T+ + ++5:<<???K K K K >JJKKKAqD3q5 1$T222==??HRQSDTDTV^_aceVfVfhiCjjjjjAqD3q5 1$T222==?????RRRRAq111a88QT!Vac!Q$h1Q&1--. . . . 1qA&&&1133r7I!7L7LLLLL	!Q$A1q1u$u,A1et444Qq!tVad]QT!AE)A-q%	 	 	    1eu555Qq!tVeAqDj 1a4'%A+591e	- 	- 	-- - - - d1a4!8c>**5577CCCCCd1a4!8a<#-..99;;\JJJJJJJr   c                  t    t          t          dz  dz             j        t          dz  dz   t          fk    sJ d S r  )r   r   argsr   r   r   test_Poly__argsr3    s6    1q>>1a4!8Q-//////r   c                     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 d S )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0QQ##(QD0000QQ##(QD0000QQA&&+1v5555QQA&&+1v5555QQAq)).1a);;;;QQAq)).1a);;;;QQAq)).1a);;;;QQ  %!Q2222QQk2227Aq!9DDDDQQk2227Aq!9DDDDQQk2227Aq!9DDDDQQAq{;;;@Q1IMMMMQQS))).1a);;;;QQS))).1a);;;;QQS))).1a);;;;QQQ''',Aq	9999QQQ''',Aq	9999QQQ''',Aq	9999QQAqc2227Aq!9DDDDQQSw777<Aq	IIIIQQSw777<Aq	III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 d S )Nr   r   r   )r   r   zerorP   rQ   r   r   r   test_Poly_zeror;    s\    77<41R0000000!99>T!Qr22222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 d S )Nr   r   r   )r   r   onerP   rQ   r   r   r   test_Poly_oner>    s\    77;$q!B///////!99=DAb111111111r   c                  -   t          t          d            t          d          } t          t          t          d                              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                                        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
                              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                                        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                                        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
                              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          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                                        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
                              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                                        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                                        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
                              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                                        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          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
                              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          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                                        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
                              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                                        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                                        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
                              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                                        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                                        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
                              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                                        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                                        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                              t          t          t           z  t          z  t          d                    dd          t          | |d          g|                                          t          ||z   |d          g|                                          fk    sJ t          t          t          z  t          d                              t          t          t           z  t          z  t          d                    dd          t          | |d          g|                                          t          ||z   |d          g|                                          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          }|                    |          dd          |j        |j        fk    sJ d S )Nc                  Z    t          t                                        t                    S r   r   r   _unifyr   r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s    d1ggnnQ&7&7 r   r   r   r   r   r   c                      t          t          t          d                              t          t          t          d                    S )Nr   r   r   rA  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s3    d1a&;&;&;&B&B41VWCXCXCX&Y&Y r   c                      t          t          t          t                                        t          t          t          d                    S Nr   r   )r   r   r   rB  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s-    d1amm&:&:41a;P;P;P&Q&Q r   c                      t          t          t          d                              t          t          t          t                              S rE  rA  r   r   r   r   z"test_Poly__unify.<locals>.<lambda>  s-    d1a&;&;&;&B&B41a==&Q&Q r   rQ   r   Tr&  zQQ<sqrt(2) + I>za,bZZ[a]zZZ(a,b)zZZ(a)c                      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>  s3    4QTAqDF]AT(J(J(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    su   
77888	AB1a   ''Q1(=(=(=>>qrrBbbeeWbM2bbeeRRUU^$4b 9 9G; ; ; ; ;
YYZZZ
QQRRR
QQRRRAq>>  a!eQ004	beeRUU^R	 	 #r!uubeenb"9"9:; ; ; ;Aq&&&--d1q5!nn==abbA	beeRUU^R	 	 #r!uubeenb"9"9:; ; ; ;Aq>>  a!eQt!<!<!<==abbA	beeRUU^R	 	 #r!uubeenb"9"9:; ; ; ; Aq>>  a!eQ!2!233ABB7	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq&&&--d1q5!Q.?.?@@D	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq>>  a!eQ$!?!?!?@@D	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C C Aq!##DQNN33ABB7	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!D)))00a!eQ@@D	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!##DQ$$?$?$?@@D	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C C Aq!##DQ1$5$566qrr:	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!D)))00a!eQ1B1BCCABBG	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!##DQ1T$B$B$BCCABBG	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C C Aq>>  a!eQ!2!233ABB7	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq&&&--d1q5!Q.?.?@@D	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq>>  a!eQ$!?!?!?@@D	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ? Aq!##DQNN33ABB7	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq!D)))00a!eQ@@D	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq!##DQ$$?$?$?@@D	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ? Aq!##DQ1$5$566qrr:	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!D)))00a!eQ1B1BCCABBG	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C CAq!##DQ1T$B$B$BCCABBG	r!uug1w	$	$cBqEE7RUUG*<b&A&ABC C C C Aq!##DQ1$5$566qrr:	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq!D)))00a!eQ1B1BCCABBG	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ?Aq!##DQ1T$B$B$BCCABBG	r!uubeenr	"	"C"Q%%A(8"$=$=>? ? ? ? 1q!D)))//QTDGG^QRV0W0W0WXX!Q$(A&7888$q!td1gg~qYj:k:k:klm m m m E2GAq!!Qw'''..tAaCE1Y/O/O/OPPQRQSQST	a1Y	&	&QqS!!A$$K(G(GHI I I I !Qw'''..tAaCE1Y/O/O/OPPQRQSQST	a1Y	&	&QqS!!A$$K(G(GHI I I I >[[\\\QTAaCZ!^Qw///AQTAaCZ!^Qw///A88A;;qrr?quaen,,,,,,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 d S Nr   r   r   )r   r   free_symbolsr   r   ru   rU   r   r   r   test_Poly_free_symbolsrS  $  s   1q>>&1#----1qs
(Q1I55551qs
A+1ay88881s1Q3xx  -!Q::::1s1Q3xx##0Q1I====1s1Q3xx2...;1ayHHHHA1aA&&3s::::CFF
A+1v555555r   c                  T   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 d S rQ  )r   r   rR  setr   r   ru   rU   r   r   r   test_PurePoly_free_symbolsrV  /  s)   AqD1H*cee3333AqD1Q3J,5555AqD1Q3J""/Aq69999AqD3qs88O$$1SUU::::AqD3qs88OQ''4A>>>>AqD3qs88OQr222?Aq6IIIIIIr   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                    }|                     |          du sJ |                     |          du sJ |                     |d          du s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 d S )
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  s   AJJ$q!**$----Ab!!!T!QZZ/E9999AJJ$q!B////E9999Abe$$$Q

2u<<<<AJJ$q!BqE2222u<<<<1aOOtAqzz)e3333AqMMT!QZZ'E1111AJJ$q!Q--'E1111A1adQh!2!22u<<<<A1adQh!2!22u<<<<Q"AQ"A4477e4477d????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                    }|                     |          du sJ |                     |          du sJ |                     |d          du sJ |                     |d          du sJ t          t          t          t                    } t          t
          t
          t                    }|                     |          du sJ |                     |          du sJ |                     |d          du sJ |                     |d          du sJ d S )NTr   Fr   r   r   )r   r   rQ   rP   r   r   r   rY  r   r   s     r   test_PurePoly__eq__r]  X  s   QNNhq!nn,5555Q"%%%!Q7D@@@@QNNhq!B7777D@@@@Q"Q%(((HQNN:tCCCCQNNhq!BqE::::tCCCCQqS!Q8Aq>>1e;;;;Q1!Q/E9999QNNhq!Q///E9999QTAXq!!XadQh%:%::tCCCCQTAXq!!XadQh%:%::tCCCCAb!!!AAb!!!A4477d????4477e44$45((((44$44''''Ab!!!AAb!!!A4477d????4477e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 d S )Nr   r   T)r   r   r   r   r   r   r   test_PurePoly_Polyr_  {  sl    htAqD1H~~..99TAAAAd8AqD1H--..55======r   c                     t          dt          z                                            t          k    sJ t          dt          z  d                                          t          k    sJ t          dt          z  d                                          t          k    sJ t          t          dz                                            t          k    sJ t          t          d            t          t          dz  d                                          t          k    sJ t          t          dt          z                                            t                    sJ d S )Nr   rP   r   rQ   c                  4    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#9#9 r   皙?)	r   r   r/  rP   rQ   r|   rH   r   rV   r   r   r   test_Poly_get_domainrc    s    !99!!R''''!D!!!,,.."4444!D!!!,,.."4444!99!!R''''
>99:::!D!!!,,.."4444d3q5kk,,..	:::::::r   c                     t          dt          z  dz                                 t                    t          dt          z  dz             k    sJ t          dt          z  dz                                 d          t          dt          z  dz             k    sJ t          dt          z  dz                                 t                    t          dt          z  dz   d          k    sJ t          dt          z  dz                                 d          t          dt          z  dz   d          k    sJ t          t          dd          t          z  t          dd          z                                 d          t          dt          z  d	z             k    sJ t          dt          z  d	z                                 d          t          t          dd          t          z  t          dd          z             k    sJ t          t          d
            t          t          d            t          t          d            d S )Nr   r   rP   rQ   r   r#  rT   rb  皙?c                  f    t          t          dz  dz                                 t                    S r  )r   r   
set_domainrP   r   r   r   r   z&test_Poly_set_domain.<locals>.<lambda>  s"    4!a==#;#;B#?#? r   c                  d    t          t          dz   d                              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#9#9#D#DR#H#H r   c                      t          t          t          z  t          t                                        t          t                             S r   )r   r   r   rg  rP   r   r   r   r   z&test_Poly_set_domain.<locals>.<lambda>  s&    D1aOO$>$>r!u$E$E r   )	r   r   rg  rP   rQ   rh   r|   rH   rF   r   r   r   test_Poly_set_domainrj    s   !a==##B''4!a==8888!a==##D))T!A#']]::::!a==##B''4!a+E+E+EEEEE!a==##D))T!A#'$-G-G-GGGGGB!HQOO344??EEcRSeVYkIZIZZZZZA''--hq"ooa6G(STVX//6Y1Z1ZZZZZ
>??@@@
>HHIII
?EEFFFFFr   c                      t          t          dz  dz   d                                          dk    sJ t          t          d            d S )Nr   r   r   c                  Z    t          t          dz  dz                                             S r  )r   r   get_modulusr   r   r   r   z'test_Poly_get_modulus.<locals>.<lambda>  s     DANN$>$>$@$@ r   )r   r   rm  r|   rG   r   r   r   test_Poly_get_modulusrn    sN    1q!$$$0022a7777
?@@AAAAAr   c                     t          t          dz  dz   d                              d          t          t          dz  dz   d          k    sJ t          t          dz  dz   d                              d          t          t          dz  dz   d          k    sJ t          t          dz  dz                                 d          t          t          dz  dz   d          k    sJ t          t          d            d S )Nr   r   r   r   r   c                  \    t          t          dz  dz                                 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/H/HI I I I	1q!  ([^^tAqD1Ha/H/H/HI I I I 1q>>%%a((DA1,E,E,EEEEE
>??@@@@@r   c                      t          t          dz                                 d          t          t          dz             k    sJ d S )Nr   r   r   )r   r   
add_groundr   r   r   test_Poly_add_groundru    ;    A;;!!!$$QU333333r   c                      t          t          dz                                 d          t          t          dz
            k    sJ d S Nr   r   )r   r   
sub_groundr   r   r   test_Poly_sub_groundrz    rv  r   c                      t          t          dz                                 d          t          dt          z  dz             k    sJ d S rx  )r   r   
mul_groundr   r   r   test_Poly_mul_groundr}    s?    A;;!!!$$QqS1W555555r   c                  &   t          dt          z  dz                                 d          t          t          dz             k    sJ t          dt          z  dz                                 d          t          t          dz             k    sJ d S )Nr   r'  r   r   )r   r   
quo_groundr   r   r   test_Poly_quo_groundr    sv    !a==##A&&$q1u++5555!a==##A&&$q1u++555555r   c                      t          dt          z  dz                                 d          t          t          dz             k    sJ t          t          d            d S )Nr   r'  c                  \    t          dt          z  dz                                 d          S Nr   r   )r   r   exquo_groundr   r   r   r   z(test_Poly_exquo_ground.<locals>.<lambda>  s"    QqS1W(B(B1(E(E r   )r   r   r  r|   r@   r   r   r   test_Poly_exquo_groundr    sT    !a==%%a((DQKK7777
 E EFFFFFr   c                     t          t           dz   t                                                    t          t          t           dz   t                              cxk    r!t          t          dz   t                    k    sn J d S r   )r   r   r   r   r   r   test_Poly_absr    si    Q??  CaR!VQ$8$8JJJJDQNNJJJJJJJJr   c                      t          t           dz   t                                                    t          t           dz   t                     cxk    r!t          t          dz
  t                    k    sn J d S r   )r   r   negr   r   r   test_Poly_negr    sd    Q??  T1"q&!__$4FFFFQUAFFFFFFFFr   c                     t          dt                                        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                                        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                                        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            n# 1 swxY w Y   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 d S Nr   r   )r   r   addr   r}   ru   r   r   r   test_Poly_addr    s6   1::>>$q!**%%a33331::Q

"d1ajj00001::>>$q!**%%a33331a==41::%aA66661::>>$q!Q--((DAqMM99991a==41a==(DAqMM99991::>T!a%^^++++		!	!  Q

SVV               1::>T!a%^^++++tAqzz>T!a%^^++++++   ?+I66I:=I:c                     t          dt                                        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                                        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                                        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            n# 1 swxY w Y   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 d S )Nr   r   r   )r   r   subr   r}   ru   r   r   r   test_Poly_subr    s6   1::>>$q!**%%a33331::Q

"d1ajj00001::>>$q!**%%a33331a==41::%aA66661::>>$q!Q--((DQNN::::1a==41a==(DQNN::::1::>T!a%^^++++		!	!  Q

SVV               1::>T!a%^^++++tAqzz>T!a%^^++++++r  c                     t          dt                                        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                                        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                                        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            n# 1 swxY w Y   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 d S )Nr   r   r'     r   )r   r   mulr   r}   ru   r   r   r   test_Poly_mulr    s2   1::>>$q!**%%a33331::Q

"d1ajj00001::>>$q!**%%a33331a==41::%aA66661::>>$q!Q--((DAqMM99991a==41a==(DAqMM99991::>T!QZZ''''		!	!  Q

SVV               1::>T!A#q\\))))tAqzz>T!A#q\\))))))s   <+I33I7:I7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 d S )Nr   rP   r   )r   r   rm   r   r   r   test_issue_13079r    s    7719QT1T2222222T!WW9QT1T2222222d1gg:bdAd3333333R55a=DAq6666666771R55=DAq666666666r   c                      t          t          t          z  t          t                                                    t          t          dz  t          dz  z  t          t                    k    sJ d S Nr   )r   r   r   sqrr   r   r   test_Poly_sqrr    sK    !Q??  DAadAq$9$9999999r   c                     t          t          t                                        d          t          t          dz  t                    k    sJ t          t          t                                        t          d                    t          t          dz  t                    k    sJ t          dt          z  t          t                                        d          t          dt          dz  z  t          t                    k    sJ t          dt          z  t          t                                        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	            d S )
Nr#  r   r'     r   r   iW  c                  ^    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11B7 r   c                  h    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1114 r   )r   r   powrg   r   r|   	TypeErrorr   r   r   test_Poly_powr  	  sf   1::>>"aeQ////1::>>'"++&&$q"ua..8888!Q??q!!T"QT'1a%8%88888!Q??wqzz**d2ad7Aq.A.AAAAA!Aq!a4AqDAq!#<#<<<<<
977888
94455555r   c                  P   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 d S )Nr   r   r   )r   r   divmod)r   r   r   rs       r   test_Poly_divmodr    sy   1::tAwwqAd1ajjqA!Q<<Aq6!!!!6Q;;;;q5A::::!Q<<Aq6!!!!6Q;;;;q5A::::1::tAqzzqA!Q<<Aq6!!!!6Q;;;;q5A::::77477?a1::d1gg""""7741::1$$$$$$r   c                  z   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                    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                    t          t                    k    du sJ t          t          t                    t          t                    k    du sJ d S )NTF)r   r   r   ru   r   r   r   test_Poly_eq_ner  -  s   Q1a!eQ!2!22t;;;;QNNd1q5!Q///E9999Q1a!eQ/E9999QNNd1q5!nn,5555QNNd1q5!nn,5555Q1Q&4////QNNa!e#,,,,Q1Q&4////QNNa!e#,,,,QNNa!e#,,,,Q1a!eQ!2!22u<<<<QNNd1q5!Q///D8888Q1a!eQ/D8888QNNd1q5!nn,6666QNNd1q5!nn,6666Q1Q&50000QNNa!e#----Q1Q&50000QNNa!e#----QNNa!e#----AJJ#a&& U****AJJ#a&& T))))))r   c                      t          t          dt                              dusJ t          t          dt                              dusJ d S )Nr   Tr   F)boolr   r   r   r   r   test_Poly_nonzeror  J  sJ    DAJJ4''''DAJJ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 d S )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0!a(E11111::4''''1::5((((A	A(D0000!A	??$----!a!)T1111!A	??'50000!99 D((((!a==$----1qs
*d22221qs
*e333377 D((((!99"e++++!99$,,,,77"e++++	2221$q!t+ad2Q68 88EO O O O	2221$q!t+ad2Q68 88EN N N N N Nr   c                  h   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 d S )	Nr   r   TFr   r      r   )r   r   is_irreducibler   r   r   test_Poly_is_irreducibler  z  s    1q1,44441qs
Q.%7777!a$$$3t;;;;!Q$1q "---<EEEEEEr   c                     t          t          dz                                 t          d          dk    sJ t          t          dz                                 t          t                    t          t          dz             k    sJ t          t          dz                                 t          t                    t          t          dz             k    sJ t          t          t          z  t                                        t          t                    t          dz  k    sJ t          t          t          z  t                                        t          t                    t          dz  k    sJ d S )Nr   r   r   )r   r   subsr   r   r   r   test_Poly_subsr    s    A;;Aq!!Q&&&&A;;Aq!!T!a%[[0000A;;Aq!!T!a%[[0000!Q<<Q""ad****!Q<<Q""ad******r   c                  j   t          t          dz                                 t                    t          t          dz             k    sJ t          t          dz                                 t                    t          t          dz             k    sJ t	          t
          d            t          t          dz                                 t          t                    t          t          dz             k    sJ t          t          dz                                 t          t                    t          t          dz             k    sJ t          t          t          z                                 t          t                    t          t          t          z             k    sJ 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             k    sJ 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             k    sJ t	          t
          d            t          t          t          z   t                                        t          t                    t          t          t          z   t                    k    sJ t          t          t          z   t                                        t          t                    t          t          t          z   t                    k    sJ t	          t
          d            t	          t
          d            d S )Nr   c                  j    t          t          t          z                                 t                    S r   )r   r   r   replacer   r   r   r   r   z#test_Poly_replace.<locals>.<lambda>  s    DQKK$7$7$:$: r   c                  v    t          t          t          z                                 t          t                    S r   r   r   r   r  r   r   r   r   z#test_Poly_replace.<locals>.<lambda>       DQKK$7$71$=$= r   c                      t          t          t          z   t                                        t          t                    S r   r  r   r   r   r   z#test_Poly_replace.<locals>.<lambda>  "    DQNN$:$:1a$@$@ r   c                      t          t          t          z   t                                        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0A;;q!!T!a%[[0000
?::;;;A;;q!$$QU3333A;;q!$$QU3333A;;q!$$QU3333A;;q!$$QUAq(9(99999A;;q!$$QU3333A;;q!$$QUAq(9(99999A;;q!$$QU3333
?==>>>Aq>>!!!Q''4Aq>>9999Aq>>!!!Q''4Aq>>9999
?@@AAA
?@@AAAAAr   c                  v   t          t          d            t          t          t          z   t          t                                        t          t                    t          t          t          z   t          t                    k    sJ t          t          t          z   t          t                                        t          t                    t          t          t          z   t          t                    k    sJ t          t          t          z   t          t                                        t          t                    t          t          t          z   t          t                    k    sJ t          t          t          z   t          t                                        t          t                    t          t          t          z   t          t                    k    sJ t          t          t          z   t          t                                        t                    t          t          t          z   t          t                    k    sJ t          t          t          z   t          t                                        t                    t          t          t          z   t          t                    k    sJ d S )Nc                  v    t          t          t          z                                 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    s   
?==>>>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                                        t                    } |                                 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                                        d          t          t          t          z  t          z
  t          t                    k    sJ t          t          d            t          t          d            d S )Nr   r   c                      t          t          t          dz  z  t          dz  z   t          t                                        t                    S r  r   r   r   ltrimr   r   r   r   z!test_Poly_ltrim.<locals>.<lambda>  s0    D1a4!Q$1$=$=$C$CA$F$F r   c                      t          t          t          z  t          z
  t          t                                        d          S )Nr   r  r   r   r   r   z!test_Poly_ltrim.<locals>.<lambda>  s(    D1q!Q$7$7$=$=b$A$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-''AFq!f,<,<,<,<!aAq!!''**d1Q37Aq.A.AAAAA
?FFGGG
?AABBBBBr   c                     t          t          t          z  dz   t          t          t                                        t          t                    du sJ t          t          t          z  t          z   t          t          t                                        t          t                    du sJ t          t          d            d S )Nr   TFc                      t          t          t          dz  z  t          dz  z   t          t                                        t                    S r  )r   r   r   has_only_gensr   r   r   r   r   z)test_Poly_has_only_gens.<locals>.<lambda>  s0    D1a4!Q$1$=$=$K$KA$N$N r   )r   r   r   r   r  r|   rF   r   r   r   test_Poly_has_only_gensr    s    !aAq!!//155====!aAq!!//155>>>>
?NNOOOOOr   c                     t          dt          z  dz   d                                          t          dt          z  dz   d          k    sJ t          dt          z  dz   d                                          t          dt          z  dz   d          k    sJ t          t          d            t          t
          d            d S )Nr   r   rP   r   rQ   c                  Z    t          t          dz  dz                                             S r  r   r   to_ringr   r   r   r   z#test_Poly_to_ring.<locals>.<lambda>  s     4!a==#8#8#:#: r   c                  ^    t          dt          z  dz   d                                          S )Nr   r   r   r   r  r   r   r   r   z#test_Poly_to_ring.<locals>.<lambda>  s'    QqS1Wa 8 8 8 @ @ B B r   )r   r   r  r|   rH   rI   r   r   r   test_Poly_to_ringr    s    !a%%%--//4!a3M3M3MMMMM!a%%%--//4!a3M3M3MMMMM
>::;;;
;BBCCCCCr   c                  
   t          dt          z  dz   d                                          t          dt          z  dz   d          k    sJ t          dt          z  dz   d                                          t          dt          z  dz   d          k    sJ t          t          dz  dz   d                                          t          t          dz  dz   d          k    sJ t          dt          z  dz   d                                          t          dt          z  dz   d          k    sJ t          dt          z  d	z                                             t          dt          z  d	z             k    sJ d S )
Nr   r   rP   r   rQ   r   r   r  r   )r   r   to_fieldr   r   r   test_Poly_to_fieldr    sa   !a%%%..00D1q4N4N4NNNNN!a%%%..00D1q4N4N4NNNNN!a%%%..00D1q4N4N4NNNNN!a###,,..$qsQw2J2J2JJJJJA%%''4A+<+<<<<<<<r   c                     t          dt          z                                            t          dt          z            k    sJ t          t          dz                                            t          t          dz            k    sJ t          dt          z                                            t          t          dz            k    sJ d S )Nr   re  r#  )r   r   to_exactr   r   r   test_Poly_to_exactr    s    !994!99,,,,!994!99,,,,A;;!!T!B$ZZ//////r   c                     t          t          dz  dz   t          t          t                             } |                                 t          t          dz  dz   t          d          k    sJ |                     d          t          t          dz  dz   t          d          k    sJ t          dt          t                                                    t          dt          t                    k    sJ d S )	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8889949  DA1T$B$B$BBBBB1a==  ""d1amm333333r   c                     t          t          dz  dt          dz  z  z   dt          z  z   dz             } |                     dd          t          dt                    k    sJ |                     dd          t          dt                    k    sJ |                     dd          t          dt          z  dz   t                    k    sJ |                     dd          t          dt          dz  z  dt          z  z   dz   t                    k    sJ |                     dd          t          t          dz  dt          dz  z  z   dt          z  z   dz   t                    k    sJ |                     t          dd          t          dt                    k    sJ |                     t          dd          t          dt                    k    sJ |                     t          dd          t          dt          z  dz   t                    k    sJ |                     t          dd          t          dt          dz  z  dt          z  z   dz   t                    k    s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             }|                    dd          t          dt                    k    sJ d S )Nr   r   r'  r   r   )r   r   slicer\  s     r   test_Poly_slicer    ss   QTAadF]QqS 1$%%A771a==DAJJ&&&&771a==DAJJ&&&&771a==D1q!,,,,,,771a==D1a4!A#!11555555771a==DA!Q$1!4q!8!<<<<<<771atAqzz))))771atAqzz))))771atAaC!GQ//////771atAadFQqSL1$4a888888771atAqD1QT6MAaC$7!$;Q??????QTAXA771a==DAJJ&&&&&&r   c                     t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          t          t          dz  z  dt          dz  z  t          dz  z  z                                 d          ddgk    sJ t          t          t          dz  z  dt          dz  z  t          dz  z  z                                 d	          ddgk    sJ d S )
Nr   r   r   r   r   r   r   r'  r   rX   rY   )r   r   coeffsr   r   r   r   test_Poly_coeffsr    s   1::1#%%%%1::1#%%%%!a""$$A....!Q$1q !$$++--::::!Q$1q !$$++--::::!Q$1a41$%%,,U331v====!Q$1a41$%%,,W55!Q??????r   c                     t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g d	k    sJ t          t          t          dz  z  dt          dz  z  t          d
z  z  z                                 d          ddgk    sJ t          t          t          dz  z  dt          dz  z  t          d
z  z  z                                 d          ddgk    sJ d S )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    s   1::4&((((1::4&((((!a""$$t4444!Q$1q !$$++--1C1C1CCCCC!Q$1q !$$++--1C1C1CCCCC!Q$1a41$%%,,U337GGGGG!Q$1a41$%%,,W55&&9IIIIIIIr   c                     t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          d	z  z  dt          z  z   dz   t                                                    g d
k    sJ t          t          t          dz  z  dt          dz  z  t          dz  z  z                                 d          ddgk    sJ t          t          t          dz  z  dt          dz  z  t          dz  z  z                                 d          ddgk    sJ d S )Nr   r   r   r   r   r   r   r   r   r   )r  r   r   r  r'  )r  r   r   r  r   rX   r  r   r  r   rY   )r   r   termsr   r   r   r   test_Poly_termsr    s   1::),,,,1::),,,,!a!!##	9'=====!Q$1q !$$**,,0Q0Q0QQQQQ!Q$1q !$$**,,0Q0Q0QQQQQ	!Q$1a41 #eEll{K.HI I I I	!Q$1a41 #eGnnk0JK K K K K Kr   c                  R   t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ d S )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2!Q$1q !$$//11YYY>>>>!Q$1q !$$//11___DDDDDDr   c                  R   t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g d	k    sJ d S )
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8!Q$1q !$$//115G5G5GGGGG!Q$1q !$$//115S5S5SSSSSSSr   c                  R   t          dt                                                    dgk    sJ t          dt                                                    dgk    sJ t          dt          z  dz   t                                                    ddgk    sJ t          dt          dz  z  dt          z  z   dz   t                                                    g dk    sJ t          dt          d	z  z  dt          z  z   dz   t                                                    g d
k    sJ d S )Nr   r  r   r  r   r   r   r  r'  )r  )r
  r   )r  r   r   r  )r   r   	all_termsr   r   r   test_Poly_all_termsr  4  s*   1::!!i[00001::!!i[0000!a%%''Iy+AAAAA!Q$1q !$$..00)))* * * *!Q$1q !$$..00???@ @ @ @ @ @r   c                     t          t          dz  dt          z  z   dz             } t          t          dz  dt          z  z   dz             }d }|                     |          |k    sJ d }|                     |          |k    sJ d S )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  @  s    QTBqD[3AQTAaCZ!^A" " " ::dq    ( ( ( ::dq      r   c                  x   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          t          t                                                    dk    sJ t          t          dz   t                                                    dk    sJ t          t          dz  dz   t                                                    dk    sJ t          t          dz  t          z   dz   t                                                    dk    sJ d S )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                                                    i k    sJ t          dt          t          t                                                    i k    sJ t          dt                                                    ddik    sJ t          dt          t          t                                                    ddik    sJ t          t          dz  dz   t                                                    dddk    sJ t          t          dz  dz   t          t          t                                                    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                                             dd	d
dk    sJ d S )Nr   r   r   r   r   r   r   r   )r  r   ))r   r   r   r   r'  r   )r   r   r   r   r   r   r   r   r   )r   r   as_dictr   r   r   r   r   test_Poly_as_dictr%  [  s   1::2%%%%1a##%%++++1::D!9,,,,1a##%%)Q77771q!$$&&!*<*<<<<<1q!Q""**,,A!0L0LLLLL!Q$qA!A%!A-..6688=, =, , , , , , ,r   c                      t          dt                                                    dk    sJ t          dt          t          t                                                    dk    sJ t          dt                                                    dk    sJ t          dt          t          t                                                    dk    sJ t          t          dz  dz   t                                                    t          dz  dz   k    sJ t          t          dz  dz   t          t          t                                                    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                                             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                                                      t           t          dz  z   dt          z  t          dz  z  z   k    sJ                      t          di          dt          z
  dt          dz  z  z   k    sJ                      t          d	i          d
dt          z  z   t          dz  z   k    sJ                      t          dt          d	i          dk    sJ                      dd	          dk    sJ t          t           fd           d S )Nr   r   r   r   r'  r      r#  r  iH   i{  c                  <                          t          di          S r   )r-  r   r   s   r   r   z#test_Poly_as_expr.<locals>.<lambda>  s    AIIq!f$5$5 r   )r   r   r-  r   r   r|   rF   r   s   @r   test_Poly_as_exprr*  i  s   1::1$$$$1a##%%****1::1$$$$1a##%%****1q!$$&&!Q$(22221q!Q""**,,1q8888	!Q$qA!A!A%' ''.wyyAadF1HQTMAaCE4IAaCPQE4QR 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099aVRT	AqD 0000099aAq\""c))))99Q??c!!!!
?555566666r   c                  T   t          t          dz  t          t          z  z
  dt          z  z   t          d                                          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 d S )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4499;;QUQq"uW_s1a4x'!Q$.QT9EAt	 	 	     r   c                      t          dt                                                    dt          dt                    fk    sJ t          dt                                                    dt          dt                    fk    sJ t          t          t                                                    dt          t          t                    fk    sJ t          t          dz  t                                                    dt          t          t                    fk    sJ t          t          dz  t                                                    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                                             d
t          t          t          z  t          z  t          dz  t          z  z             fk    sJ d S )Nr   r   r   r   r  r,  )r,  r  r'  )r   r   r  )r   r   deflater   r   r   r   r   test_Poly_deflater2    s   1::D$q!**#555551::D$q!**#555551::D$q!**#555551a==  ""tT!QZZ&888882q>>!!##tAqzz':::::	1Qq"uq!tArEz!# ##*799T!A#a%!Q$q&.=Q=Q0RS S S S S Sr   c                  D   t          t          dz  t          z  t          t          dz  z  z   t          t          z  z   dz   t                    } |                                 t          t          dz  t          z  t          t          dz  z  z   t          t          z  z   dz   t          t                    k    s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 d S )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HHHHHr   c            	         t          t          dz  t          z  t          t          dz  z  z   t          t          z  z   dz   t          t                    } |                     t                    t          t          t          dz  z  t          dz  t          z   t          z  z   dz   t          d          k    s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                    }|                    t                    t          |t          t          t
          t          d          k    sJ |                    t          t                    t          |t          t
          t          d          k    sJ |                    t          t          t                    t          |t
          t          d          k    sJ |                    t                    t          |t          t          t          t
          d	          k    sJ |                    t
          t                    t          |t          t          t          d
          k    sJ |                    t          t
          t                    t          |t          t          d          k    sJ t          t          d            t          t          d            d S )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                                                 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 F r   c                      t          t          t          z  t          t          t                                        t                    S r   )r   r   r   r   r:  r   r   r   r   z!test_Poly_eject.<locals>.<lambda>  s&    QqS!Q(:(:(@(@(C(C r   )
r   r   r   r:  r   r   r   r|   rI   r+  )r   exr   s      r   test_Poly_ejectr=    sE   QT!Va1f_qs"Q&1--A771::a1f1q!|3a77KKKKKKK771::a1f1q!|3a77KKK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CCC771::b!Q1W=======771a==DQ1Z@@@@@@@771atB1]CCCCCCC
;FFGGG
 C CDDDDDr   c                  
   t          t          t          t                                                    t          t          t                    k    sJ t          t          t          z  t          t                                                    t          t          t          z  t          t                    k    sJ t          dt          t                                                    t          dt          t                    k    sJ d S r   )r   r   r   excluder   r   r   test_Poly_excluder@    s    1a==  ""d1ajj0000!Q??""$$QqS!Q77771a==  ""d1amm333333r   c                  
   t          dt          t                                        d          dk    sJ t          dt          t                                        d          dk    sJ t          dt          t                                        d          dk    sJ t          dt          t                                        d          dk    sJ t	          t
          d            t	          t
          d            t          dt          t                                        t                    dk    sJ t          dt          t                                        t                    dk    sJ t          dt          t                                        d          dk    sJ t          dt          t                                        d          dk    sJ t	          t
          d	            t	          t
          d
            d S )Nr   r  r   r   c                  ^    t          dt          t                                        d          S )Nr   r   r   r   _gen_to_levelr   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqMM$?$?$C$C r   c                  ^    t          dt          t                                        d          S rx  rD  r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqMM$?$?$C$C r   r   r   c                  h    t          dt          t                                        t                    S r   )r   r   r   rE  r   r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqMM$?$?$B$B r   c                  ^    t          dt          t                                        d          S )Nr   r   rD  r   r   r   r   z)test_Poly__gen_to_level.<locals>.<lambda>  s    DAqMM$?$?$D$D r   )r   r   r   rE  r|   rG   r   r   r   test_Poly__gen_to_levelrI    s   1a==&&r**a////1a==&&r**a////1a==&&**a////1a==&&**a////
?CCDDD
?CCDDD1a==&&q))Q....1a==&&q))Q....1a==&&s++q00001a==&&s++q0000
?BBCCC
?DDEEEEEr   c                  "   t          dt                                                    t           u sJ t          dt                                                    dk    sJ t          t          t                                                    dk    sJ t          dt                                        d          t           u sJ t          dt                                        d          dk    sJ t          t          t                                        d          dk    sJ t          dt                                        t                    t           u sJ t          dt                                        t                    dk    sJ t          t          t                                        t                    dk    sJ t          dt                                        d          t           u sJ t          dt                                        d          dk    sJ t          t          t                                        d          dk    sJ t	          t
          d            t	          t
          d            t	          t
          d            t          dt          t                                                    dk    sJ t          dt          z  t          t                                                    dk    sJ t          t          t          z  t          t                                                    dk    sJ t          dt          t                                        t                    dk    sJ t          dt          z  t          t                                        t                    dk    sJ t          t          t          z  t          t                                        t                    dk    sJ t          dt          t                                        t                    dk    sJ t          dt          z  t          t                                        t                    dk    sJ t          t          t          z  t          t                                        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 d S )Nr   r   genr   c                  T    t          dt                                        d          S Nr   rK  r   r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJJ$5$5!$5$<$< r   c                  ^    t          dt                                        t                    S rN  )r   r   r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJJ$5$5!$5$<$< r   c                  T    t          dt                                        d          S )Nr   r   rK  rO  r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    DAJJ$5$5#$5$>$> r   r   c                  F    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1 r   c                  H    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4 r   c                  ,    t          t          d          S )Ng?r   r   r   r   r   r   z"test_Poly_degree.<locals>.<lambda>  s    F1cNN r   c                  X    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1222
944555
?22333
?>>???$q))A2#%%%%$q))A!####$q!tAqDy##$$))))$q!tad{Aq))1--2222$q!tad{A&&**a////$q!tad{QT)1--q11Q666666r   c                  J   t          dt                                                    t           fk    sJ t          dt          t                                                    t           t           fk    sJ t          dt          t          t
                                                    t           t           t           fk    sJ t          dt                                                    dk    sJ t          dt          t                                                    dk    sJ t          dt          t          t
                                                    dk    sJ t          t          dz  t          z  t          dz  t
          dz  z  z   dz                                             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            d S )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!nn r   )r   r   r   ri   r   r   r|   rB   r   r   r   test_Poly_degree_listr\     s   1::!!##v----1a==$$&&B3*44441a''))rcB3_<<<<1::!!##t++++1a==$$&&&00001a''))Y66661QAad"Q&''3355BBBBq!$$$$q!$$$$qAv&((((
4455555r   c                     t          t          dz  t          z  t          dz  t          dz  z  z   dz                                             dk    sJ t          t          dz  t          dz  z                                             dk    sJ t          t          t          z  t          z  t          dz  z                                             dk    sJ t          t          dz  t          z   dz                                             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 d S )	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6!;;;;1q!t))++q0000!A1**,,11111q1**,,1111!ad
##q((((!ad
Aq))Q....??aQTAqD[1a4/0011Q6666QTAqD[1a4/33449999QTAqD[1a4/33Q771<<<<QTAaCE\AqDAI51<Q??CCqHHHHHHr   c                  Z   t          t          dz  t          z                                 t                    t          t          dz  t          t          z  z             k    sJ t          t          t          z                                 t                    t          t          t          z   t          t          t                    k    sJ t          t          t          dz  z                                 t                    t          t          t          z  t          dz  z             k    sJ d S r  )r   r   r   
homogenizer   r   r   r   test_Poly_homogenizerb  !  s    1Q<<""1%%ad1Q3h7777!99""d1Q31a&8&88888!Q$<<""1%%ac!Q$h777777r   c                  0   t          dt          t                                                    t           u sJ t          dt          t                                                    dk    sJ t          t          t          t                                                    dk    sJ t          t          t          z  t          t                                                    dk    sJ t          t          dz   t          t                                                    J t          t          t          z  t          z   t          t                                                    J t          t          dz  dt          dz  z  t          dz  z  z   dt          z  t          dz  z  z                                             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 d S )Nr   r   r   r   r   r^  r'  )r   r   r   homogeneous_orderri   r   r   r   test_Poly_homogeneous_orderre  '  s   1a==**,,33331a==**,,11111a==**,,1111!Q??,,..!3333Aq!..00888!aA0022:::1qAvad{"QqSAX-..@@BBaGGGG1qAvad{"QqSAX-..@@BBJJJJJr   c                  ~   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 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 d S )	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4!Q$1a41$%%((11Q6666a1fqAvad{"%000A5555a1fqAvad{"'222a777777r   c                  :   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    dk    sJ d S )Nr   r   r   )r   r   TCr   r   r   test_Poly_TCrj  @  s}    1::==??a1::==??a!Q$
A!!##q((((((r   c                  ~   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 d S )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4!Q$1a41$%%((11Q666666r   c                  V    t          dt                                        d          dk    sJ t          dt                                        t                    dk    sJ t          dt                                        d          dk    sJ t          dt                                        t                    dk    sJ t          t          dz  t                                        d          dk    sJ t          t          dz  t                                        t          dz            dk    sJ t          t          dz  t                                        t          dz            dk    sJ t          t          dz  t                                        t          dz            dk    sJ t          dt          z  t          dz  z  dz   t          t                                        d          dk    sJ t          dt          z  t          dz  z  dz   t          t                                        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                                        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            d S )Nr   r   r  r   r^  r   r         c                  .      j         t                    S r   )r  r   r   s   r   r   z!test_Poly_coeff.<locals>.<lambda>e  s    

 r   c                  V    t          t          dz                                 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                  f    t          t          dz                                 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                  v    t          t          dz                                 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  s    1::$$Q''1,,,,1::$$Q''1,,,,1::$$Q''1,,,,1::$$Q''1,,,,1a==''**a////1a==''1--22221a==''1--22221a==''1--2222!AqD1a##22155::::!AqD1a##221QT6::a????RT!VCFF]RT!1a((A1A"$$$$1A!####1AaC  Bs1vvI----19;;Q2a4A;#33333
 2 2 2 2333
:<<===
:>>???
:@@AAAAAr   c                  ~   t          dt                                        d          dk    sJ t          dt                                        d          dk    sJ t          dt                                        d          dk    sJ t          dt                                        d          dk    sJ t          t          dz  t                                        d          dk    sJ t          t          dz  t                                        d          dk    sJ t          t          dz  t                                        d          dk    sJ t          t          dz  t                                        d          dk    sJ t          dt          z  t          dz  z  dz   t          t                                        dd          dk    sJ t          dt          z  t          dz  z  dz   t          t                                        dd          dk    sJ t	          t
          d            d S )	Nr   r   r  r   r^  r   r   c                  ~    t          t          t          z  dz   t          t                                        d          S r   )r   r   r   nthr   r   r   r   ztest_Poly_nth.<locals>.<lambda>{  s(    tAaC!GQ2266q99 r   )r   r   r|  r   r|   rx  r   r   r   test_Poly_nthr}  l  s   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2!AqD1a##''1--2222
:99:::::r   c                     t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 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 d S )Nr   r   r   r   r  r   r   rX   r  rY   r  r  )r   r   r   r   r   r   r   test_Poly_LMr  ~  s   1::==??d""""1::==??d""""!Q$
A!!##t++++!Q$1a41$%%((//69999!Q$1a41$%%((11V;;;;a1fqAvad{"%000AqDAI====a1fqAvad{"'222a1f<<<<<<r   c                  B   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 }|                     d          dk    sJ |                     |          dk    sJ d S )	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2 r   rX   r  )r   r   r   r!  )r   r   r   r   r   )r   rev_lexs     r   test_Poly_LM_custom_orderr    s    QT!Q$Yq[1a46!Q$;&1Q.233A22G44e4	))))44g4)++++++r   c                  ~   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 d S )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9!Q$1a41$%%((11V;;;;;;r   c                     t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 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 d S )Nr   r  r   r  r   )r  r   r   r   rX   r  rY   r  r  )r   r   r   r   r   r   r   test_Poly_LTr    s   1::==??i''''1::==??i''''!Q$
A!!##y0000!Q$1a41$%%((//;>>>>!Q$1a41$%%((11[@@@@a1fqAvad{"%000AadF1a4K????a1fqAvad{"'222a1f<<<<<<r   c                  ~   t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt          dz  z  t          z   t                                                    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 d S )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0!Q$1a41$%%((//;>>>>!Q$1a41$%%((11[@@@@@@r   c                     t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt                                                    dk    sJ d S Nr   r   r   )r   r   max_normr   r   r   test_Poly_max_normr    sw    A;;!!Q&&&&A;;!!Q&&&&A;;!!Q&&&&&&r   c                     t          dt                                                    dk    sJ t          dt                                                    dk    sJ t          dt                                                    dk    sJ d S r  )r   r   l1_normr   r   r   test_Poly_l1_normr    sw    A;;  A%%%%A;;  A%%%%A;;  A%%%%%%r   c                  \   t          t          dz   t                                                    \  } }| dk    r;|t          t          dz   t          d          k    r |j                    t          k    sJ t          t          dz  dz   t                                                    \  } }| dk    r;|t          t          dz   t          d          k    r |j                    t
          k    sJ t          t          dz  dz   t                                        d          \  } }| dk    r;|t          t          dz   t          d          k    r |j                    t          k    sJ t          t          t          z  dz   t                                        d          \  } }| t          k    rK|t          t          t          z   t          d          k    r# |j                    t          t                   k    sJ t          t          d	z  t          d          z   t          d
                                          \  } }| d	k    rK|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
                              d          \  } }| d	k    rK|t          t          d	t          d          z  z   t          d
          k    r |j                    t          k    sJ d S )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    s   q1ua..--//KE4A::$$	Aq# # #  #24?#4#4#:#:#:#:qsQw""//11KE4A::$$	Aq# # #  #24?#4#4#:#:#:#:qsQw""///==KE4A::$$	Aq# # #  #24?#4#4#:#:#:#:qsQw""///==KE4A::$$	Aq#" #" #" " "&5do&7&72a5&@&@&@&@qsT!WW}a555BBDDKE4A::$$	Ad1ggIq#' #' #' ' '+:4?+<+<+B+B+B+B	!d1ggq' ' ''3|D|'A'A E4A::$$	Ad1ggIq#' #' #' ' '+:4?+<+<+B+B+B+B+B+Br   c                     t          t          dz  t          z  dz   t                    } t          t          dz  t          z   t                    }|                     |          t          t          dz  t          z   t                    t          t          t          dz  z  t          dz  z   t                    fk    sJ |                     t
                    } |                    t
                    }|                     |          | |fk    sJ d S )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234 4 4 4 	
RA	RAa  QF******r   c                  h   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 d S )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   b1Q446l*OUDJJ>A$$q&=" -"$1$t**$<eDJJ?A$$q&>" %"-" #%0QqTT!V%<Q1a[%H%
d4jj.KaDDFJ$ &$%4ec$t**n6L	
1a6 & d+USd^-CqttAv,NN&O&PP
 b1Q446l
"ECT

N$:add1f#E
ET$ZZ/1Q446::]T

>CT

N*add1f5>6 	677 :I	!QJ :AaDDF:,ec$t**n.D!Q-OO
T


"ECT

N$:add1f#E
EF:G	G IJ		K 		KA Q$'''''''''r   c                     t          t          dz                                             t          t          dz  dz  t          z             k    sJ t          t          dz                                 t                    t          t          dz  dz  t          z             k    sJ t          t          dz                                 t          df          t          t          dz  dz  t          z             k    sJ t          t          t          z  dz                                 t                    t          t          dz  t          z  dz  t          z             k    sJ t          t          t          z  dz                                 t                    t          t          t          dz  z  dz  t          z             k    sJ t          t          t          z  dz                                 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                                 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                                 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                                 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                                 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                                 t          t                    t          t          dz  t          dz  z  dz  t          t          z  z             k    sJ d S )Nr   r   r   r  r'  )r   r   	integrater   r   r   r   test_Poly_integrater    s/   A;;  ""d1a46A:&6&66666A;;  ##tAqDFQJ'7'7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CC!a==""1a((D1a4AqDF1B,C,CCCCC!a==""Aq6**d1a46!8ad1f3D.E.EEEEE!a==""Aq6**d1QT6!8ad1f3D.E.EEEEE!a==""1a((DAad1qs1B,C,CCCCC!a==""1a((DAad1qs1B,C,CCCCCCCr   c                  t	   t          t          dz  t          z                                             t          dt          z  dz             k    sJ t          t          dz  t          z                                 t                    t          dt          z  dz             k    sJ t          t          dz  t          z                                 t          df          t          dt          z  dz             k    sJ t          t          dz  t          dz  z  t          t          z  z                                 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                                 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                                 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                                 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                                 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                                 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                                 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                                 t          t                    t          dt          z  t          z  dz             k    sJ d S )Nr   r   r'  )r   r   ra   r   r   r   r   test_Poly_diffr    sG   1q>>  D1qMM11111q>>q!!T!A#']]22221q>>1v&&$qsQw--7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AA1QT	AaC  %%a++tAadFAq/A/AAAAA1QT	AaC  %%q!f--a1fa1C1CCCCC1QT	AaC  %%q!f--a1fa1C1CCCCC1QT	AaC  %%a++tAaCEAI>>>>1QT	AaC  %%a++tAaCEAI>>>>>>r   c                  2   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                                                    t          dt          z  dz             k    sJ d S )Nr   r   Fevaluate)ra   r   r   r`   doitr   r   r   test_issue_9585r    s    QTAX4!a==0000QTAXE22241q>>1%%& & & &d1a4!8nna((--//4!a==@@@@@@r   c                  R   t          dt                                        d          dk    sJ t          dt                                        d          dk    sJ t          t          t                                        d          dk    sJ t          dt                                        dd          dk    sJ t          dt                                        dd          dk    sJ t          t          t                                        dd          dk    sJ t          dt                                        t          d          dk    sJ t          dt                                        t          d          dk    sJ t          t          t                                        t          d          dk    sJ t          dt                                        dd          dk    sJ t          dt                                        dd          dk    sJ t          t          t                                        dd          dk    sJ t          t          d            t          t          d            t          t          d            t          dt          t
                                        d          t          dt
                    k    sJ t          d	t
          z  t          t
                                        d          t          d	t
          z  t
                    k    sJ t          t          t
          z  t          t
                                        d          t          dt
          z  t
                    k    sJ t          dt          t
                                        t          d          t          dt
                    k    sJ t          d	t
          z  t          t
                                        t          d          t          d	t
          z  t
                    k    sJ t          t          t
          z  t          t
                                        t          d          t          dt
          z  t
                    k    sJ t          dt          t
                                        t
          d          t          dt                    k    sJ t          d	t
          z  t          t
                                        t
          d          t          d
t                    k    sJ t          t          t
          z  t          t
                                        t
          d          t          dt          z  t                    k    sJ t          t          t
          z  t
          z   t          t
                                        t          di          t          dt
          z  t
                    k    sJ t          t          t
          z  t
          z   t          t
                                        t
          di          t          dt          z  dz   t                    k    sJ t          t          t
          z  t
          z   t          t
                                        t          dt
          di          dk    sJ t          t          t
          z  t
          z   t          t
                                        t          dt
          di          dk    sJ t          t          t
          z  t
          z   t          t
                                        d          dk    sJ t          t          t
          z  t
          z   t          t
                                        ddg          dk    sJ t          t          dz   d                              t          j                  t          dd	          k    sJ t          t          dz   d                              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          }|                    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          }|                    t          dz   t          dz
  z            t          |t
          d          k    sJ d S )Nr   r   r   r   c                  T    t          dt                                        dd          S Nr   r   r   r   evalr   r   r   r   z test_Poly_eval.<locals>.<lambda>.  s    DAJJOOAq$9$9 r   c                  ^    t          dt                                        t          d          S r  )r   r   r  r   r   r   r   r   z test_Poly_eval.<locals>.<lambda>/  s    DAJJOOAq$9$9 r   c                  T    t          dt                                        dd          S )Nr   r   r   r  r   r   r   r   z test_Poly_eval.<locals>.<lambda>0  s    DAJJOOC$;$; r   {   r   r  r  r  1   0   )r  r   rP   r   r   c                      t          t          t          z  t          z   t          t                                        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277	BB r   c                  r    t          t          dz   d                              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 8 8 = =af5 = Q 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:::
?99:::
?;;<<<Q??""d3ll2222!Q??""d1Q3ll2222!Q??""d1Q3ll2222Q??1%%c15555!Q??1%%ac15555!Q??1%%ac15555Q??1%%c15555!Q??1%%b!4444!Q??1%%ac15555!aA##QF++tAaC||;;;;!aA##QF++tAaC!GQ/?/?????!aA##Q1aL11R7777!aA##Q1aL11R7777!aA##F++r1111!aA##QF++r1111Ad###((00HQNNBBBBAd###((a11T!WWq[@@@@
:BBCCC
;QQRRR 7OOEgai!E'!AqD(1,q!taczA~>FQTUQYM!E)A-qEEEA661q51q5/""f,,,,QTUQYM!E)A-q!KHHHA661q51q5/""d61]&K&K&KKKKKKKr   c                  b   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 d S )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1Q444!ac	A&&&&&&1Q77d1Q38nn$$$$1Q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            d S )	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'F r   )r   r   r   r   r|   rA   r   r   r   test_parallel_poly_from_exprr  _  s@	   "	
Q1q1 !%)!a%^^T!Q$(A5F5F$GH H H H"	a!eQA"A' ''(*.21q5!nnd1a4!8Q>O>O-PQ Q Q Q"	
QQTAXq!!"A' ''(*.21q5!nnd1a4!8Q>O>O-PQ Q Q Q"D	Aq% %1q!$$$&'(* **+-15a!eQadQhPQARAR0ST T T T #	
Q1q1a! !!"$(,QUAq(9(941q!Q;O;O'PQ Q Q Q"D	Aq% %a4!8$$ $$%'+/Aq!+<+<d1a4!8QPQ>R>R*ST T T T"AE4	1q!, , $!  $(Q1$5$5tAqD1Ha7K7K#LM M M M"DQNND	1q!5 5 $!  $(Q1$5$5tAqD1Ha7K7K#LM M M M #	
Q1q "&q1ua..$q!tax2C2C!DE E E E"	a!eQA"$ $$%'+/Aq>>41q!;L;L*MN N N N"	
QQTAXq!!"$ $$%'+/Aq>>41q!;L;L*MN N N N"	a!eQadQh**+- --.048QNNDAPQSTDUDU3VW W W W #	
AqD1H "1ajj$q!tax*;*;<= = = ="	
AqD1H "1ajj$q!tax*;*;<= = = ="	
DA1    !#'+Aqzz41q!3D3D&EF F F F"	
DA1    !#'+Aqzz41q!3D3D&EF F F F #	
A1 "1a4!8Q//a<= = = ="	
A1 "1a4!8Q//a<= = = ="	adQh		A    !#'+AqD1Ha'8'8$q!**&EF F F F"	adQh		A    !#'+AqD1Ha'8'8$q!**&EF F F F #DAqMM41a==#A1auUUUVWX	aAd	#	#	#T!Q$%?%?%?@A A A A FFGGGGGr   c                  F   t           dz  t          dz  z
  t           t          z
  }} t           t          z   d}}d | |||fD             \  }}}}|                    |          ||fk    sJ |                    |          |k    sJ |                    |          |k    s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
            d S )Nr   r   c                 D    g | ]}t          |t          t                    S r   r  r   r   s     r   
<listcomp>ztest_pdiv.<locals>.<listcomp>  "    888Q41a==888r   TpolysFc                  "    t          dd          S Nr'  r   )r   r   r   r   r   ztest_pdiv.<locals>.<lambda>      d1ajj 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ll r   )r   r   r   r   r   r   r|   rB   )r   r   r   r  rL  GQRs           r   	test_pdivr    s   a4!Q$;AqAq5!qA881aA,888JAq!Q66!99A66!99>>>>66!99>>>>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0111
00111
00111
2233333r   c                  h   t           dz  t          dz  z
  t           t          z
  ct           t          z   d}} d | |fD             \  }}}}|                    |          ||fk    sJ |                    |          |k    sJ |                    |          |k    s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        r|                                j        sJ                               }|                                j        sJ                               }  | j                    j        sJ                               }  | j                    j        sJ t          t           t          z   t                     t          dt           z  t          z   t                     c                              \  } } | j                    j        r|                                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 d S )Nr   r   c                 D    g | ]}t          |t          t                    S r   r  r  s     r   r  ztest_div.<locals>.<listcomp>  r  r   Tr  Fc                  "    t          dd          S r  )r   r   r   r   r   ztest_div.<locals>.<lambda>      c!Qii 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    eAqkk 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                  2    t           t                    S r   r   rP   r\  s   r   r   ztest_div.<locals>.<lambda>  s    a2(>(>(> r   c                  4    t           t          d          S )NFr  r  r\  s   r   r   ztest_div.<locals>.<lambda>  s    a2E(J(J(J r   r   rR   rS   r#  )r   r   r   r   r   r   r|   rB   rP   rQ   r@   r   r/  is_ZZis_Fracrf   rR   rm   )r   r  rL  r  r  r  qzrzqqrqr   r   r   s              @@r   test_divr    s6   a4!Q$;ADAqq5!qA881aA,888JAq!Q55881v5588q====5588q====771::????q!99Aq!99>>>>q!99>>>>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!99Aq!99>>>>q!99>>>>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
//000
//000
11222a4!8QqS1WDAq1qBqS1WaBq!99R    q!$B8++++q!%   RH,,,,q!BB8++++q!BB8++++q!BT***r2h6666q!BU+++Bx7777q!BT***r2h6666q!BU+++Bx7777q!99????q!$2%%%%q!%   B&&&&q!B2%%%%q!B2%%%%q!BT***b0000q!BU+++r1111q!BT***b0000q!BU+++r1111q!99????q!$2%%%%q!%   B&&&&q!B2%%%%q!B2%%%%q!BT***b0000q!BU+++r1111q!BT***b0000q!BU+++r1111dAaC1GAq!A;;!AD!!!Q&&&&
 ? ? ? ? ?@@@
 > > > > >???Ab!!!Q&&&&Abt,,,1111
 J J J J JKKKAbt,,,1111Abu---22221::tAwwDAq5588DAq1<>>8ALLNN$8888	aA<<>>	aA1<>>	

A1<>>!Q<<ac!eQDAq5588DAq1<>>!<allnn&<<<< 	QqsUAd###AQqS!D!!!A15	a6	"	"	"DQqS!F$C$C$CDE E E E15	qtteAg!Aoq	0	0	0$q!F2K2K2KLM M M M 	
!Q$AA	!aAq!BAq6))))))r   c                      t          t          dt          z            \  } }t          | dz
            dk     sJ |dk    sJ d S )Ng>,p ?g3!	@g+=r   )r   r   r   )r   r  s     r   test_issue_7864r  ;  sK    q"1$%%DAqq##$$u,,,,666666r   c                     dt           z  t           dz  dz
  }} t           dz  t          dd          d}}}d | ||||fD             \  }}}}}	|                    |          ||	fk    sJ |                    |          |||	fk    s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            d S )Nr   r      r   r   c                 <    g | ]}t          |t          d           S )rQ   r   r   r   r   s     r   r  ztest_gcdex.<locals>.<listcomp>E  s'    HHH!d1a---HHHr   Tr  Fd   i  )r'  )r  r   r'  r   r   r   c                  L    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 F F r   c                  L    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 A A r   c                  L    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 B B r   )r   rh   r   r   r   r|   rI   )
r   r   sr   r   rL  r  rm   THs
             r   
test_gcdexr  A  s   Q31r	qAdHR$$a!qAHH1aAHH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1AT"""q!Qi////!Qd###q((((a%(((QF2222AU###1ay0000!Qe$$$))))c4  H,,,,d{****!Q<<1
;FFGGG
;AABBB
;BBCCCCCr   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             }|                     d	          |k    sJ d S )
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22A88A;;!r   c                  z   t           dz  dt           z  z
  dz   t           dz  dz
  dt           z  dz
  }}} t          |           t          |          t          |          }}}|                    |          |||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            d S )Nr   r   Tr  Fc                  "    t          dd          S r  )r   r   r   r   r   z$test_subresultants.<locals>.<lambda>  s    mAq&9&9 r   )r   r   r   r|   rB   r   r   r   rL  r  r  s         r   test_subresultantsr   s  sb   dQqSj1nadQh!a!qA1ggtAwwQ!qA??1!Q****A1a)++++Aq!!aAY....At$$Aq	1111A1a)++++AT***q!Qi7777AU+++1ay8888
99:::::r   c                     t           dz  dt           z  z
  dz   t           dz  dz
  d}}} t          |           t          |          }}|                    |          |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          |          }}}|                    |          |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            d S )	Nr   r   r   Tr  F)
includePRSc                  "    t          dd          S r  )r   r   r   r   r   z test_resultant.<locals>.<lambda>  s    i1oo r   )r   r   r   r   r   r|   rB   r  s         r   test_resultantr    sT   dQqSj1nadQh!qA77DGGqA;;q>>QQ??aQ1""""QA4  A%%%%Q??aQ&&&!++++Q'''1,,,,Qd+++Aq!A#'?/CCCCC!eQUAE!qA1ggtAwwQ!qA;;q>>QQ??aQ1""""QA4  A%%%%Q??aQ&&&!++++Q'''1,,,,
5566666r   c                  V   t           dz  dt           dz  z  z   dt           z  z   dz
  d}} t          |           }|                                |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          |          }}|                                |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
            d S )Nr   r   r^     ipTr  Fr'  c                       t          d          S Nr'  )r   r   r   r   r   z#test_discriminant.<locals>.<lambda>  s    l1oo 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77DGGqA>>q    ??a1aA&&!++++Aq!Q<((A----??a&&&!++++'''1,,,,
5566666r   c                     t          t          dz   t          dz   z  t                    } t          |                                           ddgk    sJ |                                 dk    sJ t          t          dz  dt          dz  z  z
  dz   t                    } |                     d          }t          |                     |                    g dk    sJ |                     |          dk    sJ d S )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&&''9994444==!!!!!!r   c                  T   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n J t          t          d	            d S )
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    s   	
A1a4!8QTAaCZ!^,AA;;!a%AT"""d1q5kk1111B<<1QFq    III!####QBZ!A#%",-..!3333
2q//C=*SAF]]]]
2q
%
%
%C;&3;&&&QAQG1"a 1 16666Q6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            d S )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    s   	
A1a4!8QTAaCZ!^,AA;;!Q$A+!Q$.A59A=====AT"""d1a4!Q$;1a4+?!Q$+F+JQ+N&O&OOOOOB<<1QFq    III"$$$$QBZ!A#%",-..!3333
2q//C=)SAE\\\\
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
  }}d | |||||fD             \  }}}}	}
}|                    |          |
||	fk    sJ |                    |          |
k    s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n J t	          d          t	          d           }}t          ||          t          ||          cxk    rt	          d          k    sn 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 ]Z}t          |d          dk    sJ t          d|          dk    sJ t          ||           dk    sJ t          | |          dk    sJ [dt           dz  z  t           z   dz   } t          | t                    }t          | t                    }|                    |          |k    sJ |                    |          |k    sJ |                    |          |                                k    sJ |                    |          |                                k    sJ t          | |           | k    sJ t          | |           | k    sJ t          | | t                    t          |           k    sJ t          | | t                    t          |           k    sJ d S )Nr   r   r   r'  c                 ,    g | ]}t          |          S r   r  r  s     r   r  ztest_gcd.<locals>.<listcomp>  s    >>>Qa>>>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!ff 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   rs   r   rf   rR   r|   r  rP   rQ   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>>1aAq!*<>>>Aq!Q1;;q>>aAY&&&&5588q====5588q====Q??q!Qi''''q!99>>>>q!99>>>>Q1!Q****q!Q<<1q!Q<<1QA4  Q1I----q!aT??aq!aT??aQ??q!Qi''''q!99>>>>q!99>>>>Q&&&1a)3333q!4   A%%%%q!4   A%%%%Q'''Aq!94444q!5!!!Q&&&&q!5!!!Q&&&&q!t8c>3q53;qAQc!qAQ??q!Qi''''q!99>>>>q!99>>>>q!t8c>3q53;qAQc!qAQ??q!Qi''''q!99>>>>q!99>>>>Q??i''''q!99>>>>q!99????a4!A#:>1a4!AqD&=1,q0qA	1qAv!Q$1$q(A!eQUAqD1H!qAQ2&&&1a)3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777Aq!9DDDDq!R5111Q6666q!R5111Q666677T!WWHqAq!99Aq		,,,,T!WW,,,,,,88d2hhYqAq!99Aq		,,,,T!WW,,,,,,tAE1~~tAaC||,,Q$0G0G0GGGGG
9nn%%%
9nn%%%RAQ

Aq!99Q

""""Q

AaVQAV  1ayyA~~~~1ayyA~~~~1ayyA~~~~1ayyA~~~~~	!Q$
QA
q


C
q


C773<<3773<<3773<<399;;&&&&773<<399;;&&&&q!99>>>>q!99>>>>q!B588++++q!B588++++++r   c            	      r   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 d S )Nr   r^  r   r'  r   r  g      "@r   Fr  )r   r   rg   r   rh   re   rd   r   r   r   test_gcd_numbers_vs_polysr+  [  s   c!Qii)))))c!A#qkk7+++++q!99>>>>qsA;;!c(1a..(1a..998DDDDDc(1a..*HQNN;;XFFFFFx1~~x1~~..(1a..@@@@x1~~a!Q00A5555c#smmU+++++c#a%oou-----sC==Cs1uc??c!!!! s1a%(((!,,111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            d S )Nr   r   r   r  r'  Fr  r      r  gffffff@rb   T)rb   deepr/  c                  2    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_gcdr3  r  s   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BQq!tVAXaZ!A#ad(1*,--1Xa__1Da1fqQRTUQUvo1VVVVVSAXaZ#a%1*,--1c!Q$hQT6I1JJJJJIc!eai((#a%!)44444a!A#gAaC(777	
1q1Q37   a!A#gAc!ac'llN 23EMMM	!QUSQA66677!;<= = = =SQqS\\---Aq1uI    
AaC1qs1u		BR==BqsAaCQK00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          |          }}|                    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          |          }}|                    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
          } |                     d          t          t           dz  d	z   d
          k    sJ d S )Nr   r   r'  r   r  Tr  Fr   r   )r   r   r!   r	  s       r   
test_truncr5    s   a4!AqD&=1QT6!AadF*QqS014adQTkAqD6H16LqA77DGGqA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77DGGqA771::????A;;!Aq>>QAt!!!!A;;!AT"""a''''AU###q((((QTAaCZ!^Q'''A771::adQh222222222r   c                     dt           z  dz
  t           t          j        z
  }} t          | d          t          |          }}|                                |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 d S )Nr   r   rQ   r   Tr  Fc                       t          d          S r  )r"   r   r   r   r   ztest_monic.<locals>.<lambda>      eAhh r   r  r'  r  r   c                  P    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(H(H r   r  g      @g      @r   r  r   r   )r   rm   r  r   r"   r|   rB   r@   r	  s       r   
test_monicr:    s   Q37AJqA$aqA7799>>>>88q====A;;!QD>>Q88q====$1$$$$%   A%%%%
..///1a4!A#!...!Q$1*q.@@@@
 H HIIIQTCE!C'((C1Hs1u,<s,BBBBB1a4!A#!1---AA======r   c                  D   dt           z  dz   t          dt           z  dz             }} |                                dk    sJ t          |           dk    sJ t          t          d            t          dt           z  d          } |                                 dk    sJ d S )Nr'  r   c                       t          d          S r  )r#   r   r   r   r   ztest_content.<locals>.<lambda>  s    gajj r   r   r   r   )r   r   r#   r|   rB   )r   rL  s     r   test_contentr=    s    Q37D1qMMqA99;;!1::????
00111QqS!A99;;!r   c                  L   dt           z  dz   dt           z  dz   }} t          |           t          |          }}|                                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
                    }|                                 d| fk    sJ |                                d|fk    sJ t          t          d                    t          d          k    sJ d S )Nr'  r   r   Tr  Fc                       t          d          S r  )r$   r   r   r   r   z test_primitive.<locals>.<lambda>      ill 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_primitiverA    s   Q37AaC!GqA77DGGqA;;==QF""""Q<<Aq6!!!!Q??q!f$$$$Q!Q''''Q<<Aq6!!!!Qd###1v----Qe$$$A....
2233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          \  }}}|                    |          |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 |                                ||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 d S )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mm r   c                       t          d          S r  )r&   r   r   r   r   ztest_compose.<locals>.<lambda>	  r@  r   )r   mapr   r%   r&   r|   rB   r   r  s         r   test_composerH    s   	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3444
2233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                                        d          t          t          dz  dt          z  z   dz   t                    k    sJ d S r  )r   r   r  r   r   r   
test_shiftrJ  		  s[    1qs
Q""((++tAqD1Q3JNA/F/FFFFFFFr   c                      t          t          t          z  t          t          g                              ddg          t          t          dz   t          dz   z  t          t          g          k    sJ d S rx  )r   r   r   
shift_listr   r   r   test_shift_listrM  	  sW    !aU&&!u--qsQqSkAa51I1IIIIIIIr   c            
      (   t          t          dz  dt          z  z
  dz   t                                        t          t          dz             t          t          dz
                      t          dt                    cxk    rct          t          dz
  dz  t          dz  dt          z  z
  dz                       t          t          dz   t          dz
  z            z            k    sn J t          t          dz  t          dz  z
  dz   t                                        t          t          dz             t          t          dz
                      t          dt          dz  z  dz  t          dd          z   t                    cxk    rct          t          dz
  dz  t          dz  t          dz  z
  dz                       t          t          dz   t          dz
  z            z            k    sn J t          t          dz  dt          z  z
  dz   t                                        t          t          t          j        z             t          t          dz
                      t          t          dd          t                    cxk    rmt          t          dz
  dz  t          dz  dt          z  z
  dz                       t          t          t          j        z   t          dz
  z            z            k    sn J t          t          dz  dt          z  z
  dz   t                                        t          t          dz             t          t          t          j        z
                      t          t          dd          t                    cxk    rwt          t          t          j        z
  dz  t          dz  dt          z  z
  dz                       t          t          dz   t          t          j        z
  z            z            k    sn J t          t          dz  dt          z  z
  dz   t                                        t          t          dz             t          t          t          j        z
                      t          t          dd          t          d	          cxk    rwt          t          t          j        z
  dz  t          dz  dt          z  z
  dz                       t          t          dz   t          t          j        z
  z            z            k    sn J t          t          d
            t          t          d            t          t          d            t          t          d            t          t          d            d S )Nr   r   r'  r   r   r^  r   rT   r   c                      t          t          t          z                                t          t          dz             t          t          dz
                      S r   )r   r   r   	transformr   r   r   r   z test_transform.<locals>.<lambda>(	  s4    tAaCyy224A;;QULL r   c                      t          t                                        t          t          dz             t          t          dz
                      S r   r   r   rP  r   r   r   r   r   z test_transform.<locals>.<lambda>)	  0    tAww00a!ed1q5kkJJ r   c                      t          t                                        t          t          dz             t          t          dz
                      S r   rR  r   r   r   r   z test_transform.<locals>.<lambda>*	  rS  r   c                      t          t                                        t          t          t          z  dz             t          t          dz
                      S r   rR  r   r   r   r   z test_transform.<locals>.<lambda>+	  s4    tAww00acAgQULL r   c                      t          t                                        t          t          dz             t          t          t          z  dz
                      S r   rR  r   r   r   r   z test_transform.<locals>.<lambda>,	  s4    tAww00a!ed1Q37mmLL r   )
r   r   rP  r8   r  rh   rm   r  r|   rx  r   r   r   test_transformrW  	  s   1qs
Q"",,T!a%[[$q1u++FFQ

E E E EAz1a4!A#:>//AEAE?CCCDDE E E E E E 1qs
Q"",,T!a%[[$q1u++FFQq!tVAXA&**E E E EAz1a4!A#:>//AEAE?CCCDDE E E E E E 1qs
Q"",,T!af*-=-=tAE{{KKXa^^QJ J J JAz1a4!A#:>//AJQ3GHHHIIJ J J J J J 1qs
Q"",,T!a%[[$q16z:J:JKKXa^^QO O O OAF
Q1qs
Q44QQQV8LMMMNNO O O O O O
 1qs
Q"",,T!c']]DQV<L<LMMXa^^Qt,,,Q Q Q QAF
Q1qs
Q44QS1qv:8NOOOPPQ Q Q Q Q Q :LLMMM
:JJKKK
:JJKKK
:LLMMM
:LLMMMMMr   c                     t           t          t           d          c} dt          dt           d          }}|                                 | |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 d S )%NrQ   r   r   Tr  Fc                       t          d          S r  r'   r   r   r   r   ztest_sturm.<locals>.<lambda>;	  r8  r   c                  &    t           d          S r  rZ  r   s   r   r   ztest_sturm.<locals>.<lambda><	  s    ae 4 4 4 r   i   i	=  r  r   i   rD  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_sturmra  /	  s]   d1T"""DAqd1a%%%qA7799A881vA;;1a&    QD>>aV####881v$Aq6))))%   QF****
..///
;4444555QtWWeBEk"1a4'tWWc"a%i A%&rUUE"a%K A%& sVVSQY1$% a!	"
 a
  !	3 	3 	3A 88	adSAXoAb
*RAXb[8!H	M	M	M	a1fs1unr1uRx'8	<	<	<	xq!!BE"H,a/"RU(2+=q	R	R	R	~b!e#hr1un4qRx?.S\]_ab]bSbBbehikmninenBnoqr  |D  
E  
E  
E	FF F F F F Fr   c                      t           dz  dt           dz  z  z   t           dz  z
  dt           dz  z  z
   t                                                     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                                                     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           d S )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   rd  r   s   r   r   ztest_gff.<locals>.<lambda>Z	  re  r   )r   r   r(   r|   r+  r   s   @r   test_gffrg  L	  s   	1qAv1qAv%A77477A,a!ea0@!AAAAAA;;Aq6AE1:.....
///	1q51*a!eaZQ
*AE2A77QTAaCZ!^a#!#'1qs
Q#7#7";d1ggq\"K K K K KA;;AqD1Q3JNA.A!a0CaVLLLLL
/////r   c                  t   t          d          t          d          }} t          | t          z  |t          z  z   t          t          | |f          }|                                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 d S )	Nr   r   r&  r'  r  r^  rQ   r   )rs   r   r   r   norm)r   r   r   s      r   	test_normrj  ]	  s    77DGGqAQqS1Q3Y1A///A6688tAadFR1WQT\1AadF:AqNNNNN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                                                     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                                                     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 d S )	Nr   r   r&  r   r'  r#  rQ   r   )r*   r   rs   r   r   r   r   test_sqf_normrl  c	  s2   AqD1HQ000
adQtAwwYq[ 1$adR1Wnq&89: : : :AqD1HQ000
adQtAwwYq[ 1$adR1Wnq&89: : : : 1qDGG,,,5577
d1a4!DGG)A+%)1Q@@@1a4"QT'>A%q666	88 8 8 8 1qDGG,,,5577
d1a4!DGG)A+%)1Q@@@1a4"QT'>A%q666	88 8 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          \  }}}}|                                |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 |                                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 |                                |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          |                                          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 d S )Nr   r   r   r   r'  Tr  Fc                       t          d          S r  )r+   r   r   r   r   ztest_sqf.<locals>.<lambda>	  s    hqkk r   r   r\  r  r#  r  l    H/P l    _ % )r   rG  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_sqfrq  r	  sM   	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0A;;11v1v./////Aq>>a1a&1a&!122222AtaVaV$4 55555A;;11v1v./////AT"""qAq6Aq6*:&;;;;;AU###QFQF+;'<<<<<QFQF#33333
11222q66Q;;;;A;;1b'!!!!!Q$
Q31q1}#44444q66Qq!tVq!99!Q$q1$<<1QT6!!!!	1q!tAqs88!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JtAqD1Q3JN##$$Q
2222	A1q5	AqD Aq66Q;;;;	
A!a+%Aq66a!ek)))))A;;1A{3455555 vAzQU+q1u57788	
Q
VQUq1u-.../ / / /vAzQU+q1u57788	
Q
VQUq1u-.../ / / /vAzQU+q1u57788	
Q
VQUq1u-.../ / / /vAzQU+q1u57788	
Q
VQUq1u-.../ / / / 
Q
AEAEA:%q1uqj0!a%8A77!	acAgkAo		"	ad1fqAvo!Q$&1Q.14qAv=!C	D	DaH& "      r   c                  ;   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          \  }}}}|                                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 |                                |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                                                     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                                             d         d+         d+         t:                    dusJ t9          t;          t           dz  t           z   dz                                             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 d S )9Nr   r   r   r   Tr  Fr  r   r   r\  r   positiver&  )integerr  )realr   r'  r&  r-  i    iX  i iH i r]  i  iT     iY  r#  r  r  r(  r)  r^  r  r*  r.  c                  2    t           t          d          S )NFr.  r/   r   r   s   r   r   ztest_factor.<locals>.<lambda>R
  s    F1a$>$>$> r   c                  :    t          t          dz  dz
  d          S )Nr   r   Tr  ry  r   r   r   r   ztest_factor.<locals>.<lambda>T
  s    fQTAXT::: r   r   r  r0  g      ?r   g      ?   M      r     ih  )r/  fractioni)r   rG  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  	  sg   	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Fq&&&11v1v1v.F*GGGGG  ""1v1v1v&>>>>>q>>aW$$$$q>>aW$$$$tAww""tAwwm3333Qw""qB7)n4444!ax##QFQF+;'<<<<<tAaCyy!$$ac16]O(<<<<<!99>>fQii2>>>qsQF8},,,,qAv11vh-////!A#;;!A#!AqD&>>Qq!tV####1QT6A:/""c1a4!8a-&77777!99!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0sT"""AsD!!!AsA$qs))#t++++$qAvz""##tAwwtQUQUO/D/D'DDDDD$qAvz""##tAwwtAqD1H~~'=====1QT6A:/""adAEA:oq1uqj&@@@@@1QT6A:/""adAqD1Hq=&888881QT6A:/""q!a%y!a%'81&<<<<<1QT6A:/""q!Q$(|a&77777VQTAXA&A.Az9::;;Aa!eaZQ  a!e,T!Q$(^^;A!99>>>>!99>>>>	
Q
AqD1HAVAYYA!99QSVVAX\1R(((A==??qAq6(m++++	1qA!99>>>>!q!!!adQhA%:::::!d###1q1a4!8'<<<<<	T!WW  "#Q$a"2Q"6AQ	9IA9M!NO O O O !Q$1Q,"##AaC!|3333	1qs1uqA!99>>>>QT	Auvax'((61F1H<Aq"r!t)}s"SU*Q..E!affSj.46#:-11E!99!D!!!U****!D!!!U****	1qay{QA!tAww'''AQK!+;;;;;!Q$$q''***q477{Q.>>>>>!Q$1a4-477333	
T!WWQYT!WWQY'( ( ( (!AqD&1QT6/T!WW55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 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!993q66A:r)))))!993q66A:Q{22222"	1qs
Q1q" " # #&(!a%!a!eadQhl5K&L&LM M M M 
AAqD1Q3JN#A!99QQQ
22222!Q<<AEAE?AEA:55555	A1q5	AqD A!99>>>>!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&CDDEFF	
BAAq1uq1uoAqy{ C CDDEF F F F QTAX\&&((+A.q18= =@DE E E EAA**,,Q/215xA ADHI I I I $r((tQBxx'''' 
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 !99>>>> #adQh--!#$///3q!a%y>>A3EEEEE#adQh--/---QAY1AAAAA$q!t**ad++++ &#a%'CE!G,--..#c3q53;A3' 3' 3' ' ' ' '&#a%)a(())T3q53;2B-B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I"ad###AA1qs
R'HHHHH 	
!aA!GnA!$6!$#F#F#FFFFF!$///1Q33q66#bd))9K3KKKKKq!ta1f}aA..	QFQUAJQ
+3- - - - - 77AQKT!WWSB2vq2vCs3wB3$S!H(=#>>>>>s3wB3$S!H(=#>>>>>r#vB33$"44444r#v2#q	B7';"<<<<<s3w""s3wm3333s3w""s3wm3333r#vq!!bfb\1111r#vq!!bfb\1111DGGBJT!WWRZ8!<<	Qa^Q!d1ggbj.!!45A7 7 7 7 7 a%!q1u	Q	'A&))!!!!
a%!q1u	Q	'A&))!!!!	
Q
AQK!##QTAX\Ad1ggI%=$AAA&))t,,,1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  !99!a%!QU+QTAaCZ!Q$->-BCQTAXNNN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 d S )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  
  s5   	
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 !99Q)1a4!84a!eg5EEEEEE!99Qq1uqj00000	 AE7#a!eX%6A1FGH H H Hq>>a1q5!*q1udm!<=====	
A1vq!tax(A	
A1vq!tax(A!99	
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 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 d S )	Nr  r#  r   r   r   Fr  r   )r/   r   rd   rh   r   r   r   test_factor_noevalr  
  s    !A#(s1acAg>>>>>>>1Q38acAg&''3x1~~qsQw1q5	+R+RRRRRRRr   c                     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            } |                      d          ddgk    sJ |                                  ddgk    sJ |                      dd          ddgk    sJ |                      d          ddgk    sJ |                      t          dd                    |                      d          cxk    r:t          dd          dfdft          dd          t          dd          fdfgk    sn J |                      t          dd                    |                      d          cxk    r:t          dd          dfdft          dd          t          dd          fdfgk    sn J |                      t          dd                    |                      d           cxk    r:t          dd!          dfdft          dd          t          dd          fdfgk    sn J |                      t          dd"                    |                      d#          cxk    rHt          dd$          t          dd$          fdft          dd          t          dd          fdfgk    sn 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n 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n 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n J t          | t          dd"                    t          | d#          cxk    rHt          dd$          t          dd$          fdft          dd          t          dd          fdfgk    sn 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            } |                                  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            d S )QNr   r   T)r-   r   )r   r   r\  )r   r\  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   r^     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   | ]x\  \  }}}t          |          t          |          cxk     ot          |          k     nc o6t          |          t          |          cxk     ot          |          k     nc V  yd S r   rp   ro   r   r   r   r  s       r   r   z!test_intervals.<locals>.<genexpr>          J J(v1q !uur!uu$$$$r!uu$$$$ 	* *UU* * * *UU* * * * J J J J J Jr   i(   )r   r-   r  c              3      K   | ]x\  \  }}}t          |          t          |          cxk     ot          |          k     nc o6t          |          t          |          cxk     ot          |          k     nc V  yd S r   r  r  s       r   r   z!test_intervals.<locals>.<genexpr>+  r  r   c                  :    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CC r   c                  ^    t          t          dz  dz
                                d          S r  )r   r   r0   r   r   r   r   z test_intervals.<locals>.<lambda>/  s%    tAqD1H~~77K7HH r   c                  T    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LL r   )r0   r   r   rh   rm   r   r   r   r5   rf   r|   rx  )r   r   r   	real_partcomplex_parts        r   test_intervalsr  
  s1   Q<<2Q<<2QD!!!fX----Q<<K=((((QV////adAqD\""A!'=&>>>>>aA"a01Q3!S9I9I3IJKKA;;4;  Wh$77777;;==\=99999;;Dd;++/BBBBB;;D;!!lM%BBBBB;;8Ar??;++q{{s{/C/C O O O OBa
 !	$Q"a'I1&MNO O O O O O;;8As++;,,0E0E O O O OBa
 !	$Q"a'I1&MNO O O O O O;;8At,,;--1G1G P P P PBq
!1	%"a(2q//(JA'NOP P P P P P;;8Au--;..!++&+2I2I a a a aBxD11
2A	6(2q//8TVXY??9[]^8_`a a a a a a 
8Aq>>	HROO	+acHQ4D4D.DEAQD!!!gx%88888Q<<L-88888QHQOO,,,	!0E0E0E O O O OBa
 !	$Q"a'I1&MNO O O O O OQHQ,,---1$1G1G1G O O O OBa
 !	$Q"a'I1&MNO O O O O OQHQ--...)A52I2I2I P P P PBq
!1	%"a(2q//(JA'NOP P P P P PQHQ..///9QF3K3K3K a a a aBxD11
2A	6(2q//8TVXY??9[]^8_`a a a a a a 	adQhAA%q1u-qsQwl:;;A;;==xA
	#xA&;Q%?	hq!nn
q	!Xa^^Q$7#;	== = = =
 adSj!Q$*-..BXc2..
/!Q	8HS#<N<NPXY[]^P_P_;`cdfgbh:ijk k k k adSj!Q$*-D999BXc2..
/!Q	8HS#<N<NPXY[]^P_P_;`cdfgbh:ijk k k k adSj!Q$*-..CXc1--
.A	78C;K;KS:QTUWXSY9ZxA
!Q	(HROOXb!__+MPQSTv*V	XX X X X a!eQUAE1q5!QUAEAEA:NOO
QF	hA!5
aA A 8"QF+	-- - - - dQh1qAv)1q5!qAQHQNN555;;;;QHQNN5558Aq>>8TUWX>>:Z9[[[[[QHQNN555(QQRTUDW9XXXXXQHQNN555(CCCCQHQNN+++r1111QHQNN+++(1a..(1a..1QST0U/VVVVVQHQNN+++HQPQNN@SUV?W/XXXXXQHQNN+++>>>>aV!Q000B6666aV!Q000x1~~xPQST~~6VYZ\]X^5_4`````aV	" ""   aV$v1v&6!Xa^^9LqRSf8UVW W W W	
AHQNN$ $ $)1Aq6(:VaV<L'MN N N N a!eQTAX&''
QF	hA/&1a&1ABC C C Ca!eQTAX&t444
QF	xA3aV<v1v>NOP P P P 	
!Q$AqD2ad7"RT)B.AQ<<2't>>>I|???? J J,/fQii,H,HJ J J J J J J J Xc1--"Q6:%c1--qtAv6xQ///"aAQ!B$q& 89; ; ; ; ;
 (t8Ar??SSSI|???? J J,/fQii,H,HJ J J J J J J J :CCDDD
:HHIII
LLN N N N Nr   c            	      f    t          t          dz  dz
                                  ddd          dk    sJ                      ddd          dk    sJ                      ddd           dt          d	d          fk    sJ                      ddd           t          d
d          dfk    sJ                      ddd          dt          d	d          fk    sJ                      ddd          t          d
d          dfk    sJ                      dddd          dt          d	d          fk    sJ                      dddd          t          d
d          dfk    sJ                      ddt          dd                    t          dd          t          dd          fk    s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           d S )Nr   r   r   )stepsr%  r  r   r  r   rC  T)r  r  r  r  ro  r,  r  r  c                  :     dz                       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$L r   c                  6     dz                       dd          S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>H      ad%7%71%=%= r   c                  6     dz                       dd          S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>I  r  r   c            	      D    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=M$N$N$N r   c                  N    t                                         ddd          S Nr   r   r   r  )r   r1   r   s   r   r   z"test_refine_root.<locals>.<lambda>X  s"    tAww221a[2II r   c                  *    t           ddd          S r  r  r   s   r   r   z"test_refine_root.<locals>.<lambda>Y  s    {1aDD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1==Rq=))X5555==AT=**q(1a...AAAAA==Rt=,,"a"0EEEEE==AQ=''Ax1~~+>>>>>==Rq=))hr1oor-BBBBB==AQT=22q(1a..6IIIII==Rqt=44"a"8MMMMM==A8As#3#3=44"b9I9I8TVXZK[K[8\\\\\==A4=((Xb"-=-=xB?O?O,PPPPP
?LLLLMMM
====>>>
====>>>	1qAq!Qa(((QA,?????q"b***xA.CCCCCq!Qad3338Aq>>7JJJJJq"b555(2q//29NNNNNq!QHQ$4$4555(2r:J:JHUWY[L\L\9]]]]]q!QD)))hr2.>.>R@P@P-QQQQQ
?NNOOO
:IIIIJJJ
:DDDDEEEE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	            d S )
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NN 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222a7777q!taxR(((A----q!taxR(((A----q!taxQ'''1,,,,q!taxQ'''1,,,,q!taxRQ///14444q!taxRQ///14444q!taxRQ///14444q!taxRQ///14444q!tax  A%%%%q!taxRT***a////q!taxRT***a////q!taxRTr!t4449999q!taxQ'''1,,,,q!taxQ'''1,,,,q!taxaR(((A----q!taxaR(((A----q!taxaRTr222a7777q!taxaRaRT222a7777
?2233333r   c                       t          dt          dz  z  dt          dz  z  z
  dt          z  z   dz                                   d          t          dd          k    sJ                      d          dk    sJ                      d          dk    sJ t	          t
           fd           t          t          d	z  t          z   dz                                 d          t          t          dz  t          dz  z
  dz   d          k    sJ d S )
Nr   r   r   r'  r   r   r   c                  .                          d          S )Nr   )rootr   s   r   r   z test_Poly_root.<locals>.<lambda>  s    qvvayy r   r   )r   r   r  rh   r|   
IndexErrorrx   r   s   @r   test_Poly_rootr    s    Qq!tVa1f_qs"Q&''A66!99Q''''66!99>>>>66!99>>>>
:(((()))1q1""1%%1q!ta)C)CCC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          |                                            t	          dd	          d	d	gk    sJ t          |                                           t          |d          gk    sJ d S )Nr   Fmultipler   r   r   r  r   r   radicalsr   r'  r   )r4   r   rx   r   rh   r\  s     r   test_real_rootsr    s   a==QCa%(((VH4444adyyy((((adU+++x7777aAA&''F1a4!8a<,C,CQ+GGGGGaAA&777V	1q1a> >=$<& & & & & 	1adQhl !'1q1a!8!8!Q BC C C CadAqD1HqL)E:::	1q1aA A@$?& & & & & adQh///1a4!8Q///1a4!8Q///4
 
 
 
 

 	
!Q$1a4!A#!A	1q1A77HROOQ#:::::77F1aLL>111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          |                                           cxk    r|k    sn J t           dz  t           z   dz   }t	          |d          t	          |d          t	          |d          g}t          |          t          |                                          cxk    r|k    sn 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 d S )Nr   r   r   r'  r   r   r   Fr  r  r   )r   rh   r3   r   rx   rs   )r   frootsr   grootsr   s        r   test_all_rootsr    s8   	!Q$1a4!A#!Ar1ooq!$FQ<<477,,..8888&888888	1q1AQllF1aLL&A,,7FQ<<477,,..8888&888888QTAXDGG8T!WW"55555QTAX...T!WWHa=477A,2OOOOOQTAX...q!taxU+++q!taxU+++3    
 	
1q1AQ<<q!fQllF1aLL&A,,q!      r   c                  b   t          dt                                                    g k    sJ t          dt                                                    g k    sJ t          t          dz  dz
  t                                                    ddgk    sJ t          t          dz  dz   t                                                    dt          z  dt          z  gk    sJ t          t          dz  dz
  t                                                    } | ddgk    sJ t          t          dz  dz   t                                                    } | dt          z  dt          z  gk    sJ t          t          dz  dz  t	          dd          z
  t                                                    } | ddgk    sJ t          t          dz  dz  t	          dd          z   t                                                    } | dt          z  dt          z  gk    sJ t          t          dz  dt          z  z   t                                                    ddt          z  z   ddt          z  z
  gk    sJ t          t          dz  dt          z  z   t          t                                                    ddt          z  z   ddt          z  z
  gk    sJ t          dt          z  d	z                                             d
gk    sJ t          t          dz  t          z   dz   d          } t          d          }t          | d                                       d|          t          j	        u sJ t          | d                   dk    sJ t          | d                   t          d
d          k    sJ t          | d                                       d|          t          j	        u sJ t          | d                   t          d
d          k    sJ t          | d                                       d|          t          j	        u sJ t          | d                                       d|          t          j	        u sJ t          | d                                       d|          t          j	        u sJ t          | d                                       d|          t          j	        u sJ t          | d                                       d|          t          j	        u sJ t          d          }t          | d                                       d|          t          j        u sJ t          | d                   dk    sJ t          | d                   t          d
d          k    sJ t          | d                                       d|          t          j        u sJ t          | d                   t          d
d          k    sJ t          | d                                       d|          t          j        u sJ t          | d                                       d|          t          j        u sJ t          | d                                       d|          t          j        u sJ t          | d                                       d|          t          j        u sJ t          | d                                       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
            }|                    d          d |                                D             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                                 d                    d*k    sJ t#          t          d+t          dz  z  dz
                                                      d,k    sJ d S )-Nr   r   r         r   r   r&  rb  re  g      r   nz1e-5ghW!'r   gJ5ogJ5o?gP?gg'r'  gg'?z1e-6c                  j    t          t          t          z   t                                                    S r   r   r   r   r5   r   r   r   r   ztest_nroots.<locals>.<lambda>  s    QUA 5 5 7 7 r   c                  ^    t          t          t          z                                             S r   r  r   r   r   r   ztest_nroots.<locals>.<lambda>  s    QU0B0B0D0D r   g       c                       t          d          S Nr   r5   r   r   r   r   ztest_nroots.<locals>.<lambda>  s    F1II r   c                 .    g | ]} |j         d           S r  r  )r   r   s     r   r  ztest_nroots.<locals>.<listcomp>  s"    999a313q66999r   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   str)rootsr  r   s      r   test_nrootsr    s   1::"$$$$1::"$$$$1q!##%%$44441q!##%%$q&#a%8888A1$$&&ET3KA1$$&&ET!VSUO####Aa(1a..(!,,3355ET3KAa(1a..(!,,3355ET!VSUO####1qs
A%%''D3q5L#A++FFFFF	1qs
A$ $ $$*FHHAsSU{0KL L L L A##%%$////1a4!8a<1%%%E
--CeAh<<""8S11QV;;;;eAh<<3eAh<<5q>>))))eAh<<""8S11QV;;;;eAh<<5q>>))))eAh<<""8S11QV;;;;eAh<<""8S11QV;;;;eAh<<""8S11QV;;;;eAh<<""8S11QV;;;;eAh<<""8S11QV;;;;
--CeAh<<""8S11QW<<<<eAh<<3eAh<<5q>>))))eAh<<""8S11QW<<<<eAh<<5q>>))))eAh<<""8S11QW<<<<eAh<<""8S11QW<<<<eAh<<""8S11QW<<<<eAh<<""8S11QW<<<<eAh<<""8S11QW<<<<
;77888
&(D(DEEE!Q$(c{****1a4!8ET3K!a%==T!VH$$$$!ac'??tAvh&&&&
?--... 	QTAXA88A;;991;;==9999999tArEBq"uH$s1b5y042:=ad
AqD[!#)!Q$;/18A>  q		      tE!Q$JM""))++,,1XYYYYYYr   c                  @   t           dz  dt           dz  z  z
  dt           dz  z  z   t           dz  z
  } t          |                                           t          j        dt          j        dik    sJ t          |           t          j        dt          j        dik    sJ d S )Nr  r'  r   r   )r   r   r6   rm   r  r   r   s    r   test_ground_rootsr    s    	1qAv!Q$A%A77!!aeQ%:::::??qua333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            d S )	Nr'  r   r   c                  $    t           d          S r  r7   r   s   r   r   z+test_nth_power_roots_poly.<locals>.<lambda>  s    3Aq99 r   c                  .    t           t                    S r   )r7   r   r   s   r   r   z+test_nth_power_roots_poly.<locals>.<lambda>  s    3Aq99 r   r   r  c                  T    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 1 r   )r   r7   r|   rx  r/   r?   )f_2f_3f_4f_12r   s       @r   test_nth_power_roots_polyr    sj   	1q!taAa4!8a<!
Ca4!8a-Ca4!8a<!
CEA:D1%%****
:9999:::
:9999:::&q!,,--4444&q!,,--4444&q!,,--4444&q"--..$6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            fdt          |                                           D             dgk    sJ t          t          d            t          t          d            t          t          d	            t          t          d
            t          t          d            d S )Nr'  r   r   r   r   c                 2    g | ]\  }} |          |S r   r   )r   r&  r  r   r0s      r   r  z"test_same_root.<locals>.<listcomp>.  s,    @@@$!QbbBii@A@@@r   c                  f    t          t          dz   t                                        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9 r   c                  |    t          t          dz  dz   t          d                                        dd          S )Nr   r   r   r   r   )r   r   rO   r  r   r   r   r   z test_same_root.<locals>.<lambda>3  s1    41qA///99!Q?? r   c                  l    t          t          dz  dz   t                                        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00::1a@@ r   c                      t          t          t          dz  z  dz   t          t                                                 dd          S r  )r   r   r   rP   r  r   r   r   r   z test_same_root.<locals>.<lambda>7  s3    4AqD1RU333==aCC r   c                  v    t          t          t          z  dz   t                                        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   r  s    @@r   test_same_rootr  *  s    QTAqD[1a4!#a'((A	
B	QURZ!^		B@@@@@)AKKMM22@@@QCGGGG
?99; ; ;
;??A A A
;@@B B B
;CCE E E
&==? ? ? ? ?r   c                     t          t          dz  dz
  t          dz
  z                      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                      t          t          ddt          dd          z  z   z  i                    } t	          | t                    J d S )Nr   r   r  r'  )rb   r   r  rs   r=   rh   r   s    r   test_torational_factor_listr  <  s1   Aa!A#$$a1tAww;%89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CDDA"1a((00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\  } }}}d | |||fD             \  }}}}|                     |          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                    }|                      |          t          d          dz  t          t          dz   t          t                    t          t          dz   t          t                    fk    s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                    }|
                     |          |	|	|z  |fk    sJ |
j                             |j                  |j        |j        fk    sJ |
j                             |j        d          |j        |j        fk    sJ t          t          t          d          } t          dt          d          }|                      |          dt          t          t          d          t          dt          d          fk    s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          }|                      |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k    ft          d
z   t          d
z  d
t          z  z   z  df          }t#          |t          dz
  z  t          dk    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k    ft          d
z   t          d
z  d
t          z  z   z  df          }t#          t          dz
  t          dk    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 d S )-Nr   r   r  )r   r   r   r   r"  r   r#  r'  r   r   c                 8    g | ]}t          |t                    S r   r   r  s     r   r  ztest_cancel.<locals>.<listcomp>U  s     555!41::555r   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   rs   r   rm   r  rq   r   r   rQ   r   r   is_Mulrr   rh   rn   rt   NaNr  ry   rw   ru   rf   )r   r   r   r   rL  r  rp  r  pairsr  pfpgpppqrM  p1p2p3p4r
  exprs                        r   test_cancelr  H  s4   !99>>>>!99>>>>!99>>>>"::&>>Y&&&&&!	))))&!	))))1a4!QqS1WacAgq0JAq!Q551a|555JAq!Q88A;;1a)####1a&>>aAY&&&&1a&!Aq	))))1a&1$Aq!9,,,,1a&>>aAY&&&&1a&%%%!Q22221a&&&&1a)3333	
AAQK A!99>>>>!E"""a$q''k1111	
AAQK A!99>>>>!E"""a$q''k11111a46A:qsQw'((QAqM9999 1a4!8a!e$%%AEAqD1H)=====1a4!Q$;Q'++q1u44441a4!Q$;Q'++q1u44441a4!Q$;Q'((AE11111a4!8adQh'((QTAX\AE,BBBBB1a46AF?QTAX.//AqD1HqL1Q373KKKKK3qs88aAh&*SVVaZ899SVVaZGGGGQTAqD[!AQUAAQUAg&&&AQ'"""A1a&>>aAY&&&&	1Q!QT!!QtAwwY]A$55$q''	AA	1qA1a&D)))aA!aT!WW-M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;;1Q44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 G1eQq!f~~!Q****!QZZ!QZZ!QZZ!QZZyy}}b" 55555v}}RV$$(88888v}}RVT}22rvrv6FFFFFFQ'"""AQ'"""A88	 $q!G,,,d1a.H.H.HIJ J J J88At8$$Q'"""DAg$>$>$>)@ @ @ @ @ 	QqSUQY'***AQq!tVAXq)))A88At8$$QqS1Wa((($qs1ua*H*H*H)J J J J J Q$1*ua!eaZ'
'(1q5A26A:*>?A!99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@  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  GU  qU  oU  	V	VA!99t#### 	s&&&A	Aq!taxL!a%(!a%0AEAqD1Q3J3G2N	O	OB	Aq1uIq1u%!T{	3	3B"::!B$<<1R4!b&>>QV####1a4!8a!e$R'((QUBJ66661a4!8a!e$r)**q1ul::::	QTAXA&A.!a%!Q$1*1Et0L	M	MB	QUQU#ac4[	1	1B"::!B$<<1R4!b&>>QV####1a4!8a!e$R'((QUBJ66661a4!8a!e$r)**q1ul:::: 	
 H@ A 	  	  	AB !u%%%....16!Q<<15    A;;!% 	S!QA!C&1*3!++++qw41qw..//!ag+/AD$<<Ac!D'AdGaK!D',A"ABBBQ4[PTUUUUUU1a4!8a!e$%%Q......r   c                     t          t          dz  dt          z  z   dz   t          d                                          \  } }| k    sJ |t          j        k    sJ t          t          dz  dt          z  z   dz   t          d                                          \  } }|                                 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                                          \  } }| 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                                          \  } }| 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           d S )Nr   r   r'  rP   r   rQ   r   r  r  c                  ,                                      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L r   rT   c                  ,                                      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    s8   QTAaCZ!^Qt,,,A6688DAq6666;;;;QTAaCZ!^Qt,,,A6688DAq		;;;;QT!Vadd1fqj 1Q446)1T:::A6688DAqQTAaCZ!^Qt44444446666QT!Vadd1fqj 1Q446)1T:::A6688DAqQTAaCZ"_a55555556666QqS!QA
:LLLLMMMQtA
:LLLLMMMMMr   c                      t          t          dz  dz
            } |                     d          \  }}|t          j        k    sJ |du sJ d S )Nr'  r   T)by_nameF)r   r   galois_groupr[   D4)r   r  alts      r   test_galois_groupr$    sT    Q!VaZA^^D^))FAs%(((((%<<<<<<r   c            	      j   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          |          }|                    |           ||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          |                    |           ||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 |                    |           ||fk    sJ t          | |d
          d         d	k    sJ |                    | d
          d         d	k    sJ |                    |           du sJ |                    | dz             d
u sJ t          ddgt                     dgd	fk    sJ t          t          d            d S )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!oo r   )r   r   r9   r:   reducer   r   rh   containsr|   rB   )r   r  r  r  r  s        r   test_reducedr)    so   	!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88gaAq5551v>>>>>$AahhqkkAq6*****	!Q$A!A!Q$A+/1Q37+,,A	
A!Q$q1Q3q5	 1a46	)AqDF	2QT!V	;adU1Wq!tAv=MPQRZ[\^_R`R`P`=`aA	A1a==QF""""88A;;1a&    1ae$$$Q'1,,,,88AE8""1%****::a==D    ::a!e%%%%1qc11#q))))
556666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          d t          ||j	                  D             |          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            d S )Nr   r   r'  r   rX   r  r   rZ   Tr  r  r   r^  r  r   Fr)  r  )r   r   r  c                     g | ]
\  }}||z  S r   r   )r   r   r   s      r   r  z!test_groebner.<locals>.<listcomp>b  s     111A1111r   r   )r  rN   r  r   c                  "    t          dg          S r   )r:   r   r   r   r   ztest_groebner.<locals>.<lambda>p  s    hsmm r   
buchbergermethodf5bc                  <    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AA r   )r:   r   r   r   r   rl   r9   sumr   r  r|   rB   rx  )rL  r   r  r  r  s        r   test_groebnerr5  H  s.   B1a  B&&&&QTAXq!tAv1}-q!5AAAa!Q$hPRUVXYUYPYEZZZZZQTAXq!tAv1}ac!Q$h7Aq	RRRWY\]_`\`W`bcefbfhilmoplphpVqqqqqQTAXq!tAv1}-q!5MMM	a!Q$h1		tBAIq!4456 6 6 6QTAXq!tAv1}ac!Q$h7Aq	Y]^^^	b1a4iAq	!	!41aA#6#6QAXq!Q8O8OPQ Q Q Q QTAXq!tax())a!eW4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%88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 L
 1aAq!uDIIIDAq11Q111155a9K9K9KK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 3AYd333	
A!QTAadF]AaC!A#I./ / / / QCs""""QTCE\NAq))c!Q$hQ.>-?????
33444QTAXq!tax(>>>1q5'IIIIQTAXq!tax(777AE7BBBB
:AABBBBBr   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 |                    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 |                    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 |                    t
                    |k    sJ d S )(Nr   r  r'  r   r^  r   r   r   r#  r  r  r  $   r     N   i  i   l   i   i  i8  i  r`  r(     i   r_  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_fglmr>  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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 d S )NTr   r   Fr   r  )r<   r   r   r   r   )rL  s    r   test_is_zero_dimensionalr@    sK   1vq!,,44441q!t}a33u<<<<1ay!Q22d::::1ay!Q155>>>>	
1q!A#'1Q37#Aq!Q**d2222	
A!A	1QT6AadF?AadFQq!tVO<Aq!Q**d222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 |D             }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 k    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 d S )Nr   rZ   r  r   c                 D    g | ]}t          |t          t                    S r   r  r  s     r   r  z&test_GroebnerBasis.<locals>.<listcomp>  s"    $$$A$q!Q--$$$r   r   Tr   c              3   $   K   | ]}|j         V  d S r   r  r   r   s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  $      %?%?Aai%?%?%?%?%?%?r   c              3   $   K   | ]}|j         V  d S r   rD  rE  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  rF  r   r+  c              3   $   K   | ]}|j         V  d S r   rD  rE  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  $      !;!;!)!;!;!;!;!;!;r   c              3   $   K   | ]}|j         V  d S r   rD  rE  s     r   r   z%test_GroebnerBasis.<locals>.<genexpr>  rI  r   )r   r   r:   r   r;   r   r  anyexprsr  r   r   rP   r  rZ   r  r   )rL  r  r  rp  s       r   test_GroebnerBasisrM    sU   	
1qsAadFQTM"AAq	***A	
A!QTAadF]AaC!A#I.A$$$$$AAGQ333q8888a''4////q66Q;;;;Q41Q4<<!<<<Q41Q4<<!<<<Q41Q4<<!<<<QRR5AabbE>>#%?%?122%?%?%?"?"?>>>RaR5AbqbE>>#%?%?122%?%?%?"?"?>>>7a<<<<7a<<<<6aV8r>>>>7g6666a====6666a====7777Aq	666AQ41Q4<<AaDL<<<Q41Q4<<AaDL<<<Q41Q4<<AaDL<<<QRR5AabbE>>c!;!;QqrrU!;!;!;;;>>>RaR5AbqbE>>c!;!;QqrrU!;!;!;;;>>>>>r   c                  V   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          |           
                                |                                 k    sJ t          t          dz   z  t          d          dz  z   }t          |          
                                |                                k    sJ d S )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_polyrR    s   77d1ajj    77d1ajj    A;;$q1ua++++++CFF
tAAJ3q66::::::A1a!eQ!2!22222CFF
A'''4CFF
CFFA+F+FFFFF!ac!Q$h#$$QqS1Q3q!t8^b-@!Q(J(JJJJJ1q51*q !!T!AqD&1Q3q5.1QT6*AA*Eq!%L%LLLLL	1q51*q !!AqD&1Q3q57"2Qq!tV";a"?AqIIJ J J J!	A   qs1a4x!A#a%'1AaC1H<q@!QJJK K K K 	A   "1QT6AaCE>AadF#:Q#>#BAq!LLM M M M	A   "1QT6AaCE!G#3a1f#<q#@1#DaANNO 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 2 2 QUQY1a(())T!a%!)Q1-E-EEEEEQ
A$q!tac!e|ad':Abe"L"L"LLLLLQ
A$q!tac!e|ad':Abe"L"L"LLLLL1::a####
__--- Aq!QUAq 1 11111Aq!QUAq 1 11111 1q1Q1a'E;;  ELLNN2222qsGadd1fE;;  ELLNN222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 d S )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_coeffrV    s   Aq1uu%%%Aqua  A%%%%q}a((QB....qvvq!!SU****qww""d1f,,,,quac""ac))))qttQqS!!Q&&&&qttSVV$$#a&&0000qttQU##q((((q!A#!####q1uadd##q((((qvqu%%////Aq5!!!Aquua  CA$>$>$>>>>>Aq5!!!Aqvq 
 
 
U+++, , , ,qvq 
 
 
CE222UCCCD D D 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 d S r   )rf   r   r   r   r   r   test_poly_matching_consistencyrX  "  s\     tAqzz>T!A#q\\))))1::>T!A#q\\))))))r   c            
      j   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 d S )Nr&  )rb   r/   r   rf   r   r   r   r   r   r   test_issue_5786rZ  )  s    &	
QqS1qs7 )*- - - . .23Aa!A#!1Cac!e1KL L L L L Lr   c                      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 d S )Nc                       e Zd ZdZdS ) test_noncommutative.<locals>.fooFN)__name__
__module____qualname__is_commutativer   r   r   foor]  /  s        r   rb  r   )r_   r   r   r8   )rb  r  r   s      r   test_noncommutativerc  .  s        d   	1qs7A	AE
A##a&&>>SSVV####!cc!ff*SSVV++++!CCFF(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 d S )Nr   r   rU   r   r   )r>   r   r   r   rs   ru   r   r   r   test_to_rational_coeffsre  8  s    QTAadF]T!WW$a5557 7:>? ? ? QTDGGAqDLQ''!+Q//1 1489 9 9 d1ajj))111d47719oo..66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 d S rx  )r.   r   r   r,   r   r   r   test_factor_termsrg  C  sx    q!a%y!!a1a&1q5!*)=%>>>>>Aq1uI11qs
A&7"8888888r   c                     t          t          dz  dz   t          d                                          g dk    sJ t          t          dz  t          z   dz   t          t          d                                          dgg ddggk    sJ t          t          dz  t          z   dz   t          t          t          d                                          dggg gdgdgggk    sJ d S )Nr   r   rP   r   )r   r   r   r   r   )r   r   as_listr   r   r   r   r   test_as_listrj  I  s    1q!D)))1133|||CCCC1q1a400088::sBA>OOOOO1q1aAd333;;==78cURDA3*4MN N N N N Nr   c                  d   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 d S r  )r.   rs   r   ru   r   r   r   test_issue_11198rl  Q  s    tAwwqy!!d1ggAx%88888tAwws1vv~s1vv..477c!ffa[M2JJJJJJJr   c                      t          t          j        d          t          z            }  | j                    t          j        d          t          z  k    sJ d S )Nr  )r   rj   evalfr   r-  r   s    r   test_Poly_precisionro  V  sF    RXc]]1_A19;;"(3--/))))))r   c                      t          ddt          d          z   z  t                    t          ddt          d          z   z  t          d          k    sJ d S )Nr   r   rU   r   )r   rs   r   r   r   r   r   test_issue_12400rq  \  s[    1T!WW9q!!Ad1ggI$///0 0 0 0 0 0r   c                  
   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 d S )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_14364rt  a  s   qttQa[!!#QqTT1tAww;%7%:;;x2RSVZ[\V]V]R]?^^^^^tAwwx1~~%tAwwx1~~'=>>$q''(STVX//BYYYYYx1~~d1gg%x1~~d1gg'=>>!B%%Q-PQ/QQQQqay!DGG)$$477
2222qttQHQNN**+A-qttQHQNN9J5J/KA/MNNRZ[]_`RaRaefijltuvxylzlzizezR{{{{{x1~~d1gg%x1~~d1gg'=>>$q''"*LLLLqttDHH}Q!T"XXb 011T"XXb[@@@@ !T"XXa1d2hhq!A$$tBxx-/BCCtBxxPXYZ\^P_P_G_____!a$q''k"1$addAQK&8&:AaDD!d1gg+<Nr<QRSSYZ]abc]d]dYdfnoprufvfvXvvvvvAtBxx'!QR)@(1a..QUVXQYQYBYZ[[_ghjlm_n_nostvowow_wwwww!a!Xa^^++,Q.!a!Xa^^:K6K0LQ0NPQRTPUPUWX[\^fghjk^l^l[lWlPmnoPopqqu}  B  DE  vF  vF  JK  NO  QY  Z[  ]^  Q_  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 d S )Nr   Trs  r  r   r   r  r'  r   r#  r0  )rn   rs   rh   r/   )r   r  s     r   test_issue_15669rv  s  s    sT"""Aq!tGadUT!AqD&AqD1Hq="8999A=AA	!Xa^^
A1utAadFadQh],B'C'CCaG(STVW..XXY[]^_[_`D$T"""aAl222222r   c            	         t          d          } t          | dz
            }t                      5  t          t          | dz             t          | dz             gg          }d d d            n# 1 swxY w Y   t	          t
          d          5  ||z  ||z  cxk    r<t          t          | dz  dz
            t          | dz  dz
            gg          k    sn J 	 d d d            d S # 1 swxY w Y   d S )Nr   r   F)test_stacklevelr   )rn   r   r}   rv   r~   r{   )r   r   r
  s      r   test_issue_17988ry  z  s   sAQUA		!	! 1 1T!a%[[$q1u++./001 1 1 1 1 1 1 1 1 1 1 1 1 1 1	&	>	>	> L L1uAKKKK$q!tax..$q!tax..)I(J!K!KKKKKKKKL L L L L L L L L L L L L L L L L Ls$   3A//A36A3AC,,C03C0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 d S )Nr   r   r   r   )r8   rf   r   r   r   test_issue_18205r{    sV    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 d S )Nr   r   r   r   r  )r   r,   )r   r  s     r   test_issue_8695r}    s    	
Aa!eaZ1q51*,Az9A1a4!8Q-!a%adQqSj1na-@ABFA;;&      r   c                      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           d S )	Nr   r   c                  (    t           ddd          S )Nr   r   r  r  r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    KAq$$?$? r   c                  &    t           dd          S )Nr   r   r  r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    KB$:$: r   c                  "    t                     S r   )r4   r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    JrNN r   c                  "    t                     S r   r  r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    F2JJ r   c                  "    t                     S r   )r6   r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    L$4$4 r   c                  $    t           d          S r  r  r2  s   r   r   z"test_issue_19113.<locals>.<lambda>  s    $8Q$?$? r   )ru   r   r|   rG   r2  s   @r   test_issue_19113r    s    	QSVV	a	B
?????@@@
?::::;;;
?2222333
?....///
?4444555
?????@@@@@r   c                  D   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 d S )Nr   r&  )r   rs   r   r/   rf   r   r   r   s    r   test_issue_19360r    s    	!Q$4771QA%A!tAww'''1a47719Q;.?!-C+CCCCC	
1Q1qsQqSU"A!q!!!a!A#g1q%9999999r   c                      t          t          t          z   t          t          t                    }  | j                    }| |k    s
J d            | j        |j        k    s
J d            d S )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    sc    Aq!QD49;;D4<<<2 <<9	!!!C "!!!!r   c                     t          t          t          z   t          t          t                    } t	          j        t	          j        |                     }| |k    s
J d            | j        |j        k    s
J d            d S )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    su    Aq!QD<T 2 233L<8  9))))I *))))r   c                      t          t          t          dz   z  t          dz  z
  t          z
  t                    } | t           k    sJ d S rx  )r   r   ri   )r  s    r   test_issue_20389r    s:    AQK!q&(1,a00FbS======r   c                      ddl m}   | d          \  }}t          dt          |z  |z  z   |d|z            } |j                    t          d          k    sJ d S )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   rf   r   rm   )r  r   r  r   s       r   test_issue_20985r    sk    ))))))75>>DAqac!eQ!$$D4;==AaDD      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+  r3  r5  r:  r=  rA  rH  rJ  rM  rW  ra  rg  rj  rl  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r)  r5  r>  r@  rM  rR  rV  rX  rZ  rc  re  rg  rj  rl  ro  rq  rt  rv  ry  r{  r}  r  r  r  r  r  r  r   r   r   <module>r     s   H H                                                                                                                            :                              ( ' ' ' ' ' $ $ $ $ $ $ > > > > > > > > > > > > > > > > > > 3 3 3 3 3 3 9 9 9 9 9 9 5 5 5 5 5 5 5 5 5 5 < < < < < <       % % % % % % ' ' ' ' ' '             : : : : : : : : : : + + + + + + + + D D D D D D D D D D D D D D D D             $ $ $ $ $ $ " " " " " " $ $ $ $ $ $ 9 9 9 9 9 9 9 9 6 6 6 6 6 6 6 6 6 6 6 6 9 9 9 9 9 9 : : : : : : 8 8 8 8 8 8 ' ' ' ' ' ' ; ; ; ; ; ; * * * * * * , , , , , , . . . . . . > > > > > > F F F F F F F F F F 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5  
 
 
  *% *% *%ZS S S$YN YN YNxS S S>K K K2RK RK RKj0 0 0J J JD3 3 3
2 2 2
T- T- T-n6 6 6J J J  @ (  (  (F> > >
; ; ;G G G B B B
A A A4 4 44 4 46 6 66 6 6
G G G
K K KG G G, , ,", , ,"* * * 7 7 7: : :
6 
6 
6% % %.* * *:) ) )
(N (N (NVF F F+ + +B B B2
A 
A 
AC C CP P PD D D= = =0 0 04 4 4' ' '(
@ 
@ 
@
J 
J 
JK K KE E ET T T	@ 	@ 	@! ! !"/ / /, , ,7 7 74  	S 	S 	SI I IE E E(4 4 4F F F&57 57 57n6 6 6&I I I8 8 8
K 
K 
K	8 	8 	8) ) )7 7 7B B B:; ; ;$	= 	= 	=, , ,< < <	= 	= 	=A A A' ' '& & &C C C6
+ 
+ 
+( ( (D D D$? ? ?$A A A8L 8L 8Lt  1H 1H 1Hh,4 ,4 ,4^v* v* v*r  (D (D (DV  ; ; ;7 7 767 7 74
" 
" 
"@ @ @0@ @ @*g, g, g,T2 2 2. 0  0  0F3 3 38> > >*
 
 
$ $ $0> > ><G G GJ J JN N N<F F F:0 0 0"O O O8 8 8M M M`[O [O [O|; ; ;<S S S
nN nN nNb%F %F %FP!4 !4 !4HD D D2 2 2:  .KZ KZ KZ\4 4 4  ,? ? ?$	1 	1 	1o/ o/ o/dN N N8  (7 (7 (7V-C -C -C`' ' 'T3 3 3'< '< '<T/3 /3 /3dD D D,* * *L L L
( ( (7 7 79 9 9N N NK K K
* * *0 0 0
` ` `$3 3 3L L L( ( (
! ! !A A A: : :E E EK K K  
! ! ! ! !r   