o
    3Ih                    @   s`
  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZSmTZTmUZUmVZVmWZWmXZX ddlYmZZZ dd	l[m\Z\ dd
l]m^Z^m_Z_m`Z` ddlambZb ddlcmdZd ddlemfZf ddlgmhZh ddlimjZj ddlkmlZlmmZmmnZn ddlompZpmqZq ddlrmsZsmtZtmuZumvZvmwZwmxZx ddlymzZz ddl{m|Z| ddl}m~Z~ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd lmZ dd!lmZ dd"lmZ dd#lmZmZmZmZmZ dd$lmZmZmZmZmZmZmZmZmZmZmZ d%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zed5d6 Zed7d8 Zd9d: Zd;d< Zd=d> Zd?d@ ZdAdB ZdCdD ZdEdF ZdGdH ZdIdJ ZdKdL ZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZddĄ ZddƄ ZddȄ Zddʄ Zdd̄ Zdd΄ Z ddЄ Zdd҄ ZddԄ Zddք Zdd؄ Zddڄ Zdd܄ Zddބ Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd  Z)d!d" Z*d#d$ Z+d%d& Z,d'd( Z-d)d* Z.d+d, Z/d-d. Z0d/d0 Z1d1d2 Z2d3d4 Z3d5d6 Z4d7d8 Z5d9d: Z6d;d< Z7d=d> Z8d?d@ Z9dAdB Z:dCdD Z;dEdF Z<dGdH Z=dIdJ Z>dKdL Z?dMdN Z@dOdP ZAdQdR ZBdSdT ZCdUdV ZDdWdX ZEdYdZ ZFd[d\ ZGd]d^ ZHd_d` ZIdadb ZJdcdd ZKdedf ZLdgdh ZMdidj ZNdkdl ZOdmdn ZPdodp ZQdqdr ZRdsdt ZSdudv ZTdwdx ZUdydz ZVd{d| ZWd}d~ ZXdS (  zBTests for user-friendly public interface to polynomial functions.     N)<PolyPurePolypolyparallel_poly_from_exprdegreedegree_listtotal_degreeLCLMLTpdivprempquopexquodivremquoexquo
half_gcdexgcdexinvertsubresultants	resultantdiscriminant	terms_gcd	cofactorsgcdgcd_listlcmlcm_listtruncmoniccontent	primitivecompose	decomposesturmgff_listgffsqf_normsqf_partsqf_listsqffactor_listfactor	intervalsrefine_rootcount_roots	all_roots
real_rootsnrootsground_rootsnth_power_roots_polycancelreducedgroebnerGroebnerBasisis_zero_dimensional_torational_factor_listto_rational_coeffs)MultivariatePolynomialErrorExactQuotientFailedPolificationFailedComputationFailedUnificationFailedRefinementFailedGeneratorsNeededGeneratorsErrorPolynomialErrorCoercionFailedDomainErrorOptionError	FlagError)DMPfield)FFZZQQZZ_IQQ_IRREX)	RealField)ComplexField)lexgrlexgrevlex)S4TransitiveSubgroups)Add)_aresame)Tuple)Expr)
Derivativediffexpand)_keep_coeffMul)FloatIIntegerRationaloopi)Pow)Eq)S)Symbol)imre)exp)tanh)sqrt)	Piecewise)sin)Matrix)MatrixSymbol)rootof)signsimp)iterable)SymPyDeprecationWarning)raiseswarns_deprecated_sympywarnstooslowXFAIL)abcdpqtwxyzc                 C   s.   t | |D ]\}}t|| dkr dS qdS )Ng|=FT)zipabs)r   r   uv r   `/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqY   s
   r   c                 C   s`   t | t |kr.t| r"t| t|kr tdd t| |D S dS t| to-| j|ddS dS )Nc                 s   s    | ]
\}}t ||V  qd S N)
_strict_eq).0r   r   r   r   r   	<genexpr>d   s    z_strict_eq.<locals>.<genexpr>FTstrict)typery   lenallr   
isinstancer   eq)r   r   r   r   r   r   `   s   r   c                  C   s   t tt} t  | tt  W d    n1 sw   Y  t  | tt  W d    n1 s2w   Y  t  | tt  W d    d S 1 sLw   Y  d S r   )r   r   r|   rp   r   r   r   r   test_Poly_mixed_operationsm   s   
"r   c                  C   sl  t d} tjdddt| djt| d| dg| ksJ tjdddt| djt| d| dg| ks6J tjdddt| djt| d| dg| ksOJ tjdddt| djt| d| dg| kshJ tjdddttf| djt| d| d	g| dgg| ksJ tjdddtd
jttdtdgtksJ tjdddtddjttdtdgtksJ tjdddttdjttdtdgtksJ tjdddttdjttdtdgtksJ tjdddtd
jttdtdgtksJ tjdddtddjttdtdgtksJ tjdddttdjttdtdgtks8J tjdddttdjttdtdgtksRJ tjdt	titddtt	tt tddkslJ tjdtitddttt tddksJ tjddittfddttt ttddksJ tjdtitt
fddttt tt
ddksJ d S )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rM   r   F)r   	compositerT   r   r   rO   r   r   )rN   r   	from_dictr   reprK   r   rO   rP   rt   r   Kr   r   r   test_Poly_from_dictw   s    0







r   c                  C   s  t d} tjddgt| djt| d| dg| ksJ tjddgt| djt| d| dg| ks4J tjddgtdjttdtdgtksKJ tjddgtddjttdtdgtkscJ tjddgttdjttdtdgtks{J tjddgttdjttdtdgtksJ tjd	d
gtdjttd
gtksJ tjd
d	gtdjttd
tdgtksJ t	t
dd  d S )Nr   r   r   r   r   r   Tr   r         ?        c                   S   s   t jg gttfdS )Nr   )r   	from_listr   r   r   r   r   r   <lambda>       z%test_Poly_from_list.<locals>.<lambda>)rN   r   r   r   r   rK   rO   rP   rS   r{   r>   r   r   r   r   test_Poly_from_list   s   00.000(.r   c                      s  t td ttdt td tddt tt tttdtd t ks)J t j djt d dg ks>J t jtdjttdtdgtksSJ t jtdjttdtdgtkshJ t jtdkssJ t jt djt d dg ksJ t jttdjttdtdgtksJ t jttdjttdtdgtksJ t jtdt td td	dksJ t	t
 fd
d t	t
fdd t	t
fdd t jttfdt td ttddksJ t jttftdt td ttddksJ t jttftdt td ttddks&J t jttfddt td ttddks=J td t ksKJ t jtdjttdtdgtksaJ t	t
fdd t j djt d dg ksJ t jtdksJ t jttdjttdtdgtksJ t	t
fdd t jt djt d dg ksJ td t ksJ t jtdjttdgtdtdggtksJ t jtdjttdgtdtdggtksJ t j djt dg d dgg ks"J t jtdt tt ttt dks7J t	t
fdd t jttt dt tt ttt dksXJ t	t
fdd t jttt dt tt ttt dksyJ t	t
fdd t jtdt tt ttt dksJ t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jttfdksJ t jttftdjttdgtdtdggtksJ t jttftdjttdgtdtdggtks,J t jttf djt dg d dgg ksJJ t jttfdjttdgtdtdggtksgJ t jttftdjttdgtdtdggtksJ t jttftdjttdgtdtdggtksJ t jttf djt dg d dgg ksJ t jttfddjttdgtdtdggtksJ t jttfddjttdgtdtdggtksJ d S )N   r   r   r   modulusr   r   r   ZZ[x]c                      s   t jt dS Nr   r   	from_polyr   r   )r   fr   r   r          z%test_Poly_from_poly.<locals>.<lambda>c                         t j ttdS r   r   r   r   rO   r   r   r   r   r      r   c                      r   r   r   r   r   rP   r   r   r   r   r      r   rO   rP   r   r   zFF(3)c                      s   t j tdS Nr   )r   r   rP   r   gr   r   r          r   c                      r   r   r   r   r   rP   r   r   r   r   r      r   c                      r   r   )r   r   r   rO   r   hr   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                         t j tddS Nr   r   )r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   Tr   )r   r   rO   r   rN   r   r   rK   rP   r{   rG   r   r   )r   r   r   r   r   test_Poly_from_poly   s   ***,,,$*





,,.. 
 
6*



*




 

 

 
 

 

 

 

 

 r   c                  C   s8  t tdd  t tdd  td} tjtd | djt| d| dg| ks)J tjtd | djt| d| dg| ks@J tjtd t| djt| d| dg| ksXJ tjtd t| djt| d| dg| kspJ tjtt | djt| dg| d| d	gg| ksJ tjtt tt| djt| dg| d| d	gg| ksJ ttd jtt	dt	dgt	ksJ ttd jtt	dt	dgt	ksJ ttd tjtt	dt	dgt	ksJ ttd tjtt	dt	dgt	ksJ tjtd t	djtt	dt	dgt	ksJ tjtd t	djtt	dt	dgt	ks1J tjtd tt	djtt	dt	dgt	ksJJ tjtd tt	djtt	dt	dgt	kscJ tjtd ttt	djtt	dgt	dggt	ksJ tjtd ttt	djtt	dt	dggt	ksJ d S )
Nc                   S   s   t tjS r   )r   	from_exprrl   Zeror   r   r   r   r         z%test_Poly_from_expr.<locals>.<lambda>c                   S   s   t tdS Nr   )r   r   rl   r   r   r   r   r     r   r   r   r   r   r   r   )
r{   rD   rN   r   r   r   r   rK   r   rO   )F3r   r   r   test_Poly_from_expr  s&   ..008<**,.00228:r   c                  C   s   t td t d d} t td t d d}t| }t|}t| tt| ttdks.J t|tt|ttdks<J t| tddt| t|dksLJ t|tddt|t|dks\J d S )Nr   r   r   r   T	extension)rw   r   rP   algebraic_fieldr   r   rT   )r1r2K1K2r   r   r   test_Poly_rootof_extension1  s   

 $r   c                  C   sn   t td t d d} t td t d d}t| | }t| t | tddt| t | t|dks5J d S )Nr   r   r   Tr   r   )rw   r   rP   r   r   r   )r   r   K12r   r   r   ,test_Poly_rootof_extension_primitive_element<  s   4r   c                  C   s`   t td t d d} t| }t| tt| ttdksJ t| tddt| t|dks.J d S )Nr   r   r   Tr   )rw   r   rP   r   r   rT   )r   r   r   r   r   (test_Poly_rootof_same_symbol_issue_26808D  s   
$r   c                  C   s|   t td td  d d} t td td  d d}td  td  t|   | d| d   }|jtdd |ks<J d S )Nr   r   r   r   r   Tr   )rw   r   r   r   as_polyas_exprr   r   r   r   r   r   #test_Poly_rootof_extension_to_sympyM  s   *r   c                  C   sF  t t } t| td t| djt| td g| ksJ |  } t| td t| djt| td g| ks8J tt } t| td t| djt| td g| ksTJ |  } t| td t| djt| td g| kspJ t t} t| t dt dgt| djt| t dt dgg| ksJ |  } t| t dt dgt| djt| t dt dgg| ksJ tt} t| tdtdgt| djt| tdtdgg| ksJ |  } t| tdtdgt| djt| tdtdgg| ksJ t	t
} t| ddgt| djt| ddgg| ks!J d S )Nr   r   )rO   r   r   r   r   rK   	get_fieldrP   old_poly_ringr   re   )domr   r   r   test_poly_from_domain_elementV  s$   0000
@@
@B
6r   c                  C   s  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t td	d  t td
d  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  tdtdtksJ ttd  tt  t	 } tttt	dt| ksJ tt
ttt	gt| ksJ tttt	gt| ksJ tttt	ft| ksJ ti ttt} | jtttfkr|  dksJ tttt tt  tttttt tt  tksJ tdtd  dt  d dd g dks*J tdtd  dt  d d d g dksCJ tdtd  dt  d d!d g d"ks\J t td#d  tdtd  d$ ttdd$  d d d tdd$tdd$dgksJ ttdtd  d$ ttdd$  d d!d g d%sJ td&td  d't  d dd g dksJ td&td  d't  d d d g dksJ td&td  d't  d d!d g d"ksJ t td(d  td)td  d*t  d d d td+d,td-d,dgksJ td)td  d*t  d d!d g d.ks2J tdddd/ttttd t dt td   dt t  ttksWJ ttd d td0 ttkskJ dtd$  td1  td  td  d2 } t| td3d4d5tdtd$  td1  td  td  d td3d4d5ksJ t| td3d6d5tdtd$  d7td1   td  d7td   d td3d6d5ksJ d,d8 }td9t|d6d5 |d ksJ tttd t d:  tsJ tttd t t d:  tsJ d S );Nc                   S   s   t td ttS Nr   r   r   r   r   r   r   r   p  r   z"test_Poly__new__.<locals>.<lambda>c                   S   s   t tt tttt dS r   r   r   r   rO   r   r   r   r   r   r      c                   S   s   t tt tttt dS r   r   r   r   r   r   r   s  r   c                   S   s   t ttddS )NT)	symmetricr   r   r   r   r   r   u  r   c                   S   s   t td tdtdS )Nr   r   )r   r   r   r   rP   r   r   r   r   r   v  r   c                   S      t td ttddS )Nr   T)r   gaussianr   r   rO   r   r   r   r   r   x  r   c                   S      t td tdddS )Nr   r   T)r   r   r   r   r   r   r   r   y  r   c                   S   s   t td tttdgdS )Nr   r   r   r   )r   r   rO   rr   r   r   r   r   r   {      c                   S   s   t td tdtdgdS )Nr   r   r   r   )r   r   rr   r   r   r   r   r   |  r   c                   S   r   )Nr   Tr   r   r   r   r   r   r   ~  r   c                   S   r   )Nr   r   Tr   r   r   r   r   r   r     r   c                   S   r   )Nr   Tr   greedyr   r   r   r   r   r     r   c                   S   r   )Nr   Tr   rM   r   r   r   r   r   r     r   c                   S   r   )Nr   Fr   r   r   r   r   r   r     r   c                   S   r   )Nr   Fr   r   r   r   r   r   r     r   c                   S   r   )Nr   r   rX   )r   orderr   r   r   r   r   r     r   c                   S   s   t td tddS )Nr   rX   r   r   r   r   r   r   r         c                   S   s   t dddS )Nr   r   r   r   r   r   r   r   r     r   c                   S      t ddgS Nr   r   r   r   r   r   r   r     r   c                   S      t dS )Nr   r   r   r   r   r   r   r         c                   S   r  r   r   r   r   r   r   r     r  zx-xr   r   )r   r   r   r   r   rO   r   )r   r   r   rP   rS   )      @       @r   c                   S   s*   t dtd  d ttdd  d ddS )Nr   r   r   r   rO   r   )r   r   rg   r   r   r   r   r     s   * r   )g333333?g?r   r  r  c                   S   s    t dtd  dt  d ddS )N@r    @r   rO   r   r   r   r   r   r   r          r  r	     
      )r  r	  r   )r  r   r   r   r      i    Tr   r   F   d   r   r   )r{   rE   rI   NotImplementedErrorrD   r   r   r   r   r   iterr   r   r   r   
all_coeffsrG   rg   r   re   
get_domainrP   r   r   rU   rV   )r   Nr   r   r   test_Poly__new__o  s    :222"
2
22

