
    \h                       S r SSKrSSKJrJrJrJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>  SSK?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrL  SSKMJNrN  SSKOJPrP  SSKQJRrRJSrSJTrTJUrUJVrVJWrWJXrX  SSKYJZrZ  SS	K[J\r\  SS
K]J^r^J_r_J`r`  SSKaJbrb  SSKcJdrd  SSKeJfrf  SSKgJhrh  SSKiJjrj  SSKkJlrlJmrmJnrn  SSKoJprpJqrq  SSKrJsrsJtrtJuruJvrvJwrwJxrx  SSKyJzrz  SSK{J|r|  SSK}J~r~  SSKJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS KJr  SS!KJr  SS"KJr  SS#KJrJrJrJrJr  SS$KJrJrJrJrJrJrJrJrJrJrJr  S% rS& rS' rS( rS) rS* rS+ rS, r\S- 5       r\S. 5       rS/ rS0 rS1 rS2 rS3 rS4 rS5 rS6 rS7 rS8 rS9 rS: rS; rS< rS= rS> rS? rS@ rSA rSB rSC rSD rSE rSF rSG rSH rSI rSJ rSK rSL rSM rSN rSO rSP rSQ rSR rSS rST rSU rSV rSW rSX rSY rSZ rS[ rS\ rS] rS^ rS_ rS` rSa rSb rSc rSd rSe rSf rSg rSh rSi rSj rSk rSl rSm rSn rSo rSp rSq rSr rSs rSt rSu rSv rSw rSx rSy Gr Sz GrS{ GrS| GrS} GrS~ GrS GrS GrS GrS Gr	S Gr
S GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS GrS Gr S Gr!S Gr"S Gr#S Gr$S Gr%S Gr&S Gr'S Gr(S Gr)S Gr*S Gr+S Gr,S Gr-S Gr.S Gr/S Gr0S Gr1S Gr2S Gr3S Gr4S Gr5S Gr6S Gr7S Gr8S Gr9S Gr:S Gr;S Gr<S Gr=S Gr>S Gr?S Gr@S GrAS GrBS GrCS GrDS GrES GrFS GrGS GrHS GrIS GrJS GrKS GrLS GrMS GrNS GrOS GrPS GrQS GrRS GrSS GrTS GrUS GrVS GrWS GrXg)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tooslowXFAIL)abcdpqtwxyzc                 R    [        X5       H  u  p#[        X#-
  5      S:  d  M    g   g)Ng|=FT)zipabs)r   r   uvs       X/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqr   Y   s(    A	qu:      c                    [        U 5      [        U5      :X  al  [        U 5      (       a4  [        U 5      [        U5      :X  a  [        S [	        X5       5       5      $ g[        U [        5      =(       a    U R                  " USS9$ g)Nc              3   <   #    U  H  u  p[        X5      v   M     g 7fN)
_strict_eq).0r   r   s      r   	<genexpr>_strict_eq.<locals>.<genexpr>d   s     B	:a++	s   FTstrict)typerz   lenallr   
isinstancer   eq)r   r   s     r   r   r   `   sc    Aw$q'A;;1vQBA	BBBa&?144$+??r   c                  p   [        [        [        5      n [        5          U [        [        5      -    S S S 5        [        5          U [        [        5      -     S S S 5        [        5          U [        [        5      -
    S S S 5        g ! , (       d  f       NY= f! , (       d  f       NE= f! , (       d  f       g = fr   )r   r   r}   rq   r   s    r   test_Poly_mixed_operationsr   m   si    Q
A		!	CF
 
"		!	CF
 
"		!	CF
 
"	!	 
"	!	!	!	!	!s#   BB)B'
B
B$'
B5c                  .
   [        S5      n [        R                  " SSS.[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SSS.[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SSS.[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SSS.[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SSS.[        [        4U S9R                  [        U " S5      U " S	5      /U " S5      //U 5      :X  d   e[        R                  " SSS.[        S
9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        SS9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        S
9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        SS9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SSS.[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " S[        [        5      0[        SS9[        [        [        5      [        -  [        SS9:X  d   e[        R                  " S[        0[        SS9[        [        [        -  [        SS9:X  d   e[        R                  " SS0[        [        4SS9[        [        [        -  [        [        SS9:X  d   e[        R                  " S[        0[        [        4SS9[        [        [        -  [        [        SS9:X  d   eg )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   w   sh   
1A>>!1Q((+sAaD!A$</CD D D>>!1Q((+sAaD!A$</CD D D >>1..1cS!A$!q5IJ J J>>1..1cS!A$!q5IJ J J >>1a0	18adAaD\AaD6$:A >? ? ? >>aA,Q/33sBqE2a5>27NNNN>>!1D**-#beRU^R1HI I I >>!1R)),RUBqENB0GH H H>>!1R)),RUBqENB0GH H H >>$$'C31r!u~r+BC C C>>$003sBqE2a5>27NO O O >>2//2sc2a5"Q%."6MN N N>>2//2sc2a5"Q%."6MN N N >>4Q.qEBSVAXq&' ' '>>4)!u=QqS!D!" " ">>61+QFeDQqS!Qt$% % %>>61+QFeDQqS!Qt$% % %r   c                     [        S5      n [        R                  " SS/[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SS/[        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " SS/[        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SS/[        SS9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SS/[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " SS/[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " S	S
/[        S9R                  [        [        S
5      /[        5      :X  d   e[        R                  " S
S	/[        S9R                  [        [        S
5      [        S5      /[        5      :X  d   e[        [        S 5        g )Nr   r   r   r   r   r   Tr   r         ?        c                  B    [         R                  " / /[        [        4S9$ )Nr   )r   	from_listr   r    r   r   <lambda>%test_Poly_from_list.<locals>.<lambda>   s    t1a&0Qr   )rO   r   r   r   r   rL   rP   rQ   rT   r|   r?   r   s    r   test_Poly_from_listr      s   
1A>>1a&q3773!ad|Q;OOOO>>1a&q3773!ad|Q;OOOO>>1a&q)--beRU^R1HHHH>>1a&q599S"Q%AQS=TTTT>>1a&q488CA1PR<SSSS>>1a&q488CA1PR<SSSS>>1c(+//33y"3EEEE>>3(+//33C7I23NNNN
&(QRr   c                    ^ ^^^ [        [        S-   [        [        S9m[        [        S-   [        SS9m[        [        [        -   [        [        [        S9m[	        S5      m [         R
                  " T5      T:X  d   e[         R
                  " TT S9R                  [        T " S5      T " S5      /T 5      :X  d   e[         R
                  " T[        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[         R
                  " T[        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[         R
                  " T[        S9T:X  d   e[         R
                  " T[        T S9R                  [        T " S5      T " S5      /T 5      :X  d   e[         R
                  " T[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[         R
                  " T[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[         R
                  " T[        S9[        [        S-   [        S	S9:X  d   e[        [        U U4S
 j5        [        [        U4S j5        [        [        U4S j5        [         R
                  " T[        [        4S9[        [        S-   [        [        SS9:X  d   e[         R
                  " T[        [        4[        S9[        [        S-   [        [        SS9:X  d   e[         R
                  " T[        [        4[        S9[        [        S-   [        [        SS9:X  d   e[         R
                  " T[        [        4SS9[        [        S-   [        [        SS9:X  d   e[	        S5      m [         R
                  " T5      T:X  d   e[         R
                  " T[        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        [        U4S j5        [         R
                  " TT S9R                  [        T " S5      T " S5      /T 5      :X  d   e[         R
                  " T[        S9T:X  d   e[         R
                  " T[        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        [        U4S j5        [         R
                  " T[        T S9R                  [        T " S5      T " S5      /T 5      :X  d   e[	        S5      m [         R
                  " T5      T:X  d   e[         R
                  " T[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " TT S9R                  [        T " S5      /T " S5      T " S5      //T 5      :X  d   e[         R
                  " T[        S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        [        [           S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        [        [           S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        [        [           S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        [        [           S9[        [        [        -   [        [        [           S9:X  d   e[        [        U4S j5        [         R
                  " T[        [        4S9T:X  d   e[         R
                  " T[        [        4[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4T S9R                  [        T " S5      /T " S5      T " S5      //T 5      :X  d   e[         R
                  " T[        [        4S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4[        S9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4T S9R                  [        T " S5      /T " S5      T " S5      //T 5      :X  d   e[         R
                  " T[        [        4SS9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   e[         R
                  " T[        [        4SS9R                  [        [        S5      /[        S5      [        S5      //[        5      :X  d   eg )N   r   r   r   modulusr   r   r   ZZ[x]c                  8   > [         R                  " T[        T S9$ Nr   r   	from_polyr   )r   fs   r   r   %test_Poly_from_poly.<locals>.<lambda>   s    4>>!!A#Fr   c                  @   > [         R                  " T [        [        S9$ r   r   r   r   rP   r   s   r   r   r          4>>!!B#Gr   c                  @   > [         R                  " T [        [        S9$ r   r   r   r   rQ   r   s   r   r   r      r   r   rP   rQ   r   r   zFF(3)c                  6   > [         R                  " T [        S9$ Nr   )r   r   rQ   gs   r   r   r      s    4>>!B#?r   r   c                  @   > [         R                  " T [        [        S9$ r   r   r   r   rQ   r   s   r   r   r      r   r   c                  @   > [         R                  " T [        [        S9$ r   )r   r   r   rP   hs   r   r   r      r   r   c                  @   > [         R                  " T [        [        S9$ r   r   r   s   r   r   r      r   r   c                  8   > [         R                  " T [        SS9$ Nr   r   )r   r   r   r   s   r   r   r          4>>!!Q#Gr   c                  @   > [         R                  " T [        [        S9$ r   r   r   s   r   r   r      r   r   c                  @   > [         R                  " T [        [        S9$ r   r   r   s   r   r   r      r   r   c                  8   > [         R                  " T [        SS9$ r   r   r   s   r   r   r      r   r   Tr   )r   r   rP   r   rO   r   r   rL   rQ   r|   rH   )r   r   r   r   s   @@@@r   test_Poly_from_polyr      s;	   QUAb!AQUAq!AQUAq$A
1A>>!!!!>>!A&**c1Q41,.BBBB>>!B'++sBqE2a5>2/FFFF>>!B'++sBqE2a5>2/FFFF>>!!$)))>>!!A.22c1Q41,6JJJJ>>!!B/33sBqE2a5>27NNNN>>!!B/33sBqE2a5>27NNNN>>!!$QUAg(FFFF
>FG
>GH
>GH>>!1a&)T!a%Ad-KKKK>>	Ar#&*1q5!Qt&DE E E>>	Ar#&*1q5!Qt&DE E E>>	A#&*1q5!Qw&GH H H 	1A>>!!!!>>!B'++sBqE2b6?B/GGGG
>?@>>!A&**c1Q41,.BBBB>>!!$)))>>!!B/33sBqE2b6?B7OOOO
>GH>>!!A.22c1Q41,6JJJJ
1A>>!!!!>>	"cS2a5'BqE2a5>!:B?@ @ @>>	"cS2a5'BqE2a5>!:B?@ @ @>>!A&**cAaD6AaD!A$<2H!.LLLL>>!!$QUAbe(DDDD
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>!!$QUAbe(DDDD
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>	"Q%!$(Q"Q%$@A A A
>GH>>!1a&)Q...>>	Ar##&3#1wA1.G*LM M M>>	Ar##&3#1wA1.G*LM M M>>	Aq""%#qtfqtQqTl-CQ)GH H H >>	AsRUGbeRU^#<bAB B B>>	Ar##&3#1wA1.G*LM M M>>	Ar##&3#1wA1.G*LM M M>>	Aq""%#qtfqtQqTl-CQ)GH H H >>	Ad$$'C3A"Q%A/H"+MN N N>>	Ad$$'C3A"Q%A/H"+MN N Nr   c                  
   [        [        S 5        [        [        S 5        [        S5      n [        R                  " [
        S-   U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " [        S-   U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " [
        S-   [
        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " [        S-   [        U S9R                  [        U " S5      U " S5      /U 5      :X  d   e[        R                  " [
        [        -   U S9R                  [        U " S5      /U " S5      U " S5      //U 5      :X  d   e[        R                  " [
        [        -   [
        [        U S9R                  [        U " S5      /U " S5      U " S5      //U 5      :X  d   e[        R                  " [
        S-   5      R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [        S-   5      R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [
        S-   [
        5      R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [        S-   [        5      R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [
        S-   [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [        S-   [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [
        S-   [
        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [        S-   [        [        S9R                  [        [        S5      [        S5      /[        5      :X  d   e[        R                  " [
        S-   [
        [        [        S9R                  [        [        S5      /[        S5      //[        5      :X  d   e[        R                  " [        S-   [
        [        [        S9R                  [        [        S5      [        S5      //[        5      :X  d   eg )	Nc                  J    [         R                  " [        R                  5      $ r   )r   	from_exprrm   Zeror   r   r   r   %test_Poly_from_expr.<locals>.<lambda>  s    T^^AFF%;r   c                  @    [         R                  " [        S5      5      $ Nr   )r   r   rm   r   r   r   r   r     s    T^^AaD%9r   r   r   r   r   r   r   )
r|   rE   rO   r   r   r   r   rL   r   rP   )F3s    r   test_Poly_from_exprr     s   
;<
9:	AB>>!a%+//31r!u~r3JJJJ>>!a%+//31r!u~r3JJJJ>>!a%2.22c2a5"Q%."6MMMM>>!a%2.22c2a5"Q%."6MMMM>>!a%+//3A"Q%A7PRT3UUUU>>!a%Ab155r!ug1rRSu~=VXZ9[[[[>>!a% $$RUBqENB(????>>!a% $$RUBqENB(????>>!a%#''31r!u~r+BBBB>>!a%#''31r!u~r+BBBB>>!a%+//31r!u~r3JJJJ>>!a%+//31r!u~r3JJJJ>>!a%2.22c2a5"Q%."6MMMM>>!a%2.22c2a5"Q%."6MMMM>>!a%Ab155r!ug1w=OQS9TTTT>>!a%Ab155r!uben=Mr9RRRRr   c                     [        [        S-  [        -   S-   S5      n [        [        S-  [        -   S-   S5      n[        R                  " U 5      n[        R                  " U5      n[	        U [
        5      [	        U [
        [        S9:X  d   e[	        U[
        5      [	        U[
        [        S9:X  d   e[	        U [
        SS9[	        U [
        US9:X  d   e[	        U[
        SS9[	        U[
        US9:X  d   eg )Nr   r   r   r   T	extension)rx   r   rQ   algebraic_fieldr   r   rU   )r1r2K1K2s       r   test_Poly_rootof_extensionr   1  s    	1q1a	 B	1q1a	 B			B	B			B	BA;$r1R0000A;$r1R0000A&$r1R*@@@@A&$r1R*@@@@r   c                     [        [        S-  [        -   S-   S5      n [        [        S-  [        -   S-   S5      n[        R                  " X-   5      n[	        U [
        -  U-   [
        SS9[	        U [
        -  U-   [
        US9:X  d   eg )Nr   r   r   Tr   r   )rx   r   rQ   r   r   r   )r   r   K12s      r   ,test_Poly_rootof_extension_primitive_elementr   <  st    	1q1a	 B	1q1a	 B


RW
%C1r	1-bdRi31OOOOr   c                      [        [        S-  [        -   S-   S5      n [        R                  " U 5      n[	        U [        5      [	        U [        [
        S9:X  d   e[	        U [        SS9[	        U [        US9:X  d   eg )Nr   r   r   Tr   )rx   r   rQ   r   r   rU   )r   r   s     r   (test_Poly_rootof_same_symbol_issue_26808r   D  si     
1q1a	 B			B	BA;$r1R0000A&$r1R*@@@@r   c                  *   [        [        S-  [        S-  -   S-
  S5      n [        [        S-  [        S-  -   S-
  S5      n[        S-  * [        S-  -   [        U -  -   U-
  SU S-  -  -   nUR                  " [        SS9R                  5       U:X  d   eg )Nr   r   r   r   r   Tr   )rx   r   r   r   as_polyas_exprr   r   r   s      r   #test_Poly_rootof_extension_to_sympyr  M  s     
1q!ta	#B	1q!ta	#B	
A1qtb 1RU7*A99Q$'//1Q666r   c            	         [         [           n [        U " [        S-   5      [        U S9R                  [        U " [        S-   5      /U 5      :X  d   eU R                  5       n [        U " [        S-   5      [        U S9R                  [        U " [        S-   5      /U 5      :X  d   e[        [           n [        U " [        S-   5      [        U S9R                  [        U " [        S-   5      /U 5      :X  d   eU R                  5       n [        U " [        S-   5      [        U S9R                  [        U " [        S-   5      /U 5      :X  d   e[         R                  " [        5      n [        U " [        S5      [        S5      /5      [        U S9R                  [        U " [        S5      [        S5      /5      /U 5      :X  d   eU R                  5       n [        U " [        S5      [        S5      /5      [        U S9R                  [        U " [        S5      [        S5      /5      /U 5      :X  d   e[        R                  " [        5      n [        U " [        S5      [        S5      /5      [        U S9R                  [        U " [        S5      [        S5      /5      /U 5      :X  d   eU R                  5       n [        U " [        S5      [        S5      /5      [        U S9R                  [        U " [        S5      [        S5      /5      /U 5      :X  d   e[        R                  " [        5      n [        U " SS/5      [        U S9R                  [        U " SS/5      /U 5      :X  d   eg )Nr   r   )rP   r   r   r   r   rL   	get_fieldrQ   old_poly_ringr   rf   )doms    r   test_poly_from_domain_elementr	  V  s   
Q%CAaC!C(,,S1XJ0DDDD
--/CAaC!C(,,S1XJ0DDDD
Q%CAaC!C(,,S1XJ0DDDD
--/CAaC!C(,,S1XJ0DDDD


1
CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ
--/CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ


1
CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ
--/CRUBqEN#Qs3773RUBqEN@S?TVY;ZZZZ


Q
CQFQs+//3QF}c3JJJJr   c            
         [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S	 5        [        [        S
 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        [        S5      [        S[        5      :X  d   e[        [        S-  -  [        [        -  -   [        -   n [        [        [        [        S.[        5      U :X  d   e[        [        [        [        [        /5      [        5      U :X  d   e[        [        [        [        /[        5      U :X  d   e[        [        [        [        4[        5      U :X  d   e[        0 [        [        [        5      n U R                  [        [        [        4:X  a  U R                  5       S:X  d   e[        [        [        [        -  [        [        -  -   [        [        5      [        5      [        [        [        -  [        [        -  -   [        5      :X  d   e[        S[        S-  -  S[        -  -   S-   SS9R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   SS9R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   S S9R                  5       / S!Q:X  d   e[        [         S" 5        [        S[        S-  -  S#-  [        [#        SS#5      -  -   S-   SS9R                  5       [#        SS#5      [#        SS#5      S/:X  d   e[%        [        S[        S-  -  S#-  [        [#        SS#5      -  -   S-   S S9R                  5       / S$Q5      (       d   e[        S%[        S-  -  S&[        -  -   S-   SS9R                  5       / SQ:X  d   e[        S%[        S-  -  S&[        -  -   S-   SS9R                  5       / SQ:X  d   e[        S%[        S-  -  S&[        -  -   S-   S S9R                  5       / S!Q:X  d   e[        [         S' 5        [        S([        S-  -  S)[        -  -   S-   SS9R                  5       [#        S*S+5      [#        S,S+5      S/:X  d   e[        S([        S-  -  S)[        -  -   S-   S S9R                  5       / S-Q:X  d   e[        SSSS..[        [        5      [        [        S-  [        -  S[        -  [        S-  -  -   S[        -  [        -  -   [        [        5      :X  d   e[        [        S-  S-   [&        S/9R)                  5       [*        R,                  " [&        5      :X  d   eS[        S#-  -  [        S0-  -
  [        S-  -   [        S-  -
  S1-   n [        U [        S2S3S49[        S[        S#-  -  [        S0-  -
  [        S-  -   [        S-  -
  S-   [        S2S3S49:X  d   e[        U [        S2S5S49[        S[        S#-  -  S6[        S0-  -  -   [        S-  -   S6[        S-  -  -   S-   [        S2S5S49:X  d   eS+S7-  n[        S8[        US5S49R                  5       US-
  :X  d   e[/        [        [        S-  [        -   S9-   5      R)                  5       [0        5      (       d   e[/        [        [        S-  [        -   [&        -   S9-   5      R)                  5       [2        5      (       d   eg ):Nc                  :    [        [        S-   [        [        5      $ Nr   r   r   r   r   r   r   "test_Poly__new__.<locals>.<lambda>p  s    DQ1$5r   c                  V    [        [        [        -   [        [        [        [           S9$ r   r   r   r   rP   r   r   r   r   r  r      DQ1RU$Cr   c                  V    [        [        [        -   [        [        [        [           S9$ r   r  r   r   r   r   r  s  r  r   c                  (    [        [        [        SS9$ )NT)	symmetricr  r   r   r   r   r  u  s    QT :r   c                  8    [        [        S-   [        S[        S9$ )Nr   r   )r   r   r   r   rQ   r   r   r   r   r  v  s    QUAq Dr   c                  8    [        [        S-   [        [        SS9$ )Nr   T)r   gaussianr   r   rP   r   r   r   r   r  x  s    QUAb4 Hr   c                  0    [        [        S-   [        SSS9$ )Nr   r   T)r   r  r  r   r   r   r   r  y  s    QUAq4 Hr   c                  L    [        [        S-   [        [        [        S5      /S9$ )Nr   r   r   r   )r   r   rP   rs   r   r   r   r   r  {  s    QUAbT!WI Nr   c                  D    [        [        S-   [        S[        S5      /S9$ )Nr   r   r   r   )r   r   rs   r   r   r   r   r  |  s    QUAqT!WI Nr   c                  8    [        [        S-   [        [        SS9$ )Nr   Tr  r  r   r   r   r   r  ~  s    QUAbD Ir   c                  0    [        [        S-   [        SSS9$ )Nr   r   Tr  r  r   r   r   r   r    s    QUAqD Ir   c                  8    [        [        S-   [        [        SS9$ )Nr   Tr   greedyr  r   r   r   r   r    s    QUAb Fr   c                  8    [        [        S-   [        [        SS9$ )Nr   Tr   rN   r  r   r   r   r   r    s    QUAb Er   c                  8    [        [        S-   [        [        SS9$ )Nr   Fr"  r  r   r   r   r   r    s    QUAb Gr   c                  8    [        [        S-   [        [        SS9$ )Nr   Fr%  r  r   r   r   r   r    s    QUAb Fr   c                  0    [        [        S-   [        SSS9$ )Nr   r   rY   )r   orderr  r   r   r   r   r    s    QUAq(Pr   c                  .    [        [        S-   [        SS9$ )Nr   rY   r)  r  r   r   r   r   r    s    QUAW(Er   c                      [        SSS.5      $ )Nr   r   r   r   r   r   r   r   r    s    TaA,%7r   c                      [        SS/5      $ Nr   r   r-  r   r   r   r   r    s    T1a&\r   c                      [        S5      $ )Nr   r   r-  r   r   r   r   r    s    T&\r   c                      [        S5      $ r  r-  r   r   r   r   r        T!Wr   zx-xr   r   )r   r   r   r   r   rP   r   )r   r   r   rQ   rT   )      @       @r   c                  ^    [        S[        S-  -  S-  [        [        SS5      -  -   S-   SS9$ )Nr   r   r   r   rP   r   )r   r   rh   r   r   r   r   r    s-    4!Q$q1Xa^3C(Ca(GPT#Ur   r   )g333333?g?r   r4  r5  c                  D    [        S[        S-  -  S[        -  -   S-   SS9$ )N@r    @r   rP   r   r  r   r   r   r   r    s!    4AqD3q5(81(<T#Jr   r8  r9     
      )r8  r9  r   )r1  r   r   r   r      i    Tr   r  F   d   r   r   )r|   rF   rJ   NotImplementedErrorrE   r   r   r   r   r   iterr   r   r   r  
all_coeffsrH   rh   r   rf   
get_domainrQ   r   r   rV   rW   )r   Ns     r   test_Poly__new__rH  o  s   
?56
?CD
?CD
;:;
;DE
;HI
;HI
;NO
;NO
;IJ
;IJ
;FG
;EF
;GH
;FG
 PQ
 EF
78
12
12
_-;$q!*$$$	!Q$1qAA!"A&!+++aAY#q(((Aq	1"""Aq	1"""RAqA66aAY199;!#333QqS1Q3Y1%q)T!A#!)Q-????!Q$1q .99;yHHH!Q$1q .99;yHHH!Q$1q .99;NNN
>UV	!Q$q1Xa^##a'66@jlxPQST~W_`acdWeghFij j jQq!tVAX(1a.((1,T:EEGZ Z Z Z AqD3q5 1$T2==?9LLLAqD3q5 1$T2==?9LLLAqD3q51T++5:<?K K K >JKAqD3q5 1$T2==?HRQSDTV^_aceVfhiCjjjjAqD3q5 1$T2==??RRRAq11a8QT!Vac!Q$h1Q&1-. . . 1qA&113r7I7I!7LLLL	!Q$A1q1u$u,A1et4Qq!tVad]QT!AE)A-q%	   1eu5Qq!tVeAqDj 1a4'%A+591e	-- - - 	CAAqE2::<AEEEd1a4!8c>*557CCCCd1a4!8a<#-.99;\JJJJr   c                  n    [        [        S-  S-   5      R                  [        S-  S-   [        4:X  d   eg r/  )r   r   argsr   r   r   test_Poly__argsrK    s.    1q>1a4!8Q-///r   c                     [        [        [        -
  [        [        -
  -  [        5      R                  [        4:X  d   e[        [        [        -
  [        [        -
  -  [        5      R                  [        4:X  d   e[        [        [        -
  [        [        -
  -  [        5      R                  [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        5      R                  [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        5      R                  [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        [        5      R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        [        5      R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        [        5      R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  5      R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        [        SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        S9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        S9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        S9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  [        [        [        SS9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SS	S
9R                  [        [        [        4:X  d   e[        [        [        -
  [        [        -
  -  SSS
9R                  [        [        [        4:X  d   eg )Nz	x > p > q)sortz	p > x > qz	p > q > xr   wrtr   r   zq > x)rO  rM  zp > x)r   r   r   r   r   r   r   r   test_Poly__gensrP    s   QQ#((QD000QQ#((QD000QQ#((QD000QQA&++1v555QQA&++1v555QQAq)..1a);;;QQAq)..1a);;;QQAq)..1a);;;QQ %%!Q222QQk277Aq!9DDDQQk277Aq!9DDDQQk277Aq!9DDDQQAq{;@@Q1IMMMQQS)..1a);;;QQS)..1a);;;QQS)..1a);;;QQQ',,Aq	999QQQ',,Aq	999QQQ',,Aq	999QQAqc277Aq!9DDDQQSw7<<Aq	IIIQQSw7<<Aq	IIIr   c                      [        [        5      R                  [        S[        [        S9:X  d   e[        [        S-  5      R                  [        S[        [        S9:X  d   eg )Nr   r   r   )r   r   zerorP   rQ   r   r   r   test_Poly_zerorS    sD    7<<41R0000!9>>T!Qr2222r   c                      [        [        5      R                  [        S[        [        S9:X  d   e[        [        S-  5      R                  [        S[        [        S9:X  d   eg )Nr   r   r   )r   r   onerP   rQ   r   r   r   test_Poly_onerV    sD    7;;$q!B////!9==DAb1111r   c            	      !   [        [        S 5        [        S5      n [        [        [        SS9R                  [        [        [        SS95      SS  [        U " S5      // /U 5      [        U " S5      U " S5      //U 5      4:X  d   e[        [        S 5        [        [        S 5        [        [        S	 5        [        [        S-   [        5      R                  [        [        S-   [        5      5      SS  [        [        S5      [        S5      /[        5      [        [        S5      [        S5      /[        5      4:X  d   e[        [        S-   [        S
S9R                  [        [        S-   [        5      5      SS  [        [        S5      [        S5      /[        5      [        [        S5      [        S5      /[        5      4:X  d   e[        [        S-   [        5      R                  [        [        S-   [        S
S95      SS  [        [        S5      [        S5      /[        5      [        [        S5      [        S5      /[        5      4:X  d   e[        [        S-   [        5      R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        S
S9R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        5      R                  [        [        S-   [        [        S
S95      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        S
S9R                  [        [        S-   [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        S
S95      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        S
S9R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        S
S95      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        5      R                  [        [        S-   [        [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        S
S9R                  [        [        S-   [        [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        5      R                  [        [        S-   [        [        S
S95      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        S
S9R                  [        [        S-   [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        S
S95      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        S
S9R                  [        [        S-   [        [        5      5      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        S
S95      SS  [        [        S5      /[        S5      //[        5      [        [        S5      /[        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        S
S9R                  [        [        S-   [        [        5      5      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-   [        [        5      R                  [        [        S-   [        [        S
S95      SS  [        [        S5      [        S5      //[        5      [        [        S5      [        S5      //[        5      4:X  d   e[        [        S-  [        -   [        [        S9R                  [        [        S-  [        S5      -   [        SS95      [        [        S-  [        -   [        SS9[        [        S-  [        S5      -   [        SS94:X  d   e[        S[        5      u  pn[        [        [        -  [        SS9R                  [        [        [         -  [        -  [        SS95      SS  [        X!" S5      /UR#                  5       5      [        X#-  U" S5      /UR#                  5       5      4:X  d   e[        [        [        -  [        SS9R                  [        [        [         -  [        -  [        SS95      SS  [        X!" S5      /UR#                  5       5      [        X#-  U" S5      /UR#                  5       5      4:X  d   e[        [$        S 5        [        [&        S-  [&        S-  -   [        -   [&        SS9n[        [&        S-  [&        S-  -   [        -   [&        SS9nUR                  U5      SS  UR(                  UR(                  4:X  d   eg )Nc                  F    [        [        5      R                  [        5      $ r   r   r   _unifyr   r   r   r   r   "test_Poly__unify.<locals>.<lambda>  s    d1gnnQ&7r   r   r   r   r   r   c                  h    [        [        [        SS9R                  [        [        [        SS95      $ )Nr   r   r   rY  r   r   r   r   r[    s"    d1a&;&B&B41VWCX&Yr   c                  t    [        [        [        [        5      R                  [        [        [        SS95      $ Nr   r   )r   r   r   rZ  r   r   r   r   r[     s     d1am&:&:41a;P&Qr   c                  t    [        [        [        SS9R                  [        [        [        [        5      5      $ r^  rY  r   r   r   r   r[    s     d1a&;&B&B41a=&Qr   rQ   r   Tr   zQQ<sqrt(2) + I>za,bZZ[a]zZZ(a,b)zZZ(a)c                  `    [        [        [        S-  [        S-  [        -  -   [        SS9SS9$ )Nr   TrM   ZZ(x)r   )r   r   r   r   r   r   r   r   r[  F  s%    4QTAqDF]AT(JSZ#[r   zQQ(x)zQQ[x])r|   rC   rO   r   r   rZ  r   rL   rP   rQ   rf   rR   unifyrs   rN   r   r   	to_domainrH   r   r   )r   FABr   r   s         r   test_Poly__unifyrh    s   
78	AB1a ''Q1(=>qrBbeWbM2beRU^$4b 9G; ; ; ;
YZ
QR
QRAq>  a!eQ04	beRU^R	 #r!ubenb"9:; ; ;Aq&--d1q5!n=abA	beRU^R	 #r!ubenb"9:; ; ;Aq>  a!eQt!<=abA	beRU^R	 #r!ubenb"9:; ; ; Aq>  a!eQ!23AB7	r!ug1w	$cBqE7RUG*<b&ABC C CAq&--d1q5!Q.?@D	r!ug1w	$cBqE7RUG*<b&ABC C CAq>  a!eQ$!?@D	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQN3AB7	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ@D	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ$$?@D	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQ1$56qr:	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ1BCABG	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ1T$BCABG	r!ug1w	$cBqE7RUG*<b&ABC C C Aq>  a!eQ!23AB7	r!ubenr	"C"Q%A(8"$=>? ? ?Aq&--d1q5!Q.?@D	r!ubenr	"C"Q%A(8"$=>? ? ?Aq>  a!eQ$!?@D	r!ubenr	"C"Q%A(8"$=>? ? ? Aq!##DQN3AB7	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!D)00a!eQ@D	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!##DQ$$?@D	r!ubenr	"C"Q%A(8"$=>? ? ? Aq!##DQ1$56qr:	r!ug1w	$cBqE7RUG*<b&ABC C CAq!D)00a!eQ1BCABG	r!ug1w	$cBqE7RUG*<b&ABC C CAq!##DQ1T$BCABG	r!ug1w	$cBqE7RUG*<b&ABC C C Aq!##DQ1$56qr:	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!D)00a!eQ1BCABG	r!ubenr	"C"Q%A(8"$=>? ? ?Aq!##DQ1T$BCABG	r!ubenr	"C"Q%A(8"$=>? ? ? 1q!D)//QTDG^QRV0WX!Q$(A&78$q!td1g~qYj:klm m m E2GA!!Qw'..tAaCE1Y/OPQRQST	a1Y	&QS!A$K(GHI I I !Qw'..tAaCE1Y/OPQRQST	a1Y	&QS!A$K(GHI I I >[\QTAaCZ!^Qw/AQTAaCZ!^Qw/A88A;qr?quuaeen,,,r   c                  $   [        [        S-  S-   5      R                  [        1:X  d   e[        [        S-  [        [        -  -   5      R                  [        [        [        1:X  d   e[        [        S-  [        [        -  -   [        5      R                  [        [        [        1:X  d   e[        [        S-  [        [        [        -  5      -   5      R                  [        [        [        1:X  d   e[        [        S-  [        [        [        -  5      -   [        5      R                  [        [        [        1:X  d   e[        [        S-  [        [        [        -  5      -   [        [        S9R                  [        [        [        1:X  d   e[        S[        -   [        S-  -   [        [        [        5      R                  [        1:X  d   e[        [        [        [        5      -   [        5      R                  [        [        1:X  d   eg Nr   r   r   )r   r   free_symbolsr   r   ru   rU   r   r   r   test_Poly_free_symbolsrl  N  sc   1q>&&1#---1qs
((Q1I5551qs
A++1ay8881s1Q3x --!Q:::1s1Q3x#00Q1I===1s1Q3x2.;;1ayHHHA1aA&33s:::CF
A++1v555r   c                     [        [        S-  S-   5      R                  [        5       :X  d   e[        [        S-  [        [
        -  -   5      R                  [        5       :X  d   e[        [        S-  [        [
        -  -   [        5      R                  [        [
        1:X  d   e[        [        S-  [        [        [
        -  5      -   5      R                  [        5       :X  d   e[        [        S-  [        [        [
        -  5      -   [        5      R                  [        [
        1:X  d   e[        [        S-  [        [        [
        -  5      -   [        [        S9R                  [        [
        1:X  d   eg rj  )r   r   rk  setr   r   ru   rU   r   r   r   test_PurePoly_free_symbolsro  Y  s   AqD1H**ce333AqD1Q3J,,555AqD1Q3J"//Aq6999AqD3qs8O$11SU:::AqD3qs8OQ'44A>>>AqD3qs8OQr2??Aq6IIIr   c                  8   [        [        [        5      [        [        [        5      :H  SL d   e[        [        [        [        S9[        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [        S9:H  SL d   e[        [        [        [        [           S9[        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [        [           S9:H  SL d   e[        [        [
        -  [        [
        5      [        [        [        5      :H  SL d   e[        [        [        [
        5      [        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [
        5      :H  SL d   e[        [        S-  S-   [        5      [        [
        S-  S-   [
        5      :H  SL d   e[        [
        S-  S-   [
        5      [        [        S-  S-   [        5      :H  SL d   e[        [        [        [        S9n [        [        [        [        S9nU R                  U5      SL d   eU R                  U5      SL d   eU R                  USS9SL d   eU R                  USS9SL d   e[        S5      n[        US-  [        S-  -   [        S-  -  [        S-  [        -  -
  [        SS9n [        US-  [        S-  -   [        S-  -  [        S-  [        -  -
  [        S	S9nX:H  SL d   eg )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))
r   r   rQ   rP   r   r   r   nern   r   )r   r   rq  s      r   test_Poly__eq__rs  b  so   AJ$q!*$---Ab!T!QZ/E999AJ$q!B//E999Abe$Q
2u<<<AJ$q!BqE22u<<<1aOtAqz)e333AqMT!QZ'E111AJ$q!Q-'E111A1adQh!22u<<<A1adQh!22u<<<Q"AQ"A447e447d??44$45(((44$44'''	B	r!tad{AqD 1a46)1Z	@A	r!tad{AqD 1a46)1Z	@AFur   c                  <   [        [        [        5      [        [        [        5      :H  SL d   e[        [        [        [        S9[        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [        S9:H  SL d   e[        [        [        [        [           S9[        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [        [           S9:H  SL d   e[        [        [
        -  [        [
        5      [        [        [        5      :H  SL d   e[        [        [        [
        5      [        [        [        5      :H  SL d   e[        [        [        5      [        [        [        [
        5      :H  SL d   e[        [        S-  S-   [        5      [        [
        S-  S-   [
        5      :H  SL d   e[        [
        S-  S-   [
        5      [        [        S-  S-   [        5      :H  SL d   e[        [        [        [        S9n [        [        [        [        S9nU R                  U5      SL d   eU R                  U5      SL d   eU R                  USS9SL d   eU R                  USS9SL d   e[        [        [        [        S9n [        [
        [
        [        S9nU R                  U5      SL d   eU R                  U5      SL d   eU R                  USS9SL d   eU R                  USS9SL d   eg )NTr   Fr   r   r   )r   r   rQ   rP   r   r   r   rr  r   r   s     r   test_PurePoly__eq__rv    su   QNhq!n,555Q"%!Q7D@@@QNhq!B77D@@@Q"Q%(HQN:tCCCQNhq!BqE::tCCCQqS!Q8Aq>1e;;;Q1!Q/E999QNhq!Q//E999QTAXq!XadQh%::tCCCQTAXq!XadQh%::tCCCAb!AAb!A447d??447e44$45(((44$44'''Ab!AAb!A447d??447e44$45(((44$44'''r   c                      [        [        [        [        S-  S-   5      5      [        5      SL d   e[        [        [        [        S-  S-   5      5      [        5      SL d   eg )Nr   r   T)r   r   r   r   r   r   r   test_PurePoly_Polyrx    sO    htAqD1H~.9TAAAd8AqD1H-.5===r   c                  .   [        S[        -  5      R                  5       [        :X  d   e[        S[        -  SS9R                  5       [        :X  d   e[        S[        -  SS9R                  5       [        :X  d   e[        [        S-  5      R                  5       [        :X  d   e[        [        S 5        [        [        S-  SS9R                  5       [        :X  d   e[        [        S[        -  5      R                  5       [        5      (       d   eg )Nr   rP   r   rQ   c                  $    [        [        S-  SS9$ )Nr   rP   r   r  r   r   r   r   &test_Poly_get_domain.<locals>.<lambda>  s    4!D#9r   皙?)	r   r   rF  rP   rQ   r|   rH   r   rV   r   r   r   test_Poly_get_domainr}    s    !9!R'''!D!,,."444!D!,,."444!9!R'''
>9:!D!,,."444d3q5k,,.	::::r   c                     [        S[        -  S-   5      R                  [        5      [        S[        -  S-   5      :X  d   e[        S[        -  S-   5      R                  S5      [        S[        -  S-   5      :X  d   e[        S[        -  S-   5      R                  [        5      [        S[        -  S-   SS9:X  d   e[        S[        -  S-   5      R                  S5      [        S[        -  S-   SS9:X  d   e[        [        SS5      [        -  [        SS5      -   5      R                  S5      [        S[        -  S	-   5      :X  d   e[        S[        -  S	-   5      R                  S5      [        [        SS5      [        -  [        SS5      -   5      :X  d   e[        [        S
 5        [        [        S 5        [        [        S 5        g )Nr   r   rP   rQ   r   r;  rT   r|  皙?c                  R    [        [        S-  S-   5      R                  [        5      $ r/  )r   r   
set_domainrP   r   r   r   r   &test_Poly_set_domain.<locals>.<lambda>  s    4!a=#;#;B#?r   c                  J    [        [        S-   SS9R                  [        5      $ )Nr   r   r   )r   r   r  rQ   r   r   r   r   r    s    4Aq#9#D#DR#Hr   c                  v    [        [        [        -  [        [        5      R                  [        [           5      $ r   )r   r   r   r  rP   r   r   r   r   r    s    D1aO$>$>r!u$Er   )	r   r   r  rP   rQ   rh   r|   rH   rF   r   r   r   test_Poly_set_domainr    ss   !a=##B'4!a=888!a=##D)T!A#']:::!a=##B'4!a+EEEE!a=##D)T!A#'$-GGGGB!HQO34??EcRSeVYkIZZZZA''-hq"oa6G(STVX/6Y1ZZZZ
>?@
>HI
?EFr   c                  v    [        [        S-  S-   SS9R                  5       S:X  d   e[        [        S 5        g )Nr   r   r   c                  H    [        [        S-  S-   5      R                  5       $ r/  )r   r   get_modulusr   r   r   r   'test_Poly_get_modulus.<locals>.<lambda>  s    DAN$>$>$@r   )r   r   r  r|   rG   r   r   r   test_Poly_get_modulusr    s3    1q!$002a777
?@Ar   c                     [        [        S-  S-   SS9R                  S5      [        [        S-  S-   SS9:X  d   e[        [        S-  S-   SS9R                  S5      [        [        S-  S-   SS9:X  d   e[        [        S-  S-   5      R                  S5      [        [        S-  S-   SS9:X  d   e[        [        S 5        g )Nr   r   r   r   r   c                  J    [        [        S-  S-   5      R                  S5      $ r/  )r   r   set_modulusr   r   r   r   'test_Poly_set_modulus.<locals>.<lambda>  s    4!a=#<#<Q#?r   )r   r   r  r|   rH   r   r   r   test_Poly_set_modulusr    s    	1q!([^tAqD1Ha/HI I I	1q!([^tAqD1Ha/HI I I 1q>%%a(DA1,EEEE
>?@r   c                  r    [        [        S-   5      R                  S5      [        [        S-   5      :X  d   eg )Nr   r   r   )r   r   
add_groundr   r   r   test_Poly_add_groundr    +    A;!!!$QU333r   c                  r    [        [        S-   5      R                  S5      [        [        S-
  5      :X  d   eg Nr   r   )r   r   
sub_groundr   r   r   test_Poly_sub_groundr    r  r   c                  x    [        [        S-   5      R                  S5      [        S[        -  S-   5      :X  d   eg r  )r   r   
mul_groundr   r   r   test_Poly_mul_groundr    s/    A;!!!$QqS1W555r   c                      [        S[        -  S-   5      R                  S5      [        [        S-   5      :X  d   e[        S[        -  S-   5      R                  S5      [        [        S-   5      :X  d   eg )Nr   r>  r   r   )r   r   
quo_groundr   r   r   test_Poly_quo_groundr    s\    !a=##A&$q1u+555!a=##A&$q1u+555r   c                      [        S[        -  S-   5      R                  S5      [        [        S-   5      :X  d   e[        [        S 5        g )Nr   r>  c                  J    [        S[        -  S-   5      R                  S5      $ Nr   r   )r   r   exquo_groundr   r   r   r   (test_Poly_exquo_ground.<locals>.<lambda>  s    QqS1W(B(B1(Er   )r   r   r  r|   r@   r   r   r   test_Poly_exquo_groundr    s;    !a=%%a(DQK777
 EFr   c                      [        [        * S-   [        5      R                  5       [        [        [        * S-   [        5      5      s=:X  a  [        [        S-   [        5      :X  d   e   eg r  )r   r   r   r   r   r   test_Poly_absr    sK    Q? CaR!VQ$8JDQNJJJJJr   c                      [        [        * S-   [        5      R                  5       [        [        * S-   [        5      * s=:X  a  [        [        S-
  [        5      :X  d   e   eg r  )r   r   negr   r   r   test_Poly_negr    sI    Q? T1"q&!_$4FQUAFFFFFr   c                     [        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        5      [        S[        5      -   [        S[        5      :X  d   e[        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        [        5      [        S[        5      -   [        S[        [        5      :X  d   e[        S[        5      R                  [        S[        [        5      5      [        S[        [        5      :X  d   e[        S[        [        5      [        S[        [        5      -   [        S[        [        5      :X  d   e[        S[        5      [        -   [        [        S-   [        5      :X  d   e[	        5          [        S[        5      [        [        5      -     S S S 5        [        [        [        5      S-   [        [        S-   [        5      :X  d   eS[        [        [        5      -   [        [        S-   [        5      :X  d   eg ! , (       d  f       Ns= fNr   r   )r   r   addr   r}   ru   r   r   r   test_Poly_addr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DAqM9991a=41a=(DAqM9991:>T!a%^+++		!Q
SV 
" 1:>T!a%^+++tAqz>T!a%^+++	 
"	!   !I
Ic                     [        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        5      [        S[        5      -
  [        S[        5      :X  d   e[        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        [        5      [        S[        5      -
  [        S[        [        5      :X  d   e[        S[        5      R                  [        S[        [        5      5      [        S[        [        5      :X  d   e[        S[        [        5      [        S[        [        5      -
  [        S[        [        5      :X  d   e[        S[        5      [        -
  [        S[        -
  [        5      :X  d   e[	        5          [        S[        5      [        [        5      -
    S S S 5        [        [        [        5      S-
  [        [        S-
  [        5      :X  d   eS[        [        [        5      -
  [        S[        -
  [        5      :X  d   eg ! , (       d  f       Ns= f)Nr   r   r   )r   r   subr   r}   ru   r   r   r   test_Poly_subr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DQN:::1a=41a=(DQN:::1:>T!a%^+++		!Q
SV 
" 1:>T!a%^+++tAqz>T!a%^+++	 
"	!r  c                     [        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        5      [        S[        5      -  [        S[        5      :X  d   e[        S[        5      R                  [        S[        5      5      [        S[        5      :X  d   e[        S[        [        5      [        S[        5      -  [        S[        [        5      :X  d   e[        S[        5      R                  [        S[        [        5      5      [        S[        [        5      :X  d   e[        S[        [        5      [        S[        [        5      -  [        S[        [        5      :X  d   e[        S[        5      [        -  [        [        [        5      :X  d   e[	        5          [        S[        5      [        [        5      -    S S S 5        [        [        [        5      S-  [        S[        -  [        5      :X  d   eS[        [        [        5      -  [        S[        -  [        5      :X  d   eg ! , (       d  f       Ns= f)Nr   r   r>     r   )r   r   mulr   r}   ru   r   r   r   test_Poly_mulr    s   1:>>$q!*%a3331:Q
"d1aj0001:>>$q!*%a3331a=41:%aA6661:>>$q!Q-(DAqM9991a=41a=(DAqM9991:>T!QZ'''		!Q
SV 
" 1:>T!A#q\)))tAqz>T!A#q\)))	 
"	!s   ?!I
Ic                     [        [        5      [        -  [        [        S-  [        SS9:X  d   e[        [        [        5      -  [        [        S-  [        SS9:X  d   eS[        [        5      -  [        S[        -  [        SS9:X  d   e[        S5      [        [        5      -  [        S[        -  [        SS9:X  d   e[        [        5      [        S5      -  [        S[        -  [        SS9:X  d   eg )Nr   rP   r   )r   r   rm   r   r   r   test_issue_13079r  )  s    719QT1T2222T!W9QT1T2222d1g:bdAd3333R5a=DAq666671R5=DAq6666r   c                      [        [        [        -  [        [        5      R                  5       [        [        S-  [        S-  -  [        [        5      :X  d   eg Nr   )r   r   r   sqrr   r   r   test_Poly_sqrr  0  s:    !Q? DAadAq$9999r   c                  B   [        [        [        5      R                  S5      [        [        S-  [        5      :X  d   e[        [        [        5      R                  [        S5      5      [        [        S-  [        5      :X  d   e[        S[        -  [        [        5      R                  S5      [        S[        S-  -  [        [        5      :X  d   e[        S[        -  [        [        5      R                  [        S5      5      [        S[        S-  -  [        [        5      :X  d   e[        S[        -  [        -  [        [        5      S-  [        S[        S-  -  [        S-  -  [        [        5      :X  d   e[        [        S 5        [        [        S	 5        g )
Nr;  r   r>     r   r   iW  c                  N    [        [        [        -  S-   [        [        5      S-  $ )Nr   r   r   r   r   r   r   r   r   test_Poly_pow.<locals>.<lambda>=  s    d1Q37Aq1B7r   c                  V    [        [        [        -  S-   [        [        5      [        -  $ r  r  r   r   r   r   r  >  s    d1Q37Aq114r   )r   r   powrg   r   r|   	TypeErrorr   r   r   test_Poly_powr  4  s   1:>>"aeQ///1:>>'"+&$q"ua.888!Q?q!T"QT'1a%8888!Q?wqz*d2ad7Aq.AAAA!Aq!a4AqDAq!#<<<<
978
945r   c                     [        [        S-  5      [        [        5      pU[        S[        5      p2[        X5      X#4:X  d   eX-  U:X  d   eX-  U:X  d   e[        U [        5      X#4:X  d   eU [        -  U:X  d   eU [        -  U:X  d   e[        S[        5      [        S[        5      p2[        SU5      X#4:X  d   eSU-  U:X  d   eSU-  U:X  d   e[        [        5      [        [        5      -  S:X  d   e[        [        S-  5      [        [        5      -  [        :X  d   e[        [        5      [        [        S-  5      -  S[        -  :X  d   eg )Nr   r   r   )r   r   divmod)r   r   r   rs       r   test_Poly_divmodr  A  s-   1:tAwqd1ajq!<A6!!!6Q;;5A::!Q<A6!!!6Q;;q5A::1:tAqzq!Q<A6!!!6Q;;q5A::747?a1:d1g"""741:1$$$r   c                  h	   [        [        [        -   [        [        5      [        [        [        -   [        [        5      :H  SL d   e[        [        [        -   [        5      [        [        [        -   [        [        5      :H  SL d   e[        [        [        -   [        [        5      [        [        [        -   [        5      :H  SL d   e[        [        [        -   [        5      [        [        [        -   [        5      :H  SL d   e[        [        [        -   [        5      [        [        [        -   [        5      :H  SL d   e[        [        [        -   [        [        5      [        [        -   :H  SL d   e[        [        [        -   [        5      [        [        -   :H  SL d   e[        [        [        -   [        [        5      [        [        -   :H  SL d   e[        [        [        -   [        5      [        [        -   :H  SL d   e[        [        [        -   [        5      [        [        -   :H  SL d   e[        [        [        -   [        [        5      [        [        [        -   [        [        5      :g  SL d   e[        [        [        -   [        5      [        [        [        -   [        [        5      :g  SL d   e[        [        [        -   [        [        5      [        [        [        -   [        5      :g  SL d   e[        [        [        -   [        5      [        [        [        -   [        5      :g  SL d   e[        [        [        -   [        5      [        [        [        -   [        5      :g  SL d   e[        [        [        -   [        [        5      [        [        -   :g  SL d   e[        [        [        -   [        5      [        [        -   :g  SL d   e[        [        [        -   [        [        5      [        [        -   :g  SL d   e[        [        [        -   [        5      [        [        -   :g  SL d   e[        [        [        -   [        5      [        [        -   :g  SL d   e[        [        [        5      [        [        5      :H  SL d   e[        [        [        5      [        [        5      :g  SL d   eg )NTF)r   r   r   ru   r   r   r   test_Poly_eq_ner  X  s0   Q1a!eQ!22t;;;QNd1q5!Q//E999Q1a!eQ/E999QNd1q5!n,555QNd1q5!n,555Q1Q&4///QNa!e#,,,Q1Q&4///QNa!e#,,,QNa!e#,,,Q1a!eQ!22u<<<QNd1q5!Q//D888Q1a!eQ/D888QNd1q5!n,666QNd1q5!n,666Q1Q&5000QNa!e#---Q1Q&5000QNa!e#---QNa!e#---AJ#a& U***AJ#a& T)))r   c                  |    [        [        S[        5      5      SLd   e[        [        S[        5      5      SLd   eg )Nr   Tr   F)boolr   r   r   r   r   test_Poly_nonzeror  u  s4    DAJ4'''DAJ5(((r   c                     [        S[        5      R                  SL d   e[        S[        5      R                  SL d   e[        S[        5      R                  SL d   e[        S[        5      R                  SL d   e[        [        S-
  [        5      R                  SL d   e[        [        S-
  S-  [        5      R                  SL d   e[        [        S-
  [        5      R
                  SL d   e[        S[        -  S-
  [        5      R
                  SL d   e[        S[        -  S-   [        5      R                  SL d   e[        S[        -  S-   [        5      R                  SL d   e[        S[        5      R                  SL d   e[        [        [        5      R                  SL d   e[        [        [        -   [        -   S-   5      R                  SL d   e[        [        [        -  [        -  S-   5      R                  SL d   e[        [        [        -  [        -   S-   5      R                  SL d   e[        [        [        -  [        -  S-   5      R                  SL d   e[        [        [        -  5      R                  SL d   e[        [        [        -  S-   5      R                  SL d   e[        [        S-  [        [        -  -   5      R                  SL d   e[        [        S-  [        [        -  -   5      R                  SL d   e[        [        5      R                  SL d   e[        [        [        -  5      R                  SL d   e[        [        [        -  5      R                  SL d   e[        [        5      R                  SL d   e[        [        S-  [        S	-  -   [        S
-  -
  [        S-  -   [        S-  -
  [        S-  -   S-   5      R                   SL d   e[        [        S-  [        S	-  -   [        S
-  -
  [        S-  -
  [        S-  -
  [        S-  -   S-   5      R                   SL d   eg )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  z  s   1:%%%1:&&&1:$$$1:%%%Aq>  D(((Q
A%%...Aq>""d***!a$$---!a((D000!a((E1111:4'''1:5(((A	A((D000!A	?$$---!a!))T111!A	?''5000!9  D(((!a=$$---1qs
**d2221qs
**e3337  D(((!9""e+++!9$$,,,7""e+++	2221$q!t+ad2Q688EO O O	2221$q!t+ad2Q688EN N Nr   c                  \   [        [        S-  [        -   S-   5      R                  SL d   e[        [        S-  S[        -  -   S-   5      R                  SL d   e[        S[        -  S-   SS9R                  SL d   e[        S[        S-  -  S[        -  -   S-   SS9R                  SL d   eg )	Nr   r   TFr   r      r   )r   r   is_irreducibler   r   r   test_Poly_is_irreducibler    s    1q1,,4441qs
Q..%777!a$33t;;;!Q$1q "-<<EEEr   c                  \   [        [        S-   5      R                  [        S5      S:X  d   e[        [        S-   5      R                  [        [        5      [        [        S-   5      :X  d   e[        [        S-   5      R                  [        [        5      [        [        S-   5      :X  d   e[        [        [        -  [        5      R                  [        [        5      [        S-  :X  d   e[        [        [        -  [        5      R                  [        [        5      [        S-  :X  d   eg )Nr   r   r   )r   r   subsr   r   r   r   test_Poly_subsr    s    A;Aq!Q&&&A;Aq!T!a%[000A;Aq!T!a%[000!Q<Q"ad***!Q<Q"ad***r   c                     [        [        S-   5      R                  [        5      [        [        S-   5      :X  d   e[        [        S-   5      R                  [        5      [        [        S-   5      :X  d   e[	        [
        S 5        [        [        S-   5      R                  [        [        5      [        [        S-   5      :X  d   e[        [        S-   5      R                  [        [        5      [        [        S-   5      :X  d   e[        [        [        -   5      R                  [        [        5      [        [        [        -   5      :X  d   e[        [        [        -   5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   5      R                  [        [        5      [        [        [        -   5      :X  d   e[        [        [        -   5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   5      R                  [        [        5      [        [        [        -   5      :X  d   e[	        [
        S 5        [        [        [        -   [        5      R                  [        [        5      [        [        [        -   [        5      :X  d   e[        [        [        -   [        5      R                  [        [        5      [        [        [        -   [        5      :X  d   e[	        [
        S 5        [	        [
        S 5        g )Nr   c                  T    [        [        [        -   5      R                  [        5      $ r   )r   r   r   replacer   r   r   r   r   #test_Poly_replace.<locals>.<lambda>  s    DQK$7$7$:r   c                  ^    [        [        [        -   5      R                  [        [        5      $ r   r   r   r   r  r   r   r   r   r        DQK$7$71$=r   c                  h    [        [        [        -   [        5      R                  [        [        5      $ r   r  r   r   r   r   r        DQN$:$:1a$@r   c                  h    [        [        [        -   [        5      R                  [        [        5      $ r   r  r   r   r   r   r    r  r   )r   r   r  r   r|   rG   r   r   r   r   r   test_Poly_replacer    s   A;q!T!a%[000A;q!T!a%[000
?:;A;q!$QU333A;q!$QU333A;q!$QU333A;q!$QUAq(9999A;q!$QU333A;q!$QUAq(9999A;q!$QU333
?=>Aq>!!!Q'4Aq>999Aq>!!!Q'4Aq>999
?@A
?@Ar   c                  Z   [        [        S 5        [        [        [        -   [        [        5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      R                  [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      R                  [        S9[        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      R                  [        S9[        [        [        -   [        [        5      :X  d   eg )Nc                  ^    [        [        [        -   5      R                  [        [        5      $ r   )r   r   r   reorderr   r   r   r   r   #test_Poly_reorder.<locals>.<lambda>  r  r   rN  )r|   rG   r   r   r   r  r   r   r   test_Poly_reorderr    sM   
?=>Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$Q*d1q5!Q.????Aq!$$$+tAE1a/@@@@Aq!$$$+tAE1a/@@@@r   c                  .   [        [        S-  [        [        S-  -  -   [        [        [        5      R	                  [        5      n U R                  5       [        S-  [        [        S-  -  -   :X  a  U R                  [        [        4:X  d   e[        [        [        -  [        -
  [        [        [        5      R	                  S5      [        [        [        -  [        -
  [        [        5      :X  d   e[        [        S 5        [        [        S 5        g )Nr   r   c                      [        [        [        S-  -  [        S-  -   [        [        5      R                  [        5      $ r  r   r   r   ltrimr   r   r   r   !test_Poly_ltrim.<locals>.<lambda>  s(    D1a4!Q$1$=$C$CA$Fr   c                  n    [        [        [        -  [        -
  [        [        5      R                  S5      $ )Nr   r  r   r   r   r   r    s     D1q!Q$7$=$=b$Ar   )	r   r   r   r   r  r  r   r|   rG   r   s    r   test_Poly_ltrimr    s    QTAadF]Aq!$**1-A99;!Q$1a4-'AFFq!f,<<<!aAq!''*d1Q37Aq.AAAA
?FG
?ABr   c                  B   [        [        [        -  S-   [        [        [        5      R	                  [        [        5      SL d   e[        [        [        -  [        -   [        [        [        5      R	                  [        [        5      SL d   e[        [        S 5        g )Nr   TFc                      [        [        [        S-  -  [        S-  -   [        [        5      R                  [        5      $ r  )r   r   r   has_only_gensr   r   r   r   r   )test_Poly_has_only_gens.<locals>.<lambda>  s(    D1a4!Q$1$=$K$KA$Nr   )r   r   r   r   r  r|   rF   r   r   r   test_Poly_has_only_gensr    si    !aAq!//15===!aAq!//15>>>
?NOr   c                  0   [        S[        -  S-   SS9R                  5       [        S[        -  S-   SS9:X  d   e[        S[        -  S-   SS9R                  5       [        S[        -  S-   SS9:X  d   e[        [        S 5        [        [
        S 5        g )Nr   r   rP   r   rQ   c                  H    [        [        S-  S-   5      R                  5       $ r/  r   r   to_ringr   r   r   r   #test_Poly_to_ring.<locals>.<lambda>  s    4!a=#8#8#:r   c                  F    [        S[        -  S-   SS9R                  5       $ )Nr   r   r   r   r  r   r   r   r   r    s    QqS1Wa 8 @ @ Br   )r   r   r  r|   rH   rI   r   r   r   test_Poly_to_ringr    s    !a%--/4!a3MMMM!a%--/4!a3MMMM
>:;
;BCr   c                  L   [        S[        -  S-   SS9R                  5       [        S[        -  S-   SS9:X  d   e[        S[        -  S-   SS9R                  5       [        S[        -  S-   SS9:X  d   e[        [        S-  S-   SS9R                  5       [        [        S-  S-   SS9:X  d   e[        S[        -  S-   SS9R                  5       [        S[        -  S-   SS9:X  d   e[        S[        -  S	-   5      R                  5       [        S[        -  S	-   5      :X  d   eg )
Nr   r   rP   r   rQ   r   r   r5  r   )r   r   to_fieldr   r   r   test_Poly_to_fieldr    s   !a%..0D1q4NNNN!a%..0D1q4NNNN!a%..0D1q4NNNN!a#,,.$qsQw2JJJJA%%'4A+<<<<r   c                  H   [        S[        -  5      R                  5       [        S[        -  5      :X  d   e[        [        S-  5      R                  5       [        [        S-  5      :X  d   e[        S[        -  5      R                  5       [        [        S-  5      :X  d   eg )Nr   r  r;  )r   r   to_exactr   r   r   test_Poly_to_exactr    sw    !94!9,,,!94!9,,,A;!T!B$Z///r   c                  v   [        [        S-  S-   [        [        [           S9n U R	                  5       [        [        S-  S-   [        SS9:X  d   eU R	                  SS9[        [        S-  S-   [        SS9:X  d   e[        S[        [        5      R	                  5       [        S[        [        5      :X  d   eg )	Nr   r   r   rP   TrM   rQ   r   )r   r   rQ   r   retractr   s    r   test_Poly_retractr    s    QTAXqA'A99;$q!tax488889949 DA1T$BBBB1a=  "d1am333r   c                     [        [        S-  S[        S-  -  -   S[        -  -   S-   5      n U R                  SS5      [        S[        5      :X  d   eU R                  SS5      [        S[        5      :X  d   eU R                  SS5      [        S[        -  S-   [        5      :X  d   eU R                  SS5      [        S[        S-  -  S[        -  -   S-   [        5      :X  d   eU R                  SS5      [        [        S-  S[        S-  -  -   S[        -  -   S-   [        5      :X  d   eU R                  [        SS5      [        S[        5      :X  d   eU R                  [        SS5      [        S[        5      :X  d   eU R                  [        SS5      [        S[        -  S-   [        5      :X  d   eU R                  [        SS5      [        S[        S-  -  S[        -  -   S-   [        5      :X  d   eU R                  [        SS5      [        [        S-  S[        S-  -  -   S[        -  -   S-   [        5      :X  d   e[        [        S-  S-   5      nUR                  SS5      [        S[        5      :X  d   eg )Nr   r   r>  r   r   )r   r   sliceru  s     r   test_Poly_slicer    s   QTAadF]QqS 1$%A771a=DAJ&&&771a=DAJ&&&771a=D1q!,,,,771a=D1a4!A#!115555771a=DA!Q$1!4q!8!<<<<771atAqz)))771atAqz)))771atAaC!GQ////771atAadFQqSL1$4a8888771atAqD1QT6MAaC$7!$;Q????QTAXA771a=DAJ&&&r   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      SS/:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S	5      SS/:X  d   eg )
Nr   r   r   r   r   r   r   r>  r   rX   rY   )r   r   coeffsr   r   r   r   test_Poly_coeffsr  "  sN   1:1#%%%1:1#%%%!a""$A...!Q$1q !$++-:::!Q$1q !$++-:::!Q$1a41$%,,U31v===!Q$1a41$%,,W5!Q???r   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / S	Q:X  d   e[        [        [        S-  -  S[        S-  -  [        S
-  -  -   5      R                  S5      SS/:X  d   e[        [        [        S-  -  S[        S-  -  [        S
-  -  -   5      R                  S5      SS/:X  d   eg )Nr   r   r   r   r   r   r   r   r   r>  )r>  r   r   r   rX   r   r   r   r   rY   )r   r   monomsr   r   r   r   test_Poly_monomsr   /  sR   1:4&(((1:4&(((!a""$t444!Q$1q !$++-1CCCC!Q$1q !$++-1CCCC!Q$1a41$%,,U37GGGG!Q$1a41$%,,W5&&9IIIIr   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S	-  -  S[        -  -   S-   [        5      R                  5       / S
Q:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      SS/:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      SS/:X  d   eg )Nr   r   r   r   r   r   r   r   r   r   )r  r   r$  r#  r>  )r  r   r$  r#  r   rX   r  r   r  r   rY   )r   r   termsr   r   r   r   test_Poly_termsr*  <  sg   1:),,,1:),,,!a!!#	9'====!Q$1q !$**,0QQQQ!Q$1q !$**,0QQQQ	!Q$1a41#eEl{K.HI I I	!Q$1a41#eGnk0JK K Kr   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   eg )Nr   r   r   r   r  r>  )r   r   r   r   r   )r   r   rE  r   r   r   test_Poly_all_coeffsr,  K  s    1:  "qc)))1:  "qc)))!a&&(QF222!Q$1q !$//1Y>>>!Q$1q !$//1_DDDr   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / S	Q:X  d   eg )
Nr   r   r   r   r   r   r  r>  )r  r   r  r   r   )r   r   
all_monomsr   r   r   test_Poly_all_monomsr0  U  s    1:  "tf,,,1:  "tf,,,!a&&(T4L888!Q$1q !$//15GGGG!Q$1q !$//15SSSSr   c                     [        S[        5      R                  5       S/:X  d   e[        S[        5      R                  5       S/:X  d   e[        S[        -  S-   [        5      R                  5       SS/:X  d   e[        S[        S-  -  S[        -  -   S-   [        5      R                  5       / SQ:X  d   e[        S[        S	-  -  S[        -  -   S-   [        5      R                  5       / S
Q:X  d   eg )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_termsr3  _  s    1:!i[0001:!i[000!a%%'Iy+AAAA!Q$1q !$..0)* * *!Q$1q !$..0?@ @ @r   c                      [        [        S-  S[        -  -   S-   5      n [        [        S-  S[        -  -   S-   5      nS nU R                  U5      U:X  d   eS nU R                  U5      U:X  d   eg )Nr      i  r>  c                      U u  nUSSU-
  -  -  $ Nr;  r   r   monomcoeffks      r   func test_Poly_termwise.<locals>.funco  s    b1q5k!!r   c                 &    U u  nU4USSU-
  -  -  4$ r7  r   r8  s      r   r<  r=  u  s#    tUBQK'''r   )r   r   termwise)r   r   r<  s      r   test_Poly_termwiser@  k  ss    QTBqD[3AQTAaCZ!^A" ::dq   ( ::dq   r   c                      [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        [        [        5      R                  5       S:X  d   e[        [        S-   [        5      R                  5       S:X  d   e[        [        S-  S-   [        5      R                  5       S:X  d   e[        [        S-  [        -   S-   [        5      R                  5       S:X  d   eg )Nr   r   r   r   )r   r   lengthr   r   r   test_Poly_lengthrC  |  s    1:!###1:!###1:!###Aq>  "a'''1q!##%***1q1a '')Q...r   c                     [        S[        5      R                  5       0 :X  d   e[        S[        [        [        5      R                  5       0 :X  d   e[        S[        5      R                  5       SS0:X  d   e[        S[        [        [        5      R                  5       SS0:X  d   e[        [        S-  S-   [        5      R                  5       SSS.:X  d   e[        [        S-  S-   [        [        [        5      R                  5       SSS.:X  d   e[        S[        S-  -  [        -  [        S-  -  S	[        -  [        -  -   S
[        -  [        -  -   5      R                  5       SS	S
S.:X  d   eg )Nr   r   r   r   r   r   r   r   )r  r   ))r   r   r   rE  r>  r   )r   r   r   r   r   r   r   r   r   )r   r   as_dictr   r   r   r   r   test_Poly_as_dictrJ    s<   1:2%%%1a##%+++1:D!9,,,1a##%)Q7771q!$$&!*<<<<1q!Q"**,A!0LLLL!Q$qA!A%!A-.668=, , , ,r   c                    ^  [        S[        5      R                  5       S:X  d   e[        S[        [        [        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        [        [        5      R                  5       S:X  d   e[        [        S-  S-   [        5      R                  5       [        S-  S-   :X  d   e[        [        S-  S-   [        [        [        5      R                  5       [        S-  S-   :X  d   e[        S[        S-  -  [        -  [        S-  -  S[        -  [        -  -   S[        -  [        -  -   5      R                  5       S[        S-  -  [        -  [        S-  -  S[        -  [        -  -   S[        -  [        -  -   :X  d   e[        [        S-  S[        -  [        S-  -  -   [        -
  [        [        5      m T R                  5       [        * [        S-  -   S[        -  [        S-  -  -   :X  d   eT R                  [        S05      S[        -
  S[        S-  -  -   :X  d   eT R                  [        S	05      S
S[        -  -   [        S-  -   :X  d   eT R                  [        S[        S	05      S:X  d   eT R                  SS	5      S:X  d   e[        [        U 4S j5        g )Nr   r   r   r   r>  r      r;  r  iH   i{  c                  2   > T R                  [        S05      $ r   )r  r   r   s   r   r   #test_Poly_as_expr.<locals>.<lambda>  s    AIIq!f$5r   )r   r   r  r   r   r|   rF   r   s   @r   test_Poly_as_exprrP    sV   1:1$$$1a##%***1:1$$$1a##%***1q!$$&!Q$(2221q!Q"**,1q888	!Q$qA!A!A%''.wyAadF1HQTMAaCE4IAaCPQE4QR R R 	QTAaC1H_q !Q'A99;1"q!t)ac!Q$h....99aVQAqD 000099aVRT	AqD 000099aAq\"c)))99Q?c!!!
?56r   c                      [        [        S-  [        [        -  -
  S[        -  -   [        SS9n U R                  " 5       [        [        S-  [        S-  -   S[        -  -
  S-   [        S	S
9:X  d   eg )Nr>     Tr  r  r   "   i!  rQ   r   )r   r   rf   liftr   s    r   test_Poly_liftrV    s\    QTAaCZ"Q$D1A668tAqD1a4K"Q$.4aEEEEr   c                     [        [        S-  [        S-  -   S-
  S5      n [        [        S-  [        S-  -   S-
  S5      n[        U [        -  SU S-  -  -   U-
  [        S-  -   [        S-  -
  [        SS9nUR
                  " 5       [        [        S-  * S	[        S
-  -  -   S[        S-  -  -
  S	[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S [        S!-  -  -
  S"[        S#-  -  -   S$[        S%-  -  -
  S&[        S'-  -  -   S([        S)-  -  -
  S*[        S+-  -  -   S,[        S--  -  -
  S.[        S/-  -  -   S0[        S1-  -  -
  S2[        S3-  -  -   S4[        S5-  -  -
  S6[        S7-  -  -   S8[        S9-  -  -
  S:[        S;-  -  -   S<[        S=-  -  -
  S>[        S?-  -  -   S@[        SA-  -  -
  SB[        SC-  -  -   SD[        SE-  -  -
  SF[        SG-  -  -   SH[        SI-  -  -
  SJ[        SK-  -  -   SL[        SM-  -  -
  SN[        SO-  -  -   SP[        SQ-  -  -
  SR[        SS-  -  -   ST[        SU-  -  -
  SV[        SW-  -  -   SX[        SY-  -  -
  SZ[        S[-  -  -   S\[        S]-  -  -
  S^[        S_-  -  -   S`[        Sa-  -  -
  Sb[        Sc-  -  -   Sd[        Se-  -  -
  Sf[        Sg-  -  -   Sh[        Si-  -  -
  Sj[        Sk-  -  -   Sl[        Sm-  -  -
  Sn[        So-  -  -   Sp[        Sq-  -  -
  Sr[        Ss-  -  -   St[        Su-  -  -
  Sv[        Sw-  -  -   Sx[        S	-  -  -
  Sy[        Sz-  -  -   S{[        S|-  -  -
  S}[        S~-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   S[        -  -
  S-   [        SS9:X  d   eg )Nr   r   r   r   r   Tr   K      rM  G   F   i   E   D      C   i0  B   i{  A   i  @   i
  ?   i?  >   i  =   i1  <   iJV  ;   i}}  :   i  9   i]X 8   iz 7   iD 6   i 5   iK 4   iӱ
 3   iZ 2   i 1   ig 0   i- /   iz-? .   imV -   iz ,   i +   iX *   ik")   iv(   i`'   iDu&   is:(%   im$   i-#   i~rT  iE!   iL    i~s
r:  iQM   iٞ   i|   i   iA   ievprL  i*   iUt   ioBH   i*r<  i3& r5  iE$@!   i0;    iDp!rR  ir  iYEiOr  iX?   ib   iL9r  inr;  i;	   i
r  izGr   iHr  i!p^i1>jr>  i'i?i i rQ   r   )rx   r   r   r   r   rU  r  s      r   test_Poly_lift_multipler    s   	1q!ta	#B	1q!ta	#BRTAb!eG^b 1a4'!Q$.TBA668t	
BArEAaeG#bBh.QU:R2XEArE		2I	 #ArE		*,0BJ	79=ae	DQU
	!R%Z	 "'2+	.05ae	<>CArEk	J 	ae	 ArEk	" %+1b5L	1 4:!R%<	@ CIB,	O B,		  2		& )02		6 9@2		F
 	2	
  2	&
 )02	6
 9@2	F 	2	 !B	' *2!R%	8 ;C1b5.	I 	B	 "!R%	( +31b5.	9 <DArE>	J 	B	 "!R%	( +4ArE/	: =FaeO	L 	!R%		 $ArE/		* -6aeO		< ?H2o		N 	!R%
	 $ArE/
	* -6aeO
	< ArE/	 &aeO	, /82o	> AJ!R%	P ArE/	 &aeO	, /82o	> AJ!R%	P ArE/	 &aeO	, ArE/	 &aeO	, /82o	> AJ!R%	P ArE/	 &aeO	, /81n	= @IA~	N  AqD.!	  $AqD=!	)  ,5QT>!	:  =EQTM!	J" 	A#	" !A#	&" )0	#	2" 5=#	=" ?@%   r   c                  :   [        S[        5      R                  5       S[        S[        5      4:X  d   e[        S[        5      R                  5       S[        S[        5      4:X  d   e[        [        [        5      R                  5       S[        [        [        5      4:X  d   e[        [        S-  [        5      R                  5       S[        [        [        5      4:X  d   e[        [        S-  [        5      R                  5       S[        [        [        5      4:X  d   e[        [        S-  [        -  [        S-  -  [        S	-  [        S-  -  -   5      R                  5       S
[        [        [        -  [        -  [        S-  [        -  -   5      4:X  d   eg )Nr   r   r   r   r  rR  )rR  r  r>  )r   r   r  )r   r   deflater   r   r   r   r   test_Poly_deflater    s7   1:D$q!*#55551:D$q!*#55551:D$q!*#55551a=  "tT!QZ&88882q>!!#tAqz'::::	1Qq"uq!tArEz!##*79T!A#a%!Q$q&.=Q0RS S Sr   c                     [        [        S-  [        -  [        [        S-  -  -   [        [        -  -   S-   [        5      n U R                  5       [        [        S-  [        -  [        [        S-  -  -   [        [        -  -   S-   [        [        5      :X  d   eU R                  SS9[        [        S-  [        -  [        [        S-  -  -   [        [        -  -   S-   [        [        5      :X  d   eg )Nr   r   r   T)front)r   r   r   injectr   s    r   test_Poly_injectr    s    QT!Va1f_qs"Q&*A88:ad1fqAvo!3a7A>>>>88$841Q1a4!A#(=(A1a#HHHHr   c            
      6   [        [        S-  [        -  [        [        S-  -  -   [        [        -  -   S-   [        [        5      n U R                  [        5      [        [        [        S-  -  [        S-  [        -   [        -  -   S-   [        SS9:X  d   eU R                  [        5      [        [        [        S-  -  [        S-  [        -   [        -  -   S-   [        SS9:X  d   e[        [        -   [        -   [
        -   [        -   n[        U[        [        [        [
        [        5      nUR                  [        5      [        U[        [        [
        [        SS9:X  d   eUR                  [        [        5      [        U[        [
        [        SS9:X  d   eUR                  [        [        [        5      [        U[
        [        SS9:X  d   eUR                  [        5      [        U[        [        [        [
        S	S9:X  d   eUR                  [
        [        5      [        U[        [        [        S
S9:X  d   eUR                  [        [
        [        5      [        U[        [        SS9:X  d   e[        [        S 5        [        [        S 5        g )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                  |    [        [        [        -  [        [        [        [           S9R                  [        5      $ r   )r   r   r   rP   r   ejectr   r   r   r   !test_Poly_eject.<locals>.<lambda>  s"    QqS!Qr!u = C CA Fr   c                  r    [        [        [        -  [        [        [        5      R	                  [        5      $ r   )r   r   r   r   r  r   r   r   r   r    s    QqS!Q(:(@(@(Cr   )
r   r   r   r  r   r   r   r|   rI   rC  )r   exr   s      r   test_Poly_ejectr    s   QT!Va1f_qs"Q&1-A771:a1f1q!|3a77KKKK771:a1f1q!|3a77KKKK	
QQ	BRAq!QA771:b!Q1W====771a=DQ1Z@@@@771atB1]CCCC771:b!Q1W====771a=DQ1Z@@@@771atB1]CCCC
;FG
 CDr   c                     [        [        [        [        5      R                  5       [        [        [        5      :X  d   e[        [        [        -  [        [        5      R                  5       [        [        [        -  [        [        5      :X  d   e[        S[        [        5      R                  5       [        S[        [        5      :X  d   eg r  )r   r   r   excluder   r   r   test_Poly_excluder    s}    1a=  "d1aj000!Q?""$QqS!Q7771a=  "d1am333r   c                  <   [        S[        [        5      R                  S5      S:X  d   e[        S[        [        5      R                  S5      S:X  d   e[        S[        [        5      R                  S5      S:X  d   e[        S[        [        5      R                  S5      S:X  d   e[	        [
        S 5        [	        [
        S 5        [        S[        [        5      R                  [        5      S:X  d   e[        S[        [        5      R                  [        5      S:X  d   e[        S[        [        5      R                  S5      S:X  d   e[        S[        [        5      R                  S5      S:X  d   e[	        [
        S	 5        [	        [
        S
 5        g )Nr   r  r   r   c                  J    [        S[        [        5      R                  S5      $ )Nr   r   r   r   _gen_to_levelr   r   r   r   )test_Poly__gen_to_level.<locals>.<lambda>  s    DAqM$?$?$Cr   c                  J    [        S[        [        5      R                  S5      $ r  r  r   r   r   r   r    s    DAqM$?$?$Cr   r   r   c                  R    [        S[        [        5      R                  [        5      $ r  )r   r   r   r  r   r   r   r   r   r    s    DAqM$?$?$Br   c                  J    [        S[        [        5      R                  S5      $ )Nr   r   r  r   r   r   r   r    s    DAqM$?$?$Dr   )r   r   r   r  r|   rG   r   r   r   test_Poly__gen_to_levelr    s6   1a=&&r*a///1a=&&r*a///1a=&&*a///1a=&&*a///
?CD
?CD1a=&&q)Q...1a=&&q)Q...1a=&&s+q0001a=&&s+q000
?BC
?DEr   c                     [        S[        5      R                  5       [        * L d   e[        S[        5      R                  5       S:X  d   e[        [        [        5      R                  5       S:X  d   e[        S[        5      R                  SS9[        * L d   e[        S[        5      R                  SS9S:X  d   e[        [        [        5      R                  SS9S:X  d   e[        S[        5      R                  [        S9[        * L d   e[        S[        5      R                  [        S9S:X  d   e[        [        [        5      R                  [        S9S:X  d   e[        S[        5      R                  SS9[        * L d   e[        S[        5      R                  SS9S:X  d   e[        [        [        5      R                  SS9S:X  d   e[	        [
        S 5        [	        [
        S 5        [	        [
        S 5        [        S[        [        5      R                  5       S:X  d   e[        S[        -  [        [        5      R                  5       S:X  d   e[        [        [        -  [        [        5      R                  5       S:X  d   e[        S[        [        5      R                  [        S9S:X  d   e[        S[        -  [        [        5      R                  [        S9S:X  d   e[        [        [        -  [        [        5      R                  [        S9S:X  d   e[        S[        [        5      R                  [        S9S:X  d   e[        S[        -  [        [        5      R                  [        S9S:X  d   e[        [        [        -  [        [        5      R                  [        S9S:X  d   e[        S[        5      [        * L d   e[        S[        5      S:X  d   e[        [        [        5      S:X  d   e[        [        [        S-  -  [        5      S:X  d   e[        [        [        S-  -  [        5      S:X  d   e[        [        [        S-  -  [        5      S:X  d   e[        [        5      S:X  d   e[	        [        S	 5        [	        [        S
 5        [	        [
        S 5        [	        [
        S 5        [        [        S[        5      [        5      [        * L d   e[        [        S[        5      [        5      S:X  d   e[        [        [        S-  [        S-  -   [        5      5      S:X  d   e[        [        [        S-  [        S-  -   [        [        5      S5      S:X  d   e[        [        [        S-  [        S-  -   [        5      [        5      S:X  d   e[        [        [        S-  [        S-  -   [        S-  -   [        5      [        5      S:X  d   eg )Nr   r   genr   c                  <    [        S[        5      R                  SS9$ Nr   r  r   r   r   r   r   r   r   "test_Poly_degree.<locals>.<lambda>   s    DAJ$5$5!$5$<r   c                  D    [        S[        5      R                  [        S9$ r  )r   r   r   r   r   r   r   r   r  !  s    DAJ$5$5!$5$<r   c                  <    [        S[        5      R                  SS9$ )Nr   r   r  r  r   r   r   r   r  "  s    DAJ$5$5#$5$>r   r   c                  :    [        [        S-  [        S-  -   5      $ r  r   r   r   r   r   r   r   r  :  s    fQTAqD[1r   c                  <    [        [        S-  [        S-  -   S5      $ Nr   r   r   r  r   r   r   r   r  ;  s    fQTAqD[!4r   c                  "    [        [        S5      $ )Ng?r   r   r   r   r   r   r  <  s
    F1cNr   c                  J    [        [        S-  [        S-  S-   -  [        5      $ r  r  r   r   r   r   r  =  s    F1a4A?A$>r   r   r>  )
r   r   r   ri   r|   rG   r   r   rj   r  r   r   r   test_Poly_degreer    s   1:2#%%%1:!###1:!###1:#s***1:#q(((1:#q(((1:#s***1:#q(((1:#q(((1:%",,,1:%***1:%***
?<=
?<=
?>?1a=!Q&&&!Q?!!#q(((!Q?!!#q(((1a=A&!+++!Q?!!a!(A---!Q?!!a!(A---1a=A&!+++!Q?!!a!(A---!Q?!!a!(A---!Q<B3!Q<1!Q<1!AqD&!!!!!AqD&!!!!!AqD&!!!!":??
912
945
?23
?>?$q)A2#%%%$q)A!###$q!tAqDy#$)))$q!tad{Aq)1-222$q!tad{A&*a///$q!tad{QT)1-q1Q666r   c                     [        S[        5      R                  5       [        * 4:X  d   e[        S[        [        5      R                  5       [        * [        * 4:X  d   e[        S[        [        [
        5      R                  5       [        * [        * [        * 4:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        [        5      R                  5       S:X  d   e[        S[        [        [
        5      R                  5       S:X  d   e[        [        S-  [        -  [        S-  [
        S-  -  -   S-   5      R                  5       S:X  d   e[        S[        5      S:X  d   e[        [        [        5      S	:X  d   e[        [        [        S-  -  5      S
:X  d   e[        [        S 5        g )Nr   r   r   r   rE  r   r   )r   r   r   r   r=  c                      [        S5      $ r  )r   r   r   r   r   'test_Poly_degree_list.<locals>.<lambda>V  s    k!nr   )r   r   r   ri   r   r   r|   rB   r   r   r   test_Poly_degree_listr  F  sa   1:!!#v---1a=$$&B3*4441a'')rcB3_<<<1:!!#t+++1a=$$&&0001a'')Y6661QAad"Q&'335BBBq!$$$q!$$$qAv&(((
45r   c                     [        [        S-  [        -  [        S-  [        S-  -  -   S-   5      R	                  5       S:X  d   e[        [        S-  [        S-  -   5      R	                  5       S:X  d   e[        [        [        -  [        -  [        S-  -   5      R	                  5       S:X  d   e[        [        S-  [        -   S-   5      R	                  5       S:X  d   e[	        [        [        -  [        S-  -   5      S:X  d   e[	        [        [        -  [        S-  -   [        [        5      S:X  d   e[	        S5      S:X  d   e[	        [        [        S-  [        S-  -   [        S-  -   5      5      S:X  d   e[	        [        [        S-  [        S-  -   [        S-  -   [        5      5      S:X  d   e[	        [        [        S-  [        S-  -   [        S-  -   [        5      [        5      S:X  d   e[	        [        [        S-  [        [        -  [        -  -   [        S-  [        S-  -  -   [        S-  -   [        5      [        5      S:X  d   eg )	Nr   r   r   r   r>  r   r  r   )r   r   r   r   r	   r   r   r   test_Poly_total_degreer  Y  s   1QAad"Q&'446!;;;1q!t))+q000!A1**,1111q1**,111!ad
#q(((!ad
Aq)Q...?aQTAqD[1a4/01Q666QTAqD[1a4/34999QTAqD[1a4/3Q71<<<QTAaCE\AqDAI51<Q?CqHHHr   c                     [        [        S-  [        -   5      R                  [        5      [        [        S-  [        [        -  -   5      :X  d   e[        [        [        -   5      R                  [        5      [        [        [        -   [        [        [        5      :X  d   e[        [        [        S-  -   5      R                  [        5      [        [        [        -  [        S-  -   5      :X  d   eg r  )r   r   r   
homogenizer   r   r   r   test_Poly_homogenizer  g  s    1Q<""1%ad1Q3h777!9"d1Q31a&8888!Q$<""1%ac!Q$h777r   c                  z   [        S[        [        5      R                  5       [        * L d   e[        S[        [        5      R                  5       S:X  d   e[        [        [        [        5      R                  5       S:X  d   e[        [        [        -  [        [        5      R                  5       S:X  d   e[        [        S-   [        [        5      R                  5       b   e[        [        [        -  [        -   [        [        5      R                  5       b   e[        [        S-  S[        S-  -  [        S-  -  -   S[        -  [        S-  -  -   5      R                  5       S:X  d   e[        [        S-  S[        S-  -  [        S-  -  -   S[        -  [        S-  -  -   5      R                  5       b   eg )Nr   r   r   r   r   r  r>  )r   r   r   homogeneous_orderri   r   r   r   test_Poly_homogeneous_orderr  m  sV   1a=**,3331a=**,1111a=**,111!Q?,,.!333Aq!..0888!aA002:::1qAvad{"QqSAX-.@@BaGGG1qAvad{"QqSAX-.@@BJJJr   c                     [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   SS9S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   SS9S:X  d   eg )	Nr   r   r   r   r   rX   rY   r+  )r   r   r
   r   r   r   r   test_Poly_LCr  z  s:   1:==?a1:==?a!Q$
A!!#q(((!Q$1a41$%((/1444!Q$1a41$%((1Q666a1fqAvad{"%0A555a1fqAvad{"'2a777r   c                      [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   eg )Nr   r   r   )r   r   TCr   r   r   test_Poly_TCr    s`    1:==?a1:==?a!Q$
A!!#q(((r   c                     [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   eg )Nr   r   r   r   r   rX   rY   )r   r   ECr   r   r   r   test_Poly_ECr    s    1:==?a1:==?a!Q$
A!!#q(((!Q$1a41$%((/1444!Q$1a41$%((1Q666r   c                  *  ^  [        S[        5      R                  S5      S:X  d   e[        S[        5      R                  [        5      S:X  d   e[        S[        5      R                  S5      S:X  d   e[        S[        5      R                  [        5      S:X  d   e[        [        S-  [        5      R                  S5      S:X  d   e[        [        S-  [        5      R                  [        S-  5      S:X  d   e[        [        S-  [        5      R                  [        S-  5      S:X  d   e[        [        S-  [        5      R                  [        S-  5      S:X  d   e[        S[        -  [        S-  -  S-   [        [        5      R                  S5      S:X  d   e[        S[        -  [        S-  -  S-   [        [        5      R                  [        [        S-  -  5      S:X  d   e[        S[        -  [        -  [	        S5      -  S	[        -  -   [        [        5      m T R                  " [        5      S	:X  d   eT R                  " [        5      S:X  d   eT R                  " [        [        -  5      S[	        S5      -  :X  d   eT R
                  " 5       R                  [        5      S[        -  [	        S5      -  S	-   :X  d   e[        [        U 4S
 j5        [        [        S 5        [        [        S 5        [        [        S 5        g )Nr   r   r  r   r  r   r   r  r  c                  0   > T R                   " [        5      $ r   )r:  r   r   s   r   r   !test_Poly_coeff.<locals>.<lambda>  s    
r   c                  D    [        [        S-   5      R                  S5      $ )Nr   r   r   r   coeff_monomialr   r   r   r   r    s    tAE{99!<r   c                  R    [        [        S-   5      R                  S[        -  5      $ Nr   r   r  r   r   r   r   r    s    tAE{99!A#>r   c                  `    [        [        S-   5      R                  S[        -  [        -  5      $ r  )r   r   r  r   r   r   r   r   r    s    tAE{99!A#a%@r   )
r   r   r  r   rq   r  r:  r|   rC  
ValueErrorr   s   @r   test_Poly_coeffr    s^   1:$$Q'1,,,1:$$Q'1,,,1:$$Q'1,,,1:$$Q'1,,,1a=''*a///1a=''1-2221a=''1-2221a=''1-222!AqD1a#2215:::!AqD1a#221QT6:a???RT!VCF]RT!1a(AA"$$$A!###AaC Bs1vI---99;Q2a4A;#3333
 23
:<=
:>?
:@Ar   c                     [        S[        5      R                  S5      S:X  d   e[        S[        5      R                  S5      S:X  d   e[        S[        5      R                  S5      S:X  d   e[        S[        5      R                  S5      S:X  d   e[        [        S-  [        5      R                  S5      S:X  d   e[        [        S-  [        5      R                  S5      S:X  d   e[        [        S-  [        5      R                  S5      S:X  d   e[        [        S-  [        5      R                  S5      S:X  d   e[        S[        -  [        S-  -  S-   [        [        5      R                  SS5      S:X  d   e[        S[        -  [        S-  -  S-   [        [        5      R                  SS5      S:X  d   e[	        [
        S 5        g )	Nr   r   r  r   r  r   r   c                  f    [        [        [        -  S-   [        [        5      R                  S5      $ r  )r   r   r   nthr   r   r   r   test_Poly_nth.<locals>.<lambda>  s     tAaC!GQ266q9r   )r   r   r  r   r|   r  r   r   r   test_Poly_nthr    su   1:>>!!!!1:>>!!!!1:>>!!!!1:>>!!!!1a=Q1$$$1a=Q1$$$1a=Q1$$$1a=Q1$$$!AqD1a#''1-222!AqD1a#''1-222
:9:r   c                  $   [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S	:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S
5      S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   SS9[        S-  [        S-  -  :X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   S
S9[        [        S-  -  :X  d   eg )Nr   r   r   r   r  r   r   rX   r  rY   r  r+  )r   r   r   r   r   r   r   test_Poly_LMr    sN   1:==?d"""1:==?d"""!Q$
A!!#t+++!Q$1a41$%((/6999!Q$1a41$%((1V;;;a1fqAvad{"%0AqDAI===a1fqAvad{"'2a1f<<<r   c                  
   [        [        S-  [        S-  -  [        -  [        S-  [        -  [        S-  -  -   [        [        -  [        -  -   S-   5      n S nU R	                  SS9S:X  d   eU R	                  US9S:X  d   eg )	Nr   r   r   c                 *    [        [        U 5      5      $ r   )tuplereversed)r9  s    r   r   +test_Poly_LM_custom_order.<locals>.<lambda>  s    E(5/2r   rX   r+  )r   r   r   rF  )r   r   r   r   r   )r   rev_lexs     r   test_Poly_LM_custom_orderr    sz    QT!Q$Yq[1a46!Q$;&1Q.23A2G44e4	)))44g4)+++r   c                     [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S	:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S
5      S:X  d   eg )Nr   r   r   r   r   r   r   rX   r  rY   r  )r   r   EMr   r   r   r   test_Poly_EMr    s    1:==?d"""1:==?d"""!Q$
A!!#t+++!Q$1a41$%((/6999!Q$1a41$%((1V;;;r   c                  *   [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S	5      S
:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   S	S9S[        S-  -  [        S-  -  :X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   SS9[        [        S-  -  :X  d   eg )Nr   r"  r   r#  r   )r  r   r   r   rX   r'  rY   r(  r+  )r   r   r   r   r   r   r   test_Poly_LTr    sR   1:==?i'''1:==?i'''!Q$
A!!#y000!Q$1a41$%((/;>>>!Q$1a41$%((1[@@@a1fqAvad{"%0AadF1a4K???a1fqAvad{"'2a1f<<<r   c                     [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        S-  -  [        -   [        5      R                  5       S:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S	5      S
:X  d   e[        [        [        S-  -  S[        S-  -  [        S-  -  -   5      R                  S5      S:X  d   eg )Nr   r"  r   r#  r   )r   r   r   r   rX   r(  rY   r'  )r   r   ETr   r   r   r   test_Poly_ETr    s    1:==?i'''1:==?i'''!Q$
A!!#y000!Q$1a41$%((/;>>>!Q$1a41$%((1[@@@r   c                      [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   eg Nr   r   r   )r   r   max_normr   r   r   test_Poly_max_normr    sY    A;!Q&&&A;!Q&&&A;!Q&&&r   c                      [        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   e[        S[        5      R                  5       S:X  d   eg r  )r   r   l1_normr   r   r   test_Poly_l1_normr    sY    A; A%%%A; A%%%A; A%%%r   c                     [        [        S-   [        5      R                  5       u  pU S:X  a3  U[        [        S-   [        SS9:X  a  UR                  " 5       [        :X  d   e[        [        S-  S-   [        5      R                  5       u  pU S:X  a3  U[        [        S-   [        SS9:X  a  UR                  " 5       [
        :X  d   e[        S[        S-  -  S-   SS9R                  5       u  pU S:X  a>  U[        S[        S-  -  S-   [        SS9:X  a  UR                  " 5       [        S5      :X  d   e[        [        S-  S-   [        5      R                  S	S
9u  pU S:X  a3  U[        [        S-   [        SS9:X  a  UR                  " 5       [        :X  d   e[        [        [        -  S-   [        5      R                  S	S
9u  pU [        :X  a>  U[        [        [        -   [        SS9:X  a   UR                  " 5       [        [           :X  d   e[        [        S-  [        S5      -   [        SS9R                  5       u  pU S:X  a?  U[        [        S[        S5      -  -   [        SS9:X  a  UR                  " 5       [        :X  d   e[        [        S-  [        S5      -   [        SS9R                  S	S
9u  pU S:X  a?  U[        [        S[        S5      -  -   [        SS9:X  a  UR                  " 5       [        :X  d   eg )Nr   r   rP   r   rQ   r   r   r   T)convertr  rU   )
r   r   clear_denomsrF  rP   rQ   rO   r   rs   rU   )r:  r   s     r   test_Poly_clear_denomsr    s   q1ua.--/KEA:$$	Aq# #'??#4#:; ; qsQw"//1KEA:$$	Aq# #'??#4#:; ; qAvz1-::<KEA:$$	!Q$
Aq#" "&*oo&72a5&@A A qsQw"///=KEA:$$	Aq# #'??#4#:; ; qsQw"///=KEA:$$	Aq#" "&*oo&72a5&@A A qsT!W}a5BBDKEA:$$	Ad1gIq#' '+/??+<+BC C 	!d1gq''3|D|'A EA:$$	Ad1gIq#' '+/??+<+BC C+Br   c                     [        [        S-  [        -  S-   [        5      n [        [        S-  [        -   [        5      nU R                  U5      [        [        S-  [        -   [        5      [        [        [        S-  -  [        S-  -   [        5      4:X  d   eU R	                  [
        5      n UR	                  [
        5      nU R                  U5      X4:X  d   eg )Nr   r   r   )r   r   r   rat_clear_denomsr  rU   ru  s     r   test_Poly_rat_clear_denomsr   !  s    QT!VaZAQTAXqAa 	adQh	D1a4!Q$234 4 4 	
RA	RAa QF***r   c                  \   [        SS[        S5      S-  -  -  SSS[        S5      -  -   [        S5      S-  -  -  S	[        S5      -  SS[        S5      -  -   [        S5      S-  -  -  -   -  S
S[        S5      S-  -  -  S[        S5      S-  -  -  SS[        S5      -  -   [        S5      S-  -  -  SSS[        S5      -  -   [        S5      S-  -  -  S	[        S5      -  SS[        S5      -  -   [        S5      S-  -  -  -   -  -
  S
S[        S5      S-  -  -  SS[        S5      -  -   [        S5      S-  -  -  SSS[        S5      -  -   [        S5      S-  -  -  S	[        S5      -  SS[        S5      -  -   [        S5      S-  -  -  -   -  -   SS[        S5      S-  -  -  S[        S5      S-  -  -  SSS[        S5      -  -   [        S5      S-  -  -  S	[        S5      -  SS[        S5      -  -   [        S5      S-  -  -  -   -  -   [        5      n U [        S[        SS9:X  d   eg )Nlwf8*- r  r   r   l   >< i^     i#  l   4$isDl   R r   r  l   wf8*- r   rU   r   )r   rm   rs   r   r   s    r   test_issue_20427r  .  s   b1Q46l*OUDJ>A$q&=" -"$1$t*$<eDJ?A$q&>" %"-" #%0QqT!V%<Q1a[%H%
d4j.KaDFJ$ &$%4ec$t*n6L	
1a6 & d+USd^-CqtAv,NN&O&PP
 b1Q46l
"ECT
N$:ad1f#E
ET$Z/1Q46::]T
>CT
N*ad1f5>6 	677 :I	!QJ :AaDF:,ec$t*n.D!Q-OO
T

"ECT
N$:ad1f#E
EF:G	G IJ		KA Q$''''r   c                  T   [        [        S-   5      R                  5       [        [        S-  S-  [        -   5      :X  d   e[        [        S-   5      R                  [        5      [        [        S-  S-  [        -   5      :X  d   e[        [        S-   5      R                  [        S45      [        [        S-  S-  [        -   5      :X  d   e[        [        [        -  S-   5      R                  [        5      [        [        S-  [        -  S-  [        -   5      :X  d   e[        [        [        -  S-   5      R                  [        5      [        [        [        S-  -  S-  [        -   5      :X  d   e[        [        [        -  S-   5      R                  [        [        5      [        [        S-  [        -  S-  [        S-  S-  -   5      :X  d   e[        [        [        -  S-   5      R                  [        [        5      [        [        [        S-  -  S-  [        S-  S-  -   5      :X  d   e[        [        [        -  S-   5      R                  [        S45      [        [        S-  [        -  S-  [        S-  S-  -   5      :X  d   e[        [        [        -  S-   5      R                  [        S45      [        [        [        S-  -  S-  [        S-  S-  -   5      :X  d   e[        [        [        -  S-   5      R                  [        [        5      [        [        S-  [        S-  -  S-  [        [        -  -   5      :X  d   e[        [        [        -  S-   5      R                  [        [        5      [        [        S-  [        S-  -  S-  [        [        -  -   5      :X  d   eg )Nr   r   r   r  r>  )r   r   	integrater   r   r   r   test_Poly_integrater  <  s   A;  "d1a46A:&6666A;  #tAqDFQJ'7777A;  !Q(DAa!,<<<<!a=""1%ad1fQhl);;;;!a=""1%a1fQhl);;;;!a=""1a(DAaAqDF1B,CCCC!a=""1a(D1a4AqDF1B,CCCC!a=""Aq6*d1a46!8ad1f3D.EEEE!a=""Aq6*d1QT6!8ad1f3D.EEEE!a=""1a(DAad1qs1B,CCCC!a=""1a(DAad1qs1B,CCCCr   c                     [        [        S-  [        -   5      R                  5       [        S[        -  S-   5      :X  d   e[        [        S-  [        -   5      R                  [        5      [        S[        -  S-   5      :X  d   e[        [        S-  [        -   5      R                  [        S45      [        S[        -  S-   5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        5      [        S[        -  [        S-  -  [        -   5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        5      [        S[        S-  -  [        -  [        -   5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        [        5      [        S[        S-  -  [        [        5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        [        5      [        S[        S-  -  [        [        5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        S45      [        S[        S-  -  [        [        5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        S45      [        S[        S-  -  [        [        5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        [        5      [        S[        -  [        -  S-   5      :X  d   e[        [        S-  [        S-  -  [        [        -  -   5      R                  [        [        5      [        S[        -  [        -  S-   5      :X  d   eg )Nr   r   r>  )r   r   ra   r   r   r   r   test_Poly_diffr  N  s   1q> D1qM1111q>q!T!A#']2221q>1v&$qsQw-7771QT	AaC %%a(D1QTA,>>>>1QT	AaC %%a(D1a4A,>>>>1QT	AaC %%a+tAadFAq/AAAA1QT	AaC %%a+tAadFAq/AAAA1QT	AaC %%q!f-a1fa1CCCC1QT	AaC %%q!f-a1fa1CCCC1QT	AaC %%a+tAaCEAI>>>1QT	AaC %%a+tAaCEAI>>>r   c                     [        [        [        S-  [        -   5      5      [        S[        -  S-   5      :X  d   e[        [        [        S-  [        -   5      [        SS9[        [        [        S-  [        -   5      [        5      :X  d   e[        [        [        S-  [        -   5      [        5      R	                  5       [        S[        -  S-   5      :X  d   eg )Nr   r   Fevaluate)ra   r   r   r`   doitr   r   r   test_issue_9585r  `  s    QTAX4!a=000QTAXE241q>1%& & &d1a4!8na(--/4!a=@@@r   c                     [        S[        5      R                  S5      S:X  d   e[        S[        5      R                  S5      S:X  d   e[        [        [        5      R                  S5      S:X  d   e[        S[        5      R                  SS5      S:X  d   e[        S[        5      R                  SS5      S:X  d   e[        [        [        5      R                  SS5      S:X  d   e[        S[        5      R                  [        S5      S:X  d   e[        S[        5      R                  [        S5      S:X  d   e[        [        [        5      R                  [        S5      S:X  d   e[        S[        5      R                  SS5      S:X  d   e[        S[        5      R                  SS5      S:X  d   e[        [        [        5      R                  SS5      S:X  d   e[        [        S 5        [        [        S 5        [        [        S 5        [        S[        [
        5      R                  S5      [        S[
        5      :X  d   e[        S	[
        -  [        [
        5      R                  S5      [        S	[
        -  [
        5      :X  d   e[        [        [
        -  [        [
        5      R                  S5      [        S[
        -  [
        5      :X  d   e[        S[        [
        5      R                  [        S5      [        S[
        5      :X  d   e[        S	[
        -  [        [
        5      R                  [        S5      [        S	[
        -  [
        5      :X  d   e[        [        [
        -  [        [
        5      R                  [        S5      [        S[
        -  [
        5      :X  d   e[        S[        [
        5      R                  [
        S5      [        S[        5      :X  d   e[        S	[
        -  [        [
        5      R                  [
        S5      [        S
[        5      :X  d   e[        [        [
        -  [        [
        5      R                  [
        S5      [        S[        -  [        5      :X  d   e[        [        [
        -  [
        -   [        [
        5      R                  [        S05      [        S[
        -  [
        5      :X  d   e[        [        [
        -  [
        -   [        [
        5      R                  [
        S05      [        S[        -  S-   [        5      :X  d   e[        [        [
        -  [
        -   [        [
        5      R                  [        S[
        S05      S:X  d   e[        [        [
        -  [
        -   [        [
        5      R                  [        S[
        S05      S:X  d   e[        [        [
        -  [
        -   [        [
        5      R                  S5      S:X  d   e[        [        [
        -  [
        -   [        [
        5      R                  SS/5      S:X  d   e[        [        S-   SS9R                  [        R                  5      [        SS	5      :X  d   e[        [        S-   SS9R                  [        S	5      5      [        S	5      S-   :X  d   e[        [        S 5        [        [        S 5        [        S5      n S	U -  [        -  S	U -  -
  [        S	-  -   S-   [        S	-  S	[        -  -
  S-   -  n[        [        S	-  U S-
  [        -  -   U -
  S-   [        SS9nUR                  [        S-   [        S-
  -  5      U:X  d   e[        [        S	-  U S-
  [        -  -   U -
  S-   [        [
        SS9nUR                  [        S-   [        S-
  -  5      [        U[
        SS9:X  d   eg )Nr   r   r   r   c                  B    [        S[        5      R                  SS5      $ Nr   r   r   r   evalr   r   r   r    test_Poly_eval.<locals>.<lambda>x  s    DAJOOAq$9r   c                  J    [        S[        5      R                  [        S5      $ r  )r   r   r  r   r   r   r   r   r  y  s    DAJOOAq$9r   c                  B    [        S[        5      R                  SS5      $ )Nr   r   r   r  r   r   r   r   r  z  s    DAJOOC$;r   {   r   r  r  r  rr  rs  )r  r   rP   r   r   c                  n    [        [        [        -  [        -   [        [        5      R                  S5      $ )N)r  r   r  )r   r   r   r  r   r   r   r   r    s     tAaC!GQ277	Br   c                  \    [        [        S-   SS9R                  [        R                  SS9$ )Nr   rP   r   Fauto)r   r   r  rm   Halfr   r   r   r   r    s#    QU4 8 = =aff5 = Qr   alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r  r|   rG   r   rm   r  rh   rs   r  rI   rn   r   )r  resultr   r   s       r   test_Poly_evalr  g  s   1:??1"""1:??1"""1:??1"""1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??1a A%%%1:??3"a'''1:??3"a'''1:??3"a'''
?9:
?9:
?;<Q?"d3l222!Q?"d1Q3l222!Q?"d1Q3l222Q?1%c1555!Q?1%ac1555!Q?1%ac1555Q?1%c1555!Q?1%b!444!Q?1%ac1555!aA##QF+tAaC|;;;!aA##QF+tAaC!GQ/????!aA##Q1aL1R777!aA##Q1aL1R777!aA##F+r111!aA##QF+r111Ad#((0HQNBBBAd#((a1T!Wq[@@@
:BC
;QR 7OEgai!E'!AqD(1,q!taczA~>FQTUQYM!E)A-qEA661q51q5/"f,,,QTUQYM!E)A-q!KHA661q51q5/"d61]&KKKKr   c                  &   [        S[        -  [        -  S[        -  -   [        -   S[        -  -   5      n U " S5      [        S[        -  S[        -  -   S-   5      :X  d   eU " SS5      [        S[        -  S-   5      :X  d   eU " SSS5      S:X  d   eg )Nr   r   r   r  r:  r   rv  )r   r   r   r   r   s    r   test_Poly___call__r     s    QqSUQqS[1_qs"#AQ44!ac	A&&&&Q7d1Q38n$$$Q1:r   c            	      4   [        [        S-
  [        S-  S-
  /[        5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        [        S-
  [        5      [        S-  S-
  /[        5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        S-
  [        [        S-  S-
  [        5      /[        5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        [        S-
  [        5      [        [        S-  S-
  [        5      /[        5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        S-
  [        S-  S-
  /[        [        5      S   [        [        S-
  [        [        5      [        [        S-  S-
  [        [        5      /:X  d   e[        [        [        S-
  [        5      [        S-  S-
  /[        [        5      S   [        [        S-
  [        [        5      [        [        S-  S-
  [        [        5      /:X  d   e[        [        S-
  [        [        S-  S-
  [        5      /[        [        5      S   [        [        S-
  [        [        5      [        [        S-  S-
  [        [        5      /:X  d   e[        [        [        S-
  [        5      [        [        S-  S-
  [        5      /[        [        5      S   [        [        S-
  [        [        5      [        [        S-  S-
  [        [        5      /:X  d   e[        [        S-
  [        S-  S-
  /5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        [        S-
  [        5      [        S-  S-
  /5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        S-
  [        [        S-  S-
  [        5      /5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        [        [        S-
  [        5      [        [        S-  S-
  [        5      /5      S   [        [        S-
  [        5      [        [        S-  S-
  [        5      /:X  d   e[        S[        S-  S-
  /5      S   [        S[        5      [        [        S-  S-
  [        5      /:X  d   e[        S[        S-  S-
  /5      S   [        S[        5      [        [        S-  S-
  [        5      /:X  d   e[        S[        [        S-  S-
  [        5      /5      S   [        S[        5      [        [        S-  S-
  [        5      /:X  d   e[        S[        [        S-  S-
  [        5      /5      S   [        S[        5      [        [        S-  S-
  [        5      /:X  d   e[        [        S-  S-
  S/5      S   [        [        S-  S-
  [        5      [        S[        5      /:X  d   e[        [        S-  S-
  S/5      S   [        [        S-  S-
  [        5      [        S[        5      /:X  d   e[        [        [        S-  S-
  [        5      S/5      S   [        [        S-  S-
  [        5      [        S[        5      /:X  d   e[        [        [        S-  S-
  [        5      S/5      S   [        [        S-  S-
  [        5      [        S[        5      /:X  d   e[        [        [        [        [        5      [        [        [        [        5      /[        [        SS9S   [        [        [        [        SS9[        [        [        [        SS9/:X  d   e[	        [
        S 5        g )	Nr   r   r   rX   r+  rP   r   c                      [        SS/5      $ r  )r   r   r   r   r   .test_parallel_poly_from_expr.<locals>.<lambda>  s    '>1v'Fr   )r   r   r   r   r|   rA   r   r   r   test_parallel_poly_from_exprr$    s   "	
Q1q1!%)!a%^T!Q$(A5F$GH H H"	a!eQA"A''(*.21q5!nd1a4!8Q>O-PQ Q Q"	
QQTAXq!"A''(*.21q5!nd1a4!8Q>O-PQ Q Q"D	Aq%1q!$$&'(**+-15a!eQadQhPQAR0ST T T #	
Q1q1a!!"$(,QUAq(941q!Q;O'PQ Q Q"D	Aq%a4!8$$$%'+/Aq!+<d1a4!8QPQ>R*ST T T"AE4	1q!, $! $(Q1$5tAqD1Ha7K#LM M M"DQND	1q!5 $! $(Q1$5tAqD1Ha7K#LM M M #	
Q1q"&q1ua.$q!tax2C!DE E E"	a!eQA"$$%'+/Aq>41q!;L*MN N N"	
QQTAXq!"$$%'+/Aq>41q!;L*MN N N"	a!eQadQh*+--.048QNDAPQSTDU3VW W W #	
AqD1H"1aj$q!tax*;<= = ="	
AqD1H"1aj$q!tax*;<= = ="	
DA1  !#'+Aqz41q!3D&EF F F"	
DA1  !#'+Aqz41q!3D&EF F F #	
A1"1a4!8Q/a<= = ="	
A1"1a4!8Q/a<= = ="	adQh	A  !#'+AqD1Ha'8$q!*&EF F F"	adQh	A  !#'+AqD1Ha'8$q!*&EF F F #DAqM41a=#A1auUVWX	aAd	#T!Q$%?@A A A FGr   c                     [         S-  [        S-  -
  [         [        -
  p[         [        -   Sp2XX#4 Vs/ s H  n[        U[         [        5      PM     snu  pVpxUR                  U5      Xx4:X  d   eUR	                  U5      U:X  d   eUR                  U5      U:X  d   eUR                  U5      U:X  d   e[        X5      X#4:X  d   e[	        X5      U:X  d   e[        X5      U:X  d   e[        X5      U:X  d   e[        X[         [        5      X#4:X  d   e[	        X[         [        5      U:X  d   e[        X[         [        5      U:X  d   e[        X[         [        5      U:X  d   e[        X[         [        45      X#4:X  d   e[	        X[         [        45      U:X  d   e[        X[         [        45      U:X  d   e[        X[         [        45      U:X  d   e[        XV5      Xx4:X  d   e[	        XV5      U:X  d   e[        XV5      U:X  d   e[        XV5      U:X  d   e[        XSS9Xx4:X  d   e[	        XSS9U:X  d   e[        XSS9U:X  d   e[        XSS9U:X  d   e[        XVSS9X#4:X  d   e[	        XVSS9U:X  d   e[        XVSS9U:X  d   e[        XVSS9U:X  d   e[        [        S 5        [        [        S 5        [        [        S 5        [        [        S	 5        g s  snf )
Nr   r   TpolysFc                      [        SS5      $ Nr>  r   )r   r   r   r   r   test_pdiv.<locals>.<lambda>  
    d1ajr   c                      [        SS5      $ r)  )r   r   r   r   r   r*    r+  r   c                      [        SS5      $ r)  )r   r   r   r   r   r*    r+  r   c                      [        SS5      $ r)  )r   r   r   r   r   r*  	  s
    fQlr   )	r   r   r   r   r   r   r   r|   rB   )	r   r   r   r  r   re  GQRs	            r   	test_pdivr2    s   a4!Q$;Aqq5!q+,,8,Q41a=,8JA!66!966!9>>66!9>>88A;!:!:??:??!<1av%%%aq   aq   !1"""q!f!'''q!f"""q!f"""!A1$$$:!:??:??!<1D!aV+++D!Q&&&D!Q&&&!d#q(((E"qf,,,E"a'''E"a'''!e$)))
01
01
01
23Q 9s   K%c                    ^^ [         S-  [        S-  -
  [         [        -
  smm[         [        -   SpTTX4 Vs/ s H  n[        U[         [        5      PM     snu  p4pVUR                  U5      XV4:X  d   eUR	                  U5      U:X  d   eUR                  U5      U:X  d   eUR                  U5      U:X  d   e[        TT5      X4:X  d   e[	        TT5      U:X  d   e[        TT5      U :X  d   e[        TT5      U :X  d   e[        TT[         [        5      X4:X  d   e[	        TT[         [        5      U:X  d   e[        TT[         [        5      U :X  d   e[        TT[         [        5      U :X  d   e[        TT[         [        45      X4:X  d   e[	        TT[         [        45      U:X  d   e[        TT[         [        45      U :X  d   e[        TT[         [        45      U :X  d   e[        X45      XV4:X  d   e[	        X45      U:X  d   e[        X45      U:X  d   e[        X45      U:X  d   e[        TTSS9XV4:X  d   e[	        TTSS9U:X  d   e[        TTSS9U:X  d   e[        TTSS9U:X  d   e[        X4SS9X4:X  d   e[	        X4SS9U:X  d   e[        X4SS9U :X  d   e[        X4SS9U :X  d   e[        [        S 5        [        [        S 5        [        [        S 5        [        [        S	 5        [         S-  S
-   S[         -  S-
  smmS[         S-  S
-   p[         S-  S
-   Sp[        TT5      X4:X  d   e[        TTSS9X4:X  d   e[        TTSS9Xx4:X  d   e[        TT[        S9Xx4:X  d   e[        TT[        S9X4:X  d   e[        TT[        SS9X4:X  d   e[        TT[        SS9Xx4:X  d   e[        TT[        SS9X4:X  d   e[        TT[        SS9X4:X  d   e[	        TT5      U
:X  d   e[	        TTSS9U
:X  d   e[	        TTSS9U:X  d   e[	        TT[        S9U:X  d   e[	        TT[        S9U
:X  d   e[	        TT[        SS9U
:X  d   e[	        TT[        SS9U:X  d   e[	        TT[        SS9U
:X  d   e[	        TT[        SS9U
:X  d   e[        TT5      U	:X  d   e[        TTSS9U	:X  d   e[        TTSS9U:X  d   e[        TT[        S9U:X  d   e[        TT[        S9U	:X  d   e[        TT[        SS9U	:X  d   e[        TT[        SS9U:X  d   e[        TT[        SS9U	:X  d   e[        TT[        SS9U	:X  d   e[         S-  S[         -  [         S-  smmn [        TT5      U :X  d   e[        TTSS9U :X  d   e[        [        UU4S j5        [        [        UU4S j5        [        TT[        S9U :X  d   e[        TT[        SS9U :X  d   e[        [        UU4S j5        [        TT[        SS9U :X  d   e[        TT[        SS9U :X  d   e[        [         S-  5      [        [         5      smmTR                  T5      u  pU R                  " 5       R                  (       a  UR                  5       R                  (       d   eTR	                  T5      nUR                  5       R                  (       d   eTR                  T5      n U R                  " 5       R                  (       d   eTR                  T5      n U R                  " 5       R                  (       d   e[        [         [        -   [         5      [        S[         -  [        -   [         5      smmTR                  T5      u  pU R                  " 5       R                  (       a  UR                  5       R                  (       d   e[        SS[        -  -   [         [         S9n[        S
[        -
  [         [         S9n UR                  " U SS9[        S[         SS9[        SS[        -  -   [         SS94:X  d   eUR                  " U SS9[        [#        S
5      * S-  S[        -  S-  -   [         SS9[        S[         SS94:X  d   eS[         S-  -  S[         -  -   S-   mS[         -  S-   m[        TT[        S9ST4:X  d   eg s  snf )Nr   r   Tr&  Fc                      [        SS5      $ r)  )r   r   r   r   r   test_div.<locals>.<lambda>5  
    c!Qir   c                      [        SS5      $ r)  )r   r   r   r   r   r5  6  r6  r   c                      [        SS5      $ r)  )r   r   r   r   r   r5  7  r6  r   c                      [        SS5      $ r)  r   r   r   r   r   r5  8  s
    eAqkr   r   r>  r   r  r   r   r  c                     > [        T TSS9$ NFr  r:  ru  s   r   r   r5  a  s    a(?r   c                  "   > [        T T[        S9$ r   r   rP   ru  s   r   r   r5  b  s    a2(>r   c                  $   > [        T T[        SS9$ )NFr;  r?  ru  s   r   r   r5  e  s    a2E(Jr   r   rR   rS   r;  )r   r   r   r   r   r   r   r|   rB   rP   rQ   r@   rF  is_ZZis_Fracrf   rR   rm   )r   r  r   re  r/  r0  r1  qzrzqqrqr   r   r   s               @@r   test_divrG    s   a4!Q$;ADAqq5!q+,a,8,Q41a=,8JA!558v558q==558q==771:??q!9q!9>>q!9>>A;!q!Q?qf$$$q!Q?aq!Q?aAq!!!!q!aV&&&q!aV!!!q!aV!!!A1v!###q9q9>>q9>>;!q!4 QF***q!4 A%%%q!4 A%%%AT"a'''q5!aV+++q5!Q&&&q5!Q&&&U#q(((
/0
/0
/0
12a4!8QqS1WDAq1qqS1Waq!9   q!$B8+++q!% RH,,,q!BB8+++q!BB8+++q!BT*rh666q!BU+x777q!BT*rh666q!BU+x777q!9??q!$2%%%q!% B&&&q!B2%%%q!B2%%%q!BT*b000q!BU+r111q!BT*b000q!BU+r111q!9??q!$2%%%q!% B&&&q!B2%%%q!B2%%%q!BT*b000q!BU+r111q!BT*b000q!BU+r111dAaC1GAq!A;!AD!Q&&&
 ?@
 >?Ab!Q&&&Abt,111
 JKAbt,111Abu-2221:tAwDAq558DA<<>ALLN$8$888	aA<<>	aA<<>	
A<<>!Q<ac!eQDAq558DA<<>!!alln&<&<<< 	QqsUAd#AQqS!D!A55	a6	"DQqS!F$CDE E E55	qteAg!Aoq	0$q!F2KLM M M 	
!Q$AA	!aAq!BAq6)))e 9s   cc                  n    [        [        S[        -  5      u  p[        U S-
  5      S:  d   eUS:X  d   eg )Ng>,p ?g3!	@g+=r   )r   r   r   )r   r  s     r   test_issue_7864rI    s:    q"1$%DAq##$u,,,6M6r   c            	         S[         -  [         S-  S-
  p[         S-  [        SS5      SpCnXX#U4 Vs/ s H  n[        U[         SS9PM     snu  pgpn
UR                  U5      X4:X  d   eUR	                  U5      XU
4:X  d   eUR                  U5      U:X  d   e[        X5      X$4:X  d   e[	        X5      X#U4:X  d   e[        X5      U:X  d   e[        X[         5      X$4:X  d   e[	        X[         5      X#U4:X  d   e[        X[         5      U:X  d   e[        X[         45      X$4:X  d   e[	        X[         45      X#U4:X  d   e[        X[         45      U:X  d   e[        Xg5      X4:X  d   e[	        Xg5      XU
4:X  d   e[        Xg5      U:X  d   e[        XSS	9X4:X  d   e[	        XSS	9XU
4:X  d   e[        XSS	9U:X  d   e[        XgS
S	9X$4:X  d   e[	        XgS
S	9X#U4:X  d   e[        XgS
S	9U:X  d   e[        SS5      S:X  d   e[	        SS5      S:X  d   e[        SS5      S:X  d   e[        [        S 5        [        [        S 5        [        [        S 5        g s  snf )Nr   r  r  r   r   rQ   r   Tr&  FrB  i  )r>  )rK  r   r>  r   r   r   c                  :    [        [        S-   S[        -  S-   SS9$ Nr   r   Fr  )r   r   r   r   r   r   test_gcdex.<locals>.<lambda>  s    
1q5!A#' Fr   c                  :    [        [        S-   S[        -  S-   SS9$ rM  )r   r   r   r   r   r   rN    s    a!eQqS1W5 Ar   c                  :    [        [        S-   S[        -  S-   SS9$ rM  )r   r   r   r   r   r   rN    s    q1uacAgE Br   )r   rh   r   r   r   r   r|   rI   )r   r   sr   r   r   re  r/  rm   THs              r   
test_gcdexrT    s   Q31r	qdHR$a!A89aAH!d1a-HMA!<<?qf$$$771:!"""88A;!av%%%;1)###!<1aA1&(((q>aAY&&&!?aaQD!aV+++tq	)))!"""av%%%;1)###!<1a$'A6111T"qQi///!d#q(((a%(QF222U#ay000!e$)))c4 H,,,d{***!Q<1
;FG
;AB
;BCI Is   I#c                     [        S[        S-  S-  -
  [        S-  S-  -   [        S-  S-  -
  5      n [        S[        S-  -  S-  S[        S-  -  S-  -   [        S-  S-  -   S-   5      nU R                  S	5      U:X  d   eg )
Nr   r   r>  r  r  i  rf  r   r  )r   r   revertru  s     r   test_revertrW    s    QAaZ!Q$r'!AqDH,-AR1WS[1QT6"9$q!tAv-12A88A;!r   c                     [         S-  S[         -  -
  S-   [         S-  S-
  S[         -  S-
  p!n [        U 5      [        U5      [        U5      pTnUR                  U5      X4U/:X  d   e[        X5      XU/:X  d   e[        X[         5      XU/:X  d   e[        X[         45      XU/:X  d   e[        X45      X4U/:X  d   e[        XSS9X4U/:X  d   e[        X4SS9XU/:X  d   e[        [        S 5        g )Nr   r   Tr&  Fc                      [        SS5      $ r)  )r   r   r   r   r   $test_subresultants.<locals>.<lambda>  s    mAq&9r   )r   r   r   r|   rB   r   r   r   re  r/  rS  s         r   test_subresultantsr\    s    dQqSj1nadQh!a!A1gtAwQ!A??1!***1)+++q!aAY...t$q	1111)+++T*qQi777U+ay888
9:r   c                  v   [         S-  S[         -  -
  S-   [         S-  S-
  Sp!n [        U 5      [        U5      pCUR                  U5      U:X  d   e[        X5      U:X  d   e[        X[         5      U:X  d   e[        X[         45      U:X  d   e[        X45      U:X  d   e[        XSS9U:X  d   e[        X4SS9U:X  d   e[        XSS9X US[         -  S-
  /4:X  d   e[         [        -
  [         [        -
  [        [        -
  p!n [        U 5      [        U5      [        U5      pTnUR                  U5      U:X  d   e[        X5      U:X  d   e[        X[         5      U:X  d   e[        X[         45      U:X  d   e[        X45      U:X  d   e[        XSS9U:X  d   e[        X4SS9U:X  d   e[        [        S 5        g )	Nr   r   r   Tr&  F)
includePRSc                      [        SS5      $ r)  )r   r   r   r   r    test_resultant.<locals>.<lambda>  s
    i1or   )r   r   r   r   r   r|   rB   r[  s         r   test_resultantra    s   dQqSj1nadQh!A7DGq;;q>QQ?aQ1"""QA4 A%%%Q?aQ&!+++Q'1,,,Qd+q!A#'?/CCCC!eQUAE!A1gtAwQ!A;;q>QQ?aQ1"""QA4 A%%%Q?aQ&!+++Q'1,,,
56r   c                  z   [         S-  S[         S-  -  -   S[         -  -   S-
  Sp[        U 5      nUR                  5       U:X  d   e[        U 5      U:X  d   e[        U [         5      U:X  d   e[        U [         45      U:X  d   e[        U5      U:X  d   e[        U SS9U:X  d   e[        USS9U:X  d   e[        [         S-  -  [        [         -  -   [
        -   [        S-  S	[        -  [
        -  -
  p[        U 5      [        U5      p2UR                  5       U:X  d   e[        U 5      U:X  d   e[        U [         [        [        [
        5      U:X  d   e[        U [         [        [        [
        45      U:X  d   e[        U5      U:X  d   e[        U SS9U:X  d   e[        USS9U:X  d   e[        [        S
 5        g )Nr   r   r  r  ipTr&  Fr>  c                      [        S5      $ Nr>  )r   r   r   r   r   #test_discriminant.<locals>.<lambda>  s    l1or   )r   r   r   r   r   r   r|   rB   r   r   re  r/  s       r   test_discriminantrg    s   a4!AqD&=1Q3#VqQA>>q   ?a1"""A4 A%%%?a&!+++'1,,,QT6AaC<!QTAaCE\q7DGq>>q   ?a1aA&!+++Aq!Q<(A---?a&!+++'1,,,
56r   c                     [        [        S-   [        S-   -  [        5      n [        U R                  5       5      SS/:X  d   eU R	                  5       S:X  d   e[        [        S-  S[        S-  -  -
  S-   [        5      n U R                  S5      n[        U R                  U5      5      / SQ:X  d   eU R	                  U5      S:X  d   eg )Nr   r   r   r>  r   r  )r   r   r>  )r   r   sorteddispersionset
dispersionshift)fpgps     r   test_dispersionro    s     
q1uq1uoq	!B"""$%!Q///==?a	adQq!tVma	#B	"B"""2&'9444==!!!r   c                     [         S-  S-
  [         S-  S-
  [         S-  S[         -  -
  S-   /n [        U 5      [         S-
  :X  d   e[        U SS9[        [         S-
  5      :X  d   e[        / 5      S:X  d   e[        SS/5      S:X  d   e[        / SQ5      S:X  d   e[        [         [        S-   -  [         [        -  -
  [         S-  -
  /5      S:X  d   e[        / [         5      nUR                  (       a  U[
        R                  L d   e[        / [         SS9nUR                  (       a  UR                  (       d   e[        S5      n[        X"* /5      [        U* U/5      s=:X  a  U:X  d   e   e[        [        S	 5        g )
Nr   r   r   Tr&  r   r>  r  r  ry  c                      [        / SS9$ NTr&  )r   r   r   r   r   test_gcd_list.<locals>.<lambda>#      hr&>r   )r   r   r   r   	is_Numberrm   r   is_Polyr  rs   r|   rB   )re  r   r   s      r   test_gcd_listrx    sR   	
A1a4!8QTAaCZ!^,AA;!a%AT"d1q5k111B<1QFq   I!###QBZ!A#%",-.!333
2q/C==SAFF]**
2q
%C;;3;;&&QAQG1"a 16Q66666
>?r   c                  L   [         S-  S-
  [         S-  S-
  [         S-  S[         -  -
  S-   /n [        U 5      [         S-  [         S-  -
  S[         S-  -  -
  [         S-  -
  [         -   S-   :X  d   e[        U SS9[        [         S-  [         S-  -
  S[         S-  -  -
  [         S-  -
  [         -   S-   5      :X  d   e[        / 5      S:X  d   e[        SS/5      S:X  d   e[        / SQ5      S	:X  d   e[        [         [        S
-   -  [         [        -  -
  [         S
-  -
  /5      S:X  d   e[        / [         5      nUR                  (       a  U[
        R                  L d   e[        / [         SS9nUR                  (       a  UR                  (       d   e[        [        S 5        g )Nr   r   r   r   r>  Tr&  rq  r  ry  r   c                      [        / SS9$ rs  )r    r   r   r   r   test_lcm_list.<locals>.<lambda>8  ru  r   )r   r    r   r   rv  rm   Onerw  r  r|   rB   )re  r   s     r   test_lcm_listr}  &  sm   	
A1a4!8QTAaCZ!^,AA;!Q$A+!Q$.A59A====AT"d1a4!Q$;1a4+?!Q$+F+JQ+N&OOOOB<1QFq   I"$$$QBZ!A#%",-.!333
2q/C==SAEE\))
2q
%C;;3::%%
>?r   c                  `   [         S-  S-
  [         S-  S-
  p[         S-  [         -   S-   [         S-   p2[         S-
  [         S-  [         S-  -   [         -
  S-
  pTXX#XE4 Vs/ s H  n[        U5      PM     snu  pxppUR                  U5      XU
4:X  d   eUR                  U5      U:X  d   eUR	                  U5      U:X  d   e[        X5      XBU4:X  d   e[        X5      U:X  d   e[	        X5      U:X  d   e[        X[         5      XBU4:X  d   e[        X[         5      U:X  d   e[	        X[         5      U:X  d   e[        X[         45      XBU4:X  d   e[        X[         45      U:X  d   e[	        X[         45      U:X  d   e[        Xx5      XU
4:X  d   e[        Xx5      U:X  d   e[	        Xx5      U:X  d   e[        XSS9XU
4:X  d   e[        XSS9U:X  d   e[	        XSS9U:X  d   e[        XxSS9XBU4:X  d   e[        XxSS9U:X  d   e[	        XxSS9U:X  d   eS[         S-  -  S-
  S[         -  S-
  pUS[         -  S-   Sp2n[        X5      XBU4:X  d   e[        X5      U:X  d   e[	        X5      U :X  d   eS[         S-  -  S-
  S[         -  S-
  pUS[         -  S-   Sp2n[        X5      XBU4:X  d   e[        X5      U:X  d   e[	        X5      U :X  d   e[        S	S
5      S:X  d   e[        S	S
5      S:X  d   e[	        S	S
5      S:X  d   e[         S-  S[         -  -
  S-
  [         S-  S[         S-  -  -
  [         -   S-
  p[         S-  S[         S-  -  -
  S[         S-  -  -
  S[         -  -
  S-
  n[         S-
  [         S-   [         S-  S-   p2n[        XSS9XBU4:X  d   e[        XSS9U:X  d   e[	        XSS9U:X  d   e[         S-  S	[         -  -   S-   [         S-  S[         S-  -  -   [         -   S-   p[         S-  S	[         S-  -  -   S	[         S-  -  -   S	[         -  -   S-   n[         S-   [         S-   [         S-  S-   p2n[        XSSS9XBU4:X  d   e[        XSSS9U:X  d   e[	        XSSS9U:X  d   e[        S5      [        S5      * p[        X5      [        X5      s=:X  a  [        S5      :X  d   e   e[        S5      [        S5      * p[        X5      [        X5      s=:X  a  [        S5      :X  d   e   e[        [        [         S-
  [         5      [        [        [         -  [         5      5      [        S[         [        S9:X  d   e[        [        S 5        [        [        S 5        [        S[         5      n [        S[         5      n[	        X5      [        S[         5      :X  d   e[        S[         5      n [        SS/[         5      nX4 HK  n[	        US5      S:X  d   e[	        SU5      S:X  d   e[	        UU 5      S:X  d   e[	        U U5      S:X  a  MK   e   S[         S-  -  [         -   S-   n [        U [        S9n[        U [        S9nUR                  U5      U:X  d   eUR	                  U5      U:X  d   eUR                  U5      UR                  5       :X  d   eUR	                  U5      UR                  5       :X  d   e[        X 5      U :X  d   e[	        X 5      U :X  d   e[        X [        S9[        U 5      :X  d   e[	        X [        S9[        U 5      :X  d   eg s  snf )Nr   r   r   r>  Tr&  Fr   r  r  )r   r>  r   r  r  r   r   r@  r  r   c                       [        [        5      $ r   )r   r   r   r   r   r   test_gcd.<locals>.<lambda>      c!fr   c                       [        [        5      $ r   )r   r   r   r   r   r   r    r  r   r   r   )r   r   r   r   r   rs   rf   rR   r|   r  rP   rQ   r"   )r   r   rQ  r   r   r  r   re  r/  rm   rR  rS  r1  lr   r   ipfzpfqs                      r   test_gcdr  ;  s   a4!8QTAXqa4!8a<Qqq5!Q$A+/A%q+,q*<>*<Qa*<>A!;;q>aAY&&&558q==558q==Q?qQi'''q9>>q9>>Q1!***qQ<1qQ<1QA4 Q1I---qaT?aqaT?aQ?qQi'''q9>>q9>>Q&1)333q4 A%%%q4 A%%%Q'A!9444q5!Q&&&q5!Q&&&q!t8c>3q53;qQc!AQ?qQi'''q9>>q9>>q!t8c>3q53;qQc!AQ?qQi'''q9>>q9>>Q?i'''q!9>>q!9??a4!A#:>1a4!AqD&=1,q0q	1qAv!Q$1$q(A!eQUAqD1H!AQ2&1)333qR A%%%qR A%%%a4!A#:>1a4!AqD&=1,q0q	1qAv!Q$1$q(A!eQUAqD1H!AQ27A!9DDDqR51Q666qR51Q6667T!WHqq9A	,T!W,,,,,8d2hYqq9A	,T!W,,,,,tAE1~tAaC|,Q$0GGGG
9n%
9n%RAQ
Aq9Q
"""Q
AaVQAV1ayA~~1ayA~~1ayA~~1ayA~~	  	
!Q$
QA
q
C
q
C773<3773<3773<399;&&&773<399;&&&q9>>q9>>qB58+++qB58+++E ?s   \+c            	         [        [        SS5      [        5      (       d   e[        [        S[        -  S5      [        5      (       d   e[        SS5      S:X  d   e[        S[        -  S5      S:X  d   e[        [        [	        SS5      [	        SS5      5      [        5      (       d   e[        [        [	        SS5      [        -  [	        SS5      5      [        5      (       d   e[        [	        SS5      [	        SS5      5      [	        SS5      :X  d   e[        [	        SS5      [        -  [	        SS5      5      S:X  d   e[        [        SS5      [
        5      (       d   e[        [        S[        -  S5      [
        5      (       d   e[        SS5      S:X  d   e[        S[        -  S5      S:X  d   e[        [        SSS	S
9S5      S:X  d   eg )Nr   r  r   r>  r   r4  g      "@r   Fr
  )r   r   rg   r   rh   re   rd   r   r   r   test_gcd_numbers_vs_polysr    s   c!Qi))))c!A#qk7++++q!9>>qsA;!c(1a.(1a.98DDDDc(1a.*HQN;XFFFFx1~x1~.(1a.@@@x1~a!Q0A555c#smU++++c#a%ou----sC=Cs1uc?c!!! s1a%(!,111r   c            
      
   [        S5      S:X  d   e[        S[        5      S:X  d   e[        [        S-
  5      [        S-
  :X  d   e[        [        * S-
  5      [        * S-
  :X  d   e[        S[        -  S-   5      S[        -  S-   :X  d   e[        S[        -  S-   5      [        SS[        -  S-   SS9:X  d   e[        [        S-  [        -  [        [        S-  -  -   5      [        [        -  [        S-  [        S-  -   -  :X  d   e[        S[        S-  -  [        -  S[        -  [        S-  -  -   5      S[        -  [        -  [        S-  [        S-  -   -  :X  d   e[        [        S-  [        -  S-  [        [        S-  -  S-  -   5      [        [        -  S-  [        S-  [        S-  -   -  :X  d   e[        [        S-  [        -  S[        -  [        S-  -  -   5      [        [        -  [        S-  S[        S-  -  -   -  :X  d   e[        S[        S-  -  [        -  S[        -  [        S-  -  -   5      S[        -  [        -  [        S-  S[        S-  -  -   -  :X  d   e[        S[        S-  -  [        -  S-  S[        -  [        S-  -  S-  -   5      [        [        -  [	        SS	5      -  S[        S-  -  S[        S-  -  -   -  :X  d   e[        S
[        S-  -  [        -  S[        -  [        S-  -  -   5      [        [        -  S
[        S-  -  S[        S-  -  -   -  :X  d   e[        [        S
[        -  S-   5      S
[        -  S-   5      (       d   e[        SS[        -  -   [        [        [        -  -   -  SS9S[        -  S-   [        [        -  [        -   -  :X  d   e[        SS[        -  -   [        [        [        SS[        -  -   5      -  -   -  SSS9S[        -  [        S-   -  [        [        S[        S-   SS95      S-   -  :X  d   e[        [        [        [        [        -  -   5      SS9[        [        [        S-   -  5      :X  d   e[        S[        -  S[        -  S[        -  [        -  -   5      n [        U 5      [        S[        -  S[        -  [        S-   -  5      :X  d   e[        U SS9[        S[        -  S[        -  [        S-   -  5      :X  d   e[        [        S 5        g )Nr   r   r   r  r>  Fr
  r   rY  r5  gffffff@rb   T)rb   deepr  c                  &    [        [        S:  5      $ r  )r   r   r   r   r   r    test_terms_gcd.<locals>.<lambda>  s    iA.r   )r   r   rd   r   rh   r]   ru   rl   r   r|   r  r   s    r   test_terms_gcdr    sN   Q<1Q?aQUq1u$$$aR!VQ&&&QqS1W1q(((QqS1WQ!a%!@@@@QT!Va1f_%1adQTk)::::Qq!tVAX!AqD()QqSUAqD1a4K-@@@@QT!VAX!Q$q()QqSUAqD1a4K-@@@@QT!Vac!Q$h&'1Q31qAv+>>>>Qq!tVAX!AqD()QqSUAqD1QT6M-BBBBQq!tVAXaZ!A#ad(1*,-1Xa_1Da1fqQRTUQUvo1VVVVSAXaZ#a%1*,-1c!Q$hQT6I1JJJJIc!eai(#a%!)4444a!A#gAaC(7	
1q1Q37  a!A#gAc!ac'lN 23EM	!QUSQA67!;<= = =SQqS\-Aq1uI   
AaC1qs1u	BR=BqsAaCQK0000Rd#r!A#qsAE{';;;;
9./r   c                     [         S-  S[         S-  -  -   S[         S-  -  -   S[         S-  -  -   S[         -  -   S-   [         S-  [         S-  -
  [         S-  -   [         -
  p[        U 5      [        U5      p2UR                  S5      U:X  d   e[        U S5      U:X  d   e[        U S[         5      U:X  d   e[        U S[         45      U:X  d   e[        US5      U:X  d   e[        U SSS9U:X  d   e[        USSS9U:X  d   eS[         S-  -  S[         S-  -  -   S[         S-  -  -   S[         S-  -  -   S[         -  -   S	-   [         S-  * [         S-  -   [         -
  S	-   p[        U 5      [        U5      p2UR                  S5      U:X  d   e[        U S5      U:X  d   e[        U S[         5      U:X  d   e[        U S[         45      U:X  d   e[        US5      U:X  d   e[        U SSS9U:X  d   e[        USSS9U:X  d   e[        [         S-  S[         -  -   S-   SS
9n U R                  S5      [        [         S-  S	-   SS
9:X  d   eg )Nr   r   r>  r   r  Tr&  Fr   r   )r   r   r!   rf  s       r   
test_truncr    sG   a4!AqD&=1QT6!AadF*QqS014adQTkAqD6H16Lq7DGq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q8H18Lq7DGq771:??A;!Aq>QAt!!!A;!AT"a'''AU#q(((QTAaCZ!^Q'A771:adQh2222r   c                  "   S[         -  S-
  [         [        R                  -
  p[        U SS9[        U5      p2UR	                  5       U:X  d   e[	        U 5      U:X  d   e[	        U [         5      U:X  d   e[	        U [         45      U:X  d   e[	        U5      U:X  d   e[	        U SS9U:X  d   e[	        USS9U:X  d   e[        [        S 5        [	        S[         S-  -  S	[         -  -   S
-   SS9[         S-  S[         -  -   S-   :X  d   e[        [        S 5        [	        S[         S-  -  S[         -  -   S-   5      S[         S-  -  S[         -  -   S-   :X  d   e[	        S[         S-  -  S[         -  -   S
-   SS9[         S-  [         -
  S-   :X  d   eg )Nr   r   rQ   r   Tr&  Fc                      [        S5      $ rd  )r"   r   r   r   r   test_monic.<locals>.<lambda>	      eAhr   r  r>  r  r   c                  >    [        S[        -  S[        -  -   S-   SS9$ )Nr   r  r   Fr  )r"   r   r   r   r   r   r  
	  s    acAaCi!m%(Hr   r5  g      @g      @r   r4  r   r   )r   rm   r  r   r"   r|   rB   r@   rf  s       r   
test_monicr    sx   Q37AJq$aq779>>8q==A;!QD>Q8q==$1$$$% A%%%
./1a4!A#!.!Q$1*q.@@@
 HIQTCE!C'(C1Hs1u,<s,BBBB1a4!A#!1-AA===r   c                     S[         -  S-   [        S[         -  S-   5      pUR                  5       S:X  d   e[        U 5      S:X  d   e[        [        S 5        [        S[         -  SS9n U R                  5       S:X  d   eg )Nr>  r   c                      [        S5      $ rd  )r#   r   r   r   r   test_content.<locals>.<lambda>	  s    gajr   r   r   r   )r   r   r#   r|   rB   )r   re  s     r   test_contentr  	  sq    Q37D1qMq99;!1:??
01QqS!A99;!r   c                     S[         -  S-   S[         -  S-   p[        U 5      [        U5      p2UR                  5       SU4:X  d   e[        U 5      SU4:X  d   e[        U [         5      SU4:X  d   e[        U [         45      SU4:X  d   e[        U5      SU4:X  d   e[        U SS9SU4:X  d   e[        USS9SU4:X  d   e[        [        S 5        [        S[         -  SS	9n [        S
[         -  [
        S9nU R                  5       SU 4:X  d   eUR                  5       SU4:X  d   e[        [        S5      5      [        S5      :X  d   eg )Nr>  r   r   Tr&  Fc                      [        S5      $ rd  )r$   r   r   r   r    test_primitive.<locals>.<lambda>)	      ilr   r   r   r5  r   r   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r   r   r$   r|   rB   rT   rm   rf  s       r   test_primitiver  	  sS   Q37AaC!Gq7DGq;;=QF"""Q<Aq6!!!Q?q!f$$$Q!Q'''Q<Aq6!!!Qd#1v---Qe$A...
23QqS!ASU2A;;=QF""";;=S!H$$$Q*+,	
"#$ $ $r   c                     [         S-  S[         S-  -  -   S[         S-  -  -   S[         S-  -  -   S[         S	-  -  -   S
[         S-  -  -
  S[         -  -
  S-   n [         S	-  S
[         -  -
  S-   n[         S-  S[         -  -   n[        [        XU45      u  p4nUR                  U5      U:X  d   e[        X5      U :X  d   e[        X[         5      U :X  d   e[        X[         45      U :X  d   e[        XE5      U:X  d   e[        XSS9U:X  d   e[        XESS9U :X  d   eUR	                  5       XE/:X  d   e[	        U 5      X/:X  d   e[	        U [         5      X/:X  d   e[	        U [         45      X/:X  d   e[	        U5      XE/:X  d   e[	        U SS9XE/:X  d   e[	        USS9X/:X  d   e[        [        S 5        [        [        S 5        [        [         S
-  [        S
-  -
  [         [        -
  [         [        5      [         S
-  S
[         -  [        -  -
  :X  d   e[        [         S
-  [        S
-  -
  [         [        -
  [        [         5      [        S
-  * S
[         -  [        -  -   :X  d   eg )Nr  r5  r;     r  i  r  q  r>  r   r   r  r   Tr&  Fc                      [        SS5      $ r)  )r%   r   r   r   r   test_compose.<locals>.<lambda>L	  s
    gamr   c                      [        S5      $ rd  )r&   r   r   r   r   r  M	  r  r   )r   mapr   r%   r&   r|   rB   r   r[  s         r   test_composer  5	  sK   	21b53q!t8#c!Q$h.QT9AadFBRTIAMA	1qs
QA	1qs
A$q	"GA!99Q<11=A1q   1!!###1=A1t$)))1u%***;;=QF"""Q<A6!!!Q?qf$$$Q!'''Q<A6!!!Qd#v---Qe$...
34
231a4!Q$;Aq!,1qs1u<<<1a4!Q$;Aq!,A!A===r   c                      [        [        S-  S[        -  -
  S-   [        5      R                  S5      [        [        S-  S[        -  -   S-   [        5      :X  d   eg r/  )r   r   rl  r   r   r   
test_shiftr  S	  sI    1qs
Q"((+tAqD1Q3JNA/FFFFr   c                      [        [        [        -  [        [        /5      R                  SS/5      [        [        S-   [        S-   -  [        [        /5      :X  d   eg r  )r   r   r   
shift_listr   r   r   test_shift_listr  W	  sE    !aU&&!u-qsQqSkAa51IIIIr   c            
      	   [        [        S-  S[        -  -
  S-   [        5      R                  [        [        S-   5      [        [        S-
  5      5      [        S[        5      s=:X  aV  [        [        S-
  S-  [        S-  S[        -  -
  S-   R	                  [        [        S-   [        S-
  -  5      -  5      :X  d   e   e[        [        S-  [        S-  -
  S-   [        5      R                  [        [        S-   5      [        [        S-
  5      5      [        S[        S-  -  S-  [        SS5      -   [        5      s=:X  aV  [        [        S-
  S-  [        S-  [        S-  -
  S-   R	                  [        [        S-   [        S-
  -  5      -  5      :X  d   e   e[        [        S-  S[        -  -
  S-   [        5      R                  [        [        [        R                  -   5      [        [        S-
  5      5      [        [        SS5      [        5      s=:X  ad  [        [        S-
  S-  [        S-  S[        -  -
  S-   R	                  [        [        [        R                  -   [        S-
  -  5      -  5      :X  d   e   e[        [        S-  S[        -  -
  S-   [        5      R                  [        [        S-   5      [        [        [        R                  -
  5      5      [        [        SS5      [        5      s=:X  ar  [        [        [        R                  -
  S-  [        S-  S[        -  -
  S-   R	                  [        [        S-   [        [        R                  -
  -  5      -  5      :X  d   e   e[        [        S-  S[        -  -
  S-   [        5      R                  [        [        S-   5      [        [        [        R                  -
  5      5      [        [        SS5      [        SS	9s=:X  ar  [        [        [        R                  -
  S-  [        S-  S[        -  -
  S-   R	                  [        [        S-   [        [        R                  -
  -  5      -  5      :X  d   e   e[        [        S
 5        [        [        S 5        [        [        S 5        [        [        S 5        [        [        S 5        g )Nr   r   r>  r   r   r  r   rT   r   c                      [        [        [        -  5      R                  [        [        S-   5      [        [        S-
  5      5      $ r  )r   r   r   	transformr   r   r   r    test_transform.<locals>.<lambda>r	  s)    tAaCy224A;QULr   c                      [        [        5      R                  [        [        S-   5      [        [        S-
  5      5      $ r  r   r   r  r   r   r   r   r   r  s	  %    tAw00a!ed1q5kJr   c                      [        [        5      R                  [        [        S-   5      [        [        S-
  5      5      $ r  r  r   r   r   r   r  t	  r  r   c                      [        [        5      R                  [        [        [        -  S-   5      [        [        S-
  5      5      $ r  r  r   r   r   r   r  u	  s)    tAw00acAgQULr   c                      [        [        5      R                  [        [        S-   5      [        [        [        -  S-
  5      5      $ r  r  r   r   r   r   r  v	  s)    tAw00a!ed1Q37mLr   )
r   r   r  r8   r  rh   rm   r  r|   r  r   r   r   test_transformr  [	  s   1qs
Q",,T!a%[$q1u+FQ
EAz1a4!A#:>//AEAE?CCDE E E E E 1qs
Q",,T!a%[$q1u+FQq!tVAXA&*EAz1a4!A#:>//AEAE?CCDE E E E E 1qs
Q",,T!aff*-=tAE{KXa^QJAz1a4!A#:>//AJQ3GHHIJ J J J J 1qs
Q",,T!a%[$q166z:JKXa^QOAFF
Q1qs
Q44QQQVV8LMMNO O O O O
 1qs
Q",,T!c']DQVV<LMXa^Qt,QAFF
Q1qs
Q44QS1qvv:8NOOPQ Q Q Q Q :LM
:JK
:JK
:LM
:LMr   c                  N  ^ [         [        [         SS9smn S[        S[         SS9p!U R                  5       X/:X  d   e[        T5      TU/:X  d   e[        T[         5      TU/:X  d   e[        T[         45      TU/:X  d   e[        U 5      X/:X  d   e[        TSS9X/:X  d   e[        U SS9TU/:X  d   e[        [        S 5        [        [
        U4S j5        [        [        S	5      S
[        S-  -  -  [         S-  -  [        S5      S[        S-  -  -  [         S-  -  -
  [        S5      S
[        S-  -  -  [         S-  -  -   [        S5      S[        S-  -  -  [         S-  -  -
  [        SS5      [         -  -   [        SS5      -
  [         SS9m[        T5      [        [         S-  S[         S-  -  -
  [        S-  S-  [         -  -   S[        S-  -  S-  -
  [         SS9[        S[         S-  -  S[         -  -
  [        S-  S-  -   [         SS9[        [        SS5      [        S-  S-  -
  [         -  S[        S-  -  S-  -   [         SS9[        S[        S-  -  S [        S-  -  -
  S[        S!-  -  -
  S"S#[        S-  -  -
  S$[        S-  -  -   -  [         SS9/:X  d   eg )%NrQ   r   r   Tr&  Fc                      [        S5      $ rd  r'   r   r   r   r   test_sturm.<locals>.<lambda>	  r  r   c                     > [        T SS9$ r=  r  r   s   r   r   r  	  s    ae 4r   i   i	=  r  r   i   r  r>  r  r      r   i$  zZZ(pi)rB  rc  rL  r     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r'   r|   rB   rI   rm   rj   rh   )re  r   r/  r   s      @r   
test_sturmr  y	  s   d1T"DAqd1a%q77981vA;1a&   QD>aV###8v$A6)))% QF***
./
;45QtWeBEk"1a4'tWc"a%i A%&rUE"a%K A%& sVSQY1$% a!	"
 a
  !	3A 8	adSAXoAb
*RAXb[8!H	M	a1fs1unr1uRx'8	<	xq!BE"H,a/"RU(2+=q	R	~b!e#hr1un4qRx?.S\]_ab]bSbBbehikmninenBnoqr  |D  
E	FF F Fr   c                  P  ^  [         S-  S[         S-  -  -   [         S-  -
  S[         S-  -  -
  m [        T 5      R                  5       [        [         5      S4[        [         S-   5      S4/:X  d   e[        T 5      [         S4[         S-   S4/:X  d   e[        [        U 4S j5        [         [         S-
  S-  -  [         S-
  S-  -  [         S-
  S-  -  [         S-
  -  m [        T 5      R                  5       [        [         S-  S[         -  -
  S-   5      S4[        [         S-  S[         -  -
  S-   5      S4[        [         5      S4/:X  d   e[        T 5      [         S-  S[         -  -
  S-   S4[         S-  S[         -  -
  S-   S4[         S4/:X  d   e[        [        U 4S j5        g )Nr   r   r>  r   r   c                     > [        T 5      $ r   r)   r   s   r   r   test_gff.<locals>.<lambda>	  	    Ar   c                     > [        T 5      $ r   r  r   s   r   r   r  	  r  r   )r   r   r(   r|   rC  r   s   @r   test_gffr  	  s   	1qAv1qAv%A747A,a!ea0@!AAAAA;Aq6AE1:....
/	1q51*a!eaZQ
*AE2A7QTAaCZ!^a#!#'1qs
Q#7";d1gq\"K K K KA;AqD1Q3JNA.A!a0CaVLLLL
/r   c                  &   [        S5      [        S5      p[        U [        -  U[        -  -   [        [        X4S9nUR	                  5       [        S[        S-  -  S[        S-  -  [        S-  -  -
  S[        S-  -  -   [        [        SS9:X  d   eg )	Nr   r   r   r>  r  r  rQ   r   )rs   r   r   r   norm)r   r   r   s      r   	test_normr  	  sx    7DGqQqS1Q3Y1/A668tAadFR1WQT\1AadF:AqNNNNr   c            	         [        [        S-  S-
  [        S5      S9S/[        S-  S[        S5      -  [        -  -
  S-   [        S-  S[        S-  -  -
  S-   4:X  d   e[        [        S-  S-
  [        S5      S9S/[        S-  S[        S5      -  [        -  -
  S-
  [        S-  S[        S-  -  -
  S-   4:X  d   e[        [        S-  S-
  [        S5      S9R                  5       S/[        [        S-  S[        S5      -  [        -  -
  S-   [        [        S5      S9[        [        S-  S[        S-  -  -
  S-   [        SS94:X  d   e[        [        S-  S-
  [        S5      S9R                  5       S/[        [        S-  S[        S5      -  [        -  -
  S-
  [        [        S5      S9[        [        S-  S[        S-  -  -
  S-   [        SS94:X  d   eg )	Nr   r   r   r   r>  r;  rQ   r   )r*   r   rs   r   r   r   r   test_sqf_normr  	  s   AqD1HQ0
adQtAwYq[ 1$adR1Wnq&89: : :AqD1HQ0
adQtAwYq[ 1$adR1Wnq&89: : : 1qDG,557
d1a4!DG)A+%)1Q@1a4"QT'>A%q6	88 8 8 1qDG,557
d1a4!DG)A+%)1Q@1a4"QT'>A%q6	88 8 8r   c            	      B   [         S-  [         S-  -
  [         S-  -
  S-   n [         S-  S[         S-  -  -   S[         -  -   S-   n[         S-
  n[         S-  [         S-  -   [         -
  S-
  n[        [        XX#45      u  pEpgUR                  5       U:X  d   e[        U 5      U:X  d   e[        U [         5      U:X  d   e[        U [         45      U:X  d   e[        U5      U:X  d   e[        U SS9U:X  d   e[        USS9U:X  d   eUR	                  5       SUS4US4/4:X  d   e[	        U 5      SUS4US4/4:X  d   e[	        U [         5      SUS4US4/4:X  d   e[	        U [         45      SUS4US4/4:X  d   e[	        U5      SUS4US4/4:X  d   e[	        U SS9SUS4US4/4:X  d   e[	        USS9SUS4US4/4:X  d   eUR                  5       US4US4/:X  d   e[        [        S	 5        [        S5      S:X  d   e[	        S5      S/ 4:X  d   e[        S[         S-  -  S-   S
-  5      S[         S-  S-   S
-  -  :X  d   e[        U 5      XS-  -  :X  d   e[        U [         5      XS-  -  :X  d   e[        U [         45      XS-  -  :X  d   e[         S-  [        S-  -   n[        X-  5      XS-  -  U-  :X  d   e[        X-  [         5      XS-  -  U-  :X  d   e[        X-  [         45      XS-  -  U-  :X  d   e[        [         S-
  5      [         S-
  :X  d   e[        [         * S-
  5      [         * S-
  :X  d   e[        [         S-
  5      [         S-
  :X  d   e[        S[         -  S-
  5      [        SS[         -  S-
  SS9:X  d   e[        S[         -  S-
  S[         -  S-
  -  5      [        SS5      S[         -  S-
  [         S-
  -  -  :X  d   e[        [        [         S-  S[         -  -
  S-   5      5      [         S-
  S-  :X  d   eS[         -   [         S[         -   -  -
  [         S-  -   n [        U 5      S:X  d   e[         S-  S[         -  -   S-   S-  n [        U 5      [         S-   S-  :X  d   e[	        U 5      S[         S-   S4/4:X  d   e[        [        [        S-
  S-  [        S-   -  [         S-   -  5      5      [        S-
  S-  [        [        S-   [         S-   -  5      -  :X  d   e[        [        [        S-
  S-  [        S-   -  [        S-   -  5      5      [        S-
  S-  [        [        S-   [        S-   -  5      -  :X  d   e[        [        [        [        -
  S-  [        [        -   -  [         S-   -  5      5      [        [        -
  S-  [        [        [        -   [         S-   -  5      -  :X  d   e[        [        [        [        -
  S-  [        [        -   -  [        S-   -  5      5      [        [        -
  S-  [        [        [        -   [        S-   -  5      -  :X  d   e[         S-
  S-  [         S-
  -  [         [        -   S-  -  [        S-
  S-  -  [        S-
  -  n[        U5      R	                  5       S[        [         [        -  [         -
  [        -
  S-   5      S4[        [         S-  [        -  S[         S-  -  -
  [         [        S-  -  -   S[         -  [        -  -
  S[         -  -   S[        S-  -  -
  S[        -  -   5      S4/4:X  d   eg )Nr   r   r   r   r>  Tr&  Fc                      [        S5      $ rd  )r+   r   r   r   r   test_sqf.<locals>.<lambda>	  s    hqkr   r   r  r  r;  r
  l    H/P l    _ % )r   r  r   r+   r,   sqf_list_includer|   rB   r-   r   rd   rh   rb   r   rf   )	r   r   r   r   re  r/  rS  Pr   s	            r   test_sqfr  	  s   	1q!tadQA	1qAv!aA	AA	1q!ta!ATA!<(JA!::<1A;!Aq>QAt!!!A;!AT"a'''AU#q(((::<AAA/0000A;11v1v.////Aq>a1a&1a&!12222AtaVaV$4 5555A;11v1v.////AT"qAq6Aq6*:&;;;;AU#QFQF+;'<<<<QFQF#3333
12q6Q;;A;1b'!!!!Q$
Q31q1}#4444q6Q!tVq!9Q$q1$<1T6!!!	1q!tAqs8Q$z!!!qsA;1T61*$$$qsQD>a1faZ'''q1u:QrAv;1"q&   q1u:QqsRx=C1Q37U;;;;!b1Q37#$A1q1q58I(JJJJtAqD1Q3JN#$Q
222	A1q5	AqD Aq6Q;;	
A!a+%Aq6a!ek))))A;1A{345555 vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / /vAzQU+q1u578	
Q
VQUq1u-../ / / 
Q
AEAEA:%q1uqj0!a%8A7!	acAgkAo	"	ad1fqAvo!Q$&1Q.14qAv=!C	DaH& "   r   c                  p7  ^ [         S-  [         S-  -
  [         S-  -
  S-   m[         S-   n [         S-
  n[         S-  [         -   S-   n[        [        TXU45      u  p4pVUR                  5       SUS4US4US4/4:X  d   e[        T5      SU S4US4US4/4:X  d   e[        T[         5      SU S4US4US4/4:X  d   e[        T[         45      SU S4US4US4/4:X  d   e[        U5      SUS4US4US4/4:X  d   e[        TSS9SUS4US4US4/4:X  d   e[        USS9SU S4US4US4/4:X  d   eUR	                  5       US4US4US4/:X  d   e[        S5      S/ 4:X  d   e[        S5      S/ 4:X  d   e[        [        S5      [         5      [        S5      / 4:X  d   e[        S	[         -  [         5      SS	[         4/4:X  d   e[        S[         -  [        -  [         5      SS[        4[         [        4/4:X  d   e[        [        [         [        -  5      [         5      S[         [        -  [        R                  4/4:X  d   e[        S5      S:X  a  [        S5      R                  (       d   e[        S[         -  5      S[         S4/4:X  d   e[        S[         S-  -  5      S[         S4/4:X  d   e[        S[         -  5      S[         -  :X  d   e[        S[         S-  -  5      S[         S-  -  :X  d   e[        S[         S-  -  S-   S
-  5      S[         S-  S-   S
-  -  :X  d   e[        T5      XS-  -  U-  :X  d   e[        T[         5      XS-  -  U-  :X  d   e[        T[         45      XS-  -  U-  :X  d   e[         S-  [        S-  -
  [         [        -
  [         [        -   [         S-  S-   4u  pxp[        TU-  5      XS-  -  U-  X-  -  :X  d   e[        TU-  [         5      XS-  -  U-  X-  -  :X  d   e[        TU-  [         45      XS-  -  U-  X-  -  :X  d   e[        SSS9n[        SSS9n[        SSS9n
[        [        [         [        -  5      5      R                  SL d   e[        [        S[         S-  -  S-
  5      5      [        S5      [        [         S-
  [         S-   -  5      -  :X  d   e[        [        S[         S-  -  S-   5      5      [        S5      [        [         S-  S-   5      -  :X  d   e[        [        [         S-  -  [        -
  U-  5      [        U-  [         S-
  U-  -  [         S-   U-  -  :X  d   e[        [        [         S-  -  [        -   U-  5      [        U-  [         S-  S-   U-  -  :X  d   e[        [        [         S-  -  [        -
  [        -  5      [        [         S-
  -  [         S-   -  [        -  :X  d   e[        [        [         S-  -  [        -   [        -  5      [        [         S-  S-   -  [        -  :X  d   e[        [        U
S-  S-   US-   -  US-
  -  US-
  S-  -  5      5      m[        US-
  S-  US-
  -  5      [        US-   5      -  [        U
S-  S-   5      -  n[        T5      U:X  d   e[        U5      U:X  d   e[         S-
  S-  U
S-  S-   -  n[        [        U5      5      m[        T5      [        U5      :X  d   e[        [        S5      [         -  S-   [         [         S9mTR                  5       STS4/4:X  d   e[         S-  S-   m[        T5      T:X  d   e[        T["        S9[         S-  ["        -
  [         S-  ["        -   -  :X  d   e[        TSS9[         S-  ["        -
  [         S-  ["        -   -  :X  d   e[        T[        S5      S9[         S-  [        S5      [         -  -   S-   [         S-  [        S5      [         -  -
  S-   -  :X  d   e[        [         S-  S["        -  [         -  -   S-
  5      [         S["        -  -   S-  :X  d   e[         S-  S["        -  [         -  -   S-
  m[        T5      T:X  d   eS[         S-  -  [         SS["        -  -   -  -   S-
  S["        -  -   m["        [         SS["        -  -
  -  S-   S["        -  -   S-  -  nS[         [        S5      S-  -   S["        -  S-  -   S-  -  n[        T5      U:X  d   e[        T[$        S9U:X  d   e[        T[&        S9U:X  d   e[         S-  S[        S5      -  [         -  -   S-   m[        T[        S5      S9[         [        S5      -   S-  :X  d   e[        TS-  [        S5      S9[         [        S5      -   S-  :X  d   e[        [         S-  S[        S-  -  -
  [        S5      S9[         [        S5      [        -  -   [         [        S5      [        -  -
  -  :X  d   e[        S[         S-  -  S[        S-  -  -
  [        S5      S9S[         [        S5      [        -  -   [         [        S5      [        -  -
  -  -  :X  d   e[        [         S-
  5      [         S-
  :X  d   e[        [         * S-
  5      [         * S-
  :X  d   e[        [         S-
  5      [         S-
  :X  d   e[        S[         -  S -
  5      [)        SS[         -  S-
  SS!9:X  d   e[        [         S"-  [         -   S-   S#SS$9[         S-  [         -   S-   [         S%-  [         S&-  -
  [         S-  -   [         S-  -
  [         S-  -   [         S-  -
  S-   -  :X  d   e[        [         S"-  [         -   S-   S#SS$9[         S-  [         -   S-   [         S%-  S'[         S&-  -  -   [         S-  -   S'[         S-  -  -   [         S-  -   S'[         S-  -  -   S-   -  :X  d   e[         [*        -  [         [        [         5      -  [*        -  -   m[        [*        S-  S[*        -  -   S-   -  [        [        [         5      -  [*        S-  S[*        -  -   S-   -  -   n[        T5      [         [        [         5      S-   -  [*        -  :X  d   e[        U5      [        [        [         5      S-   -  [*        S-   S-  -  :X  d   e[        [-        [         S-  S[         -  -   S-   [         S-  S-   5      5      [-        [         S-   S-  [         S-   [         S-  [         -
  S-   -  5      :X  d   e[         S-  S-
  [         S-  S[         -  -   S-   -  m[        T5      [         S-   [         S-
  -  [         S-   S-  -  :X  d   e[        T[         5      [         S-   [         S-
  -  [         S-   S-  -  :X  d   eS[         -   [         S[         -   -  -
  [         S-  -   m[        T5      S:X  d   e[        T[         5      S:X  d   e[        S[         S-  S[         -  -   S[         -  -   -  S-
  5      S[         -
  S[         S-  -  -   [         S-  -   SS[         S-  -  -   [         S-  -   -  * :X  d   e[        TSS(9T:X  d   e[/        [0        U4S) j5        [/        [2        S* 5        [        [         [-        [         S-  [        S-  -
  [5        [         S-  [6        S-  -
  S[         -  S[        -  -   5      5      /5      [         [-        [         [        -
  [         [        -   -  [5        [         [6        -
  [         [6        -   -  [         [        -   [         -  [        -  5      5      /:X  d   e[9        [        [         S-  [         -   S-   5      R                  5       S   S+   S+   [:        5      SLd   e[9        [;        [         S-  [         -   S-   5      R                  5       S   S+   S+   [:        5      SL d   e[        [        [         * 5      5      [        [         * 5      :X  d   eS,[         -  [         * S-   -  [         S-
  -  [         * [         * S-   -  [         S-
  -  [         [         S-
  S-  -  -
  -  [         S-  [         S-
  -  [         [         S-
  -  -
  [         -
  -  S,[         S-  -  [         S-
  S-  -  [         [         * S-   -  [         * [         * S-   -  [         [         S-
  -  -   -  -
  [         S-  [         S-
  S-  -  [         [         * [         * S-   -  [         S-
  -  [         [         S-
  S-  -  -
  -  -
  -  -
  n[        U5      S+:X  d   e[        [        [         S-  [         -   5      [         -   SS-9[        [         [         S-   -  5      [         -   :X  d   e[        [        [         S-  [         -   5      [         -  SS-9[        [         [         S-   -  5      [         -  :X  d   e[        [        [         S-  5      5      [        [         S-  5      :X  d   e[        [        S.[         -  S-   S.[        -  S-   -  5      5      [)        S/S.[         -  S/-   S.[        -  S/-   SS!9:X  d   e[        [        S.[         -  S.-   S-  5      5      S0S/[         -  S/-   S-  -  :X  d   e[         S-  [        S-  -  S"[         S-  -  [        -  -   S1[         S-  -  -   S
[         -  [        S-  -  -   S2[         -  [        -  -   S3[         -  -   S4[        S-  -  -   S5[        -  -   S6-   n[        U[         5      [         S-   [         S-   -  [        S-  S"[        -  -   S1-   -  :X  d   e[        U[         SS-9[         S-   [         S-   -  [        S-  S"[        -  -   S1-   -  :X  d   e[        U[        SS-9[        S-   [        S-   -  [         S-  S
[         -  -   S4-   -  :X  d   eS[         -  S[=        SS
[         -  -
  5      -  -   m[        TSS-9[        TSSS79:X  d   e[        TSSS79S[         -  S[=        S5      -  [=        S8[         -  5      -  -   :X  d   e[        [         S-  [         [        S-  -  -
  [        U[         5      S[         S4[         [        -
  S4[         [        -   S4/4:X  d   e[        [         S-   [         S-  S-
  -  5      S[         S-
  S4[         S-   S4[         S-  [         -
  S-   S4[         S-  [         -   S-   S4/4:X  d   e[        S5      S[        S5      -   S[        S5      -
  nnnS[*        -   S[*        -
  nn[        UU-  5      S	U* S4US4/4:X  d   e[        UU-  5      S	U* S4US4/4:X  d   e[        UU-  5      U* U* S4/4:X  d   e[        [*        U-  5      S	U* S4[*        S4/4:X  d   e[        UU-  [         5      UU-  / 4:X  d   e[        UU-  [         5      UU-  / 4:X  d   e[        UU-  [         5      UU-  / 4:X  d   e[        [*        U-  [         5      [*        U-  / 4:X  d   e[        [         [        S5      [*        -  -
  [         [        S5      [*        -  -   -  [         5      S[         [        S5      [*        -  -
  S4[         [        S5      [*        -  -   S4/4:X  d   e[        ["        -
  S-  [        ["        -   -  [         S-   -  n[        [        U5      5      U:X  d   e[         ["        -
  S-  [         ["        -   -  [        S-   -  n[        [        U5      5      U:X  d   e[        S-   S-  [        [        S5      -   S-  -  [         S-  [         -   S-   S[        S5      -  -   S-  -  n[        [        U5      SS9U:X  d   e[         S-  * [        S-  -  [        S-  S-   -  S["        -  [         S-  -  [        S-  -  [        S-  S-   -  -   S["        -  [         S-  -  [        -  [        S-  S-   -  -   [         S-  [        S-  S-   -  -   S[         -  [        S-  -  [        S-  S-   -  -
  S["        -  [         -  [        S-  -  [        S-  S-   -  -   S["        -  [         -  [        -  [        S-  S-   -  -   S[         -  [        S-  S-   -  -   [        S-  -
  [        S-  [        S-  S-   -  -
  S["        -  [        S-  -  -   S["        -  [        S-  -  [        S-  S-   -  -   S["        -  [        -  -   S["        -  [        -  [        S-  S-   -  -   S-   S[        S-  S-   -  -   n[        U5      [        ["        -
  S-  * [        ["        -   -  [         S-  S[         -  -   [        S-  -   S-   -  [        S-  S-   -  :X  d   e["        [        -  [         -  [        -  S["        -  [        -  -
  ["        [         -  [        -  [6        -  -
  S[         -  [        -  -
  S["        -  [6        -  -   S9-   n[        U5      ["        * [         [        -  S-
  -  [        * [6        -   S["        -  -
  -  :X  d   eS&[         S-  -  [6        S-  -  S:[         S-  -  [6        -  [        -  -
  S;[         S-  -  [        S-  -  -   S["        -  [         -  [        -  [6        S-  -  -
  S<["        -  [         -  [        -  [6        -  [        -  -   S4["        -  [         -  [        -  [        S-  -  -
  [6        S-  -   S&[6        S-  -  [        -  -
  S=[6        S-  -  [        S-  -  -   S;[6        -  [        S-  -  -
  S%[        S-  -  -   n[        U5      S>[        -  [6        -   [        * [6        -   -  S[        S-  -  S[        -  [6        -  -
  S&[         S-  -  -   S["        -  [         -  [        -  -
  [6        S-  -   -  :X  d   eg )?Nr   r   r   r   Tr&  Fr  r   r   r  r   positiver  )integerr  )realr   r>  r   rS  i    iX  i iH i rc  i  iT     iY  r;  r
  r  r?  r@  r  r  rA  r  c                  "   > [        T [        SS9$ )NFr  r/   r   r   s   r   r   test_factor.<locals>.<lambda>
  s    F1a$>r   c                  *    [        [        S-  S-
  SS9$ )Nr   r   Tr&  r  r   r   r   r   r  
  s    fQTAXT:r   r   r  r        ?r         ?r  M      r     ih  )r  fractionir  r  r  r  r  r  )r   r  r   r.   factor_list_includers   r   rm   r  r/   
is_Integerrn   is_Powr   rb   ru   rU   rf   rR   rS   rd   rj   rl   r|   rG   rK   r^   r   r   r   rq   )r   r   r   re  UVWr   r   r   r  r  f_zzif_qqier   s2s2ps2npippinr   s                        @r   test_factorr  
  s0   	1q!tadQA	AA	AA	1q1ATAqQ<(JA!==?qAq6Aq6Aq6":;;;;q>a1a&1a&1a&!9::::q!aVaVaV$< ====q1$AAAA'?#@@@@q>a1a&1a&1a&!9::::q%!q!fq!fq!f-E)FFFFq&11v1v1v.F*GGGG  "1v1v1v&>>>>q>aW$$$q>aW$$$tAw"tAwm333Qw"qB7)n444!ax#QFQF+;'<<<<tAaCy!$ac166]O(<<<<!9>fQi2222qsQF8},,,qAv11vh-///!A#;!A#!AqD&>Qq!tV###1QT6A:/"c1a4!8a-&7777!9Q$q   !Q<1T6!8###!aT?a1fQh&&&A1a!eQUAqD1H4JA!!A#;1T6!8ac****!A#q>a1fQh----!A#ta4AC 0000sT"AsD!AsA$qs)##t+++$qAvz"#tAwtQUQUO/D'DDDD$qAvz"#tAwtAqD1H~'====1QT6A:/"adAEA:oq1uqj&@@@@1QT6A:/"adAqD1Hq=&88881QT6A:/"q!a%y!a%'81&<<<<1QT6A:/"q!Q$(|a&7777VQTAXA&A.Az9:;Aa!eaZQ a!e,T!Q$(^;A!9>>!9>>	
Q
AqD1HAVAYA!9QSVAX\1R(A==?qAq6(m+++	1qA!9>>!q!adQhA%::::!d#1q1a4!8'<<<<	T!W"#Q$a"2Q"6AQ	9IA9M!NO O O !Q$1Q,"#AaC!|333	1qs1uqA!9>>QT	Auvax'((61F1H<Aq"r!t)}s"SU*Q..E!afSj.46#:-11E!9!D!U***!D!U***	1qay{QA!tAw'AQK!+;;;;!Q$$q'*q47{Q.>>>>!Q$1a4-473	
T!WQYT!WQY'( ( (!AqD&1QT6/T!W5	AQ	MAQ	M*+, , , !a%=AE!!!1"q&>aR!V###!a%=AE!!!!A#(s1acAg>>>>!R%!)a-$?	
AA1q!tad*QT1AqD81q5@1DEF F F!R%!)a-%@	
AA1uQTz)AqD05A:=	
Aa!e  	!! ! ! 	
"qQx{A	2q51R4<!qQxQ2)9::A!93q6A:r))))!93q6A:Q{2222"	1qs
Q1q" #&(!a%!a!eadQhl5K&LM M M 
AAqD1Q3JN#A!9QQQ
2222!Q<AEAE?AEA:5555	A1q5	AqD A!9>>!Q<1!QTAaCZ!A#%&*+!a%!AqD&.Q$3Qq!tVad*2, 0- - - - !E"a'''
?>?
9:;1bA1eAqD1a4K1qs&CDEF	
BAAq1uq1uoAqy{ CDEF F F QTAX\&&(+A.q18=@DE E EAA**,Q/215xADHI I I $r(tQBx''' 
ArAvA	QBFQU 3aQ
l B	CQT1L F	
AEFF 
ad7AEA:-A26
QBQKq1uI= 1 Aq1uqj1qb1"q&k1q5&9Aq1uqjL&H#IIK
KA !9>> #adQh-!#$/3q!a%y>A3EEEE#adQh-/-QAY1AAAA$q!t*ad+++ &#a%'CE!G,-.#c3q53;A3' ' ' '&#a%)a()T3q53;2B-BBBB	
AadR1WQY	AqD	(1Q3q!t8	3bd1f	<s1u	Dr!Q$w	NQTUVQV	VY\	\B"a=QUQUOQTBqD[2-=>>>>"ad#AA1r!tb8H'IIII"ad#AA1qs
R'HHHH 	
!aA!GnA!$6!$#FFFF!$/1Q33q6#bd)9K3KKKKq!ta1f}aA.	QFQUAJQ
+3- - - -!ad1f~&	QUAJQ
QTAX\1$51q1a7HI+K K K K 7AQKT!WSB2vq2vCs3wB3$S!H(=#>>>>s3wB3$S!H(=#>>>>r#vB33$"4444r#v2#q	B7';"<<<<s3w"s3wm333s3w"s3wm333r#vq!bfb\111r#vq!bfb\111DGBJT!WRZ8!<	Qa^Q!d1gbj.!!45A7 7 7 7 a%!q1u	Q	'A&)!!!
a%!q1u	Q	'A&)!!!	
Q
AQK!##QTAX\Ad1gI%=$AAA&)t,111 
Aad
AqD1H!AqDAq!tax 881Q3q!t8A:q!tax;PP	1adQh	A#ad(AqD1H-	.01!Aad
AqD1H0E	F	!AaA	qS!Q$(^	,./d	356T1a4!8_	EGHs1a4x	P A#ad(AqD1H
	 !"!A	& )*!Aq!tax(8	9 <=	= @A!Q$(|	L  !9!a%!QU+QTAaCZ!Q$->-BCQTAXNNNN 
1Qq1Q3q51Q3q57	"QqSU	*QqSU	2R	7A!9AaC!Gqb1fqsl3333	
1a41r!Q$wqy{	"R1WQT\	1AaCE!GAqDL	@2a46!8A:a<	O	Aa!Q$
A
 !!Q$q
)+-ad71a4<
8:<Q$q!t)
DFG1f
MA!9AQBF+Qq!tVac!e^a1f-Dqs1uQw-NQRTUQU-UVVVVr   c                  "   [         S-  S[         -  -   S-   S-  [         S-  S-   -  [         S-  S[         -  -   S-   S-  -  n [         S-  S[         -  -   S-   S-  [        S-  -  [         S-  S[         -  -   S-   S-  S-  [        -  -   [         S-  S[         -  -   S-   S-  -   n[        U 5      [         S-   S-  [         S-  S-   -  [         S-   S-  -  :X  d   e[        U5      [         S-   S	-  [        S-   S-  -  :X  d   e[        U 5      S[         S-   S4[         S-   S4[         S-  S-   S4/4:X  d   e[        U5      S[        S-   S4[         S-   S	4/4:X  d   e[         S-  [        S-  -
  S
-  [         S-  S-   -  n [         S-  [        S-  -   S
-  [         S-  S-   -  n[        U 5      [         S-   [         [        -
  S
-  -  [         [        -   S
-  -  [         S-  [         S-  -
  [         S-  -   [         S-  -
  [         S-  -   [         -
  S-   -  :X  d   e[        USS9[         S-   [         [        [        -  -
  S
-  -  [         [        [        -  -   S
-  -  [         S-  [         S-  -
  [         S-  -   [         S-  -
  [         S-  -   [         -
  S-   -  :X  d   e[        U 5      S[         S-   S4[         [        -
  S
4[         [        -   S
4[         S-  [         S-  -
  [         S-  -   [         S-  -
  [         S-  -   [         -
  S-   S4/4:X  d   e[        USS9S[         S-   S4[         [        [        -  -
  S
4[         [        [        -  -   S
4[         S-  [         S-  -
  [         S-  -   [         S-  -
  [         S-  -   [         -
  S-   S4/4:X  d   eg )Nr   r>  i r   i i  i -1i% ip  i@ r   r  r   r   TrS  )r   r   r/   r.   rf   ru  s     r   test_factor_larger  
  s   	
A!a("AqD1H-q!taczA~.GGA
Q$1*q.4	1	$1qs
Q'=a'?'A	A	1qs
QE 
A !9Q)1a4!84a!eg5EEEEE!9Qq1uqj0000	AE7#a!eX%6A1FGH H Hq>a1q5!*q1udm!<====	
A1vq!tax(A	
A1vq!tax(A!9	
QQQ/A1	
A212!t22 "#2$ 	%% % % !d#	
QQqS6!!1qs7V"33QTAqD[	
A616!t66 "#6$ 	%% % % q>	
a!eQZ!a%1q5&/AqD	
A=1=!t=d=#%&=')*=+,-</ 0 	11 1 1 q4(	
a!eQZ!ac'6*Q1Wf,=qD1a4K!Q$A%1,q014a@9 : 	;; ; ;r   c                     [        S[        -  S-
  5      [        SS[        -  S-
  SS9:X  d   e[        S[        -  S-
  S[        -  S-
  -  5      [        [        SS5      S[        -  S-
  S[        S-
  -  5      :X  d   eg )	Nr  r;  r   r   r   Fr
  r   )r/   r   rd   rh   r   r   r   test_factor_noevalr    su    !A#(s1acAg>>>>1Q38acAg&'3x1~qsQw1q5	+RRRRr   c                     [        S5      / :X  d   e[        S5      / :X  d   e[        [        SS9S/:X  d   e[        [        5      S/:X  d   e[        [        S-  5      S/:X  d   e[        [        S	-  [        S
-  /5      SS	S
S.4/:X  d   e[        [        [        S	S5      -  [        SS5      -
  S
[        -  [        SS5      -   -  5      n U R                  SS9SS/:X  d   eU R                  5       SS/:X  d   eU R                  SSS9SS/:X  d   eU R                  SS9SS/:X  d   eU R                  [        SS5      S9U R                  SS9s=:X  a/  [        SS5      S4S4[        SS5      [        SS5      4S4/:X  d   e   eU R                  [        SS5      S9U R                  SS9s=:X  a/  [        SS5      S4S4[        SS5      [        SS5      4S4/:X  d   e   eU R                  [        SS5      S9U R                  S S9s=:X  a/  [        SS!5      S4S4[        SS5      [        SS5      4S4/:X  d   e   eU R                  [        SS"5      S9U R                  S#S9s=:X  a9  [        SS$5      [        SS$5      4S4[        SS5      [        SS5      4S4/:X  d   e   e[        [        S	S5      -  [        SS5      -
  S
[        -  [        SS5      -   -  n [        U SS9SS/:X  d   e[        U 5      SS/:X  d   e[        U [        SS5      S9[        U SS9s=:X  a/  [        SS5      S4S4[        SS5      [        SS5      4S4/:X  d   e   e[        U [        SS5      S9[        U SS9s=:X  a/  [        SS5      S4S4[        SS5      [        SS5      4S4/:X  d   e   e[        U [        SS5      S9[        U S S9s=:X  a/  [        SS!5      S4S4[        SS5      [        SS5      4S4/:X  d   e   e[        U [        SS"5      S9[        U S#S9s=:X  a9  [        SS$5      [        SS$5      4S4[        SS5      [        SS5      4S4/:X  d   e   e[        [        S	-  S	-
  [        S	-  S-
  S%-  -  [        S-   -  S%[        -  S-   S-  -  5      n U R                  5       S&[        S'S	5      4S%4[        S'S	5      S4S4S(S)S[        SS	5      4S4[        SS	5      S	4S%4/:X  d   e[        [        S-  S*-
  [        S-  S+-
  /5      [        S,S-5      [        S.S/5      4SS04[        S0S15      [        S-S25      4SS04/:X  d   e[        [        S-  S*-
  [        S-  S+-
  /SS9[        S,S-5      [        S.S/5      4SS04[        S0S15      [        S-S25      4SS04/:X  d   e[        [        S	-  S*-
  [        S	-  S+-
  /5      [        S3S5      [        S4S5      4SS04[        S4S5      S54SS04S6[        SS5      4SS04[        SS5      [        S7S5      4SS04/:X  d   e[        [        S-   [        S	-   [        S-
  [        S-   S[        S-
  [        S-
  [        S	-
  S	-  /5      S8SS04S9SSS:.4S;SSSS<.4S=S%S	04/:X  d   e[        S	-  S	-
  [        S
-  S
[        S	-  -  -
  S
-   [        S-
  p!n [        U [        S%S
5      SS>9/ :X  d   e[        U [        S%S5      SS>9[        S%S5      [        SS	5      4/:X  d   e[        U [        S%S
5      SS?9S@S[        SS	5      4/:X  d   e[        U [        S%S5      SS?9S@/:X  d   e[        U[        S%S
5      SA9/ :X  d   e[        U[        S%S5      SA9[        S%S5      [        SS	5      4S	4/:X  d   e[        U[        S%S
5      SB9SCS[        SS	5      4S	4/:X  d   e[        U[        S%S5      SB9SC/:X  d   e[        X/[        S%S
5      SA9/ :X  d   e[        X/[        S%S5      SA9[        S%S5      [        SS	5      4SS	04/:X  d   e[        X/[	        S%5      S
-  SB9S@SS	04S;SS04S[        SS	5      4SS	04/:X  d   e[        X/[        S%S5      SB9S@SS	04S;SS04/:X  d   e[        [        S	-   [        S	-  S	-
  /5      S8SS04S@SS04SDSS04/:X  d   e[        [        S	-   [        S	-  S	-
  /SSE9S8SS04[        S'S	5      S4SS04SDSS04/:X  d   eS%[
        S
-  -  SF[
        S-  -  -
  SG[
        S	-  -  -   S[
        -  -   SG-   n [        U 5      / :X  d   e[        U SSSH9u  p4U/ :X  d   e[        SI [        U[        U 5      5       5       5      (       d   eU[        SJS%5      [        SK-  S%-  -
  S4[        SJS%5      [        SK-  S%-  4[        [        SJS%5      -  [        SKS%5      4S[        SKS%5      [        SK-  S%-  -   4/:X  d   e[        U SS[        SS5      SL9u  p4U/ :X  d   e[        SM [        U[        U 5      5       5       5      (       d   e[        [        SN 5        [        [        SO 5        [        [        SP 5        g )QNr   r   T)r-   r   )r   r   r  )r   r  r   r>  r   r   rR  r   i  r   r   r  rY  )r  r   )r  r   )fastr-   )r  r;  epsr  r   i  U   r  rB  {Gz?i  gMbP?i  i'  -C6?i  r   r  r  )r   r   r   )r  r   r     rX  r  e   r  i5  k   r  iiir  rZ  )r  r  r  r   r   r   )r   r   r  )r   r   )infr-   )supr-   r  r   r  r	  )r
  r   r=  r   r  r5  )r   r-   c              3      #    U  Hq  u  u  pn[        U5      [        U5      s=:  =(       a    [        U5      :  Os  =(       a0    [        U5      [        U5      s=:  =(       a    [        U5      :  Os  v   Ms     g 7fr   rp   ro   r   r   r   r  s       r   r   !test_intervals.<locals>.<genexpr>t  h      J,Hyvq !ur!u$$r!u$ 	*U* *U* ,H   A9A;ir{  )r   r-   r  c              3      #    U  Hq  u  u  pn[        U5      [        U5      s=:  =(       a    [        U5      :  Os  =(       a0    [        U5      [        U5      s=:  =(       a    [        U5      :  Os  v   Ms     g 7fr   r  r  s       r   r   r    r  r  c                  *    [        [        S-  S-
  SS9$ Nr   r   r  r0   r   r   r   r   r    test_intervals.<locals>.<lambda>  s    yA{Cr   c                  F    [        [        S-  S-
  5      R                  SS9$ r  )r   r   r0   r   r   r   r   r    s    tAqD1H~77K7Hr   c                  B    [        [        S-  S-
  [        S-  S-
  /SS9$ )Nr   r   r   r  r  r   r   r   r   r    s     Iq!taxA&:Lr   )r0   r   r   rh   rm   r   r   r   r5   rf   r|   r  )r   r   r   	real_partcomplex_parts        r   test_intervalsr    s   Q<2Q<2QD!fX---Q<K=(((QV///adAqD\"A!'=&>>>>aA"a01Q3!S9I3IJKA;;4; Wh$7777;;=\=9999;;Dd;+/BBBB;;D;!lM%BBBB;;8Ar?;+q{{s{/C OBa
 !	$Q"a'I1&MNO O O O O;;8As+;,0E OBa
 !	$Q"a'I1&MNO O O O O;;8At,;-1G PBq
!1	%"a(2q/(JA'NOP P P P P;;8Au-;.!++&+2I aBxD1
2A	6(2q/8TVXY?9[]^8_`a a a a a 
8Aq>	HRO	+acHQ4D.DEAQD!gx%8888Q<L-8888QHQO,	!0E OBa
 !	$Q"a'I1&MNO O O O OQHQ,-1$1G OBa
 !	$Q"a'I1&MNO O O O OQHQ-.)A52I PBq
!1	%"a(2q/(JA'NOP P P P PQHQ./9QF3K aBxD1
2A	6(2q/8TVXY?9[]^8_`a a a a a 	adQhAA%q1u-qsQwl:;A;;=xA
	#xA&;Q%?	hq!n
q	!Xa^Q$7#;	== = =
 adSj!Q$*-.BXc2.
/!Q	8HS#<NPXY[]^P_;`cdfgbh:ijk k k adSj!Q$*-D9BXc2.
/!Q	8HS#<NPXY[]^P_;`cdfgbh:ijk k k adSj!Q$*-.CXc1-
.A	78C;KS:QTUWXSY9ZxA
!Q	(HROXb!_+MPQSTv*V	XX X X a!eQUAE1q5!QUAEAEA:NO
QF	hA!5
aA 8"QF+	-- - - dQh1qAv)1q5!AQHQN5;;;QHQN58Aq>8TUWX>:Z9[[[[QHQN5(QQRTUDW9XXXXQHQN5(CCCQHQN+r111QHQN+(1a.(1a.1QST0U/VVVVQHQN+HQPQN@SUV?W/XXXXQHQN+>>>aV!Q0B666aV!Q0x1~xPQST~6VYZ\]X^5_4````aV	"" aV$v1v&6!Xa^9LqRSf8UVW W W	
HQN$)1Aq6(:VaV<L'MN N N a!eQTAX&'
QF	hA/&1a&1ABC C Ca!eQTAX&t4
QF	xA3aV<v1v>NOP P P 	
!Q$AqD2ad7"RT)B.AQ<2't>I?? J,/fQi,HJ J J J J Xc1-"Q6:%c1-qtAv6xQ//"aAQ!B$q& 89; ; ; ;
 (t8Ar?SI?? J,/fQi,HJ J J J J :CD
:HI
LNr   c            	        ^  [        [        S-  S-
  5      m T R                  SSSS9S:X  d   eT R                  SSSS9S:X  d   eT R                  SSS S9S[        S	S5      4:X  d   eT R                  SSS S9[        S
S5      S4:X  d   eT R                  SSSS9S[        S	S5      4:X  d   eT R                  SSSS9[        S
S5      S4:X  d   eT R                  SSSSS9S[        S	S5      4:X  d   eT R                  SSSSS9[        S
S5      S4:X  d   eT R                  SS[        SS5      S9[        SS5      [        SS5      4:X  d   eT R                  SSSS9[        SS5      [        SS5      4:X  d   e[	        [
        U 4S j5        [	        [        U 4S j5        [	        [        U 4S j5        [        S-  S-
  m [        T SSSS9S[        S	S5      4:X  d   e[        T SSSS9[        S
S5      S4:X  d   e[        T SSSSS9S[        S	S5      4:X  d   e[        T SSSSS9[        S
S5      S4:X  d   e[        T SS[        SS5      S9[        SS5      [        SS5      4:X  d   e[        T SSSS9[        SS5      [        SS5      4:X  d   e[	        [
        S 5        [	        [        U 4S j5        [	        [        U 4S j5        g )Nr   r   r   )stepsr=  r  r   r
  r   r  T)r  r  rB  r  r  rR  r  r  c                  ,   > T S-  R                  SSSS9$ )Nr   r   T)	check_sqfr1   r   s   r   r   "test_refine_root.<locals>.<lambda>  s    QT$6$6q!t$6$Lr   c                  .   > T S-  R                  SS5      $ r/  r!  r   s   r   r   r"        ad%7%71%=r   c                  .   > T S-  R                  SS5      $ r  r!  r   s   r   r   r"    r$  r   c            	      .    [        SSS[        SS5      S9$ )Nr   r   r  rB  r  )r1   rh   r   r   r   r   r"    s    K1aXa=M$Nr   c                  8   > [        T 5      R                  SSSS9$ Nr   r   r   r  )r   r1   r   s   r   r   r"    s    tAw221a[2Ir   c                     > [        T SSSS9$ r(  r!  r   s   r   r   r"    s    {1aDr   )r   r   r1   rh   r|   rG   rD   r  r   s   @r   test_refine_rootr*    s   QTAXA==AQ='6111==Rq=)X555==AT=*q(1a..AAAA==Rt=,"a"0EEEE==AQ='Ax1~+>>>>==Rq=)hr1or-BBBB==AQT=2q(1a.6IIII==Rqt=4"a"8MMMM==A8As#3=4"b9I8TVXZK[8\\\\==A4=(Xb"-=xB?O,PPPP
?LM
=>
=>	1qAq!Qa(QA,????q"b*xA.CCCCq!Qad38Aq>7JJJJq"b5(2q/29NNNNq!QHQ$45(2r:JHUWY[L\9]]]]q!QD)hr2.>R@P-QQQQ
?NO
:IJ
:DEr   c                  Z   [        [        S-  S-
  5      S:X  d   e[        [        S-  S-
  [        * S9S:X  d   e[        [        S-  S-
  [        7S9S:X  d   e[        [        S-  S-
  [        * [        7S9S:X  d   e[        [        S-  S-
  SS9S:X  d   e[        [        S-  S-
  SS9S:X  d   e[        [        S-  S-
  SS9S:X  d   e[        [        S-  S-
  SS9S:X  d   e[        [        S-  S-
  SSS9S:X  d   e[        [        S-  S-
  SSS9S:X  d   e[        [        S-  S-
  SSS9S:X  d   e[        [        S-  S-
  SSS9S:X  d   e[        [        S-  S-   5      S:X  d   e[        [        S-  S-   S[        -  S9S:X  d   e[        [        S-  S-   S[        -  S9S:X  d   e[        [        S-  S-   S[        -  S[        -  S9S:X  d   e[        [        S-  S-   SS9S:X  d   e[        [        S-  S-   SS9S:X  d   e[        [        S-  S-   [        * S9S:X  d   e[        [        S-  S-   [        7S9S:X  d   e[        [        S-  S-   [        7S-  [        7S9S:X  d   e[        [        S-  S-   [        * [        * S-  S9S:X  d   e[	        [
        S	 5        g )
Nr   r  r  r  r	  r  r   r   r   c                      [        S5      $ r  r2   r   r   r   r   "test_count_roots.<locals>.<lambda>  s    KNr   )r2   r   ri   rf   r|   rG   r   r   r   test_count_rootsr0    s   q!tax A%%%q!taxbS)Q...q!taxbS)Q...q!taxbSrc2a777q!taxR(A---q!taxR(A---q!taxQ'1,,,q!taxQ'1,,,q!taxRQ/1444q!taxRQ/1444q!taxRQ/1444q!taxRQ/1444q!tax A%%%q!taxRT*a///q!taxRT*a///q!taxRTr!t4999q!taxQ'1,,,q!taxQ'1,,,q!taxaR(A---q!taxaR(A---q!taxaRTr2a777q!taxaRaRT2a777
?23r   c                     [        [        S5      [        S-  -  S-
  [        SS9n U R                  5       S:X  d   eU R                  SS9S:X  d   eU R                  SS9S:X  d   e[        [        S-  [        S5      -   [        SS9nUR                  5       S:X  d   e[        [        S-  S[        S5      -  [        -  -   S-   [        SS9nUR                  5       S:X  d   eUR                  SS	S
9S:X  d   eUR                  SSS
9S:X  d   eUR                  SSS
9S:X  d   eUR                  SSS
9S:X  d   eUR                  SSS
9S:X  d   eg )Nr   Tr   r   r  r   r  ir;  r,  r  r  r   )r   rs   r   r2   )p1p2p3s      r   test_count_roots_extensionr5    s[   	d1gadlQT	2B>>q   >>a> A%%%>>a> A%%%	adT!Wna4	0B>>q   	adQtAwYq[ 1$a4	8B>>q   >>cr>*a///>>cq>)Q...>>cr>*a///>>bb>)Q...>>ba>(A---r   c                    ^  [        S[        S-  -  S[        S-  -  -
  S[        -  -   S-   5      m T R                  S5      [        SS5      :X  d   eT R                  S5      S:X  d   eT R                  S5      S:X  d   e[	        [
        U 4S j5        [        [        S	-  [        -   S-   5      R                  S5      [        [        S-  [        S-  -
  S-   S5      :X  d   eg )
Nr   r   r   r>  r   r   r   c                  &   > T R                  S5      $ )Nr   )rootr   s   r   r    test_Poly_root.<locals>.<lambda>  s    qvvayr   r   )r   r   r8  rh   r|   
IndexErrorrx   r   s   @r   test_Poly_rootr;    s    Qq!tVa1f_qs"Q&'A66!9Q'''66!9>>66!9>>
:()1q1""1%1q!ta)CCCCr   c                    ^ [        [        5      S/:X  d   e[        [        SS9S/:X  d   e[        [        S-  5      / SQ:X  d   e[        [        S-  SS9S/:X  d   e[        [        [        S-  [        -   S-   -  5      [        [        S-  [        -   S-   S5      S/:X  d   e[        [        [        S-  [        -   S-   -  SS9[        [        S-  [        -   S-   S5      S4S/:X  d   e[        [        S-  [        S-  [        -   S-   -  5      [        [        S-  [        -   S-   S5      SSS/:X  d   e[        [        S-  [        S-  [        -   S-   -  SS9[        [        S-  [        -   S-   S5      S4S/:X  d   e[        [        S	-  S	-
  SS
9[        [        S	-  S	-
  SSS
9[        [        S	-  S	-
  SSS
9/:X  d   eS	[        S-  -  S[        S	-  -  -
  S[        -  -   S-   m[        S-  [        -   S-   n [        T5      R                  5       [	        SS	5      S	S	/:X  d   e[        U 5      R                  5       [        U S5      /:X  d   e[        S	-  [        S	5      -
  mS	[        S5      S-  -  * S	[        S5      S-  -  /n[        [        U4S j5        [        [        U4S j5        [        TSS9U:X  d   e[        [        TSS95      U:X  d   e[        [        T5      SS9U:X  d   eg )Nr   Fmultipler   r   rE  r  r   r   radicalsr   r>  r   c                     > [        T 5      $ r   r4   r   s   r   r   !test_real_roots.<locals>.<lambda>  s	    
1r   c                  6   > [        [        T [        5      5      $ r   )r4   r   r   r   s   r   r   rC    s    
41:(>r   Tr   )	r4   r   rx   r   rh   rs   rm   r|   rC  )r   rootsr   s     @r   test_real_rootsrF    s   a=QCa%(VH444ady(((adU+x777aAA&'F1a4!8a<,CQ+GGGGaAA&7V	1q1a>=$<& & & & 	1adQhl!'1q1a!8!Q BC C CadAqD1HqL)E:	1q1aA@$?& & & & adQh/1a4!8Q/1a4!8Q/4
 
 
 

 	
!Q$1a4!A#!A	1q1A7HROQ#::::7F1aL>111 	
1tAwA!A$q&k\1qtAv;'E
 56
 >?a4(E111d1-.%777d1g.%777r   c            	        ^ S[         S-  -  S[         S-  -  -
  S[         -  -   S-   m[        SS5      SS/n [        T5      [        T5      R                  5       s=:X  a  U :X  d   e   e[         S-  [         -   S-   n[	        US5      [	        US5      [	        US5      /n[        U5      [        U5      R                  5       s=:X  a  U:X  d   e   e[        [         S-  S-
  5      [        S5      * [        S5      /:X  d   e[        [         S-  S-
  SS	9[        S5      * S4[        S5      S4/:X  d   e[        [         S-  S-
  SS
9[	        [         S-  S-
  SSS
9[	        [         S-  S-
  SSS
9/:X  d   e[         S-  [         -
  S-
  n[        U5      [	        US5      [	        US5      [	        US5      [	        US5      [	        US5      /:X  d   e[         S-  [        S5      -   mS[        S5      S-  -  * [        -  S[        S5      S-  -  [        -  /n[        [        U4S j5        [        [        U4S j5        [        TSS9U:X  d   e[        [        TSS95      U:X  d   e[        [        T5      SS9U:X  d   eg )Nr   r   r   r>  r   r   r   Fr=  r?  r   c                     > [        T 5      $ r   )r3   r   s   r   r    test_all_roots.<locals>.<lambda>1  s	    	!r   c                  6   > [        [        T [        5      5      $ r   )r3   r   r   r   s   r   r   rI  2  s    41:)>r   Tr   )
r   rh   r3   r   rx   rs   rm   rf   r|   rC  )frootsr   grootsr   rE  r   s        @r   test_all_rootsrM    sa   	!Q$1a4!A#!Ar1oq!$FQ<47,,.8&88888	1q1AQlF1aL&A,7FQ<47,,.8&88888QTAXDG8T!W"5555QTAX.T!WHa=47A,2OOOOQTAX.q!taxU+q!taxU+3   
 	
1q1AQ<q!fQlF1aL&A,q!   
 	
1tAwA!A$q&k\!^Q1a[]+E
 45
 >?Q$'5000T!t,-666T!W-666r   c                  (   [        S[        5      R                  5       / :X  d   e[        S[        5      R                  5       / :X  d   e[        [        S-  S-
  [        5      R                  5       SS/:X  d   e[        [        S-  S-   [        5      R                  5       S[        -  S[        -  /:X  d   e[        [        S-  S-
  [        5      R                  5       n U SS/:X  d   e[        [        S-  S-   [        5      R                  5       n U S[        -  S[        -  /:X  d   e[        [        S-  S-  [	        SS5      -
  [        5      R                  5       n U SS/:X  d   e[        [        S-  S-  [	        SS5      -   [        5      R                  5       n U S[        -  S[        -  /:X  d   e[        [        S-  S[        -  -   [        5      R                  5       SS[        -  -   SS[        -  -
  /:X  d   e[        [        S-  S[        -  -   [        [        S9R                  5       SS[        -  -   SS[        -  -
  /:X  d   e[        S[        -  S	-   5      R                  5       S
/:X  d   e[        [        S-  [        -   S-   SS9n [        S5      n[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      S:X  d   e[        U S   5      [        S
S5      :X  d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      [        S
S5      :X  d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        S5      n[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      S:X  d   e[        U S   5      [        S
S5      :X  d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      [        S
S5      :X  d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        U S   5      R                  SU5      [        R                  L d   e[        [        S 5        [        [        S 5        [        [        S-  S-
  5      SS/:X  d   e[        [        S-  S-
  5      n U SS/:X  d   e[        [        [        -   5      S[        -  /:X  d   e[        [        S[        -  -   5      S[        -  /:X  d   e[        [        S 5        [        [        S-  S-
  5      nUR                  S5      UR!                  5        Vs/ s H  o3R"                  " S5      PM     sn:X  d   e[%        [        [        S-  S[        S-  -  -   S[        S-  -  -   S[        S -  -  -   S![        S"-  -  -   S#[        S$-  -  -   S%[        S-  -  -   S&[        S-  -  -   S'-   5      R                  S5      5      S(:X  d   e[%        [        S)[        S-  -  S-
  5      R                  5       5      S*:X  d   e[        S+5      n[        [        [        U-  -   S,S9u  n['        U[        U-  -   5      S-:  d   eg s  snf ).Nr   r   r         r   r   r   r|  r  g      r   )nz1e-5ghW!'gJ5ogJ5o?gP?gg'r>  gg'?z1e-6c                  T    [        [        [        -   [        5      R                  5       $ r   r   r   r   r5   r   r   r   r   test_nroots.<locals>.<lambda>l  s    QUA 5 5 7r   c                  J    [        [        [        -   5      R                  5       $ r   rR  r   r   r   r   rS  m  s    QU0B0B0Dr   g       c                      [        S5      $ Nr   r5   r   r   r   r   rS  w  s    F1Ir   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]z53.000000000000000000000000000000000000000000000000001i,  gYn)r   r   r5   rf   rh   re   rp   
epsilon_eqrm   truero   falser|   rI   r?   rG   r3   rP  strr   )rE  r  r   r   r  r  s         r   test_nrootsr\  8  s   1:"$$$1:"$$$1q!##%$4441q!##%$q&#a%888A1$$&ET3KA1$$&ET!VSUO###Aa(1a.(!,335ET3KAa(1a.(!,335ET!VSUO###1qs
A%%'D3q5L#A++FFFF	1qs
A$$*FHAsSU{0KL L L A##%$///1a4!8a<1%E
-CeAh<""8S1QVV;;;eAh<1eAh<5q>)))eAh<""8S1QVV;;;eAh<5q>)))eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;eAh<""8S1QVV;;;
-CeAh<""8S1QWW<<<eAh<1eAh<5q>)))eAh<""8S1QWW<<<eAh<5q>)))eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<eAh<""8S1QWW<<<
;78
&(DE!Q$(c{***1a4!8ET3K!a%=T!VH$$$!ac'?tAvh&&&
?-. 	QTAXA88A;1;;=9=a33q6=9999tArEBq"uH$s1b5y042:=ad
AqD[!#)!Q$;/18A> q	    tE!Q$JM"))+,1XYYY 	EFA
QqSC
 CQq1Q3w<&    :s   (`c                  >   [         S-  S[         S-  -  -
  S[         S-  -  -   [         S-  -
  n [        U 5      R                  5       [        R                  S[        R
                  S0:X  d   e[        U 5      [        R                  S[        R
                  S0:X  d   eg )Nr  r>  r   r   )r   r   r6   rm   r|  r   r   s    r   test_ground_rootsr^    s|    	1qAv!Q$A%A7!aeeQ%::::?quua3333r   c                  .  ^ [         S-  [         S-  -
  S-   m[         S-  [         -
  S-   S-  n [         S-  S-   S-  n[         S-  [         -   S-   S-  n[         S-
  S-  n[        TS5      T:X  d   e[        [        U4S j5        [        [        U4S j5        [	        [        TS5      5      U :X  d   e[	        [        TS5      5      U:X  d   e[	        [        TS5      5      U:X  d   e[	        [        TS5      5      U:X  d   e[        [
        S 5        g )	Nr>  r   r   c                     > [        T S5      $ rV  r7   r   s   r   r   +test_nth_power_roots_poly.<locals>.<lambda>  s    3Aq9r   c                  $   > [        T [        5      $ r   )r7   r   r   s   r   r   rb    s    3Aq9r   r   r  c                  D    [        [        [        -   S[        [        5      $ r  )r7   r   r   r   r   r   r   rb    s    0D	Aq!Q1r   )r   r7   r|   r  r/   r?   )f_2f_3f_4f_12r   s       @r   test_nth_power_roots_polyri    s	   	1q!taAa4!8a<!
Ca4!8a-Ca4!8a<!
CEA:D1%***
:9:
:9:&q!,-444&q!,-444&q!,-444&q"-.$666
& ) r   c                      [        [        S-  S-
  5      n U R                  SS/5      SS/:X  d   eU R                  / SQ5      SS/:X  d   eU R                  / SQ5      SS/:X  d   eU R                  / SQ5      SS/:X  d   e[        [        S-  S-   5      n U R                  SS	/5      / :X  d   e[        [        S-
  S-  5      n U R                  / S
Q5      S/:X  d   e[        [        S-  S-
  5      n U R                  SS/5      SS/:X  d   eg )Nr>  r   r   )r   r   r   r>  )r   r   r   r   r   r   )r;  r  r   r   r   r   r   r;  )r   r   r   r   r   )r   r   which_real_rootsr   s    r   test_which_real_rootsrl    s   QTAXAq"g&1b'111m,B777232w>>>/0RG;;; 	QTAXAq"g&",,, 	acAXAm,333 	QTAXAq!f%!Q///r   c                     [        [        S-  S-
  5      n U R                  SS[        [        * /5      SS[        [        * /:X  d   eU R                  [        [        [        * SS/5      [        [        * SS/:X  d   e[        [        S-  S-   5      n U R                  [        [        * [        S-  /5      [        [        * /:X  d   e[        [        [        -
  S-  5      n U R                  [        [        SSS/5      [        /:X  d   e[        [        S-  S-   5      n U R                  [        S-  [        * S-  /5      [        S-  [        * S-  /:X  d   eg )Nr>  r   r   r   r   )r   r   which_all_rootsrf   r   s    r   test_which_all_rootsro    s-   QTAXAaQ^,BA2>>>aQB2./Ar1b>AAAQTAXAa!QqS\*q1"g555 	acAXAaAr1-.1#555 	QTAXAacA2a4[)acA2a4[888r   c                     [        [        S-  [        S-  -   [        S-  -   [        -   S-   5      n U R                  n[        S[        -  [
        -  S-  5      n[        U R                  5       5       VVs/ s H  u  p4U" XB5      (       d  M  UPM     snnS/:X  d   e[        [        S 5        [        [        S 5        [        [        S 5        [        [        S	 5        [        [        S
 5        g s  snnf )Nr>  r   r   r   r   c                  L    [        [        S-   [        S9R                  SS5      $ Nr   r   r   )r   r   rQ   	same_rootr   r   r   r    test_same_root.<locals>.<lambda>  s    4Ab)33Aq9r   c                  \    [        [        S-  S-   [        S5      S9R                  SS5      $ )Nr   r   r   r   r   )r   r   rO   rs  r   r   r   r   rt    s$    41qA/99!Q?r   c                  R    [        [        S-  S-   [        S9R                  SS5      $ Nr   r   r   r   )r   r   rR   rs  r   r   r   r   rt    s     4Q
40::1a@r   c                  n    [        [        [        S-  -  S-   [        [           S9R	                  SS5      $ rw  )r   r   r   rP   rs  r   r   r   r   rt    s(    4AqD1RU3==aCr   c                  Z    [        [        [        -  S-   [        S9R	                  SS5      $ rr  )r   r   r   rP   rs  r   r   r   r   rt    s     4A	"-771=r   )r   r   rs  rq   rf   rj   	enumerater3   r|   rG   rI   r?   )r   r   r0r  r  s        r   test_same_rootr|    s    QTAqD[1a4!#a'(A	
B	QURZ!^	B#AKKM2@2$!biA2@QCGGG
?9;
;?A
;@B
;CE
&=? As   5C3C3c                      [        [        S-  S-
  [        S-
  -  R                  [        [        S[        S5      -   -  05      5      n [	        U [        5      S[        * S[        S5      -   -  S-  S-   S4[        * S[        S5      -   -  S-
  S4[        * S[        S5      -   -  S-   S4/4:X  d   e[        [        S-  S-
  [        S-
  -  R                  [        [        SS[        SS5      -  -   -  05      5      n [	        U [        5      b   eg )Nr   r   r  r>  )rb   r   r  rs   r=   rh   r   s    r   test_torational_factor_listr~    s
   Aa!A#$$a1tAw;%89:A"1a(R
Qa[	!	a	#
Qa[	A	q!
Qa[	A	q!2# -$ $ $ $ 	Aa!A#$$a1q(1a./@+@(A%BCDA"1a(000r   c            	         [        S5      S:X  d   e[        S5      S:X  d   e[        [        5      [        :X  d   e[        [        5      [        L d   e[        [        S 5        [        S5      =n S:X  d   e[        U [        5      (       d   e[        S[        5      =n S:X  d   e[        U [        5      (       d   e[        S[        5      S	:X  d   eS
[        S-  -  S
-
  S[        -  S-
  S[        -  S-   S4u  pp4XX44 Vs/ s H  n[        U[        5      PM     snu  pgpUR                  U5      SX4:X  d   e[        X45      SX44:X  d   e[        X4[        5      SX44:X  d   e[        X4[        45      SX44:X  d   e[        Xg45      =n SX4:X  d   e[        U [        5      (       d   e[        X4SS9SX4:X  d   e[        Xg4SS9SX44:X  d   e[        S-  S-
  [        [        S5      -   -  n[        U5      U:X  d   e[        USS9[        [        S5      -
  :X  d   e[        S-  S-
  [        [        S5      -
  -  n[        U5      U:X  d   e[        USS9[        [        S5      -   :X  d   e[        [        S-  S
-  S-
  [        S-  S-
  45      S[        S-   S4:X  d   e[        [        S-  [        -
  [        [        -
  -  5      S[        [        -
  -  [        S-  [        -
  -  :X  d   e[        [        S-  [        S-  -
  [        [        -
  -  [        5      [        [        -   :X  d   e[        [        S-  [        S-  -
  [        [        -
  -  [        5      [        [        -   :X  d   e[        [        S-  [        S-  -
  [        [        -
  -  5      [        [        -   :X  d   e[        [        S-  S-
  [        S-  S-
  -  5      [        S-  [        -   S-   [        S-   -  :X  d   e[        [        S-  S-  [        R                  -
  [        S-  S-
  -  5      [        S-  [        -   S-   S[        -  S-   -  :X  d   e[        [        S[        -  5      S[        [        5      -  -   S-   [        [        5      S-   -  5      [        [        5      S-   :X  d   e[        [        S-  [        S-  -
  [        5      n[        [        [        -
  [        5      n[        [        [        -   [        SS9n[        S[        SS9n[        X45      SXg4:X  d   e[        S-  [        S5      S-
  [        S-  -  -   S[        S5      -  S-   [        -  -
  S[        S5      -  -
  n[        S-  S-
  n[        X4SS9S[        S-  S[        -  -
  S-
  [        [        S5      -
  4:X  d   e[        S[        -  S-   [        5      n[        [        S-  * [        S-  -   [        S-  -   [        S-  -
  S[        S-  -  -   S[        -  -
  S-   [        5      n[        X45      SU* U* 4:X  d   e[        [        S-  S-   [        5      n[        [        S-  S-   [        5      nUR                  U5      [        S5      S-  [        [        S-   [        [        S9[        [        S-   [        [        S94:X  d   eUR                  USS9[        S[        -  S-   [        [        S9[        S[        -  S-   [        [        S94:X  d   eS[        -   S[        -   SSS4S[        -   S[        -
  SS[        -
  S[        -   4S[        -
  S[        -   SS[        -
  S[        -   4S[        -
  S[        -
  SSS4/n
U
 H  u  ppn[        X45      SX44:X  d   e[        U[        5      n[        U[        5      n[        U[        5      n[        U[        5      nUR                  U5      XU-  U4:X  d   eUR                  R                  UR                  5      UR                  UR                  4:X  d   eUR                  R                  UR                  SS9UR                  UR                  4:X  a  M   e   [        [        [        SS9n[        S[        SS9nUR                  U5      S[        [        [        SS9[        S[        SS94:X  d   eUR                  USS9[        [        [        SS9[        S[        SS94:X  d   e[        S[        -  [        -  [        -   [        SS9n[        S[        S-  -  [        -  [        SS9nUR                  USS9[        S[        -  S-   [        SS9[        S[        -  [        -  [        SS94:X  d   eS[        -  S
[        -  -
  S[         [        -
  S-  -  -   * [         [        -
  [         * [        -   S-   -  -  n[        U5      R"                  S:X  d   e[%        [        S -
  5      n[%        [        S -   5      n	SUS-  -  S-   US-  * S-   -  U	S-  -  S-  SUS-  -  S-   SU	S-  -  S-   -  U-  U	-  -   SUS-  -  S-   US-  -  U	S-  -  -
  SU	S-  -  S-   U	S-  * S-   -  US-  -  S-  -   SU	S-  -  S-   US-  -  U	S-  -  -
  S[        US-  U	S-  -  S!-   5      -  -  SUS-  -  S-   * U-  U	S-  -  S-  SU	S-  -  S-   US-  -  U	-  S-  -
  SUS-  -  S-   U-  U	S-  -  S-  SU	S-  -  S-   US-  -  U	-  S-  -   -  SUS-  U	S-  -  S!-   ['        SS5      -  -  -  -   n[        U5      R"                  S:X  d   e[)        S"SS#9n[+        U[        S-  S-
  -  [        S-   -  [        S:  4[        S-   [        S-  S[        -  -   -  S45      n[+        U[        S-
  -  [        S:  4S[        -  S45      n[        U5      U:X  d   e[        SU-  5      SU-  :X  d   e[        SU-   5      SU-   :X  d   e[        [        S-  S-
  [        S-   -  U-  5      [        S-
  U-  :X  d   e[        [        S-  S-
  [        S-   -  U-   5      [        S-
  U-   :X  d   e[+        [        S-  S-
  [        S-   -  [        S:  4[        S-   [        S-  S[        -  -   -  S45      n[+        [        S-
  [        S:  4S[        -  S45      n[        U5      U:X  d   e[        SU-  5      SU-  :X  d   e[        SU-   5      SU-   :X  d   e[        [        S-  S-
  [        S-   -  U-  5      [        S-
  U-  :X  d   e[        [        S-  S-
  [        S-   -  U-   5      [        S-
  U-   :X  d   e[        S$SS%9n[        USS&9[        R,                  L d   eUR.                  " [        S5      [        R,                  L d   e[1        U5      [        R,                  L d   e[3        S'SS5      n[        US(   S-   5      US(   S-   :X  d   e[5        US)   US*   S-  US+   -  -   5      SUS,   -  [         -  -
  n[        U5      [         [5        US)   US*   S-  US+   -  -   5      -  SUS,   -  -
  [         -  :X  d   e[        [        S-  S-   [        [6        -
  -  5      [        [6        -   :X  d   eg s  snf )-Nr   r   c                      [        S5      $ )Nr   r   r   )r8   r   r   r   r   test_cancel.<locals>.<lambda>  s	    vi0r   r  r  r   rG  r   rH  r>  r   r   Tr&  F)r#  r   r`  r   r   r  r  r  r  r   )includer<  r   rb  r   g{Gzt?r4  r  rf  )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>  r1  )r>  r   r=  )r8   r   ri   r|   r  r   r  r   rs   r   rm   r  rq   r   rQ   r   r   is_Mulrr   rh   rn   rt   NaNr  ry   rw   ru   rf   )r   r   r   r   r   r   re  r/  r  r0  pairsr:  pfpgpppqrf  r2  r3  r4  p4r  exprs                          r   test_cancelr    sY   !9>>!9>>!9>>":
:01 f~A)+++a fa  AY...a&!	)))1a4!QqS1WacAgq0JA!()a|5|!41:|5JA!88A;1a)###1&>aY&&&1&!A	)))1&1$Aq9,,,qf~A1a)+++a1&%!Q2221&&1a)333	
AAQK A!9>>!E"a$q'k111	
AAQK A!9>>!E"a$q'k1111a46A:qsQw'(QAqM999 1a4!8a!e$%AEAqD1H)====1a4!Q$;Q'+q1u4441a4!Q$;Q'+q1u4441a4!Q$;Q'(AE1111a4!8adQh'(QTAX\AE,BBBB1a46AFF?QTAX./AqD1HqL1Q373KKKK3qs8aAh&*SVaZ89SVaZGGGQTAqD[!AQUAAQUAg&AQ'"A1&>aY&&&	1Q!QT!!QtAwY]A$55$q'	AA	1qA1&D)aA!aT!W-MMMMRTAXqAadUQT\AqD 1a4'!AqD&01Q36:A>A1&>a!aR[(((QqS1WaAQqS1WaA88A;1Q46QUAb!QUAb!# # # # 88At8$QqS2Xq$QqS2Xq$)& & & &
 
QAq!Q	
QAr2a4A&	
QAr1Q3!$	
QAq!Q	E #eqf~!Q***!QZ!QZ!QZ!QZyy}b" 5555vv}}RVV$(8888vv}}RVVT}2rvvrvv6FFFF # 	Q'"AQ'"A88	$q!G,d1a.HIJ J J88At8$Q'"DAg$>)@ @ @ @ 	QqSUQY'*AQq!tVAXq)A88At8$QqS1Wa($qs1ua*H)J J J J Q$1*ua!eaZ'
'(1q5A26A:*>?A!9t###QWAQWA
QT'A+A		"1a4	'	)R1Wq[2ad7Q;,G,I!,K	KrRSUVRVwYZ{\]_`\`N`abdeaeNe	eiklmoplpipstitxy{|x|w|  @A  xA  iB  CD  FG  CG  iG  HI  iI  
I  MO  PQ  ST  PT  MT  WX  MX  Z[  ]^  Z^  L^  _`  bc  _c  Lc  
c  fg  hl  mn  pq  mq  rs  uv  rv  mv  y  m  h@  f@  	Aad7Q;	!Q$	q	 Bq!tGaKA#5a#7#9	9R1Wq[!OAqD<PQR<RVXYZ\]Y]V]`aVacdfgcgUghiUijkUk<klnoqrtuquvwyzvzqz  ~D  rD  GO  PQ  ST  GU  qU  oU  	V	VA!9t### 	s&A	Aq!taxL!a%(!a%0AEAqD1Q3J3G2N	OB	Aq1uIq1u%!T{	3B":!B$<1R4!b&>QV###1a4!8a!e$R'(QUBJ6661a4!8a!e$r)*q1ul:::	QTAXA&A.!a%!Q$1*1Et0L	MB	QUQU#ac4[	1B":!B$<1R4!b&>QV###1a4!8a!e$R'(QUBJ6661a4!8a!e$r)*q1ul::: 	
 H@ A 	AB !u%...66!Q<155   A;!%% 	S!QA!C&1*3!+++qw41qw../!ag+/AD$<Ac!D'AdGaK!D',A"ABBQ4[PTUUUUU1a4!8a!e$%Q...I 6s   {c            	         [        [        S-  S-
  [        S-   -  SS9[        S-   :X  d   e[        [        S-  S-
  SS9R                  [        [        S-   SS95      S[        [        S-   SS9[        S[        SS94:X  d   eg )Nr   r   r   )r8   r   r   r   r   r   test_cancel_modulusr    s    1a4!8a!e$a0AE9991q!$++DQ,BCQUA&Q1(=>? ? ?r   c                    ^ [        [        S-  S[        -  -   S-   [        SS9mTR                  5       u  pU T:X  d   eU[        R                  :X  d   e[        [        S-  S[        -  -   S-   [        SS9mTR                  5       u  pU TR                  5       :X  d   eU[        R                  :X  d   e[        [        S-  S-  [        S5      S-  [        -  -   [        S5      S-  -   [        SS9mTR                  5       u  pU [        [        S-  S[        -  -   S-   [        SS9:X  d   eUS:X  d   e[        [        S-  S-  [        S5      S-  [        -  -   [        S5      S-  -   [        SS9mTR                  5       u  pU [        [        S-  S[        -  -   S	-   [        SS9:X  d   eUS:X  d   e[        [        [        -  [        [        5      m[        [        U4S
 j5        [        [        SS9m[        [        U4S j5        g )Nr   r   r>  rP   r   rQ   r   r  r  c                  $   > T R                  5       $ r   )make_monic_over_integers_by_scaling_rootsr   s   r   r   @test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>      qJJLr   rT   c                  $   > T R                  5       $ r   r  r   s   r   r   r    r  r   )
r   r   r  rP   rU  r  rm   r   r|   r  )r   r   r   s     @r   .test_make_monic_over_integers_by_scaling_rootsr    s   QTAaCZ!^Qt,A668DA6M6;;QTAaCZ!^Qt,A668DA		;;QT!Vad1fqj 1Q46)1T:A668DAQTAaCZ!^Qt44446M6QT!Vad1fqj 1Q46)1T:A668DAQTAaCZ"_a55556M6QqS!QA
:LMQtA
:LMr   c                      [        [        S-  S-
  5      n U R                  SS9u  pU[        R                  :X  d   eUSL d   eg )Nr>  r   T)by_nameF)r   r   galois_groupr[   D4)r   r/  alts      r   test_galois_groupr    sG    Q!VaZA^^D^)FA%(((((%<<r   c            
      4  ^
^ S[         S-  -  [        S-  -   [         S-  -
  [        S-  -   n [         S-  [         -
  [        S-  [        -
  /nS[         -  S/n[         S-  [        S-  -   [        -   n[        X5      X#4:X  d   e[        X[         [        5      X#4:X  d   e[        U5      nUR	                  U 5      X#4:X  d   e[        S[         -  [         [        5      [        S[         [        5      /n[        [         S-  [        S-  -   [        -   [         [        5      n[        [        XSS9X#45      (       d   e[        [        X[         [        SS9X#45      (       d   e[        USS9n[        UR	                  U 5      X#45      (       d   eS[         S-  -  [        S-  -   S[        -  -   n [        [         S-  [        S-  -   S-
  [         [        -  S-
  /5      n[         S-  [         [        S-  -  S-  -
  [         [        -  S-  -   [        S-  S-  -   [        S-  S-  -
  [        S-  S-  -   [        S-  * S-  [        S-  S-  -   [        [        SS5      -  -   /nS	n[        X5      X#4:X  d   eUR	                  U 5      X#4:X  d   e[        XS
S9S   S	:w  d   eUR	                  U S
S9S   S	:w  d   eUR                  U 5      SL d   eUR                  U S-   5      S
L d   e[        SS/[         5      S/S	4:X  d   e[        [        S 5        [        S[         S-  -  [        S-  -   S[        -  -   5      n[        [        [         S-  [        S-  -   S-
  5      [        [         [        -  S-
  5      /5      m
[        [         S-  S[         -  [        S-  -  -
  S[         -  [        -  -   S[        S-  -  -   S[        S-  -  -
  S[        S-  -  -   [         [        SS9[        S[        S-  -  S[        S-  -  -   S[        -  -   [         [        SS9/n[        S	[         [        SS9nT
R	                  U5      Xg4:X  d   eT
R	                  U 5      u  p#[        S U 5       5      (       d   e[        U[
        5      (       d   e[        S[         S-  -  [        S-  -   S[        -  -   [         [        [        5      m[        [        U
U4S j5        [        S	[         [        5      nT
R	                  U5      u  p#[        S U 5       5      (       d   eUR                  (       d   e[        S[         [        5      n	T
R	                  U	5      u  p#[        U[
        5      (       d   eUR!                  5       S:X  d   e[        S U 5       5      (       d   eg )Nr   r>  r   r   Tr&  r  r   r   Fr  c                      [        SS/5      $ r  )r9   r   r   r   r   test_reduced.<locals>.<lambda>  s    ga!or   r  r  rQ   r   g      пg      ?c              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )r   r   r   r   s     r   r   test_reduced.<locals>.<genexpr>  s     .Aqz!T""As   c                  &   > T R                  T5      $ r   )reduce)G_polyf_wrong_genss   r   r   r    s    v}}\:r   c              3   8   #    U  H  oR                   v   M     g 7fr   r  r  s     r   r   r         $!Qyy!   c              3   8   #    U  H  oR                   v   M     g 7fr   r  r  s     r   r   r    r  r  )r   r   r9   r:   r  r   r   rh   containsr|   rB   r   r   r   r  r  r  )r   r/  r0  r  rS  f_polyQ_polyr_poly	zero_poly
const_polyr  r  s             @@r   test_reducedr    s   	!Q$A1q!t#A	
A1a4!8A	
1aA	1q!taA1=QF"""1A1&(((A88A;1&   	ac1a$q!Q-(AQTAqD[1_a#Aga$/!8888gaAq5v>>>>$AahhqkA6****	!Q$A!A!Q$A+/1Q37+,A	
A!Q$q1Q3q5	 1a46	)AqDF	2QT!V	;adU1Wq!tAv=MPQRZ[\^_R`P`=`aA	A1=QF"""88A;1&   1e$Q'1,,,88AE8"1%***::a=D   ::a!e%%%1qc11#q)))
56!AqD&1a4-!A#%&FtAqD1a4K!O,d1Q37m<=F1a4#a%1*$s1uQw.QT9C1HDs1a4xOQRTU^bc419s1a4x'#a%/AdCEF!Q$'F== V$4444==DA.A.....a!Q$A!+Q15L
::;Q1I==#DA$!$$$$$999aAJ==$DAa99;!$!$$$$$r   c                  b   [        / [        [        [        5      / :X  d   e[        [        S-  S-   [        S-  [        -  [        S-  -   /[        [        SS9S[        S-  -   S[        S-  -   /:X  d   e[        [        S-  S-   [        S-  [        -  [        S-  -   [        [        -  [        S-  -  /[        [        [        SS9S[        S-  -   [        S-  S[        S-  -   /:X  d   e[        [        S-  S-   [        S-  [        -  [        S-  -   /[        [        SS	S
9[	        S[        S-  -   [        [        5      [	        S[        S-  -   [        [        5      /:X  d   e[        [        S-  S-   [        S-  [        -  [        S-  -   [        [        -  [        S-  -  /[        [        [        SS	S
9[	        S[        S-  -   [        [        [        5      [	        [        S-  [        [        [        5      [	        S[        S-  -   [        [        [        5      /:X  d   e[        [        S-  S-
  [        S-  S-
  /5      [        S-
  /:X  d   e[        [        [        S-  S5      [        [        S-  S5      /5      [        S-
  /:X  d   eS[        S-  -  [        [        -  -   S[        -  -
  S-
  S[        -  S[        -  [        -  -   [        S-  -   [        S[        -  -
  [        [        -  -   S[        S-  -  -
  /n [        S-  [        S-  [        S-  -  -
  S[        -  [        S-  -  [        -  -
  S[        -  [        S-  -  -   [        S-  [        S-  -  -   S-
  n[        U [        [        [        SSS9nUS[        -   [        -   S[        -  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   [        S-  -   SS[        -  -   [        S-  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   SS[        -  -   S[        -  -   [        [        -  -   S[        S-  -  -   [        S-  -   [        S-  -   SS[        -  -   [        S-  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   [        S-  -   /:X  d   e[        X[        [        [        SSS	S9u  p4[        [        X2R                  5       VVs/ s H	  u  pVXV-  PM     snnU5      [	        USS9:X  d   e[        [        -  S[        -  -
  S[        S-  -  [        S-  -
  /n [        U [        [        SS9[        S-  S[        -  -
  [        S-  S[        S-  -  -
  [        [        -  S[        -  -
  /:X  d   e[        U [        [        SS9[        S-  S[        S-  -  -
  [        S-  * S[        S-  -  -   [        [        -  S[        -  -
  /:X  d   e[        U SS	S9[        S-  S[        -  -
  [        S-  S[        S-  -  -
  [        [        -  S[        -  -
  /:X  d   e[        S/[        5      S/:X  d   e[        [        S-  S[        -  -   /[        [        5      S[        S-  -  S[        -  -   /:X  d   e[        [        S 5        [        [        S-  S-
  [        S-  S-   /SS9[        S-   /:X  d   e[        [        S-  S-
  [        S-  S-   /SS9[        S-   /:X  d   e[        [        S 5        g s  snnf )Nr   r   r>  r   rX   r+  r   rZ   Tr)  r'  r   r  r  r   Fr@  r  )r   r  r'  r   )r)  rN   r5  r   c                      [        S/5      $ r  )r:   r   r   r   r   test_groebner.<locals>.<lambda>=  s
    hsmr   
buchbergermethodf5bc                  *    [        [        [        /SS9$ )Nunknownr  )r:   r   r   r   r   r   r   r  B  s    xAyAr   )r:   r   r   r   r   rl   r9   sumr   r'  r|   rB   r  )re  r   r/  r0  r  r   r   s          r   test_groebnerr    sn   B1a B&&&QTAXq!tAv1}-q!5Aa!Q$hPRUVXYUYPYEZZZZQTAXq!tAv1}ac!Q$h7Aq	RWY\]_`\`W`bcefbfhilmoplphpVqqqqQTAXq!tAv1}-q!5M	a!Q$h1	tBAIq!456 6 6QTAXq!tAv1}ac!Q$h7Aq	Y]^	b1a4iAq	!41aA#6QAXq!Q8OPQ Q Q QTAXq!tax()a!eW444R1a["QT1+./AE7:::	
1a4!A#!	a	1qs1uq!t!3Q1Wqs]Qq!tV5KLA	1q!tAqDy1Q3q!t8A:%1QT	1AqDAI=AAAq!Q%8AQQqS1QT6)AadF2Qq!tV;adBQqS1a4!AqD&(1QT61AadF:Qq!tVCa1fLQqS1Q31$qAv-14q!t;QqS1a4!AqD&(1QT61AadF:Qq!tVCadJL L L L
 1Aq!uDIDAQ1115a9KKKK	
1qsAadFQTM"AAq!9-	
A!QTAadF]AaC!A#I./ / /Aq!9-	
A!Q$A!Q$!ac	23 3 3AYd3	
A!QTAadF]AaC!A#I./ / / QCs"""QTCE\NAq)c!Q$hQ.>-????
34QTAXq!tax(>1q5'IIIQTAXq!tax(7AE7BBB
:AB' 2s   >\+
c            	      
   [         [        -   [        -   [        -   [         [        -  [         [        -  -   [        [        -  -   [        [        -  -   [         [        -  [        -  [         [        -  [        -  -   [         [        -  [        -  -   [        [        -  [        -  -   [         [        -  [        -  [        -  S-
  /n [	        U [         [        [        [        [
        S9nS[         -  S[        S-  -  -   S[        S-  -  -
  S[        -  -
  S[        -  S[        -  -   S[        S-  -  -
  S[        S-  -  -   S[        -  -   S[        S-  -  S[        S	-  -  -   S[        S
-  -  -
  S[        S-  -  -
  S[        -  [        S-  -  S[        -  -   [        S-  -
  S[        S-  -  -   S[        -  -   [        S-  [        S-  -
  [        S-  -
  S-   /n[	        U [         [        [        [        [        S9U:X  d   eUR                  [        5      U:X  d   eS[        S-  -  S[        S-  -  -   S[        S
-  -  -
  S[        S-  -  -
  S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -   S[        -  -
  S-   S[        -  [        S-  -  S[        -  [        S
-  -  -
  S[        -  [        S-  -  -   S[        -  [        S-  -  -   S[        -  [        S-  -  -   S[        -  [        S-  -  -
  S[        -  [        -  -
  S[        -  -   S[        S-  -  -
  S[        S
-  -  -
  S[        S-  -  -   S[        S-  -  -   S[        S-  -  -   S[        -  -
  S-   /n [	        U [        [        [
        S9nS[        -  S[        S-  -  -   S [        S
-  -  -
  S![        S-  -  -
  S"[        S-  -  -   S#[        S-  -  -   S$[        S-  -  -   S%[        -  -
  S&-   S[        S-  -  S[        S-  -  -   S[        S
-  -  -
  S[        S-  -  -
  S[        S-  -  -
  S[        S-  -  -   S[        S-  -  -   S[        -  -
  S-   /n[	        U [        [        [        S9U:X  d   eUR                  [        5      U:X  d   e[        S-  [        -
  S[        -  -
  S-   S'[        -  [        S-  -   [        -   S-
  /n [	        U [        [        [        S9n[        S-  [        -
  S[        -  -
  S-   [        S-  S[        -  -
  [        -   S-
  /n[	        U [        [        [
        S9U:X  d   eUR                  [
        5      U:X  d   eg )(Nr   r+  r>  r   r  r   r   r   r;  r  r  r  r  r     N   i  i   l   i   i  i8  i  r  rM     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   )re  r/  rg  s      r   	test_fglmr  E  s   	
QQ!ac	AaC!A#-qs1uqs1u}qs1u/Dqs1u/LaPQcRSeTUgXYkZAAq!Qe,A 	
!a1fqAv!#	!ac	AadFQq!tV#ac)	!Q$1b51QT6!AadF*	!AqD1Q3A!Q$&1,	21q!ta	A Aq!Q-22266#;!	
1a4"QT'	Bq!tG	#c!Q$h	.AqD	83q!t8	Cc!Q$h	NQTUVQV	VYZ	ZAad
SU1a4Z#a%1*,tAvad{:SU1a4ZG#a%PQSTPT*TWZ[\W\]^W^^A	1a4	ad(	#%(AX	.04QT		:<?1H	EGJ1u	MOQ	R	SA 	Aq&A 	a"4QT"99<NqRSt<SSQT!	"$71$<	=?STUWXTX?X	YQT!	"$9!$;	<>S	T 	
!Q$AqD2ad7"SAX-1a47#ad(BSAXMPSTUPUUXYY		A Aq!3'1,,,66#;!	
AAaC!	RTAqD[1_q01AAq$A 	
1q1Q3	1qs
Q	A
 Aq!5)Q...66%=Ar   c                     [        [        [        /[        [        5      SL d   e[        [        S-  [        S-  -   /[        [        5      SL d   e[        [        [        [        /[        [        [        5      SL d   e[        [        [        [        /[        [        [        [        5      SL d   e[        [        -  [        -
  [        [        -  [        -
  [        [        -  [        -
  /n [        U [        [        [        5      SL d   e[        S-  S[        -  [        -  -
  S-   [        [        S-  -  [        [        S-  -  -   S[        S-  -  S[        S-  -  -
  /n [        U [        [        [        5      SL d   eg )NTr   r   Fr   r  )r<   r   r   r   r   )re  s    r   test_is_zero_dimensionalr  o  s!   1vq!,4441q!t}a3u<<<1ay!Q2d:::1ay!Q15>>>	
1q!A#'1Q37#Aq!Q*d222	
A!A	1QT6AadF?AadFQq!tVO<Aq!Q*d222r   c                  *   [         [        -  S[        -  -
  S[        S-  -  [         S-  -
  /n [        U [         [        SS9n[        S-  S[        -  -
  [         S-  S[        S-  -  -
  [         [        -  S[        -  -
  /nU Vs/ s H  n[        U[         [        5      PM     nn[        U S/-   [         [        SS9U:X  d   e[	        U[
        5      SL d   e[        U5      S:X  d   eUS   US   :X  a  US   R                  (       a   eUS   US   :X  a  US   R                  (       a   eUS   US   :X  a  US   R                  (       a   eUSS  USS  :X  a  [        S USS   5       5      (       a   eUS S US S :X  a  [        S	 USS   5       5      (       a   eUR                  U:X  d   eUR                  U:X  d   eUR                  [         [        4:X  d   eUR                  [        :X  d   eUR                  [        :X  d   eX:X  d   eU[!        U5      :X  d   eX:X  d   eU[!        U5      :X  d   eU/ :w  d   e[        U [         [        SSS
9nUS   US   :X  a  US   R                  (       d   eUS   US   :X  a  US   R                  (       d   eUS   US   :X  a  US   R                  (       d   eUSS  USS  :X  a  [#        S USS   5       5      (       d   eUS S US S :X  a  [#        S USS   5       5      (       d   eg s  snf )Nr   rZ   r+  r   r   Tr   c              3   8   #    U  H  oR                   v   M     g 7fr   rw  r   r   s     r   r   %test_GroebnerBasis.<locals>.<genexpr>       %?Aiir  c              3   8   #    U  H  oR                   v   M     g 7fr   r  r  s     r   r   r    r  r  r  c              3   8   #    U  H  oR                   v   M     g 7fr   r  r  s     r   r   r         !;U))Ur  c              3   8   #    U  H  oR                   v   M     g 7fr   r  r  s     r   r   r    r  r  )r   r   r:   r   r   r;   r   rw  anyexprsr'  r   r   rP   r)  rZ   r  r   )re  r/  rS  r   r  s        r   test_GroebnerBasisr  }  s   	
1qsAadFQTM"AAq	*A	
A!QTAadF]AaC!A#I.A!"$A$q!Q-A$AGQ3q888a'4///q6Q;;Q41Q4<!,,Q41Q4<!,,Q41Q4<!,,QR5AabE>#%?12%?"?"???Ra5AbqE>#%?12%?"?"???77a<<77a<<66aV88r>>77g6M6a==6M6a==7N7Aq	6AQ41Q4<AaDLL((Q41Q4<AaDLL((Q41Q4<AaDLL((QR5AabE>c!;QqrU!;;;;;Ra5AbqE>c!;QqrU!;;;;;;E 	%s   Lc                     [        [        5      [        [        [        5      :X  d   e[        [        5      [        [        [        5      :X  d   e[        [        [        -   5      [        [        [        -   [        [        5      :X  d   e[        [        [	        [        5      -   5      [        [        [	        [        5      -   [        [	        [        5      5      :X  d   e[        [        [        -   [        S9[        [        [        -   [        [        5      :X  d   e[        [        [	        [        5      -   [	        [        5      S9[        [        [	        [        5      -   [	        [        5      [        5      :X  d   e[        [        [        -  S[        -  [
        S-  -  -   S-   5      [        [        [        -  S[        -  [
        S-  -  -   S-   [        [        [
        5      :X  d   e[        S[        [
        -   S-  -  S-
  5      [        S[        S-  -  S[        -  [
        -  -   S[
        S-  -  -   S-
  [        [
        5      :X  d   e[        [        [        [
        -   S-  -  S-
  5      [        [        [        S-  -  S[        -  [        -  [
        -  -   [        [
        S-  -  -   S-
  [        [        [
        5      :X  d   e[        S[        -  [        [
        -   S-  -  S-
  5      [        S[        -  [        S-  -  S[        -  [        -  [
        -  -   S[        -  [
        S-  -  -   S-
  [        [        [
        5      :X  d   e[        S[        [
        -   S-  -  [        -
  S-
  5      [        S[        S-  -  S[        -  [
        -  -   S[
        S-  -  -   [        -
  S-
  [        [        [
        5      :X  d   e[        [        [        [
        -   S-  -  [        -
  S-
  5      [        [        [        S-  -  S[        -  [        -  [
        -  -   [        [
        S-  -  -   [        -
  S-
  [        [        [
        5      :X  d   e[        S[        -  [        [
        -   S-  -  [        -
  S-
  5      [        S[        -  [        S-  -  S[        -  [        -  [
        -  -   S[        -  [
        S-  -  -   [        -
  S-
  [        [        [
        5      :X  d   e[        [        [        -  [        [        -   S-  -   [        [
        -   S-  -   5      [        S[        -  [
        -  S[        -  [        -  -   [        S-  -   [
        S-  -   S[        S-  -  -   [        [        [
        5      :X  d   e[        [        [        -  [        [        -   -  [        [
        -   S-  -  5      [        [        S-  [        S-  -  [        [        S-  -  [
        S-  -  -   [        [        S-  -  [
        S-  -  -   S[
        -  [        S-  -  [        S-  -  -   S[        -  [
        -  [        S-  -  -   [        [        S-  -  -   [        [        [
        5      :X  d   e[        [        [        [        -   [
        -   [        [        [
        5      5      [        [        [        -   [
        -   [        [        [
        5      :X  d   e[        [        [        -   S-  [        5      [        [        S-  S[        -  [        -  -   [        S-  -   [        [        [           S9:X  d   e[        [        [        -   S-  [        5      [        [        S-  S[        -  [        -  -   [        S-  -   [        [        [           S9:X  d   e[        S[        5      [        S[        5      :X  d   e[        [        S 5        [        [        [        -   [        [        5      [        [        [        -   [        [        5      :X  d   e[        [        [        -   [        [        5      [        [        [        -   [        [        5      :X  d   e[        S[        -  S-   S-  S	-  -   [        S
5      S	-  -   n [        U 5      R                  5       U R                  5       :X  d   e[        [        S-   -  [        S5      S-  -   n[        U5      R                  5       UR                  5       :X  d   eg )NrN  r   rR  r   r>  r   r   c                      [        S5      $ r  )r   r   r   r   r   test_poly.<locals>.<lambda>  r3  r   r   r  )r   r   r   r   ru   r   rP   r|   rE   rm   r  rb   )expr1expr2s     r   	test_polyr    s   7d1aj   7d1aj   A;$q1ua++++CF
tAAJ3q6::::A1a!eQ!2222CF
A'4CF
CFA+FFFF!ac!Q$h#$QqS1Q3q!t8^b-@!Q(JJJJ1q51*q !T!AqD&1Q3q5.1QT6*AA*Eq!%LLLL	1q51*q!!AqD&1Q3q57"2Qq!tV";a"?AqIJ J J!	A  qs1a4x!A#a%'1AaC1H<q@!QJK K K 	A  "1QT6AaCE>AadF#:Q#>#BAq!LM M M	A  "1QT6AaCE!G#3a1f#<q#@1#DaANO O O!QUQJ"Q&'4!AqD1Q3q570BQFQ$F 111 !1a,) ) ) ) !q1uqj AEA:-.QqSUQqSU]QT!AqD(1QT611a;< < <!QUQUQJ&'QT!Q$Y1a41$qAvad{2QqSAXT6 aCE!Q$J!"1a4()*Aq	22 2 2 QUQY1a()T!a%!)Q1-EEEEQ
A$q!tac!e|ad':Abe"LLLLQ
A$q!tac!e|ad':Abe"LLLL1:a###
_- Aq!QUAq 1111Aq!QUAq 1111 1q1Q1a'E; ELLN222qsGad1fE; ELLN222r   c            
         [        S[        S-   SS9n [        [        R                  [        5      [        :X  d   e[        [        R
                  [        5      [        * :X  d   e[        [        S5      [        5      S[        -  :X  d   e[        [        S5      [        5      S[        -  :X  d   e[        [        R                  S[        -  5      S[        -  :X  d   e[        [        S5      [        S-  5      [        :X  d   e[        [        S5      [        [        5      5      S[        [        5      -  :X  d   e[        [        S5      [        S-   5      U :X  d   e[        [        S[        -  5      S:X  d   e[        [        S-   [        S5      5      U :X  d   e[        [        R                  [        R                  5      [        R                  :X  d   e[        SSSS9n[        [        S5      U5      [        SUSS9:X  d   e[        SUSS9n[        [        R                  US	S
9[        [        R                  USS9:X  d   e[        [        R                  USS
9[        S[        [        R                  USS9SS9:X  d   eg )Nr   r   Fr
  r   rO  r   r   T)clear)
rd   r   rc   rm   r|  NegativeOneru   r  rk   r\   )r   r   r   s      r   test_keep_coeffr    s   Aq1uu%Aquua A%%%q}}a(QB...qvq!SU***qw"d1f,,,quuac"ac)))qtQqS!Q&&&qtSV$#a&000qtQU#q(((q!A#!###q1uad#q(((qvvquu%///Aq5!Aqua CA$>>>>Aq5!Aqvvq 
U+, , ,qvvq 
CE2UCD D Dr   c                      [         [        [        [        5      -  [        [         [        -  [        5      :X  d   e[        [        [        5      [         -  [        [         [        -  [        5      :X  d   eg r   )rf   r   r   r   r   r   test_poly_matching_consistencyr    sH     tAqz>T!A#q\)))1:>T!A#q\)))r   c            
      (   [        [        [        [        [        [        -  -
  [
        [        [        -  -
  -  5      [        /S95      [        * [        -  [        -  [        [        -  -
  [        [
        -  -   [        [        -  [
        -  -
  :X  d   eg )Nr   )rb   r/   r   rf   r   r   r   r   r   r   test_issue_5786r    sr    &	
QqS1qs7)*- .23Aa!A#!1Cac!e1KL L Lr   c                  .    " S S[         5      n [        [        [        [        -  -   -  nSS[        -   -  n[        U " U5      5      U " U5      :X  d   e[        X" U5      -   5      X " U5      -   :X  d   e[        X" U5      -  5      X " U5      -  :X  d   eg )Nc                       \ rS rSrSrSrg) test_noncommutative.<locals>.fooi  Fr   N)__name__
__module____qualname____firstlineno__is_commutative__static_attributes__r   r   r   foor    s    r   r  r   )r_   r   r   r8   )r  r  r   s      r   test_noncommutativer    s    d 	1qs7A	AE
A#a&>SV###!c!f*SV+++!CF(qQx'''r   c            	         [        [        [        S-  [        [        S-  -  -   [	        [        5      -   [        SS95       b   e[        [        [        S-  [	        S5      [        S-  -  [        [        5      -  -   S-   [        5      5       b   e[        [        [        [        5      5      b   e[        [        [	        S5      [        -  5      5      b   eg )Nr   r   rU   r   r   )r>   r   r   r   rs   ru   r   r   r   test_to_rational_coeffsr    s    QTAadF]T!W$a57:>? ? ? QTDGAqDLQ''!+Q/1489 9 9 d1aj)111d4719o.666r   c                      [        [        [        [        -   -  5      S[        S4[        [        -   S4/4:X  d   e[        [        [        [        -   -  5      S[        S-  [        [        -  -   S4/4:X  d   eg r  )r.   r   r   r,   r   r   r   test_factor_termsr    sf    q!a%y!a1a&1q5!*)=%>>>>Aq1uI11qs
A&7"8888r   c                  p   [        [        S-  S-   [        SS9R                  5       / SQ:X  d   e[        [        S-  [        -   S-   [        [        SS9R                  5       S// SS//:X  d   e[        [        S-  [        -   S-   [        [        [        SS9R                  5       S/// /S/S///:X  d   eg )Nr   r   rP   r   )r   r   r   r   r   )r   r   as_listr   r   r   r   r   test_as_listr    s    1q!D)113|CCC1q1a4088:sBA>OOOO1q1aAd3;;=78cURDA3*4MN N Nr   c                     [        [        S5      [        -  5      [        S5      [        S4/4:X  d   e[        [        S5      [        [        5      -  [        [        5      5      [        S5      [        [        5      S4/4:X  d   eg r/  )r.   rs   r   ru   r   r   r   test_issue_11198r    sd    tAwqy!d1gAx%8888tAws1v~s1v.47c!fa[M2JJJJr   c                      [        [        R                  " S5      [        -  5      n U R                  " 5       [        R                  " S5      [        -  :X  d   eg )NrB  )r   rj   evalfr   r  r   s    r   test_Poly_precisionr  #  s8    RXXc]1_A99;"((3-/)))r   c                      [        SS[        S5      -   -  [        5      [        SS[        S5      -   -  [        SS9:X  d   eg )Nr   r   rU   r   )r   rs   r   r   r   r   r   test_issue_12400r   )  s?    1T!W9q!Ad1gI$/0 0 0r   c                  d   [        [        S5      S[        S5      -   -  S-  [        S5      S[        S5      -   -  S-  5      [        SS5      S[        S5      -   -  :X  d   e[        [        S5      [        SS5      -  [        S5      [        SS5      -  5      [        S5      [        SS	5      -  :X  d   e[	        [        SS5      [        S5      -  [        SS5      [        S5      -  5      [        S5      [        S5      -  S-  :X  d   e[	        S[        S5      -  S[        S5      -  5      S
[        S5      -  :X  d   e[	        [        S5      SS[        SS5      -  -   -  S-  [        S5      SS[        SS5      -  -   -  S-  5      [        SS5      SS[        SS5      -  -   -  :X  d   e[        [        SS5      [        S5      -  [        SS5      [        S5      -  5      [        S5      S-  :X  d   e[        [        S5      [        S5      -  S-  [        S5      [        S5      -  S-  5      [        S5      S-  :X  d   e[        [        S5      [        S5      -  S-  [        S5      [        S5      -  S-  [        S5      [        S5      -  S-  /5      [        S5      [        SS5      -  :X  d   e[        [        S5      S[        S5      -   -  S-  [        S5      S[        S5      -   -  S-  [        S5      S[        S5      -   -  S-  /5      S[        S5      -   [        SS5      -  :X  d   e[	        [        SS5      [        S5      -  [        SS5      [        S5      -  [        SS5      [        S5      -  45      [        SS5      [        S5      -  :X  d   e[	        [        S5      SS[        SS5      -  -   -  S-  [        S5      SS[        SS5      -  -   -  S-  [        S5      SS[        SS5      -  -   -  S-  /5      [        SS5      SS[        SS5      -  -   -  :X  d   eg )Nr  r   r   r   r;  r>  r   r   r<  r  r  rY  r  r  r  rt  r  i  )r   rm   rs   rh   r   r   r   r   test_issue_14364r  .  s   qtQa[!!#QqT1tAw;%7%:;x2RSVZ[\V]R]?^^^^tAwx1~%tAwx1~'=>$q'(STVX/BYYYYx1~d1g%x1~d1g'=>!B%Q-PQ/QQQqay!DG)$47
222qtQHQN**+A-qtQHQN9J5J/KA/MNRZ[]_`RaefijltuvxylzizezR{{{{x1~d1g%x1~d1g'=>$q'"*LLLqtDH}Q!T"Xb 01T"Xb[@@@ !T"Xa1d2hq!A$tBx-/BCtBxPXYZ\^P_G____!a$q'k"1$adAQK&8&:AaD!d1g+<Nr<QRSYZ]abc]dYdfnoprufvXvvvvAtBx'!QR)@(1a.QUVXQYBYZ[_ghjlm_nostvow_wwww!a!Xa^++,Q.!a!Xa^:K6K0LQ0NPQRTPUWX[\^fghjk^l[lWlPmnoPopqu}  B  DE  vF  JK  NO  QY  Z[  ]^  Q_  N_  J_  v`  `  `  `r   c                  P   [        SSS9n SU S-  -  U S-  * [        SU S-  -  U S-  S-
  S-  -   5      -   S-   S-  -  SS[        SS	5      -  -  U -  U S-  * [        SU S-  -  U S-  S-
  S-  -   5      -   S-   [        SS	5      -  -  -
  S
U -  -   n[        USS9X S-  S-   -  :X  d   eg )Nr   Tr  r  r   r   r  r>  r   r;  r  )rn   rs   rh   r/   )r   r  s     r   test_issue_15669r  @  s    sT"Aq!tGadUT!AqD&AqD1Hq="899A=AA	!Xa^
A1utAadFadQh],B'CCaG(STVW.XXY[]^_[_`D$T"aAl222r   c            	         [        S5      n [        U S-
  5      n[        5          [        [        U S-   5      [        U S-   5      //5      nS S S 5        [	        [
        SS9   UW-  X!-  s=:X  a1  [        [        U S-  S-
  5      [        U S-  S-
  5      //5      :X  d   e   e S S S 5        g ! , (       d  f       Nh= f! , (       d  f       g = f)Nr   r   F)test_stacklevelr   )rn   r   r}   rv   r~   r{   )r   r   r  s      r   test_issue_17988r  G  s    sAQUA		!T!a%[$q1u+./0 
"	&	>1uK$q!tax.$q!tax.)I(J!KKKKKK 
?	> 
"	!	>	>s   'B-!AB>-
B;>
Cc                      [        S[        -   S[        -
  -  5      S[        -   :X  d   e[        S[        -   S[        -
  -  5      S:X  d   eg )Nr   r   r   r   )r8   rf   r   r   r   test_issue_18205r	  P  sD    1q51q5/"a!e+++1q51q5/"a'''r   c                      [         S-  S-   [         S-
  S-  -  [         S-
  S-  -  [         S-
  S-  -  n S[         S-  S-   S4[         S-
  S4[         S-  S[         -  -
  S-   S4/4n[        U 5      U:X  d   eg )Nr   r   r   r   r  )r   r,   )r   r  s     r   test_issue_8695r  U  s    	
Aa!eaZ1q51*,Az9A1a4!8Q-!a%adQqSj1na-@ABFA;&   r   c                  @  ^  [        [        5      S-  [        [        5      -
  S-   m [        [        U 4S j5        [        [        U 4S j5        [        [        U 4S j5        [        [        U 4S j5        [        [        U 4S j5        [        [        U 4S j5        g )	Nr   r   c                      > [        T SSS5      $ )Nr   r   r  r!  r  s   r   r   "test_issue_19113.<locals>.<lambda>]  s    KAq$$?r   c                     > [        T SS5      $ )Nr   r   r.  r  s   r   r   r  ^  s    KB$:r   c                     > [        T 5      $ r   rB  r  s   r   r   r  _  s	    JrNr   c                     > [        T 5      $ r   rW  r  s   r   r   r  `  s	    F2Jr   c                     > [        T 5      $ r   )r6   r  s   r   r   r  a  s
    L$4r   c                     > [        T S5      $ r  ra  r  s   r   r   r  b  s    $8Q$?r   )ru   r   r|   rG   r  s   @r   test_issue_19113r  [  s`    	QSV	a	B
??@
?:;
?23
?./
?45
??@r   c                     S[         S-  -  S[        S5      -  [         -  [        -  -
  [        S-  -   n [        U [        S5      S9S[         [        S5      [        -  S-  -
  S-  -  :X  d   e[        * [
        -  [         -  [
        [        -  -
  [         [        -  -   [        [        -  [        -  -
  n [        U [        S9[         [        [        -  -
  [        * [
        -  [        -   -  :X  d   eg )Nr   r   )r   rs   r   r/   rf   r   r   r   s    r   test_issue_19360r  e  s    	!Q$471QA%A!tAw'1a4719Q;.?!-C+CCCC	
1Q1qsQqSU"A!q!a!A#g1q%9999r   c                      [        [        [        -   [        [        [        5      n U R                  " 5       nX:X  d   S5       eU R
                  UR
                  :X  d   S5       eg )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  m  sW    Aq!QD99;D< 424<99		! ECE!r   c                      [        [        [        -   [        [        [        5      n [        R
                  " [        R                  " U 5      5      nX:X  d   S5       eU R                  UR                  :X  d   S5       eg )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  v  sg    Aq!QD<<T 23L :8:99))) KIK)r   c                  |    [        [        [        S-   -  [        S-  -
  [        -
  [        5      n U [        * :X  d   eg r  )r   r   ri   )r  s    r   test_issue_20389r!    s2    AQK!q&(1,a0FbS==r   c                      SSK Jn   U " S5      u  p[        S[        U-  U-  -   USU-  5      nUR                  " 5       [        S5      :X  d   eg )Nr   )symbolszw Rr   r   )sympy.core.symbolr#  r   rf   r   rm   )r#  r   r1  r   s       r   test_issue_20985r%    sF    )5>DAac!eQ!$D;;=AaD   r   (Y  __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~   r   r   	sympy.abcr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  rH  rK  rP  rS  rV  rh  rl  ro  rs  rv  rx  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  r3  r@  rC  rJ  rP  rV  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  rG  rI  rT  rW  r\  ra  rg  ro  rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r0  r5  r;  rF  rM  r\  r^  ri  rl  ro  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   <module>rH     s   H                :    ( $ > > > 3 9 5 5 <  % '   : : + D D   $ " $ 9 6 6 9 : 8 ' ; * , . >  6 5 5 5
*%ZS$YNxS>A 	P 	P A A7K2UKp0JD3
2
T-n6JB (F>
;G B
A4466
G
KG,","* 7:
6%.*:)
(NVF+B2
ACPD=04'(
@
JKET	@!"/,74F
8	SIE(4F&57n6&I8
K	8)7B:;$	=,<	=A'&C>
+(D$?$A8Lt1Hh,4^v*r(DV;7674
"@0@*g,T2. 0F38>*
$0><GJN<F:0"O8M`eWP;<S
nNb%FP!4H.&D#8L7@Q!h4*0*9"?$	1w/t?N8C%L-C`'T3'<T/3dD,*L
(79NK
*0
`$3L(
!A:EK
!r   