@2.
((,
2
"$,r  c                   C   s*   t td d jtd d tfksJ d S r  )r   r   argsr   r   r   r   test_Poly__args     *r  c                   C   s  t tt tt  tjtfksJ t tt tt  tjtfks"J t tt tt  tjtfks3J t tt tt  ttjttfksFJ t tt tt  ttjttfksYJ t tt tt  tttjtttfksnJ t tt tt  tttjtttfksJ t tt tt  tttjtttfksJ t tt tt  jtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  tttddjtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfks'J t tt tt  ddjtttfks<J t tt tt  tdjtttfksQJ t tt tt  tdjtttfksfJ t tt tt  tdjtttfks{J t tt tt  tttddjtttfksJ t tt tt  dd	d
jtttfksJ t tt tt  ddd
jtttfksJ d S )Nz	x > p > q)sortz	p > x > qz	p > q > xr   wrtr   r   zq > x)r  r  zp > x)r   r   r   r   r   r   r   r   r   test_Poly__gens  s,   """&&***$(((.******0,0r   c                   C   @   t tjt dttdksJ t td jt dttdksJ d S )Nr   r   r   )r   r   zerorO   rP   r   r   r   r   test_Poly_zero     $r#  c                   C   r!  )Nr   r   r   )r   r   onerO   rP   r   r   r   r   test_Poly_one  r$  r&  c                  C   s  t tdd  td} tttddtttdddd  t| dgg g| t| d| dgg| fks6J t tdd  t td	d  t td
d  ttd tttd tdd  ttdtdgtttdtdgtfksvJ ttd tddttd tdd  tt	dt	dgt	tt	dt	dgt	fksJ ttd tttd tdddd  tt	dt	dgt	tt	dt	dgt	fksJ ttd tttd ttdd  ttdgtdggtttdgtdggtfksJ ttd tddttd ttdd  tt	dgt	dggt	tt	dgt	dggt	fks4J ttd tttd ttdddd  tt	dgt	dggt	tt	dgt	dggt	fksgJ ttd ttttd tdd  ttdgtdggtttdgtdggtfksJ ttd ttddttd tdd  tt	dgt	dggt	tt	dgt	dggt	fksJ ttd ttttd tdddd  tt	dgt	dggt	tt	dgt	dggt	fksJ ttd ttttd ttdd  ttdgtdggtttdgtdggtfks0J ttd ttddttd ttdd  tt	dgt	dggt	tt	dgt	dggt	fksdJ ttd ttttd ttdddd  tt	dgt	dggt	tt	dgt	dggt	fksJ ttd tttd ttdd  ttdtdggtttdtdggtfksJ ttd tddttd ttdd  tt	dt	dggt	tt	dt	dggt	fksJ ttd tttd ttdddd  tt	dt	dggt	tt	dt	dggt	fks)J ttd ttttd tdd  ttdtdggtttdtdggtfksXJ ttd ttddttd tdd  tt	dt	dggt	tt	dt	dggt	fksJ ttd ttttd tdddd  tt	dt	dggt	tt	dt	dggt	fksJ ttd ttttd ttdd  ttdgtdggtttdgtdggtfksJ ttd ttddttd ttdd  tt	dgt	dggt	tt	dgt	dggt	fks J ttd ttttd ttdddd  tt	dgt	dggt	tt	dgt	dggt	fksTJ ttd ttttd ttdd  ttdtdggtttdtdggtfksJ ttd ttddttd ttdd  tt	dt	dggt	tt	dt	dggt	fksJ ttd ttttd ttdddd  tt	dt	dggt	tt	dt	dggt	fksJ ttd t
 ttdttd td tddttd t
 tddttd td tddfksJ tdt\}}}ttt tddttt t tdddd  t||dg| t|| |dg| fksXJ ttt tddttt t tdddd  t||dg| t|| |dg| fksJ t tdd  ttd td  t tdd}ttd td  t tdd}||dd  |j|jfksJ d S )Nc                   S   s   t ttS r   r   r   _unifyr   r   r   r   r   r     r   z"test_Poly__unify.<locals>.<lambda>r   r   r   r   r   c                   S   s   t ttddt ttddS )Nr   r   r   r'  r   r   r   r   r         c                   S   s   t tttt ttddS Nr   r   )r   r   r   r(  r   r   r   r   r          c                   S   s   t ttddt tttS r*  r'  r   r   r   r   r     r+  rP   r   Tr   zQQ<sqrt(2) + I>za,bZZ[a]zZZ(a,b)zZZ(a)c                   S   s&   t t td td t  tddddS )Nr   TrL   ZZ(x)r   )r   r   r   r   r   r   r   r   r   F  s   & zQQ(x)zQQ[x])r{   rB   rN   r   r   r(  r   rK   rO   rP   re   rQ   unifyrr   rM   r   r   	to_domainrG   r   r   )r   FABr   r   r   r   r   test_Poly__unify  s   $(
$*(*(*&2
*2
*2
&2
*2
*2
(2
,2
,2
&.
*.
*.
&.
*.
*.
(2
,2
,2
(.
,.
,.
0.
0.
0.
(r3  c                   C   s0  t td d jthksJ t td tt  jttthks J t td tt  tjttthks3J t td ttt  jttthksGJ t td ttt  tjttthks\J t td ttt  ttdjttthkssJ t dt td  tttjthksJ t ttt tjtthksJ d S Nr   r   r   )r   r   free_symbolsr   r   rt   rT   r   r   r   r   test_Poly_free_symbolsN  s   $&(*.&$r6  c                   C   s   t td d jt ksJ t td tt  jt ksJ t td tt  tjtthks0J t td ttt  jt ksBJ t td ttt  tjtthksVJ t td ttt  ttdjtthkslJ d S r4  )r   r   r5  setr   r   rt   rT   r   r   r   r   test_PurePoly_free_symbolsY  s    $$(0r8  c                  C   s@  t ttt ttkdu sJ t tttdt ttkdu sJ t ttt tttdkdu s.J t tttt dt ttkdu s@J t ttt tttt dkdu sRJ t tt ttt ttkdu scJ t tttt ttkdu srJ t ttt tttkdu sJ t td d tt td d tkdu sJ t td d tt td d tkdu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ td}t |d td  t	d  td t	  t	dd} t |d td  t	d  td t	  t	d	d}| |kdu sJ d S )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))
r   r   rP   rO   r   r   r   nerm   r   )r   r   r9  r   r   r   test_Poly__eq__b  s(     $$",,..r;  c                  C   s<  t ttt ttkdu sJ t tttdt ttkdu sJ t ttt tttdkdu s.J t tttt dt ttkdu s@J t ttt tttt dkdu sRJ t tt ttt ttkdu scJ t tttt ttkdu srJ t ttt tttkdu sJ t td d tt td d tkdu sJ t td d tt td d tkdu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ d S )NTr   Fr   r   r   )r   r   rP   rO   r   r   r   r:  r   r   r   r   r   test_PurePoly__eq__  s,     $$",,r=  c                   C   sH   t tttd d tdu sJ t tttd d tdu s"J d S )Nr   r   T)r   r   r   r   r   r   r   r   test_PurePoly_Poly  s   "&r>  c                   C   s   t dt  tksJ t dt dd tksJ t dt dd tks(J t td  tks4J ttdd  t td dd tksIJ tt dt  tsVJ d S )Nr   rO   r   rP   c                   S   s   t td ddS )Nr   rO   r   r   r   r   r   r   r     r   z&test_Poly_get_domain.<locals>.<lambda>皙?)	r   r   r  rO   rP   r{   rG   r   rU   r   r   r   r   test_Poly_get_domain  s   r@  c                   C   sJ  t dt d tt dt d ksJ t dt d dt dt d ks*J t dt d tt dt d ddksAJ t dt d dt dt d ddksXJ t tddt tdd dt dt d	 kssJ t dt d	 dt tddt tdd ksJ ttd
d  ttdd  ttdd  d S )Nr   r   rO   rP   r   r  rS   r?  皙?c                   S   s   t td d tS r  )r   r   
set_domainrO   r   r   r   r   r         z&test_Poly_set_domain.<locals>.<lambda>c                   S   s   t td ddtS )Nr   r   r   )r   r   rB  rP   r   r   r   r   r     rC  c                   S   s   t tt tttt S r   )r   r   r   rB  rO   r   r   r   r   r     r   )	r   r   rB  rO   rP   rg   r{   rG   rE   r   r   r   r   test_Poly_set_domain  s   **..66rD  c                   C   s2   t td d dd dksJ ttdd  d S )Nr   r   r   c                   S   s   t td d  S r  )r   r   get_modulusr   r   r   r   r     r   z'test_Poly_get_modulus.<locals>.<lambda>)r   r   rE  r{   rF   r   r   r   r   test_Poly_get_modulus  s    rF  c                   C   s   t td d dddt td d ddksJ t td d dddt td d ddks2J t td d dt td d ddksIJ ttdd  d S )Nr   r   r   r   r   c                   S   s   t td d dS r  )r   r   set_modulusr   r   r   r   r     rC  z'test_Poly_set_modulus.<locals>.<lambda>)r   r   rG  r{   rG   r   r   r   r   test_Poly_set_modulus  s   .rH  c                   C   s&   t td dt td ksJ d S )Nr   r   r   )r   r   
add_groundr   r   r   r   test_Poly_add_ground     &rJ  c                   C   s&   t td dt td ksJ d S Nr   r   )r   r   
sub_groundr   r   r   r   test_Poly_sub_ground  rK  rN  c                   C   s*   t td dt dt d ksJ d S rL  )r   r   
mul_groundr   r   r   r   test_Poly_mul_ground  r  rP  c                   C   sP   t dt d dt td ksJ t dt d dt td ks&J d S )Nr   r  r   r   )r   r   
quo_groundr   r   r   r   test_Poly_quo_ground  s   &*rR  c                   C   s8   t dt d dt td ksJ ttdd  d S )Nr   r  c                   S   s   t dt d dS Nr   r   )r   r   exquo_groundr   r   r   r   r     rC  z(test_Poly_exquo_ground.<locals>.<lambda>)r   r   rT  r{   r?   r   r   r   r   test_Poly_exquo_ground  s   &rU  c                   C   sJ   t t d t tt t d t  kr t td tks#J  J d S r   )r   r   r   r   r   r   r   test_Poly_abs  s   JrV  c                   C   sH   t t d t t t d t   krt td tks"J  J d S r   )r   r   negr   r   r   r   test_Poly_neg  s   HrX  c                   C   s|  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t td tksJ t  t dttt  W d    n1 sw   Y  t ttd t td tksJ dt tt t td tksJ d S Nr   r   )r   r   addr   r|   rt   r   r   r   r   test_Poly_add     $"$&((  $r[  c                   C   s|  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t dt tksJ t  t dttt  W d    n1 sw   Y  t ttd t td tksJ dt tt t dt tksJ d S )Nr   r   r   )r   r   subr   r|   rt   r   r   r   r   test_Poly_sub  r\  r^  c                   C   sx  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t ttks~J t  t dttt  W d    n1 sw   Y  t ttd t dt tksJ dt tt t dt tksJ d S )Nr   r   r     r   )r   r   mulr   r|   rt   r   r   r   r   test_Poly_mul  s   $"$&(( $ra  c                   C   s   t tt t td tddksJ tt t t td tddks"J dt t t dt tddks3J tdt t t dt tddksFJ t ttd t dt tddksYJ d S )Nr   rO   r   )r   r   rl   r   r   r   r   test_issue_13079)  s
   """&*rc  c                   C   s4   t tt tt t td td  ttksJ d S Nr   )r   r   r   sqrr   r   r   r   test_Poly_sqr0  s   4rf  c                   C   s   t ttdt td tksJ t tttdt td tks$J t dt ttdt dtd  ttks;J t dt tttdt dtd  ttksTJ t dt t ttd t dtd  td  ttkspJ ttdd	  ttd
d	  d S )Nr  r   r     r   r   iW  c                   S   s   t tt d ttd S )Nr   r   r   r   r   r   r   r   r   r   =  r   ztest_Poly_pow.<locals>.<lambda>c                   S   s   t tt d ttt S r   rh  r   r   r   r   r   >  r   )r   r   powrf   r   r{   	TypeErrorr   r   r   r   test_Poly_pow4  s   "&.28rk  c                  C   s6  t td t t} }|t dt}}t| |||fksJ | | |ks&J | | |ks.J t| t||fks9J | t |ksAJ | t |ksIJ t dtt dt}}td|||fks_J d| |ksgJ d| |ksoJ t tt t dks{J t td t t tksJ t tt td  dt ksJ d S )Nr   r   r   )r   r   divmod)r   r   r   rr   r   r   test_Poly_divmodA  s   $rn  c                   C   s  t tt ttt tt ttkdu sJ t tt tt tt ttkdu s'J t tt ttt tt tkdu s:J t tt tt tt tkdu sLJ t tt tt tt tkdu s^J t tt tttt kdu snJ t tt ttt kdu s}J t tt tttt kdu sJ t tt ttt kdu sJ t tt ttt kdu sJ t tt ttt tt ttkdu sJ t tt tt tt ttkdu sJ t tt ttt tt tkdu sJ t tt tt tt tkdu sJ t tt tt tt tkdu s
J t tt tttt kdu sJ t tt ttt kdu s+J t tt tttt kdu s<J t tt ttt kdu sLJ t tt ttt kdu s\J t ttttkdu sjJ t ttttkdu sxJ d S )NTF)r   r   r   rt   r   r   r   r   test_Poly_eq_neX  s,   (&&$$  (&&$&" "   ro  c                   C   s0   t tdtdusJ t tdtdusJ d S )Nr   Tr   F)boolr   r   r   r   r   r   test_Poly_nonzerou  s   rq  c                   C   s  t dtjdu s
J t dtjdu sJ t dtjdu sJ t dtjdu s(J t td tjdu s4J t td d tjdu sBJ t td tjdu sNJ t dt d tjdu s\J t dt d tjdu sjJ t dt d tjdu sxJ t dtjdu sJ t ttjdu sJ t tt t	 d j
du sJ t tt t	 d j
du sJ t tt t	 d jdu sJ t tt t	 d jdu sJ t tt jdu sJ t tt d jdu sJ t td tt  jdu sJ t td tt  jdu sJ t tjdu sJ t tt jdu sJ t tt jdu s J t tjdu s*J t td td	  td
  td  td  td  d jdu sLJ t td td	  td
  td  td  td  d jdu snJ d S )Nr   Tr   Fr   r   r  rg     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   r   test_Poly_propertiesz  sD   2
2r  c                   C   s   t td t d jdu sJ t td dt  d jdu s J t dt d ddjdu s/J t dtd  dt  d ddjdu sDJ d S )	Nr   r   TFr   r      r   )r   r   is_irreducibler   r   r   r   test_Poly_is_irreducible  s   ".r  c                   C   s   t td tddksJ t td ttt td ks J t td ttt td ks2J t tt ttttd ksCJ t tt ttttd ksTJ d S )Nr   r   r   )r   r   subsr   r   r   r   r   test_Poly_subs  s
   $$"&r  c                   C   s  t td tt td ksJ t td tt td ks"J ttdd  t td ttt td ks;J t td ttt td ksMJ t tt ttt tt ks_J t tt ttt tt ttkssJ t tt ttt tt ksJ t tt ttt tt ttksJ t tt ttt tt ksJ ttdd  t tt tttt tt tksJ t tt tttt tt tksJ ttdd  ttdd  d S )Nr   c                   S   s   t tt tS r   )r   r   r   replacer   r   r   r   r   r     r   z#test_Poly_replace.<locals>.<lambda>c                   S   s   t tt ttS r   r   r   r   r  r   r   r   r   r     r   c                   S   s   t tt tttS r   r  r   r   r   r   r     rC  c                   S   s   t tt tttS r   r  r   r   r   r   r     rC  )r   r   r  r   r{   rF   r   r   r   r   r   r   test_Poly_replace  s   ""$$$($($((r  c                   C   s  t tdd  ttt ttttttt ttksJ ttt ttttttt ttks3J ttt ttttttt ttksIJ ttt ttttttt ttks_J ttt ttjtdttt ttksuJ ttt ttjtdttt ttksJ d S )Nc                   S   s   t tt ttS r   )r   r   r   reorderr   r   r   r   r   r     r   z#test_Poly_reorder.<locals>.<lambda>r  )r{   rF   r   r   r   r  r   r   r   r   test_Poly_reorder  s   ,,,,,0r  c                  C   s   t td ttd   tttt} |  td ttd   kr'| jttfks)J t tt t tttdt tt t ttksCJ ttdd  ttdd  d S )Nr   r   c                   S   s"   t ttd  td  tttS rd  r   r   r   ltrimr   r   r   r   r        " z!test_Poly_ltrim.<locals>.<lambda>c                   S   s   t tt t ttdS )Nr   r  r   r   r   r   r     r   )	r   r   r   r   r  r   r   r{   rF   r   r   r   r   test_Poly_ltrim  s
   $.4r  c                   C   s^   t tt d tttttdu sJ t tt t tttttdu s&J ttdd  d S )Nr   TFc                   S   s"   t ttd  td  tttS rd  )r   r   r   has_only_gensr   r   r   r   r   r     r  z)test_Poly_has_only_gens.<locals>.<lambda>)r   r   r   r   r  r{   rE   r   r   r   r   test_Poly_has_only_gens  s   &&r  c                   C   s   t dt d dd t dt d ddksJ t dt d dd t dt d ddks0J ttdd  ttdd  d S )	Nr   r   rO   r   rP   c                   S   s   t td d  S r  r   r   to_ringr   r   r   r   r     r   z#test_Poly_to_ring.<locals>.<lambda>c                   S   s   t dt d dd S )Nr   r   r   r   r  r   r   r   r   r     r   )r   r   r  r{   rG   rH   r   r   r   r   test_Poly_to_ring  s   00r  c                   C   s   t dt d dd t dt d ddksJ t dt d dd t dt d ddks0J t td d dd t td d ddksHJ t dt d dd t dt d ddks`J t dt d	  t dt d	 kstJ d S )
Nr   r   rO   r   rP   r   r   r  r   )r   r   to_fieldr   r   r   r   test_Poly_to_field  s
   0000,r  c                   C   sd   t dt  t dt ksJ t td  t td ks J t dt  t td ks0J d S )Nr   rA  r  )r   r   to_exactr   r   r   r   test_Poly_to_exact  s     $r  c                  C   s   t td d ttt d} |  t td d tddksJ | jddt td d tddks1J t dtt t dttksAJ d S )	Nr   r   r   rO   TrL   rP   r   )r   r   rP   r   retractr   r   r   r   test_Poly_retract  s   "&$r  c                  C   s  t td dtd   dt  d } | ddt dtksJ | ddt dtks,J | ddt dt d tks=J | ddt dtd  dt  d tksTJ | ddt td dtd   dt  d tksoJ | tddt dtks}J | tddt dtksJ | tddt dt d tksJ | tddt dtd  dt  d tksJ | tddt td dtd   dt  d tksJ t td d }|ddt dtksJ d S )Nr   r   r  r   r   )r   r   slicer<  r   r   r   test_Poly_slice  s   $".6$08r  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g dksWJ t ttd  dtd  td   dddgksrJ t ttd  dtd  td   d	ddgksJ d S )
Nr   r   r   r   r   r   r   r  r   rW   rX   )r   r   coeffsr   r   r   r   r   test_Poly_coeffs"     "..6:r  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g d	ksWJ t ttd  dtd  td
   dddgksrJ t ttd  dtd  td
   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r  )r  r   r   r   rW   r   r   r   r   rX   )r   r   monomsr   r   r   r   r   test_Poly_monoms/  r  r  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd	  dt  d t g d
ksWJ t ttd  dtd  td   dddgksrJ t ttd  dtd  td   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )r  r   r  r  r  )r  r   r  r  r   rW   r  r   r  r   rX   )r   r   termsr   r   r   r   r   test_Poly_terms<  s   "..r  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g dksWJ d S )Nr   r   r   r   r  r  )r   r   r   r   r   )r   r   r  r   r   r   r   test_Poly_all_coeffsK  
   ".2r  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g d	ksWJ d S )
Nr   r   r   r   r   r   r  r  )r  r   r  r   r   )r   r   
all_monomsr   r   r   r   test_Poly_all_monomsU  r  r  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd	  dt  d t g d
ksWJ d S )Nr   r  r   r  r   r  r   r  r  )r  )r  r   )r  r   r  r  )r   r   	all_termsr   r   r   r   test_Poly_all_terms_  s   "  r  c                  C   sh   t td dt  d } t td dt  d }dd }| ||ks%J dd }| ||ks2J d S )Nr      i  r  c                 S   s   | \}|dd|   S Nr  r   r   monomcoeffkr   r   r   funco  s   z test_Poly_termwise.<locals>.funcc                 S   s   | \}|f|dd|   fS r  r   r  r   r   r   r  u  s   )r   r   termwise)r   r   r  r   r   r   test_Poly_termwisek  s   r  c                   C   s   t dt dksJ t dt dksJ t tt dks!J t td t dks.J t td d t dks=J t td t d t dksNJ d S )Nr   r   r   r   )r   r   lengthr   r   r   r   test_Poly_length|  s   &r  c                   C   s   t dt i ksJ t dttt i ksJ t dt ddiks%J t dttt ddiks4J t td d t dddksFJ t td d ttt dddksZJ t dtd  t td  d	t t  d
t t   dd	d
dks~J d S )Nr   r   r   r   r   r   r   r   )r  r   ))r   r   r   r  r  r   )r   r   r   r   r   r   r   r   r   )r   r   as_dictr   r   r   r   r   r   test_Poly_as_dict  s   $(8r  c                      s  t dt dksJ t dttt dksJ t dt dks#J t dttt dks0J t td d t td d ksCJ t td d ttt td d ksXJ t dtd  t td  dt t  dt t   dtd  t td  dt t  dt t  ksJ t td dt td   t tt   t td  dt td   ksJ  tdidt dtd   ksJ  td	id
dt  td  ksJ  tdtd	idksJ  dd	dksJ tt fdd d S )Nr   r   r   r   r  r      r  rs  iH   i{  c                      s     tdiS r   )r   r   r   r   r   r   r     r   z#test_Poly_as_expr.<locals>.<lambda>)r   r   r   r   r   r{   rE   r   r   r   r   test_Poly_as_expr  s$   &*.2$*&&r  c                  C   sX   t td tt  dt  tdd} |  t td td  dt  d td	d
ks*J d S )Nr     Tr   r_  r   "   i!  rP   r   )r   r   re   liftr   r   r   r   test_Poly_lift  s   "6r  c                  C   s  t td td  d d} t td td  d d}t| t d| d   | td  td  tdd}| ttd  d	td
   dtd   d	td   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   d td!   d"td#   d$td%   d&td'   d(td)   d*td+   d,td-   d.td/   d0td1   d2td3   d4td5   d6td7   d8td9   d:td;   d<td=   d>td?   d@tdA   dBtdC   dDtdE   dFtdG   dHtdI   dJtdK   dLtdM   dNtdO   dPtdQ   dRtdS   dTtdU   dVtdW   dXtdY   dZtd[   d\td]   d^td_   d`tda   dbtdc   ddtde   dftdg   dhtdi   djtdk   dltdm   dntdo   dptdq   drtds   dttdu   dvtdw   dxtd	   dytdz   d{td|   d}td~   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dtd   dt  d tddksJ d S )Nr   r   r   r   r   Tr   K      r  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~r  iE!   iL    i~s
r  iQM   iٞ   i|   i   iA   ievpr  i*   iUt   ioBH   i*r  i3& r  iE$@!   i0;    iDp!r  irg  iYEiOrr  iX?   ib   iL9r  inr  i;	   i
r_  izGr   iHrs  i!p^i1>jr  i'i?i i rP   r   )rw   r   r   r   r   r  r   r   r   r   test_Poly_lift_multiple  s  2D



































	
	
	
	





























r	  c                   C   s   t dt dt dtfksJ t dt dt dtfks J t tt dt ttfks0J t td t dt ttfksBJ t td t dt ttfksTJ t td t td  td	 td    d
t tt t td t  fks|J d S )Nr   r   r   r   r  r  )r  r  r  )r   r   r  )r   r   deflater   r   r   r   r   r   test_Poly_deflate  s      $$""r  c                  C   s   t td t ttd   tt  d t} |  t td t ttd   tt  d ttks1J | jddt td t ttd   tt  d ttksOJ d S )Nr   r   r   T)front)r   r   r   injectr   r   r   r   test_Poly_inject  s   *8@r  c               	   C   s  t td t ttd   tt  d tt} | tt ttd  td t t  d tddks2J | tt ttd  td t t  d tddksNJ tt t t t }t |ttttt}|tt |ttttddksrJ |ttt |tttddksJ |tttt |ttddksJ |tt |ttttd	dksJ |ttt |tttd
dksJ |tttt |ttddksJ ttdd  tt	dd  d S )Nr   r   r   r   r   ZZ[y]zZZ[x, y]zZZ[x, y, z]zZZ[w]zZZ[t, w]zZZ[z, t, w]c                   S   s   t tt tttt dtS r   )r   r   r   rO   r   ejectr   r   r   r   r     r)  z!test_Poly_eject.<locals>.<lambda>c                   S   s   t tt ttttS r   )r   r   r   r   r  r   r   r   r   r     r   )
r   r   r   r  r   r   r   r{   rH   r  )r   exr   r   r   r   test_Poly_eject  s   ,88""""""r  c                   C   sj   t ttt t ttksJ t tt tt t tt ttks#J t dtt t dttks3J d S r   )r   r   r   excluder   r   r   r   test_Poly_exclude  s   ($r  c                   C   s  t dttddksJ t dttddksJ t dttddks'J t dttddks4J ttdd  ttdd  t dtttdksOJ t dtttdks\J t dttddksiJ t dttd	dksvJ ttd
d  ttdd  d S )Nr   rb  r   r   c                   S      t dttdS )Nr   r   r   r   _gen_to_levelr   r   r   r   r     r   z)test_Poly__gen_to_level.<locals>.<lambda>c                   S   r  rL  r  r   r   r   r   r     r   r   r   c                   S   s   t dtttS r   )r   r   r   r  r   r   r   r   r   r     r   c                   S   r  )Nr   r   r  r   r   r   r   r     r   )r   r   r   r  r{   rF   r   r   r   r   test_Poly__gen_to_level  s   r  c                   C   s$  t dt t u sJ t dt dksJ t tt dks"J t dtjddt u s0J t dtjdddks=J t ttjdddksJJ t dtjtdt u sXJ t dtjtddkseJ t ttjtddksrJ t dtjddt u sJ t dtjdddksJ t ttjdddksJ ttdd  ttdd  ttdd  t dtt dksJ t d	t tt dksJ t tt tt dksJ t dttjtddksJ t d	t ttjtddksJ t tt ttjtddksJ t dttjtddksJ t d	t ttjtddks&J t tt ttjtddks7J tdtt u sBJ tdtdksLJ tttdksVJ tttd	  tdksdJ tttd	  td	ksrJ tttd	  tdksJ ttdksJ tt	d
d  tt	dd  ttdd  ttdd  tt dttt u sJ tt dttdksJ tt td	 td  tdksJ tt td	 td  ttddksJ tt td	 td  ttdksJ tt td	 td  td  ttdksJ d S )Nr   r   genr   c                   S   s   t dtjddS Nr   r  r   r   r   r   r   r   r   r      r   z"test_Poly_degree.<locals>.<lambda>c                   S   s   t dtjtdS r  )r   r   r   r   r   r   r   r   r   !  r   c                   S   s   t dtjddS )Nr   r   r  r  r   r   r   r   r   "  r   r   c                   S   s   t td td  S rS  r   r   r   r   r   r   r   r   :  r   c                   S   s   t td td  dS Nr   r   r   r  r   r   r   r   r   ;  rC  c                   S   s
   t tdS )Ng?r   r   r   r   r   r   r   <     
 c                   S   s   t td td d  tS r  r   r   r   r   r   r   =  r   r   r  )
r   r   r   rh   r{   rF   r   r   ri   rj  r   r   r   r   test_Poly_degree  sR    """$(&2r"  c                   C   s&  t dt t fksJ t dtt t t fksJ t dttt t t t fks0J t dt dks;J t dtt dksGJ t dttt dksTJ t td t td td   d  dkslJ tdtdksuJ tttd	ks~J tttd  d
ksJ ttdd  d S )Nr   r   r   r   r  r   r   )r   r   r   r   r  c                   S   r  r   )r   r   r   r   r   r   V  r  z'test_Poly_degree_list.<locals>.<lambda>)r   r   r   rh   r   r   r{   rA   r   r   r   r   test_Poly_degree_listF  s    &0r#  c                   C   s  t td t td td   d  dksJ t td td   dks(J t tt t td   dks:J t td t d  dksJJ ttt td  dksXJ ttt td  ttdkshJ tddkspJ tt td td  td  dksJ tt td td  td  tdksJ tt td td  td  ttdksJ tt td tt t  td td   td  ttdksJ d S )	Nr   r   r   r   r  r   r  r   )r   r   r   r   r   r   r   r   r   test_Poly_total_degreeY  s   0 $  (*,Dr$  c                   C   s   t td t tt td tt  ksJ t tt tt tt tttks+J t ttd  tt tt td  ksBJ d S rd  )r   r   r   
homogenizer   r   r   r   r   test_Poly_homogenizeg  s   .(2r&  c                   C   s  t dtt t u sJ t dtt dksJ t ttt dks%J t tt tt dks3J t td tt d u sAJ t tt t tt d u sQJ t td dtd  td   dt td    dksoJ t td dtd  td   dt td    d u sJ d S )Nr   r   r   r   r   r  r  )r   r   r   homogeneous_orderrh   r   r   r   r   test_Poly_homogeneous_orderm  s    <@r(  c                   C   s  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   ddks@J t ttd  dtd  td   ddksYJ tttd  dtd  td   dddksqJ tttd  dtd  td   dddksJ d S )	Nr   r   r   r   r   rW   rX   r   )r   r   r	   r   r   r   r   r   test_Poly_LCz  s   "2204r)  c                   C   sR   t dt dksJ t dt dksJ t dtd  t t dks'J d S )Nr   r   r   )r   r   TCr   r   r   r   test_Poly_TC  s   &r+  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   ddks@J t ttd  dtd  td   ddksYJ d S )Nr   r   r   r   r   rW   rX   )r   r   ECr   r   r   r   r   test_Poly_EC  
   "26r-  c                      s  t dtddksJ t dttdksJ t dtddks$J t dttdks0J t td tddks>J t td ttd dksNJ t td ttd dks^J t td ttd dksnJ t dt td  d ttddksJ t dt td  d ttttd  dksJ t dt t td d	t  tt  td	ksJ  tdksJ  tt dtd ksJ   tdt td d	 ksJ tt fd
d tt	dd  tt	dd  tt	dd  d S )Nr   r   r_  r   r  r   r   r  r  c                      s
     tS r   )r  r   r   r   r   r   r     r!  z!test_Poly_coeff.<locals>.<lambda>c                   S   s   t td dS )Nr   r   r   r   coeff_monomialr   r   r   r   r     r   c                   S   s   t td dt S Nr   r   r/  r   r   r   r   r     rC  c                   S   s   t td dt t S r1  )r   r   r0  r   r   r   r   r   r     r   )
r   r   r0  r   rp   r   r  r{   r  
ValueErrorr   r   r   r   test_Poly_coeff  s&      *2$&r3  c                   C   s:  t dtddksJ t dtddksJ t dtddks$J t dtddks0J t td tddks>J t td tddksLJ t td tddksZJ t td tddkshJ t dt td  d ttdddks~J t dt td  d ttdddksJ ttdd	  d S )
Nr   r   r_  r   r  r   r   c                   S   s   t tt d ttdS r   )r   r   r   nthr   r   r   r   r     r   ztest_Poly_nth.<locals>.<lambda>)r   r   r4  r   r{   r2  r   r   r   r   test_Poly_nth  s   ,,r5  c                   C   s*  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   dd	ks@J t ttd  dtd  td   d
dksYJ tttd  dtd  td   ddtd td  kswJ tttd  dtd  td   d
dttd  ksJ d S )Nr   r   r   r   r  r   r   rW   r  rX   r  r   )r   r   r
   r   r   r   r   r   test_Poly_LM  s   "22<<r6  c                  C   sp   t td td  t td t td   tt t  d } dd }| jdddks,J | j|dd	ks6J d S )
Nr   r   r   c                 S   s   t t| S r   )tuplereversed)r  r   r   r   r     r   z+test_Poly_LM_custom_order.<locals>.<lambda>rW   r   )r   r   r   r  )r   r   r   r   r
   )r   rev_lexr   r   r   test_Poly_LM_custom_order  s   <r:  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   dd	ks@J t ttd  dtd  td   d
dksYJ d S )Nr   r   r   r   r   r   r   rW   r  rX   r  )r   r   EMr   r   r   r   r   test_Poly_EM  r.  r<  c                   C   s.  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   d	d
ks@J t ttd  dtd  td   ddksYJ tttd  dtd  td   d	ddtd  td  ksyJ tttd  dtd  td   ddttd  ksJ d S )Nr   r  r   r  r   )r  r   r   r   rW   r  rX   r  r   )r   r   r   r   r   r   r   r   test_Poly_LT  s   "22@<r=  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   d	d
ks@J t ttd  dtd  td   ddksYJ d S )Nr   r  r   r  r   )r   r   r   r   rW   r  rX   r  )r   r   ETr   r   r   r   r   test_Poly_ET  r.  r?  c                   C   F   t dt dksJ t dt dksJ t dt dks!J d S Nr   r   r   )r   r   max_normr   r   r   r   test_Poly_max_norm     rC  c                   C   r@  rA  )r   r   l1_normr   r   r   r   test_Poly_l1_norm  rD  rF  c                  C   s@  t td t \} }| dkr |t td tddkr | tks"J t td d t \} }| dkrD|t td tddkrD| tksFJ t dtd  d dd \} }| dkrq|t dtd  d tddkrq| tdkssJ t td d tjd	d
\} }| dkr|t td tddkr| tksJ t tt d tjd	d
\} }| tkr|t tt tddkr| tt ksJ t td td tdd \} }| dkr|t tdtd  tddkr| t	ksJ t td td tddjd	d
\} }| dkr|t tdtd  tddkr| t	ksJ d S )Nr   r   rO   r   rP   r   r   r   T)convertr  rT   )
r   r   clear_denomsr  rO   rP   rN   r   rr   rT   )r  r   r   r   r   test_Poly_clear_denoms  sN   

 

"

rI  c                  C   s   t td t d t} t td t t}| |t td t tt ttd  td  tfks1J | t} |t}| || |fksFJ d S )Nr   r   r   )r   r   r   rat_clear_denomsrB  rT   r<  r   r   r   test_Poly_rat_clear_denoms!  s   *

rK  c               	   C   s  t ddtdd   dddtd  tdd   d	td ddtd  tdd     d
dtdd   dtdd   ddtd  tdd   dddtd  tdd   d	td ddtd  tdd      d
dtdd   ddtd  tdd   dddtd  tdd   d	td ddtd  tdd      ddtdd   dtdd   dddtd  tdd   d	td ddtd  tdd      t} | t dtddksJ d S )Nlwf8*- r  r   r   l   >< i^     i#  l   4$isDl   R r   r  l   wf8*- r   rT   r   )r   rl   rr   r   r   r   r   r   test_issue_20427.  sX   



$


&. 
&	
rM  c                   C   sX  t td  t td d t ksJ t td tt td d t ks)J t td tdft td d t ks@J t tt d tt td t d t ksYJ t tt d tt ttd  d t ksrJ t tt d ttt td t d td d  ksJ t tt d ttt ttd  d td d  ksJ t tt d tdft td t d td d  ksJ t tt d tdft ttd  d td d  ksJ t tt d ttt td td  d tt  ksJ t tt d ttt td td  d tt  ks*J d S )Nr   r   r   rs  r  )r   r   	integrater   r   r   r   r   test_Poly_integrate<  s   (*.22<<>>>BrO  c                   C   sp  t td t  t dt d ksJ t td t tt dt d ks)J t td t tdft dt d ks@J t td td  tt  tt dt td  t ks_J t td td  tt  tt dtd  t t ks~J t td td  tt  ttt dtd  ttksJ t td td  tt  ttt dtd  ttksJ t td td  tt  tdft dtd  ttksJ t td td  tt  tdft dtd  ttksJ t td td  tt  ttt dt t d ksJ t td td  tt  ttt dt t d ks6J d S )Nr   r   r  )r   r   r`   r   r   r   r   r   test_Poly_diffN  s   (*.>><<>>>BrP  c                   C   s   t ttd t tdt d ksJ t ttd t tddtttd t tks.J tttd t t tdt d ksEJ d S )Nr   r   Fevaluate)r`   r   r   r_   doitr   r   r   r   test_issue_9585`  s
   (2rT  c                  C   s  t dtddksJ t dtddksJ t ttddks$J t dtdddks1J t dtdddks>J t ttdddksKJ t dttddksXJ t dttddkseJ t tttddksrJ t dtdddksJ t dtdddksJ t ttdddksJ ttdd  ttdd  ttdd  t d	ttdt d	tksJ t d
t ttdt d
t tksJ t tt ttdt dt tksJ t d	tttdt d	tksJ t d
t tttdt d
t tksJ t tt tttdt dt tks#J t d	tttdt d	tks5J t d
t tttdt dtksIJ t tt tttdt dt tks_J t tt t tttdit dt tksxJ t tt t tttdit dt d tksJ t tt t tttdtdidksJ t tt t tttdtdidksJ t tt t ttddksJ t tt t ttddgdksJ t td ddtjtdd
ksJ t td ddt	d
t	d
d ksJ tt
dd  ttdd  td} d
|  t d
|   td
  d td
 d
t  d  }t td
 | d t  |  d tdd}|td td  |ks^J t td
 | d t  |  d ttdd}|td td  t |tddksJ d S )Nr   r   r   r   c                   S   s   t dtddS Nr   r   r   r   evalr   r   r   r   r   x  r   z test_Poly_eval.<locals>.<lambda>c                   S   s   t dttdS rU  )r   r   rW  r   r   r   r   r   r   y  r   c                   S   s   t dtddS )Nr   r   r   rV  r   r   r   r   r   z  r   {   r   rr  r_  rs  r  r  )rs  r   rO   r   r   c                   S   s   t tt t ttdS )N)rs  r   r_  )r   r   r   rW  r   r   r   r   r     r   c                   S   s   t td ddjtjddS )Nr   rO   r   Fauto)r   r   rW  rl   Halfr   r   r   r   r     r+  alphaz	ZZ[alpha]zZZ(alpha,z))r   r   rW  r{   rF   r   rl   r[  rg   rr   r2  rH   rm   r   )r\  resultr   r   r   r   r   test_Poly_evalg  sP    ((",,$(,26,,$((,4& (.r^  c                  C   s~   t dt t dt  t dt  } | dt dt dt  d ks$J | ddt dt d ks3J | ddddks=J d S )Nr   r   r   rs  r  r   r  )r   r   r   r   r   r   r   r   test_Poly___call__  s   $$r_  c                   C   s  t td td d gtd ttd tttd d tgks!J t ttd ttd d gtd ttd tttd d tgksEJ t td ttd d tgtd ttd tttd d tgksiJ t ttd tttd d tgtd ttd tttd d tgksJ t td td d gttd ttd ttttd d ttgksJ t ttd ttd d gttd ttd ttttd d ttgksJ t td ttd d tgttd ttd ttttd d ttgksJ t ttd tttd d tgttd ttd ttttd d ttgks.J t td td d gd ttd tttd d tgksOJ t ttd ttd d gd ttd tttd d tgkssJ t td ttd d tgd ttd tttd d tgksJ t ttd tttd d tgd ttd tttd d tgksJ t dtd d gd tdtttd d tgksJ t dtd d gd tdtttd d tgksJ t dttd d tgd tdtttd d tgksJ t dttd d tgd tdtttd d tgks8J t td d dgd ttd d ttdtgksUJ t td d dgd ttd d ttdtgksrJ t ttd d tdgd ttd d ttdtgksJ t ttd d tdgd ttd d ttdtgksJ t ttttttttgttddd ttttddttttddgksJ ttdd	  d S )
Nr   r   r   rW   r   rO   r   c                   S   r  rY  )r   r   r   r   r   r     r   z.test_parallel_poly_from_expr.<locals>.<lambda>)r   r   r   r   r{   r@   r   r   r   r   test_parallel_poly_from_expr  s8  "
"
"
"












&
r`  c                  C   s  t d td  t t } }t t d}}dd | |||fD \}}}}||||fks.J |||ks7J |||ks@J |||ksIJ t| |||fksTJ t| ||ks]J t| ||ksfJ t| ||ksoJ t| |t t||fks|J t| |t t|ksJ t| |t t|ksJ t| |t t|ksJ t| |t tf||fksJ t| |t tf|ksJ t| |t tf|ksJ t| |t tf|ksJ t||||fksJ t|||ksJ t|||ksJ t|||ksJ t| |dd||fksJ t| |dd|ksJ t| |dd|ksJ t| |dd|ks'J t||dd||fks5J t||dd|ksAJ t||dd|ksMJ t||dd|ksYJ ttdd	  ttd
d	  ttdd	  ttdd	  d S )Nr   r   c                 S      g | ]}t |ttqS r   rh  r   r   r   r   r   
<listcomp>  r   ztest_pdiv.<locals>.<listcomp>TpolysFc                   S   
   t ddS Nr  r   )r   r   r   r   r   r     r!  ztest_pdiv.<locals>.<lambda>c                   S   rf  rg  )r   r   r   r   r   r     r!  c                   S   rf  rg  )r   r   r   r   r   r     r!  c                   S   rf  rg  )r   r   r   r   r   r   	  r!  )r   r   r   r   r   r   r{   rA   )r   r   r   rm  r0  GQRr   r   r   	test_pdiv  sF   rk  c                     s  t d td  t t  t t d} }dd  | |fD \}}}}||||fks.J |||ks7J |||ks@J |||ksIJ t | |fksTJ t |ks]J t | ksfJ t | ksoJ t t t| |fks|J t t t|ksJ t t t| ksJ t t t| ksJ t t tf| |fksJ t t tf|ksJ t t tf| ksJ t t tf| ksJ t||||fksJ t|||ksJ t|||ksJ t|||ksJ t dd||fksJ t dd|ksJ t dd|ksJ t dd|ks'J t||dd| |fks5J t||dd|ksAJ t||dd| ksMJ t||dd| ksYJ ttdd	  ttd
d	  ttdd	  ttdd	  t d d dt  d  dt d d }}t d d d}}	t ||	fksJ t dd||	fksJ t dd||fksJ t td||fksJ t t	d||	fksJ t tdd||	fksJ t tdd||fksJ t t	dd||	fksJ t t	dd||	fksJ t |	ksJ t dd|	ks*J t dd|ks6J t td|ksBJ t t	d|	ksNJ t tdd|	ks[J t tdd|kshJ t t	dd|	ksuJ t t	dd|	ksJ t |ksJ t dd|ksJ t dd|ksJ t td|ksJ t t	d|ksJ t tdd|ksJ t tdd|ksJ t t	dd|ksJ t t	dd|ksJ t d dt  t d  } t | ksJ t dd| ksJ tt
 fdd	 tt
 fdd	 t t	d| ks4J t tdd| ksAJ tt
 fdd	 t t	dd| ksXJ t t	dd| kseJ tt d tt   \} }|  jr| jsJ  }| jsJ  } |  jsJ  } |  jsJ tt t t tdt  t t   \} }|  jr| jsJ tddt  t td}
tdt t td} |
j| ddtdt ddtddt  t ddfksJ |
j| ddttd d dt d  t ddtdt ddfks%J dt d  dt   d  dt  d t tdd fksEJ d S )Nr   r   c                 S   ra  r   rh  rb  r   r   r   rc    r   ztest_div.<locals>.<listcomp>Trd  Fc                   S   rf  rg  )r   r   r   r   r   r   5  r!  ztest_div.<locals>.<lambda>c                   S   rf  rg  )r   r   r   r   r   r   6  r!  c                   S   rf  rg  )r   r   r   r   r   r   7  r!  c                   S   rf  rg  r   r   r   r   r   r   8  r!  r   r  r   rY  r   r   rZ  c                      s   t  ddS NFrY  rl  r   r<  r   r   r   a  r   c                      s   t  tdS r   r   rO   r   r<  r   r   r   b  r   c                      s   t  tddS )NFrm  ro  r   r<  r   r   r   e  r   r   rQ   rR   r  )r   r   r   r   r   r   r{   rA   rO   rP   r?   r   r  is_ZZis_Fracre   rQ   rl   )r   rm  r0  rh  ri  rj  qzrzqqrqr   r   r<  r   test_div  s   


""
0
 rv  c                  C   s6   t tdt \} }t| d dk sJ |dksJ d S )Ng>,p ?g3!	@g+=r   )r   r   r   )r   rm  r   r   r   test_issue_7864  s   rw  c            
      C   s  dt  t d d } }t d tddd}}}dd | ||||fD \}}}}}	||||	fks4J |||||	fks@J |||ksIJ t| |||fksTJ t| ||||fks`J t| ||ksiJ t| |t ||fksuJ t| |t |||fksJ t| |t |ksJ t| |t f||fksJ t| |t f|||fksJ t| |t f|ksJ t||||	fksJ t|||||	fksJ t|||ksJ t| |dd	||	fksJ t| |dd	|||	fksJ t| |dd	|ksJ t||d
d	||fksJ t||d
d	|||fksJ t||d
d	|ks!J tdddks+J tdddks5J tdddks?J ttdd  ttdd  ttdd  d S )Nr   rg  r  r   r   c                 S   s   g | ]	}t |td dqS )rP   r   r   r   r   r   r   r   rc    r   ztest_gcdex.<locals>.<listcomp>Trd  Fr  i  )r  )ry  r   r  r   r   r   c                   S      t td dt d ddS Nr   r   FrY  )r   r   r   r   r   r   r     r   ztest_gcdex.<locals>.<lambda>c                   S   rz  r{  )r   r   r   r   r   r   r     r   c                   S   rz  r{  )r   r   r   r   r   r   r     r   )r   rg   r   r   r   r{   rH   )
r   r   sr   r   r0  rh  rl   THr   r   r   
test_gcdex  s<   "r  c                  C   sv   t dtd d  td d  td d  } t dtd  d dtd  d  td d  d }| d	|ks9J d S )
Nr   r   r  r  rs  i  r  r   r_  )r   r   revertr<  r   r   r   test_revert  s   ,4r  c                  C   s  t d dt   d t d d dt  d } }}t| t|t|}}}|||||gks2J t| || ||gks>J t| |t | ||gksKJ t| |t f| ||gksYJ t|||||gkseJ t| |dd|||gkssJ t||dd| ||gksJ ttdd  d S )Nr   r   Trd  Fc                   S   rf  rg  )r   r   r   r   r   r     r!  z$test_subresultants.<locals>.<lambda>)r   r   r   r{   rA   r   r   r   r0  rh  r~  r   r   r   test_subresultants  s   0r  c                  C   s  t d dt   d t d d d} }}t| t|}}|||ks&J t| ||ks/J t| |t |ks9J t| |t f|ksDJ t|||ksMJ t| |dd|ksXJ t||dd|kscJ t| |dd|| |dt  d gfkswJ t t t t tt } }}t| t|t|}}}|||ksJ t| ||ksJ t| |t |ksJ t| |t f|ksJ t|||ksJ t| |dd|ksJ t||dd|ksJ ttdd	  d S )
Nr   r   r   Trd  F)
includePRSc                   S   rf  rg  )r   r   r   r   r   r     r!  z test_resultant.<locals>.<lambda>)r   r   r   r   r   r{   rA   r  r   r   r   test_resultant  s(   ((r  c                  C   s  t d dt d   dt   d d} }t| }| |ksJ t| |ks'J t| t |ks0J t| t f|ks:J t||ksBJ t| dd|ksLJ t|dd|ksVJ tt d  tt   t td d	t t  } }t| t|}}| |ks~J t| |ksJ t| t ttt|ksJ t| t tttf|ksJ t||ksJ t| dd|ksJ t|dd|ksJ ttd
d  d S )Nr   r   r  r  ipTrd  Fr  c                   S   r  Nr  )r   r   r   r   r   r     r  z#test_discriminant.<locals>.<lambda>)r   r   r   r   r   r   r{   rA   r   r   r0  rh  r   r   r   test_discriminant  s&   &.r  c                  C   s   t td td  t} t|  ddgksJ |  dksJ t td dtd   d t} | d}t| |g dks@J | |dksIJ d S )Nr   r   r   r  r   r  )r   r   r  )r   r   sorteddispersionset
dispersionshift)fpgpr   r   r   test_dispersion  s   
r  c                  C   sB  t d d t d d t d dt   d g} t| t d ksJ t| ddtt d ks-J tg dks5J tddgdks?J tg ddksIJ tt td  t t  t d  gdks^J tg t }|jrk|tju smJ tg t dd}|jrz|js|J t	d}t|| gt| |g  kr|ksJ  J t
td	d
  d S )Nr   r   r   Trd  r   r  rs  r_  r  c                   S      t g ddS NTrd  )r   r   r   r   r   r   #  r   ztest_gcd_list.<locals>.<lambda>)r   r   r   r   	is_Numberrl   r   is_Polyrt  rr   r{   rA   )r0  r   r   r   r   r   test_gcd_list  s   **
0r  c                  C   sR  t d d t d d t d dt   d g} t| t d t d  dt d   t d  t  d ks1J t| ddtt d t d  dt d   t d  t  d ksQJ tg dksYJ tddgdkscJ tg dd	ksmJ tt td
  t t  t d
  gdksJ tg t }|jr|tju sJ tg t dd}|jr|jsJ t	t
dd  d S )Nr   r   r   r   r  Trd  r  r  r  r   c                   S   r  r  )r   r   r   r   r   r   8  r   ztest_lcm_list.<locals>.<lambda>)r   r   r   r   r  rl   Oner  ru  r{   rA   )r0  r   r   r   r   test_lcm_list&  s   *8@*
r  c                  C   s  t d d t d d } }t d t  d t d }}t d t d t d  t  d }}dd | |||||fD \}}}}	}
}|||
||	fksJJ |||
ksSJ |||ks\J t| ||||fkshJ t| ||ksqJ t| ||kszJ t| |t |||fksJ t| |t |ksJ t| |t |ksJ t| |t f|||fksJ t| |t f|ksJ t| |t f|ksJ t|||
||	fksJ t|||
ksJ t|||ksJ t| |dd|
||	fksJ t| |dd|
ksJ t| |dd|ksJ t||d	d|||fksJ t||d	d|ksJ t||d	d|ks)J d
t d  d
 d
t  d
 } }|d
t  d
 d
}}}t| ||||fksQJ t| ||ks[J t| || kseJ d
t d  d
 d
t  d
 } }|d
t  d
 d
}}}t| ||||fksJ t| ||ksJ t| || ksJ tdddksJ tdddksJ tdddksJ t d dt   d t d dt d   t  d } }t d dt d   dt d   dt   d }t d t d t d d }}}t| |dd|||fksJ t| |dd|ksJ t| |dd|ks%J t d dt   d t d dt d   t  d } }t d dt d   dt d   dt   d }t d t d t d d }}}t| |dd	d|||fkstJ t| |dd	d|ksJ t| |dd	d|ksJ tdtd }}t||t||  krtdksJ  J tdtd }}t||t||  krtdksJ  J ttt d t ttt  t tdt tdksJ tt	dd  tt	dd  tdt } tdt }t| |tdt ksJ tdt } tddgt }| |fD ]+}t|ddks,J td|dks6J t|| dks@J t| |dksJJ q dt d  t  d } t| t
d}t| td}|||kslJ |||ksvJ ||| ksJ ||| ksJ t| | | ksJ t| | | ksJ t| | tdt| ksJ t| | tdt| ksJ d S )Nr   r   r   r  c                 S   s   g | ]}t |qS r   r   rx  r   r   r   rc  @  r   ztest_gcd.<locals>.<listcomp>Trd  Fr   r_  rs  )r   r  r   r  r  r   r   r  rb  r   c                   S      t tS r   )r   r   r   r   r   r   r     r  ztest_gcd.<locals>.<lambda>c                   S   r  r   )r   r   r   r   r   r   r     r  r   r   )r   r   r   r   rr   r   re   rQ   r{   rj  rO   rP   r!   )r   r   r|  r   r   rm  r0  rh  rl   r}  r~  rj  lr   r   ipfzpfqr   r   r   test_gcd;  s   "&2, 2,  002


 r  c                   C   sR  t tddts
J t tdt dtsJ tdddksJ tdt ddks*J t ttddtddts:J t ttddt tddtsLJ ttddtddtddks^J ttddt tdddksoJ t tddtsyJ t tdt dtsJ tdddksJ tdt ddksJ ttddd	d
ddksJ d S )Nr   r  r   r  r   r  g      "@r   FrQ  )r   r   rf   r   rg   rd   rc   r   r   r   r   test_gcd_numbers_vs_polys  s    $$" r  c                  C   s   t ddksJ t dtdksJ t td td ksJ t t d t d ks+J t dt d dt d ks;J t dt d tddt d ddksPJ t td t ttd   tt td td   kslJ t dtd  t dt td   dt t td td   ksJ t td t d ttd  d  tt d td td   ksJ t td t dt td   tt td dtd    ksJ t dtd  t dt td   dt t td dtd    ksJ t dtd  t d dt td  d  tt tdd	 dtd  dtd    ks"J t d
td  t dt td   tt d
td  dtd    ksGJ tt d
t d d
t d sYJ t ddt  ttt   dddt d tt t  ksxJ t ddt  tttddt     ddddt td  ttdtd ddd  ksJ t tttt  ddtttd  ksJ tdt dt dt t  } t | tdt dt td  ksJ t | ddtdt dt td  ksJ t	t
dd  d S )Nr   r   r   rs  r  FrQ  r   r  r  gffffff@ra   T)ra   deepr  c                   S   s   t tdk S rd  )r   r   r   r   r   r   r     r   z test_terms_gcd.<locals>.<lambda>)r   r   rc   r   rg   r\   rt   rk   r   r{   rj  r   r   r   r   test_terms_gcd  s6    *8DD@H\J$
,(

(,r  c                  C   s.  t d dt d   dt d   dt d   dt   d t d t d  t d  t  } }t| t|}}|d|ks=J t| d|ksFJ t| dt |ksPJ t| dt f|ks[J t|d|ksdJ t| ddd|ksoJ t|ddd|kszJ dt d  dt d   dt d   dt d   dt   d	 t d  t d  t  d	 } }t| t|}}|d|ksJ t| d|ksJ t| dt |ksJ t| dt f|ksJ t|d|ksJ t| ddd|ksJ t|ddd|ksJ tt d dt   d dd
} | dtt d d	 dd
ksJ d S )Nr   r   r  r   rs  Trd  Fr   r   )r   r   r    r  r   r   r   
test_trunc  s(   VX(r  c                  C   sp  dt  d t tj } }t| ddt|}}| |ksJ t| |ks'J t| t |ks0J t| t f|ks:J t||ksBJ t| dd|ksLJ t|dd|ksVJ ttdd	  tdt d  d
t   d ddt d dt   d ksyJ ttdd	  tdt d  dt   d dt d  dt   d ksJ tdt d  dt   d ddt d t  d ksJ d S )Nr   r   rP   r   Trd  Fc                   S   r  r  )r!   r   r   r   r   r   	  r  ztest_monic.<locals>.<lambda>rs  r  rY  r   c                   S   s   t dt dt  d ddS )Nr   rs  r   FrY  )r!   r   r   r   r   r   r   
	  r+  r  g      @g      @r   r  r   r   )r   rl   r[  r   r!   r{   rA   r?   r  r   r   r   
test_monic  s   888r  c                  C   sp   dt  d tdt  d } }| dksJ t| dksJ ttdd  tdt  dd} |  dks6J d S )Nr  r   c                   S   r  r  )r"   r   r   r   r   r   	  r  ztest_content.<locals>.<lambda>r   r   r   )r   r   r"   r{   rA   )r   r0  r   r   r   test_content	  s   r  c                  C   s8  dt  d dt  d } }t| t|}}| d|fks J t| d|fks*J t| t d|fks5J t| t fd|fksAJ t|d|fksKJ t| ddd|fksWJ t|ddd|fkscJ ttdd  tdt  d	d
} tdt  td}|  d| fksJ | d|fksJ ttdtdksJ d S )Nr  r   r   Trd  Fc                   S   r  r  )r#   r   r   r   r   r   )	  r  z test_primitive.<locals>.<lambda>r   r   r  r   r   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r   r   r#   r{   rA   rS   rl   r  r   r   r   test_primitive	  s"   
r  c                  C   sB  t d dt d   dt d   dt d   dt d	   d
t d   dt   d } t d	 d
t   d }t d dt   }tt| ||f\}}}|||ksNJ t||| ksWJ t||t | ksaJ t||t f| kslJ t|||ksuJ t||dd|ksJ t||dd| ksJ | ||gksJ t| ||gksJ t| t ||gksJ t| t f||gksJ t|||gksJ t| dd||gksJ t|dd||gksJ ttdd  ttdd  tt d
 td
  t t t tt d
 d
t  t  ksJ tt d
 td
  t t tt td
  d
t  t  ksJ d S )Nr  r  r     r_  i  rs  q  r  r   r   r  r   Trd  Fc                   S   rf  rg  )r$   r   r   r   r   r   L	  r!  ztest_compose.<locals>.<lambda>c                   S   r  r  )r%   r   r   r   r   r   M	  r  )r   mapr   r$   r%   r{   rA   r   r  r   r   r   test_compose5	  s,   P8>r  c                   C   sB   t td dt  d tdt td dt  d tksJ d S r  )r   r   r  r   r   r   r   
test_shiftS	  s   Br  c                   C   s>   t tt ttgddgt td td  ttgksJ d S rL  )r   r   r   
shift_listr   r   r   r   test_shift_listW	  s   >r  c                	   C   s"  t td dt  d tt td t td t dt  kr?ttd d td dt  d ttd td   ksBJ  J t td td  d tt td t td t dtd  d tdd t  krttd d td td  d ttd td   ksJ  J t td dt  d tt ttj t td t tddt  krttd d td dt  d tttj td   ksJ  J t td dt  d tt td t ttj t tddt  krtttj d td dt  d ttd ttj   ks J  J t td dt  d tt td t ttj t tddtdd	  kritttj d td dt  d ttd ttj   kslJ  J tt	d
d  tt	dd  tt	dd  tt	dd  tt	dd  d S )Nr   r   r  r   r   r  r   rS   r   c                   S   s$   t tt t td t td S r   )r   r   r   	transformr   r   r   r   r   r	     $ z test_transform.<locals>.<lambda>c                   S   s    t tt td t td S r   r   r   r  r   r   r   r   r   r   s	  r
  c                   S   s    t tt td t td S r   r  r   r   r   r   r   t	  r
  c                   S   s$   t tt tt d t td S r   r  r   r   r   r   r   u	  r  c                   S   s$   t tt td t tt d S r   r  r   r   r   r   r   v	  r  )
r   r   r  r7   r  rg   rl   r[  r{   r2  r   r   r   r   test_transform[	  s<   0606282
:2
:r  c               
      sf  t tt dd } dtdt dd}}|  | |gksJ t  |gks'J t t  |gks2J t t f |gks>J t| | |gksHJ t dd| |gksTJ t| dd |gks`J ttdd  tt fd	d ttd
dtd   t d  tddtd   t d   tddtd   t d   tddtd   t d   tddt   tdd t dd t tt d dt d   td d t   dtd  d  t ddtdt d  dt   td d  t ddttddtd d  t  dtd  d  t ddtd td  d!td   dtd"   d#d$td   d%td    t ddgks1J d S )&NrP   r   r   Trd  Fc                   S   r  r  r&   r   r   r   r   r   	  r  ztest_sturm.<locals>.<lambda>c                      s   t  ddS rn  r  r   r   r   r   r   	  r   i   i	=  r_  r   i   r  r  r  r      r   i$  zZZ(pi)r  r  r  rg     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r&   r{   rA   rH   rl   ri   rg   )r0  r   rh  r   r   r   
test_sturmy	  s>   <(2Hr  c                      s`  t d dt d   t d  dt d    t  tt dftt d dfgks*J t t dft d dfgks:J tt fdd t t d d  t d d  t d d  t d   t  tt d dt   d dftt d dt   d dftt dfgksJ t t d dt   d dft d dt   d dft dfgksJ tt fdd d S )	Nr   r   r  r   r   c                         t  S r   r(   r   r   r   r   r   	  r  ztest_gff.<locals>.<lambda>c                      r  r   r  r   r   r   r   r   	  r  )r   r   r'   r{   r  r   r   r   r   test_gff	  s   (, 0
$
Br  c                  C   sz   t dt d} }t| t |t  tt| |fd}| tdtd  dtd  td   dtd   ttddks;J d S )	Nr   r   r   r  r  r  rP   r   )rr   r   r   r   norm)r   r   r   r   r   r   	test_norm	  s    Hr  c                   C   s  t td d tdddgtd dtd t  d td dtd   d fks*J t td d tdddgtd dtd t  d td dtd   d fksTJ ttd d tdd  dgttd dtd t  d ttddttd dtd   d tddfksJ ttd d tdd  dgttd dtd t  d ttddttd dtd   d tddfksJ d S )	Nr   r   r   r   r  r  rP   r   )r)   r   rr   r   r   r   r   r   test_sqf_norm	  s    66, , r  c            	      C   s  t d t d  t d  d } t d dt d   dt   d }t d }t d t d  t  d }tt| |||f\}}}}| |ksCJ t| |ksKJ t| t |ksTJ t| t f|ks^J t||ksfJ t| dd|kspJ t|dd|kszJ | d|df|dfgfksJ t| d|df|dfgfksJ t| t d|df|dfgfksJ t| t fd|df|dfgfksJ t|d|df|dfgfksJ t| ddd|df|dfgfksJ t|ddd|df|dfgfksJ | |df|dfgksJ ttd	d
  tddksJ tddg fksJ tdt d  d d dt d d d  ks3J t| ||d  ks@J t| t ||d  ksNJ t| t f||d  ks]J t d t	d  }t| | ||d  | ksvJ t| | t ||d  | ksJ t| | t f||d  | ksJ tt d t d ksJ tt  d t  d ksJ tt d t d ksJ tdt  d t
ddt  d ddksJ tdt  d dt  d  tdddt  d t d   ksJ ttt d dt   d t d d ksJ dt  t dt    t d  } t| dks(J t d dt   d d } t| t d d ksAJ t| dt d dfgfksQJ ttt	d d t	d  t d  t	d d tt	d t d   ksvJ ttt	d d t	d  td  t	d d tt	d td   ksJ ttt	t d t	t  t d  t	t d tt	t t d   ksJ ttt	t d t	t  td  t	t d tt	t td   ksJ t d d t d  t t	 d  t	d d  t	d  }t| dtt t	 t  t	 d dftt d t	 dt d   t t	d   dt  t	  dt   dt	d   dt	  dfgfksBJ d S )Nr   r   r   r   r  Trd  Fc                   S   r  r  )r*   r   r   r   r   r   	  r  ztest_sqf.<locals>.<lambda>r   r  rs  r  rQ  l    H/P l    _ % )r   r  r   r*   r+   sqf_list_includer{   rA   r,   r   rc   rg   ra   r   re   )	r   r   r   r   r0  rh  r~  Pr   r   r   r   test_sqf	  sv      "$ $$2"$&,@. "
"
"
"
4Rr  c               	      s  t d t d  t d  d  t d } t d }t d t  d }tt | ||f\}}}}| d|df|df|dfgfks>J t d| df|df|dfgfksQJ t t d| df|df|dfgfkseJ t t fd| df|df|dfgfkszJ t|d|df|df|dfgfksJ t ddd|df|df|dfgfksJ t|ddd| df|df|dfgfksJ | |df|df|dfgksJ tddg fksJ tddg fksJ ttdt tdg fksJ td	t  t dd	t fgfksJ tdt  t t ddtft tfgfksJ ttt t t dt t tjfgfks'J t	ddkr4t	dj
s6J tdt  dt dfgfksFJ tdt d  dt dfgfksXJ t	dt  dt  kseJ t	dt d  dt d  ksvJ t	dt d  d d
 dt d d d
  ksJ t	 | |d  | ksJ t	 t | |d  | ksJ t	 t f| |d  | ksJ t d td  t t t t t d d f\}}}	}
t	 | | |d  | ||	  ksJ t	 | t | |d  | ||	  ksJ t	 | t f| |d  | ||	  ksJ tddd}tddd}tddd}
t	tt t jdu s9J t	tdt d  d tdtt d t d   ksVJ t	tdt d  d tdtt d d  ksqJ t	tt d  t | t| t d |  t d |  ksJ t	tt d  t | t| t d d |  ksJ t	tt d  t t tt d  t d  t ksJ t	tt d  t t tt d d  t ksJ tt|
d d |d  |d  |d d   t|d d |d  t|d  t|
d d  }t	 |ksJ t	||ks#J t d d |
d d  }tt| t	 t|ks@J ttdt  d t td   d dfgfks[J t d d  t	  ksjJ t	 tdt d t t d t  ksJ t	 ddt d t t d t  ksJ t	 tddt d tdt   d t d tdt   d  ksJ t	t d dt t   d t dt  d ksJ t d dt t   d  t	  ksJ dt d  t ddt    d dt   tt ddt   d dt  d  }dt tdd  dt d  d  }t	 |ks&J t	 td|ks1J t	 td|ks<J t d dtd t   d  t	 tddt td d ks]J t	 d tddt td d ksrJ t	t d dtd   tddt tdt  t tdt   ksJ t	dt d  dtd   tdddt tdt  t tdt    ksJ t	t d t d ksJ t	t  d t  d ksJ t	t d t d ksJ t	dt  d  tddt  d dd!ksJ t	t d" t  d d#dd$t d t  d t d% t d&  t d  t d  t d  t d  d  ks-J t	t d" t  d d#dd$t d t  d t d% d't d&   t d  d't d   t d  d't d   d  kseJ t t t tt  t   ttd dt  d  ttt  td dt  d   }t	 t tt d  t ksJ t	|ttt d  td d  ksJ t	tt d dt   d t d d tt d d t d t d t  d  ksJ t d d t d dt   d   t	 t d t d  t d d  ksJ t	 t t d t d  t d d  ksJ dt  t dt    t d   t	 dks.J t	 t dks8J t	dt d dt   dt    d dt  dt d   t d  ddt d   t d    kshJ t	 dd( kssJ tt fd)d* ttd+d*  t	t tt d td  tt d td  dt  dt  gt tt t t t  tt t t t  t t t  t gksJ ttt d t  d  d d, d, tdusJ ttt d t  d  d d, d, tdu sJ t	tt  tt  ksJ d-t  t  d  t d  t  t  d  t d  t t d d    t d t d  t t d   t   d-t d  t d d  t t  d  t  t  d  t t d     t d t d d  t t  t  d  t d  t t d d       }t	|d,ks~J t	tt d t  t  dd.tt t d  t  ksJ t	tt d t  t  dd.tt t d  t  ksJ t	tt d tt d ksJ t	td/t  d d/t d  td0d/t  d0 d/t d0 dd!ksJ t	td/t  d/ d d1d0t  d0 d  ksJ t d td  d"t d  t  d2t d   d
t  td   d3t  t  d4t   d5td   d6t  d7 }t	|t t d t d  td d"t  d2  ksOJ t	|t dd.t d t d  td d"t  d2  kskJ t	|tdd.td td  t d d
t   d5  ksJ dt  dtdd
t      t	 dd.t	 ddd8ksJ t	 ddd8dt  dtd td9t    ksJ tt d t td   t|t dt dft t dft t dfgfksJ tt d t d d  dt d dft d dft d t  d dft d t  d dfgfk	sJ tddtd dtd }}}dt dt }}t|| d	| df|dfgfk	s@J t|| d	| df|dfgfk	sTJ t|| | | dfgfk	sfJ tt| d	| dftdfgfk	szJ t|| t || g fk	sJ t|| t || g fk	sJ t|| t || g fk	sJ tt| t t| g fk	sJ tt tdt  t tdt   t dt tdt  dft tdt  dfgfk	sJ tt d tt  t d  }t	t||k	sJ t t d t t  td  }t	t||k
sJ td d ttd d  t d t  d dtd  d  }t	t|dd|k
sCJ t d  td  td d  dt t d  td  td d   dt t d  t td d   t d td d   dt  td  td d   dt t  td  td d   dt t  t td d   dt  td d   td  td td d   dt td   dt td  td d   dt t  dt t td d   d dtd d   }t	|tt d  tt  t d dt   td  d  td d  ksJ tt t  t dt t  tt  t t  dt  t  dt t  d: }t	|t t t d  t t dt   ksWJ d&t d  td  d;t d  t t  d<t d  td   dt t  t td   d=t t  t t t  d5t t  t td   td  d&td  t  d>td  td   d<t td   d%td   }t	|d?t t t t  dtd  dt t  d&t d   dt t  t  td   ksJ d S )@Nr   r   r   r   Trd  Frs  r   r   r  r   positiver  )integerrm  )realr   r  r   r  i    iX  i iH i r  i  iT     iY  r  rQ  r  r  r  r  r_  r  r  c                      s   t  tddS )NFr  r.   r   r   r   r   r   r   
  r   ztest_factor.<locals>.<lambda>c                   S   s   t td d ddS )Nr   r   Trd  r  r   r   r   r   r   
  r   r   rb  r        ?r         ?r  M      r     ih  )r  fractionir  r  r  rg  r  r  )r   r  r   r-   factor_list_includerr   r   rl   r[  r.   
is_Integerrm   is_Powr   ra   rt   rT   re   rQ   rR   rc   ri   rk   r{   rF   rJ   r]   r   r   r   rp   )r   r   r   r0  UVWr   r   r   rm  r  f_zzif_qqier   s2s2ps2npippinr   r   r   test_factor
  s  &&(*&**" ,, $"2 "0*,.:6>66204**.
2($$&*
""
,B
4

8"*$
 *,4:6
$
$
H
0
>66",2h488 4<$(($(    $(<`
LH2j
dr  c                  C   s(  t d dt   d d t d d  t d dt   d d  } t d dt   d d td  t d dt   d d d t  t d dt   d d  }t| t d d t d d  t d d  ksbJ t|t d d	 td d  kstJ t| dt d dft d dft d d dfgfksJ t|dtd dft d d	fgfksJ t d td  d
 t d d  } t d td  d
 t d d  }t| t d t t d
  t t d
  t d t d  t d  t d  t d  t  d  ksJ t|ddt d t tt  d
  t tt  d
  t d t d  t d  t d  t d  t  d  ks&J t| dt d dft t d
ft t d
ft d t d  t d  t d  t d  t  d dfgfksYJ t|dddt d dft tt  d
ft tt  d
ft d t d  t d  t d  t d  t  d dfgfksJ d S )Nr   r  i r   i i  i -1i% ip  i@ r   rs  r   r   Tr  )r   r   r.   r-   re   r<  r   r   r   test_factor_large
  s|   <>0$((  ,
4
&

(0r  c                   C   sp   t dt d tddt d ddksJ t dt d dt d  ttdddt d dtd  ks6J d S )	Nrs  r  r   r   r   FrQ  r   )r.   r   rc   rg   r   r   r   r   test_factor_noeval  s   *Fr  c               
   C   s
  t dg ksJ t dg ksJ t tdddgksJ t tdgks$J t td dgks/J t td	 td
 gdd	d
dfgksCJ tttd	d tdd d
t tdd  } | j ddddgksfJ |   ddgkspJ | j dddddgks}J | j ddddgksJ | j tddd| j dd  krtdddfdftddtddfdfgksJ  J | j tddd| j dd  krtdddfdftddtddfdfgksJ  J | j tddd| j d d  krtdd!dfdftddtddfdfgksJ  J | j tdd"d| j d#d  kr=tdd$tdd$fdftddtddfdfgks@J  J ttd	d tdd d
t tdd  } t | ddddgksbJ t | ddgksmJ t | tdddt | dd  krtdddfdftddtddfdfgksJ  J t | tdddt | dd  krtdddfdftddtddfdfgksJ  J t | tdddt | d d  krtdd!dfdftddtddfdfgksJ  J t | tdd"dt | d#d  kr%tdd$tdd$fdftddtddfdfgks(J  J ttd	 d	 td	 d d%  td  d%t d d  } |   d&td'd	fd%ftd'd	dfdfd(d)dtdd	fdftdd	d	fd%fgksoJ t td d* td d+ gtd,d-td.d/fddiftd0d1td-d2fddifgksJ t td d* td d+ gddtd,d-td.d/fddiftd0d1td-d2fddifgksJ t td	 d* td	 d+ gtd3dtd4dfddiftd4dd5fddifd6tddfddiftddtd7dfddifgksJ t td td	 td td dtd td td	 d	 gd8ddifd9ddd:fd;dddd<fd=d%d	ifgksDJ td	 d	 td
 d
td	   d
 td } }}t | td%d
dd>g kskJ t | td%ddd>td%dtdd	fgksJ t | td%d
dd?d@dtdd	fgksJ t | td%ddd?d@gksJ t |td%d
dAg ksJ t |td%ddAtd%dtdd	fd	fgksJ t |td%d
dBdCdtdd	fd	fgksJ t |td%ddBdCgksJ t ||gtd%d
dAg ksJ t ||gtd%ddAtd%dtdd	fdd	ifgks#J t ||gtd%d
 dBd@dd	ifd;ddifdtdd	fdd	ifgksHJ t ||gtd%ddBd@dd	ifd;ddifgksbJ t td	 td	 d	 gd8ddifd@ddifdDddifgksJ t td	 td	 d	 gddEd8ddiftd'd	dfddifdDddifgksJ d%td
  dFtd   dGtd	   dt  dG } t | g ksJ t | dddH\}}|g ksJ tdIdJ t|t| D sJ |tdKd%t	dL d%  dftdKd%t	dL d% ft	tdKd% tdLd%fdtdLd%t	dL d%  fgksJ t | ddtdddM\}}|g ks3J tdNdJ t|t| D sDJ t
tdOdP  t
tdQdP  t
tdRdP  d S )SNr   r   T)r,   r   )r   r   r  )r   r  r   r  r   r   r  r   i  r   r   rr  r  )r  r   )r  r   )fastr,   )r  r  epsrA  r   i  U   rs  r  {Gz?i  gMbP?i  i'  -C6?i  r   rb  r  )r   r   r   )r  r   r     r  r   e   r  i5  k   r  iiirr  r  )rb  rb  r  r   r   r   )r   r   rs  )r   r   )infr,   )supr,   rb  r   r  r  )r  r   r  r   r  r  )r   r,   c                 s   `    | ]+\\}}}t |t |  k ot |k n  o+t|t|  k o)t|k n  V  qd S r   ro   rn   r   r   r   rm  r   r   r   r   t      
&z!test_intervals.<locals>.<genexpr>ir  )r   r,   r  c                 s   r  r   r  r  r   r   r   r     r  c                   S   s   t td d ddS Nr   r   r  r/   r   r   r   r   r   r     r   z test_intervals.<locals>.<lambda>c                   S   s   t td d jddS r  )r   r   r/   r   r   r   r   r     r   c                   S   s    t td d td d gddS )Nr   r   r   r  r  r   r   r   r   r     r
  )r/   r   r   rg   rl   r   r   r   r4   re   r{   r2  )r   r   r   	real_partcomplex_partr   r   r   test_intervals  s   (."("($($.*$($($($.8  
6
6
..
6

00, 2. :
*

 
*
0r  c                      s  t td d   jdddddksJ  jdddddks J  jddd ddtd	dfks1J  jddd dtd
ddfksBJ  jdddddtd	dfksSJ  jddddtd
ddfksdJ  jddddddtd	dfksvJ  jdddddtd
ddfksJ  jddtdddtddtddfksJ  jddddtddtddfksJ tt fdd tt fdd tt fdd td d  t dddddtd	dfksJ t ddddtd
ddfksJ t ddddddtd	dfks	J t dddddtd
ddfksJ t ddtdddtddtddfks4J t ddddtddtddfksIJ ttdd  tt fdd tt fdd d S )Nr   r   r   )stepsr  rb  r   r  r   r  T)r  r  r  r  r  r  r  r  c                      s    d j ddddS )Nr   r   T)	check_sqfr0   r   r   r   r   r     r   z"test_refine_root.<locals>.<lambda>c                      s    d  ddS r  r  r   r   r   r   r     r   c                      s    d  ddS rS  r  r   r   r   r   r     r   c                   S   s   t dddtdddS )Nr   r   r_  r  r  )r0   rg   r   r   r   r   r     rC  c                      s   t  jddddS Nr   r   r   r  )r   r0   r   r   r   r   r     r   c                      s   t  ddddS r  r  r   r   r   r   r     r   )r   r   r0   rg   r{   rF   rC   r2  r   r   r   r   test_refine_root  s0   """"$$.(""&&0*r  c                   C   s  t td d dksJ t td d t ddksJ t td d t
 ddks*J t td d t t
 ddks;J t td d dddksIJ t td d dddksWJ t td d dddkseJ t td d dddkssJ t td d ddddksJ t td d ddddksJ t td d ddddksJ t td d ddddksJ t td d dksJ t td d dt ddksJ t td d dt ddksJ t td d dt dt ddksJ t td d dddksJ t td d dddksJ t td d t ddksJ t td d t
 ddks+J t td d t
 d t
 ddks?J t td d t t d ddksSJ ttd	d
  d S )Nr   r  r  r  r  rb  r   r   r   c                   S   r  r   r1   r   r   r   r   r     r  z"test_count_roots.<locals>.<lambda>)r1   r   rh   re   r{   rF   r   r   r   r   test_count_roots  s.   "  &  ((r  c                  C   s(  t tdtd  d tdd} |  dksJ | jdddks!J | jdddks+J t td td tdd}| dks@J t td dtd t  d tdd}| dks[J |jdd	d
dksfJ |jddd
dksqJ |jddd
dks|J |jddd
dksJ |jddd
dksJ d S )Nr   Tr   r   r  r   r  ir  r  r  rb  r   )r   rr   r   r1   )p1p2p3r   r   r   test_count_roots_extension  s   &r  c                      s   t dtd  dtd   dt  d   dtddks J  ddks)J  ddks2J tt fdd	 t td
 t d dttd td  d dksWJ d S )Nr   r   r   r  r   r   r   c                      s
     dS )Nr   )rootr   r   r   r   r     r!  z test_Poly_root.<locals>.<lambda>r   )r   r   r  rg   r{   
IndexErrorrw   r   r   r   r   test_Poly_root  s   (<r  c                     s  t tdgks	J t tdddgksJ t td g dks J t td dddgks-J t ttd t d  ttd t d ddgksHJ t ttd t d  ddttd t d ddfdgksgJ t td td t d  ttd t d ddddgksJ t td td t d  ddttd t d ddfdgksJ t td	 d	 dd
ttd	 d	 ddd
ttd	 d	 ddd
gksJ d	td  dtd	   dt  d  td t d } t   tdd	d	d	gksJ t|   t| dgksJ td	 td	  d	tdd   d	tdd  g}tt fdd tt fdd t  dd|ks8J t t dd|ksEJ t t dd|ksRJ d S )Nr   Fmultipler   r   r  r  r   r   radicalsr   r  r   c                      r  r   r3   r   r   r   r   r     r  z!test_real_roots.<locals>.<lambda>c                         t t tS r   )r3   r   r   r   r   r   r   r     r   Tr   )	r3   r   rw   r   rg   rr   rl   r{   r  )r   rootsr   r   r   test_real_roots  sN   6
 

$ "r  c                     s@  dt d  dt d   dt   d  tddddg} t t    kr+| ks.J  J t d t  d }t|dt|dt|dg}t|t|   krU|ksXJ  J tt d d td tdgkskJ tt d d dd	td dftddfgksJ tt d d dd
tt d d ddd
tt d d ddd
gksJ t d t  d }t|t|dt|dt|dt|dt|dgksJ t d td  dtdd   t dtdd  t g}tt	 fdd tt	 fdd t dd|ksJ tt dd|ksJ tt dd|ksJ d S )Nr   r   r   r  r   r   r   Fr	  r  r   c                      r  r   )r2   r   r   r   r   r   1  r  z test_all_roots.<locals>.<lambda>c                      r  r   )r2   r   r   r   r   r   r   r   2  r   Tr   )
r   rg   r2   r   rw   rr   rl   re   r{   r  )frootsr   grootsr   r  r   r   r   test_all_roots  s.   $((&2
(
*r  c                  C   s  t dt g ksJ t dt g ksJ t td d t ddgks'J t td d t dt dt gks<J t td d t } | ddgksOJ t td d t } | dt dt gksfJ t td d tdd t } | ddgks~J t td d tdd t } | dt dt gksJ t td dt  t ddt  ddt  gksJ t td dt  ttd ddt  ddt  gksJ t dt d	  d
gksJ ttd t d dd} td}t| d d|tj	u sJ t
| d dksJ t| d td
dksJ t
| d d|tj	u s*J t| d td
dks8J t
| d d|tj	u sHJ t| d d|tj	u sXJ t
| d d|tj	u shJ t| d d|tj	u sxJ t
| d d|tj	u sJ td}t| d d|tju sJ t
| d dksJ t| d td
dksJ t
| d d|tju sJ t| d td
dksJ t
| d d|tju sJ t| d d|tju sJ t
| d d|tju sJ t| d d|tju sJ t
| d d|tju s#J ttdd  ttdd  ttd d ddgks@J ttd d } | ddgksQJ ttt dt gks_J ttdt  dt gksoJ ttdd  t td d }|ddd | D ksJ tt td dtd   d td!   d"td#   d$td%   d&td'   d(td   d)td   d* dd+ksJ tt d,td  d  d-ksJ td.}ttt|  d/d\}t|t|  d0k sJ d S )1Nr   r   r         r   r   r   r?  rA  g      r   nz1e-5ghW!'gJ5ogJ5o?gP?gg'r  gg'?z1e-6c                   S   s   t tt t S r   r   r   r   r4   r   r   r   r   r   l  r   ztest_nroots.<locals>.<lambda>c                   S   s   t tt  S r   r  r   r   r   r   r   m  r   g       c                   S   r  Nr   r4   r   r   r   r   r   w  r  c                 S   s   g | ]}| d qS r  r  )r   r   r   r   r   rc  {  rC  ztest_nroots.<locals>.<listcomp>rg  r  rr  i  r  i@  r  iV  r_  i  rs  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   r4   re   rg   rd   ro   
epsilon_eqrl   truern   falser{   rH   r>   rF   r2   strr   )r  r  r   r  rm  r   r   r   test_nroots8  s   "*  6               ".




&r  c                  C   sh   t d dt d   dt d   t d  } t|  tjdtjdiks$J t| tjdtjdiks2J d S )Nrs  r  r   r   )r   r   r5   rl   r  r   r   r   r   r   test_ground_roots  s   (  r  c                     s   t d t d  d  t d t  d d } t d d d }t d t  d d }t d d }t d ks5J tt fdd tt fdd tt d| ksRJ tt d|ks]J tt d|kshJ tt d|kssJ ttd	d  d S )
Nr  r   r   c                      
   t  dS r  r6   r   r   r   r   r     r!  z+test_nth_power_roots_poly.<locals>.<lambda>c                      s
   t  tS r   )r6   r   r   r   r   r   r     r!  r   r  c                   S   s   t tt dttS rd  )r6   r   r   r   r   r   r   r     s    )r   r6   r{   r2  r.   r>   )f_2f_3f_4f_12r   r   r   test_nth_power_roots_poly  s   r&  c                  C   s   t td d } | ddgddgksJ | g dddgks"J | g dddgks/J | g dddgks<J t td d } | dd	gg ksOJ t td d } | g d
dgkscJ t td d } | ddgddgksxJ d S )Nr  r   r   )r   r   r   r  )r   r   r   r   r   r   )r  r_  r   r   r   r   r   r  )r   r   r   r   r   )r   r   which_real_rootsr   r   r   r   test_which_real_roots  s   r(  c                  C   s  t td d } | ddtt gddtt gksJ | ttt ddgtt ddgks/J t td d } | tt td gtt gksIJ t tt d } | ttdddgtgks`J t td d } | td t d gtd t d gksJ d S )Nr  r   r   r   r   )r   r   which_all_rootsre   r   r   r   r   test_which_all_roots  s   &($2r*  c                     s   t td td  td  t d } | j tdt t d  fddt|  D dgks2J tt	dd	  tt
d
d	  tt
dd	  tt
dd	  ttdd	  d S )Nr  r   r   r   r   c                    s   g | ]\}} |r|qS r   r   )r   r  rm  r   r0r   r   rc    r)  z"test_same_root.<locals>.<listcomp>c                   S   s   t td tdddS Nr   r   r   )r   r   rP   	same_rootr   r   r   r   r     r   z test_same_root.<locals>.<lambda>c                   S   s    t td d tddddS )Nr   r   r   r   r   )r   r   rN   r.  r   r   r   r   r     r
  c                   S   s   t td d tdddS Nr   r   r   r   )r   r   rQ   r.  r   r   r   r   r     r+  c                   S   s$   t ttd  d tt dddS r/  )r   r   r   rO   r.  r   r   r   r   r     r  c                   S   s   t tt d tdddS r-  )r   r   r   rO   r.  r   r   r   r   r     r+  )r   r   r.  rp   re   ri   	enumerater2   r{   rF   rH   r>   r   r   r+  r   test_same_root  s&   $&r1  c               
   C   s   t td d td  ttdtd  i} t| tdt dtd  d d dft dtd  d dft dtd  d dfgfksHJ t td d td  ttddtdd   i} t| td u skJ d S )Nr   r   rb  r  )ra   r   r  rr   r<   rg   r   r   r   r   test_torational_factor_list  s   .
4r2  c                  C   s  t ddksJ t ddksJ t ttksJ t ttu s J ttdd  t d } dks1J t| ts8J t dt } dksCJ t| tsJJ t d	td
ksSJ dtd  d dt d dt d df\}}}}dd ||||fD \}}}}| |d||fksJ t ||fd||fksJ t ||ftd||fksJ t ||ftfd||fksJ t ||f } d||fksJ t| tsJ t ||fddd||fksJ t ||fddd||fksJ td d ttd  }t ||ksJ t |ddttd ksJ td d ttd  }t ||ksJ t |ddttd ks+J t td d d td d fdtd dfksEJ t td t tt  dtt  td t  ks`J t td td  tt  ttt ksvJ t td td  tt  ttt ksJ t td td  tt  tt ksJ t td d td d  td t d td  ksJ t td d t	j
 td d  td t d dt d  ksJ t tdt dtt  d ttd  ttd ksJ ttd td  t}ttt t}ttt tdd}tdtdd}t ||fd||fks/J td tdd td   dtd d t  dtd  }td d }t ||fdddtd dt  d ttd fksoJ tdt d t}ttd  td  td  td  dtd   dt  d t}t ||fd| | fksJ ttd d t}ttd d t}| |t	dd ttd ttdttd ttdfksJ |j |ddtdt d ttdtdt d ttdfksJ dt dt dddfdt dt ddt dt fdt dt ddt dt fdt dt dddfg}	|	D ][\}}}
}}t ||fd||fksBJ t|t}t|t}t|t}t|t}| ||
|
| |fkseJ |j |j|j|jfksuJ |jj |jdd|j|jfksJ q-tttd d}tdtd!d}| |dtttd dtdtd dfksJ |j |ddtttd dtdtd dfksJ tdt t t td d}tdtd  t td d}|j |ddtdt d td dtdt t td dfks J dt dt  d"tt d    tt t t d   }t |jdks&J ttd# }ttd# }d|d  d |d  d  |d  d d|d  d d|d  d  | |  d|d  d |d  |d   d|d  d |d  d  |d  d  d|d  d |d  |d   dt|d |d  d$   d|d  d  | |d  d d|d  d |d  | d  d|d  d | |d  d d|d  d |d  | d   d|d |d  d$ tdd    }t |jdksJ td%dd&}t|td d  td  tdkftd td dt   df}t|td  tdkfdt df}t ||ks9J t d| d| ksFJ t d| d| ksSJ t td d td  | td | ksjJ t td d td  | td | ksJ ttd d td  tdkftd td dt   df}ttd tdkfdt df}t ||ksJ t d| d| ksJ t d| d| ksJ t td d td  | td | ksJ t td d td  | td | ksJ t	d'dd(}t |dd)t	ju sJ |tdt	ju sJ t|t	ju s&J td*dd}t |d+ d |d+ d ks=J t|d, |d- d |d.   d|d/  t  }t |tt|d, |d- d |d.    d|d/   t ksvJ t td d tt  tt ksJ d S )0Nr   r   c                   S   r  )Nr   r   r   )r7   r   r   r   r   r     r  ztest_cancel.<locals>.<lambda>r  r3  r   r  r   r  r  r   r   c                 S   s   g | ]}t |tqS r   r   rx  r   r   r   rc    rC  ztest_cancel.<locals>.<listcomp>Trd  F)r   r   r,  r   r   rb  r  r_  rs  r   )includer  r   r-  r   g{Gzt?r  r  r1  )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/xrQ  )	_signsimpMr   )r   r  r  )r  r   r  )r7   r   rh   r{   r2  r   r7  rr   r   rl   r[  rp   r   r   rP   r   r   is_Mulrq   rg   rm   rs   NaNr  rx   rv   rt   re   )r   r   r   r   r   r0  rh  r  ri  pairsr  pfpgpppqr1  r  r  r  p4r7  exprr   r   r   test_cancel  s   046,,*:D><8@ 



 (
(8>"..:.. !"0B*rA  c                   C   sv   t td d td  ddtd ksJ ttd d dd ttd dddttd ddtdtddfks9J d S )Nr   r   r   )r7   r   r   r   r   r   r   test_cancel_modulus  s   ($rB  c                     s  t td dt  d tdd   \} }|  ksJ |tjks"J t td dt  d tdd   \} }|   ks?J |tjksFJ t td d tdd t  tdd  tdd   \} }| t td dt  d tddksxJ |dks~J t td d tdd t  tdd  tdd   \} }| t td dt  d	 tddksJ |dksJ t tt tt tt	 fd
d t tdd tt	 fdd d S )Nr   r   r  rO   r   rP   r   r_  rg  c                            S r   )make_monic_over_integers_by_scaling_rootsr   r   r   r   r     r  z@test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>rS   c                      rC  r   rD  r   r   r   r   r     r  )
r   r   rE  rO   r%  r  rl   r   r{   r2  )r   r   r   r   r   .test_make_monic_over_integers_by_scaling_roots  s(   2&2&rF  c                  C   s>   t td d } | jdd\}}|tjksJ |du sJ d S )Nr  r   T)by_nameF)r   r   galois_grouprZ   D4)r   rh  altr   r   r   test_galois_group  s   rK  c            
         s  dt d  td  t d  td  } t d t  td t g}dt  dg}t d td  t }t| |||fks9J t| |t t||fksFJ t|}|| ||fksUJ tdt  t ttdt tg}tt d td  t t t}tt| |dd||fsJ tt| |t tdd||fsJ t|dd}t|| ||fsJ dt d  td  dt  } tt d td  d t t d g}t d t td  d  t t d  td d  td d  td d  td  d td d  ttdd  g}d	}t| |||fksJ || ||fksJ t| |d
dd d	ks!J |j| d
dd d	ks/J || du s9J || d d
u sEJ tddgt dgd	fksTJ t	t
dd  tdt d  td  dt  }ttt d td  d tt t d g tt d dt  td   dt  t  dtd   dtd   dtd   t tddtdtd  dtd   dt  t tddg}td	t tdd} |||fksJ  | \}}tdd |D sJ t|tsJ tdt d  td  dt  t ttt	t fdd td	t t} |\}}tdd |D s&J |js,J tdt t}	 |	\}}t|tsAJ | dksJJ tdd |D sVJ d S )Nr   r  r   r   Trd  rs  r   r   FrY  c                   S   s   t ddgS r   )r8   r   r   r   r   r     r   ztest_reduced.<locals>.<lambda>r  r  rP   r   g      пg      ?c                 s   s    | ]}t |tV  qd S r   )r   r   r   r   r   r   r   r     s    ztest_reduced.<locals>.<genexpr>c                      s
     S r   )reducer   G_polyf_wrong_gensr   r   r     r!  c                 s       | ]}|j V  qd S r   rt  rL  r   r   r   r         c                 s   rQ  r   rR  rL  r   r   r   r     rS  )r   r   r8   r9   rM  r   r   rg   containsr{   rA   r   r   r   r2  rt  r   )
r   rh  ri  rm  r~  f_polyQ_polyr_poly	zero_poly
const_polyr   rN  r   test_reduced  s^   $ $p ,R*&rZ  c               
   C   s  t g tttg ksJ t td d td t td  gttdddtd  dtd  gks/J t td d td t td  tt td  gtttdddtd  td dtd  gks^J t td d td t td  gttdd	d
tdtd  tttdtd  ttgksJ t td d td t td  tt td  gtttdd	d
tdtd  tttttd ttttdtd  tttgksJ t td d td d gtd gksJ t ttd dttd dgtd gksJ dtd  tt  dt  d dt dt t  td  tdt  tt  dtd   g} td td td   dt td  t  dt td   td td   d }t | tttddd}|dt t dt  dtd   dtd   dtd   td  ddt  td  dtd   dtd   dtd   dtd   dtd   ddt  dt  tt  dtd   td  td  ddt  td  dtd   dtd   dtd   dtd   td  gksJ t||tttddd	d\}}tdd t||j	D |t|ddksJ tt dt  dtd  td  g} t | ttddtd dt  td dtd   tt dt  gks=J t | ttddtd dtd   td  dtd   tt dt  gksdJ t | dd	dtd dt  td dtd   tt dt  gksJ t dgtdgksJ t td dt  gttdtd  dt  gksJ t
tdd  t td d td d gddtd gksJ t td d td d gddtd gksJ t
tdd  d S )Nr   r   r  r   rW   r   r   rY   Tr   re  r   r  r  r   Fr  rs  )r   r   re  c                 S   s   g | ]\}}|| qS r   r   )r   r   r   r   r   r   rc  /  r   z!test_groebner.<locals>.<listcomp>r   )r   rM   r  r   c                   S   s
   t dgS r   )r9   r   r   r   r   r   =  r!  ztest_groebner.<locals>.<lambda>
buchbergermethodf5bc                   S   s   t ttgddS )Nunknownr]  )r9   r   r   r   r   r   r   r   B  r   )r9   r   r   r   r   rk   r8   sumr   re  r{   rA   r2  )r0  r   rh  ri  rm  r   r   r   test_groebner  sJ   H^,&<:*.ZP@N6J.$0
6
0
600rb  c                  C   s<  t t t t t t t t  tt  tt  t t t t t t  t t t  tt t  t t t t d g} t| t ttttd}dt  dtd   dtd   dt  dt dt  dtd   dtd   dt  dtd  dtd	   dtd
   dtd   dt td  dt  td  dtd   dt  td td  td  d g}t| t ttttd|ksJ |t|ksJ dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d dt	 td  dt	 td
   dt	 td   dt	 td   dt	 td   dt	 td   dt	 t  dt	  dtd   dtd
   dtd   dtd   dtd   dt  d g} t| t	ttd}dt	 dtd   d td
   d!td   d"td   d#td   d$td   d%t  d& dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d g}t| t	ttd|ksJ |t|ksJ td t dt
  d d't t
d  t
 d g} t| tt
td}td t dt
  d t
d dt  t
 d g}t| tt
td|ksJ |t|ksJ d S )(Nr   r   r  r   r  r   r   r   r  rs  r  r_  r  r     N   i  i   l   i   i  i8  i  r  r     i   r  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 rb  )r   r   r   r   r9   rX   rW   fglmr   r   r   )r0  rh  r2  r   r   r   	test_fglmE  sl   p&..2^j








^0ri  c                  C   s  t ttgttdu sJ t td td  gttdu sJ t tttgtttdu s+J t tttgttttdu s:J tt t tt t tt t g} t | tttdu sVJ td dt t  d ttd  ttd   dtd  dtd   g} t | tttdu sJ d S )NTr   r   Fr   r_  )r;   r   r   r   r   )r0  r   r   r   test_is_zero_dimensionalo  s   ""Frj  c                  C   s  t t dt  dtd  t d  g} t| t tdd}td dt  t d dtd   t t dt  g}dd |D }t| dg t tdd|ksIJ t|tdu sRJ t|dksZJ |d |d krg|d jriJ |d	 |d	 krv|d	 jrxJ |d |d kr|d jrJ |d	d  |d	d  krtd
d |d	d  D rJ |d d |d d krtdd |d	d  D rJ |j|ksJ |j	|ksJ |j
t tfksJ |jtksJ |jtksJ ||ksJ |t|ksJ ||ksJ |t|ksJ |g ksJ t| t tddd}|d |d kr|d jsJ |d	 |d	 kr.|d	 js0J |d |d kr?|d jsAJ |d	d  |d	d  kr\tdd |d	d  D s^J |d d |d d krytdd |d	d  D s{J d S )Nr   rY   r   r   c                 S   ra  r   rh  rb  r   r   r   rc    r   z&test_GroebnerBasis.<locals>.<listcomp>r   Tr   c                 s   rQ  r   r  r   r   r   r   r   r     rS  z%test_GroebnerBasis.<locals>.<genexpr>c                 s   rQ  r   rk  rl  r   r   r   r     rS  r[  c                 s   rQ  r   rk  rl  r   r   r   r     rS  c                 s   rQ  r   rk  rl  r   r   r   r     rS  )r   r   r9   r   r:   r   r  anyexprsre  r   r   rO   r   rY   r7  r   )r0  rh  r~  r  r   r   r   test_GroebnerBasis}  s8   $266""":>ro  c                  C   s  t ttttksJ t ttttksJ t tt ttt ttks&J t ttt tttt tttks<J t tt tdttt ttksNJ t ttt ttdtttt tttkshJ t tt dt td   d ttt dt td   d tttksJ t dtt d  d tdtd  dt t  dtd   d ttksJ t ttt d  d tttd  dt t t  ttd   d tttksJ t dt tt d  d tdt td  dt t t  dt td   d tttksJ t dtt d  t d tdtd  dt t  dtd   t d tttks8J t ttt d  t d tttd  dt t t  ttd   t d tttksfJ t dt tt d  t d tdt td  dt t t  dt td   t d tttksJ t tt tt d  tt d  tdt t dt t  td  td  dtd   tttksJ t tt tt  tt d  ttd td  ttd  td   ttd  td   dt td  td   dt t td   ttd   tttksJ t ttt t tttttt t tttks9J t tt d tttd dt t  td  ttt dksZJ t tt d tttd dt t  td  ttt dks{J t dttdtksJ ttdd	  t tt ttttt ttksJ t tt ttttt ttksJ tdt d d d
  t	dd
  } t | 
 |  ksJ ttd  t	dd  }t |
 | ksJ d S )Nr  r   r  r   r  r   r   c                   S   r  r   )r   r   r   r   r   r     r  ztest_poly.<locals>.<lambda>r   rs  )r   r   r   r   rt   r   rO   r{   rD   rl   r   ra   )expr1expr2r   r   r   	test_poly  s    ,$4JL4<
4
8
@"<
F

6BB&&$rr  c                  C   s  t dtd dd} ttjttksJ ttjtt ksJ ttdtdt ks+J ttdtdt ks8J ttjdt dt ksFJ ttdtd tksSJ ttdttdtt ksdJ ttdtd | ksqJ ttdt dks|J ttd td| ksJ ttjtjtjksJ tdddd}ttd|t d|ddksJ t	d|dd}ttj|d	d
t tj|ddksJ ttj|dd
t	dt tj|ddddksJ d S )Nr   r   FrQ  r   r  r   r   T)clear)
rc   r   rb   rl   r  NegativeOnert   r[  rj   r[   )r   r   r   r   r   r   test_keep_coeff  s*   " ru  c                   C   sD   t ttt tt t tksJ tttt  tt t tks J d S r   )re   r   r   r   r   r   r   test_poly_matching_consistency  s    $rv  c                   C   s\   t tt ttt  ttt   tgdt t t tt  tt  tt t  ks,J d S )Nr   )ra   r.   r   re   r   r   r   r   r   r   r   test_issue_5786  s   (rw  c                  C   s   G dd dt } tttt   }ddt  }t| || |ks"J t|| | || | ks2J t|| | || | ksBJ d S )Nc                   @   s   e Zd ZdZdS )z test_noncommutative.<locals>.fooFN)__name__
__module____qualname__is_commutativer   r   r   r   foo  s    r|  r   )r^   r   r   r7   )r|  r  r   r   r   r   test_noncommutative  s    $r}  c                   C   s   t ttd ttd   tt tddd u sJ t ttd tdtd  tt  d td u s4J t tttd u s?J t ttdt d u sMJ d S )Nr   r   rT   r   r   )r=   r   r   r   rr   rt   r   r   r   r   test_to_rational_coeffs  s   $( r~  c                   C   s^   t ttt  dtdftt dfgfksJ tttt  dtd tt  dfgfks-J d S rL  )r-   r   r   r+   r   r   r   r   test_factor_terms  s   ,2r  c                   C   s   t td d tdd g dksJ t td t d ttdd dgg ddggks-J t td t d tttdd dggg gdgdgggksLJ d S )Nr   r   rO   r   )r   r   r   r   r   )r   r   as_listr   r   r   r   r   r   test_as_list  s
   &4 r  c                   C   s^   t tdt tdtdfgfksJ t tdtt tttdttdfgfks-J d S r  )r-   rr   r   rt   r   r   r   r   test_issue_11198  s   &8r  c                  C   s0   t tdt } |  tdt ksJ d S )Nr  )r   ri   evalfr   r   r   r   r   r   test_Poly_precision#  s   r  c                   C   s8   t ddtd  ttddtd  tddksJ d S )Nr   r   rT   r   )r   rr   r   r   r   r   r   r   test_issue_12400)  s   r  c                	   C   sL  t tddtd  d tddtd  d tdddtd  ks&J t tdtdd tdtdd tdtdd	 ksDJ ttddtd tddtd tdtd d kscJ tdtd dtd d
td ksxJ ttdddtdd   d tdddtdd   d tddddtdd   ksJ t tddtd tddtd tdd ksJ t tdtd d tdtd d tdd ksJ t tdtd d tdtd d tdtd d gtdtdd ks
J t tddtd  d tddtd  d tddtd  d gdtd tdd ks=J ttddtd tddtd tddtd ftddtd kseJ ttdddtdd   d tdddtdd   d tdddtdd   d gtddddtdd   ksJ d S )Nrs  r   r   r   r  r  r   r   r  r  r_  r  r  r  rr  r  r  i  )r   rl   rr   rg   r   r   r   r   r   test_issue_14364.  s   L<>*^6:VfPr  c                  C   s   t ddd} d| d  | d  td| d  | d d d   d d  ddtdd	  |  | d  td| d  | d d d   d tdd	   d
|   }t|dd| | d d  ks`J d S )Nr   Tr  rg  r   r   r_  r  r   r  r  )rm   rr   rg   r.   )r   r@  r   r   r   test_issue_15669@  s   <L$r  c                  C   s   t d} t| d }t  tt| d t| d gg}W d    n1 s'w   Y  ttdd, || ||   krStt| d d t| d d ggksVJ  J W d    d S 1 saw   Y  d S )Nr   r   F)test_stacklevelr   )rm   r   r|   ru   r}   rz   )r   r   r7  r   r   r   test_issue_17988G  s    H"r  c                   C   s@   t dt dt  dt ksJ t dt dt  dksJ d S )Nr   r   r   r   )r7   re   r   r   r   r   test_issue_18205P  s     r  c                  C   sz   t d d t d d  t d d  t d d  } dt d d dft d dft d dt   d dfgf}t| |ks;J d S )Nr   r   r   r   rs  )r   r+   )r   r]  r   r   r   test_issue_8695U  s   06r  c                      s   t td t t d  tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d d S )
Nr   r   c                      s   t  dddS )Nr   r   r  r  r   r  r   r   r   ]  r   z"test_issue_19113.<locals>.<lambda>c                      s   t  ddS )Nr   r   r   r   r  r   r   r   ^  r   c                      r  r   r  r   r  r   r   r   _  r  c                      r  r   r  r   r  r   r   r   `  r  c                      r  r   )r5   r   r  r   r   r   a  r  c                      r   rd  r!  r   r  r   r   r   b  r!  )rt   r   r{   rF   r   r   r  r   test_issue_19113[  s   r  c                  C   s   dt d  dtd t  t  td  } t| tdddt tdt d  d  ks,J t t t  tt  t t  tt t  } t| tdt tt  t t t  ksVJ d S )Nr   r   )r   rr   r   r.   re   r   r   r   r   r   r   test_issue_19360e  s   (0*.r  c                  C   sB   t tt ttt} |  }| |ksJ d| j|jksJ dd S )Nz(Copied polynomial not equal to original.z9Copied polynomial has different generators than original.)r   r   r   r   copyr   )r   r  r   r   r   test_poly_copy_equals_originalm  s   
r  c                  C   sJ   t tt ttt} tt| }| |ksJ d| j|jks#J dd S )Nz.Deserialized polynomial not equal to original.z?Deserialized polynomial has different generators than original.)r   r   r   r   pickleloadsdumpsr   )r   deserializedr   r   r   &test_deserialized_poly_equals_originalv  s   
r  c                  C   s0   t ttd  td  t t} | t ksJ d S rL  )r   r   rh   )r]  r   r   r   test_issue_20389  s   r  c                  C   sL   ddl m}  | d\}}tdt| |  |d| }| tdks$J d S )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   re   r   rl   )r  r   rj  r   r   r   r   test_issue_20985  s   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.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   sympy.polys.polyerrorsr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   sympy.polys.polyclassesrK   sympy.polys.fieldsrM   sympy.polys.domainsrN   rO   rP   rQ   rR   rS   rT   sympy.polys.domains.realfieldrU    sympy.polys.domains.complexfieldrV   sympy.polys.orderingsrW   rX   rY   sympy.combinatorics.galoisrZ   sympy.core.addr[   sympy.core.basicr\   sympy.core.containersr]   sympy.core.exprr^   sympy.core.functionr_   r`   ra   sympy.core.mulrb   rc   sympy.core.numbersrd   re   rf   rg   rh   ri   sympy.core.powerrj   sympy.core.relationalrk   sympy.core.singletonrl   r  rm   $sympy.functions.elementary.complexesrn   ro   &sympy.functions.elementary.exponentialrp   %sympy.functions.elementary.hyperbolicrq   (sympy.functions.elementary.miscellaneousrr   $sympy.functions.elementary.piecewisers   (sympy.functions.elementary.trigonometricrt   sympy.matrices.denseru   "sympy.matrices.expressions.matexprrv   sympy.polys.rootoftoolsrw   sympy.simplify.simplifyrx   sympy.utilities.iterablesry   sympy.utilities.exceptionsrz   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   r  r  r   r#  r&  r3  r6  r8  r;  r=  r>  r@  rD  rF  rH  rJ  rN  rP  rR  rU  rV  rX  r[  r^  ra  rc  rf  rk  rn  ro  rq  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-  r3  r5  r6  r:  r<  r=  r?  rC  rF  rI  rK  rM  rO  rP  rT  r^  r_  r`  rk  rv  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r(  r*  r1  r2  rA  rB  rF  rK  rZ  rb  ri  rj  ro  rr  ru  rv  rw  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s   <$ 4
-\

	X"W	!#+

	


7	

	

	








:

4
/
y

+





j#P iq($& T ;F0**2
	
		