a
    kh                    @   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   N/var/www/auris/lib/python3.9/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqY   s    r   c                 C   sh   t | t |kr`t| rFt| t|kr@tdd t| |D S dS qdt| to\| j|ddS ndS d S )Nc                 s   s   | ]\}}t ||V  qd S N)
_strict_eq).0r   r   r   r   r   	<genexpr>d       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 s20    Y  t  | tt  W d    n1 sd0    Y  t  | tt  W d    n1 s0    Y  d S r   )r   r   r|   rp   r   r   r   r   test_Poly_mixed_operationsm   s    
**r   c                  C   sv  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slJ tjdddt| djt| d| dg| ksJ tjdddt| djt| d| dg| ksJ tjdddttf| djt| d| d	g| dgg| ksJ tjdddtd
jttdtdgtksDJ tjdddtddjttdtdgtksxJ 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sFJ tjdddttdjttdtdgtkszJ tjdddttdjttdtdgtksJ tjdt	titddtt	tt tddksJ tjdtitddttt tddksJ tjddittfddttt ttddks@J tjdtitt
fddttt tt
ddksrJ d S )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rM   r   F)r   Z	compositerT   r   r   rO   r   r   )rN   r   	from_dictr   reprK   r   rO   rP   rt   r   Kr   r   r   test_Poly_from_dictw   s    
2










r   c                  C   s  t d} tjddgt| djt| d| dg| ks8J tjddgt| djt| d| dg| kshJ tjddgtdjttdtdgtksJ tjddgtddjttdtdgtksJ tjddgttdjttdtdgtksJ 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djttd
gtksRJ 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>   r   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2*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sRJ t j djt d dg ks|J t jtdjttdtdgtksJ t jtdjttdtdgtksJ t jtdksJ t jt djt d dg ksJ t jttdjttdtdgtksBJ t jttdjttdtdgtkspJ 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sVJ t jttfddt td ttddksJ td t ksJ t jtdjttdtdgtksJ t	t
fdd t j djt d dg ks
J t jtdks"J t jttdjttdtdgtksPJ 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sNJ t j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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dt tt ttt dks8J t	t
fdd t jttt dt tt ttt dkszJ 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sbJ t jttf djt dg d dgg ksJ t jttf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sJ t jttftdjttdgtdtdggtksPJ 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sJ 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      r   z%test_Poly_from_poly.<locals>.<lambda>c                      s   t j ttdS r   r   r   r   rO   r   r   r   r   r      r   c                      s   t j ttdS 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   r   c                      s   t j ttdS r   r   r   r   rP   r   r   r   r   r      r   c                      s   t j ttdS r   )r   r   r   rO   r   hr   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j tddS Nr   r   )r   r   r   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j tddS 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   sB  t tdd  t tdd  td} tjtd | djt| d| dg| ksRJ tjtd | djt| d| dg| ksJ tjtd t| djt| d| dg| ksJ tjtd t| djt| d| dg| ksJ tjtt | djt| dg| d| d	gg| ksJ tjtt tt| djt| dg| d| d	gg| ksXJ 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slJ tjtd tt	djtt	dt	dgt	ksJ tjtd tt	djtt	dt	dgt	ksJ 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s>J d S )
Nc                   S   s   t tjS r   )r   	from_exprrl   Zeror   r   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:>,,..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sxJ t| tddt| t|dksJ t|tddt|t|dksJ d S )Nr   r   r   r   T	extension)rw   r   rP   algebraic_fieldr   r   rT   )r1r2K1Z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sjJ d S )Nr   r   r   Tr   r   )rw   r   rP   r   r   r   )r   r   ZK12r   r   r   ,test_Poly_rootof_extension_primitive_element<  s    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sxJ d S )Nr   r   r   r   r   Tr   )rw   r   r   r   Zas_polyas_exprr   r   r   r   r   r   #test_Poly_rootof_extension_to_sympyM  s    *r   c                  C   sL  t t } t| td t| djt| td g| ks8J |  } t| td t| djt| td g| kspJ tt } t| td t| djt| td g| ksJ |  } t| td t| djt| td g| ksJ t t} t| t dt dgt| djt| t dt dgg| ks,J |  } t| t dt dgt| djt| t dt dgg| ksvJ 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sHJ d S )Nr   r   )rO   r   r   r   r   rK   	get_fieldrP   Zold_poly_ringr   re   )domr   r   r   test_poly_from_domain_elementV  s$    0000
BB
BB
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s>J ttd  tt  t	 } tttt	dt| ksrJ 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s0J tdtd  dt  d dd g dksbJ 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tdd$  d d d tdd$tdd$dgksJ ttdtd  d$ ttdd$  d d!d g d%s\J 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srJ tdddd/ttttd t dt td   dt t  ttksJ ttd d td0 ttksJ 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sVJ 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  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   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   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   {  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   s   t td ttddS )Nr   Tr   r   r   r   r   r   r   ~  r   c                   S   s   t td tdddS )Nr   r   Tr   r   r   r   r   r   r     r   c                   S   s   t td ttddS )Nr   Tr   greedyr   r   r   r   r   r     r   c                   S   s   t td ttddS )Nr   Tr   rM   r   r   r   r   r   r     r   c                   S   s   t td ttddS )Nr   Fr   r   r   r   r   r   r     r   c                   S   s   t td ttddS )Nr   Fr   r   r   r   r   r   r     r   c                   S   s   t td tdddS )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     r   c                   S   s   t dddS )Nr   r   r   r   r   r   r   r   r     r   c                   S   s   t ddgS Nr   r   r   r   r   r   r   r     r   c                   S   s   t dS )Nr   r   r   r   r   r   r   r     r   c                   S   s   t dS 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     r   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   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  s    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sDJ t tt tt  tjtfksfJ t tt tt  ttjttfksJ t tt tt  ttj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  tttjtttfksJ t tt tt  tttjtttfks4J t tt tt  jtttfksZJ 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sJ t tt tt  ddjtttfks2J 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sJ t tt tt  tdjtttfksJ t tt tt  tdjtttfksJ 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s4J t tt tt  dd	d
jtttfks`J 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   s@   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   ZzerorO   rP   r   r   r   r   test_Poly_zero  s    r  c                   C   s@   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   onerO   rP   r   r   r   r   test_Poly_one  s    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slJ 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sJ 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sHJ 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slJ 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sJ 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s4J 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s J 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sdJ 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sJ 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s4J 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sVJ 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sJ 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sJ 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sxJ 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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td ttdd  ttdtdggtttdtdggtfk	sJ ttd 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	spJ 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
sJ ttt tddttt t tdddd  t||dg| t|| |dg| fksJ 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     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      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  r   zQQ(x)zQQ[x])r{   rB   rN   r   r   r  r   rK   rO   rP   re   rQ   Zunifyrr   rM   r   r   Z	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.
r  c                   C   s4  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sfJ t td ttt  jttthksJ t td ttt  tjttthksJ t td ttt  ttdjttthksJ t dt td  tttjthksJ t ttt tjtthks0J d S Nr   r   r   )r   r   free_symbolsr   r   rt   rT   r   r   r   r   test_Poly_free_symbolsN  s    $&(*.(r  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s`J t td ttt  jt ksJ t td ttt  tjtthksJ t td ttt  ttdjtthksJ d S r  )r   r   r  setr   r   rt   rT   r   r   r   r   test_PurePoly_free_symbolsY  s     $$(r  c                  C   sN  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 sJ t ttt tttt dkdu sJ t tt ttt ttkdu sJ t tttt ttkdu sJ t ttt tttkdu sJ t td d tt td d tkdu s2J t td d tt td d tkdu s`J 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 sJJ 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   r  r   r   r   test_Poly__eq__b  s(      $$" ....r   c                  C   sL  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 sJ t ttt tttt dkdu sJ t tt ttt ttkdu sJ t tttt ttkdu sJ t ttt tttkdu sJ t td d tt td d tkdu s2J t td d tt td d tkdu s`J 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 sJ | |du sJ | j|dddu s0J | j|dddu sHJ 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 sDJ 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s4J t dt dd tksPJ t td  tkshJ ttdd  t td dd tksJ tt dt  tsJ 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   sL  t dt d tt dt d ks*J t dt d dt dt d ksTJ t dt d tt dt d ddksJ t dt d dt dt d ddksJ t tddt tdd dt dt d	 ksJ t dt d	 dt tddt tdd ksJ 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     r   z&test_Poly_set_domain.<locals>.<lambda>c                   S   s   t td ddtS )Nr   r   r   )r   r   r'  rP   r   r   r   r   r     r   c                   S   s   t tt tttt S r   )r   r   r   r'  rO   r   r   r   r   r     r   )	r   r   r'  rO   rP   rg   r{   rG   rE   r   r   r   r   test_Poly_set_domain  s    **..68r(  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   r)  r{   rF   r   r   r   r   test_Poly_get_modulus  s     r*  c                   C   s   t td d dddt td d ddks2J t td d dddt td d ddksdJ t td d dt td d ddksJ 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     r   z'test_Poly_set_modulus.<locals>.<lambda>)r   r   r+  r{   rG   r   r   r   r   test_Poly_set_modulus  s     .r,  c                   C   s&   t td dt td ks"J d S )Nr   r   r   )r   r   Z
add_groundr   r   r   r   test_Poly_add_ground  s    r-  c                   C   s&   t td dt td ks"J d S Nr   r   )r   r   Z
sub_groundr   r   r   r   test_Poly_sub_ground  s    r/  c                   C   s*   t td dt dt d ks&J d S r.  )r   r   Z
mul_groundr   r   r   r   test_Poly_mul_ground  s    r0  c                   C   sP   t dt d dt td ks&J t dt d dt td ksLJ d S )Nr   r   r   r   )r   r   Z
quo_groundr   r   r   r   test_Poly_quo_ground  s    &r1  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     r   z(test_Poly_exquo_ground.<locals>.<lambda>)r   r   r3  r{   r?   r   r   r   r   test_Poly_exquo_ground  s    &r4  c                   C   sH   t t d t tt t d t  kr>t td tksDn J d S r   )r   r   r   r   r   r   r   test_Poly_abs  s    r5  c                   C   sF   t t d t t t d t   kr<t td tksBn J d S r   )r   r   negr   r   r   r   test_Poly_neg  s    r7  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sFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t td tksJ t " t dttt  W d    n1 s20    Y  t ttd t td tks^J 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  s    $"$&(("2"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sFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t dt tksJ t " t dttt  W d    n1 s20    Y  t ttd t td tks^J 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  s    $"$&(("2"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sFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t ttksJ t " t dttt  W d    n1 s,0    Y  t ttd t dt tksXJ dt tt t dt tkszJ d S )Nr   r   r      r   )r   r   mulr   r|   rt   r   r   r   r   test_Poly_mul  s    $"$&((2"r?  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sDJ dt t t dt tddksfJ tdt t t dt tddksJ t ttd t dt tddksJ d S )Nr   rO   r   )r   r   rl   r   r   r   r   test_issue_13079)  s
    """&rA  c                   C   s4   t tt tt t td td  ttks0J d S Nr   )r   r   r   Zsqrr   r   r   r   test_Poly_sqr0  s    rC  c                   C   s   t ttdt td tks"J t tttdt td tksHJ t dt ttdt dtd  ttksvJ t dt tttdt dtd  ttksJ t dt t ttd t dtd  td  ttksJ 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   rE  r   r   r   r   r   >  r   )r   r   powrf   r   r{   	TypeErrorr   r   r   r   test_Poly_pow4  s    "&.28rH  c                  C   s:  t td t t } }|t dt }}t| |||fks<J | | |ksLJ | | |ks\J t| t||fksrJ | t |ksJ | t |ksJ t dtt dt }}td|||fksJ d| |ksJ d| |ksJ t tt t dksJ t td t t tksJ t tt td  dt ks6J d S )Nr   r   r   )r   r   divmod)r   r   r   rr   r   r   test_Poly_divmodA  s    rK  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 sNJ t tt ttt tt tkdu stJ 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 kdu sJ t tt ttt kdu sJ 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 kdu s\J 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 sDJ t tt ttt kdu sdJ 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kdu sJ t ttttkdu sJ d S )NTF)r   r   r   rt   r   r   r   r   test_Poly_eq_neX  s,    (&&$$ "  *((&&" "  rL  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    rN  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 sPJ t td tjdu shJ t td d tjdu sJ t td tjdu sJ t dt d tjdu sJ t dt d tjdu sJ t dt d tjdu sJ t dtjdu sJ t ttjdu sJ t tt t	 d j
du s<J t tt t	 d j
du s\J t tt t	 d jdu s|J 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 sJ t tjdu s$J t tt jdu s<J t tt jdu sTJ t tjdu shJ t td td	  td
  td  td  td  d jdu sJ t td td	  td
  td  td  td  d jdu sJ d S )Nr   Tr   Fr   r   r   rD     r   r=     )r   r   is_zerois_oneZis_sqfZis_monicZis_primitiveZ	is_groundr   r   Z	is_linearZis_quadraticZis_monomialZis_homogeneousZis_univariateZis_multivariateZis_cyclotomicr   r   r   r   test_Poly_propertiesz  sD          2
2rS  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 sJ d S )	Nr   r   TFr   r      r   )r   r   Zis_irreducibler   r   r   r   test_Poly_is_irreducible  s    "rU  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sdJ t tt ttttd ksJ t tt ttttd ksJ d S )Nr   r   r   )r   r   subsr   r   r   r   r   test_Poly_subs  s
    $$"rW  c                   C   s  t td tt td ks"J t td tt td ksDJ ttdd  t td ttt td ksvJ t td ttt td ksJ 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sJ t tt ttt tt ttks6J t tt ttt tt ks\J 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   rX  r   r   r   r   r     r   c                   S   s   t tt tttS r   rY  r   r   r   r   r     r   c                   S   s   t tt tttS r   rY  r   r   r   r   r     r   )r   r   rX  r   r{   rF   r   r   r   r   r   r   test_Poly_replace  s    ""$$$(&*&**rZ  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sfJ ttt ttttttt ttksJ ttt ttttttt ttksJ ttt ttjtdttt ttksJ ttt ttjtdttt ttksJ 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    ,,,,,r\  c                  C   s   t td ttd   tttt} |  td ttd   krN| jttfksRJ t tt t tttdt tt t ttksJ 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 rB  r   r   r   ltrimr   r   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 sLJ ttdd  d S )Nr   TFc                   S   s"   t ttd  td  tttS rB  )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    &&ra  c                   C   s   t dt d dd t dt d ddks0J t dt d dd t dt d ddks`J 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   rb  r   r   r   r   r     r   )r   r   rc  r{   rG   rH   r   r   r   r   test_Poly_to_ring  s    00rd  c                   C   s   t dt d dd t dt d ddks0J t dt d dd t dt d ddks`J t td d dd t td d ddksJ t dt d dd t dt d ddksJ t dt d	  t dt d	 ksJ d S )
Nr   r   rO   r   rP   r   r   r   r   )r   r   Zto_fieldr   r   r   r   test_Poly_to_field  s
    0000re  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s`J d S )Nr   r&  r   )r   r   Zto_exactr   r   r   r   test_Poly_to_exact  s      rf  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sbJ t dtt t dttksJ d S )	Nr   r   r   rO   TrL   rP   r   )r   r   rP   r   Zretractr   r   r   r   test_Poly_retract  s    "&rg  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sXJ | ddt dt d tkszJ | ddt dtd  dt  d tksJ | ddt td dtd   dt  d tksJ | tddt dtksJ | tddt dtksJ | tddt dt d tks>J | tddt dtd  dt  d tkspJ | 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&2:ri  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g dksJ t ttd  dtd  td   dddgksJ t ttd  dtd  td   d	ddgksJ d S )
Nr   r   r   r   r   r   r   r   r   rW   rX   )r   r   Zcoeffsr   r   r   r   r   test_Poly_coeffs"  s    "..6rk  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g d	ksJ t ttd  dtd  td
   dddgksJ t ttd  dtd  td
   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )r   r   r   r   rW   r   r   r   r   rX   )r   r   Zmonomsr   r   r   r   r   test_Poly_monoms/  s    "..6rq  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd	  dt  d t g d
ksJ t ttd  dtd  td   dddgksJ t ttd  dtd  td   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )rm  r   rt  rs  r   )rn  r   rt  rs  r   rW   ro  r   rp  r   rX   )r   r   Ztermsr   r   r   r   r   test_Poly_terms<  s&    "..ry  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g dksJ d S )Nr   r   r   r   rj  r   )r   r   r   r   r   )r   r   r  r   r   r   r   test_Poly_all_coeffsK  s
    ".rz  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g d	ksJ d S )
Nr   r   r   r   r   r   rl  r   )rn  r   rm  r   r   )r   r   Z
all_monomsr   r   r   r   test_Poly_all_monomsU  s
    ".r|  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd	  dt  d t g d
ksJ d S )Nr   rr  r   rs  r   rt  r   ru  r   )rv  )r{  r   )rm  r   rt  rs  )r   r   Z	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sJJ dd }| ||ksdJ 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   Z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sBJ t td t dks\J t td d t dkszJ t td t d t dksJ 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s0J t dt ddiksJJ t dttt ddikshJ t td d t dddksJ t td d ttt dddksJ t dtd  t td  d	t t  d
t t   dd	d
dksJ d S )Nr   r   r   r   r   r   r   r   )rm  r   ))r   r   r   r  r   r   )r   r   r   r   r   r   r   r   r   )r   r   Z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s0J t dt dksFJ t dttt dks`J t td d t td d ksJ t td d ttt td d ksJ 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sJ t td dt td   t tt   t td  dt td   ksnJ  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   rP  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$    &*..
$,((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sTJ d S )Nr      Tr   r=  r   "   i!  rP   r   )r   r   re   liftr   r   r   r   test_Poly_lift  s    "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rD  iYEiOrO  iX?   ib   iL9rT  inr   i;	   i
r=  izGr   iHrP  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s`J t td t dt ttfksJ t td t dt ttfksJ t td t td  td	 td    d
t tt t td t  fksJ d S )Nr   r   r   r   rm  r  )r  rT  r   )r   r   rT  )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sbJ | jddt td t ttd   tt  d ttksJ d S )Nr   r   r   T)front)r   r   r   Z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sdJ | tt ttd  td t t  d tddksJ tt t t t }t |ttttt}|tt |ttttddksJ |ttt |tttddksJ |tttt |ttddks,J |tt |ttttd	dksPJ |ttt |tttd
dkstJ |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sFJ t dtt t dttksfJ 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s4J t dttddksNJ t dttddkshJ ttdd  ttdd  t dtttdksJ t dtttdksJ t dttddksJ t dttd	dksJ ttd
d  ttdd  d S )Nr   r@  r   r   c                   S   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   s   t dttdS r.  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   s   t dttdS )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   s4  t dt t u sJ t dt dks.J t tt dksDJ t dtjddt u s`J t dtjdddkszJ t ttjdddksJ t dtjtdt u sJ t dtjtddksJ t ttjtddksJ t dtjddt u sJ t dtjdddksJ t ttjdddks:J ttdd  ttdd  ttdd  t dtt dks~J 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s~J tdtt u sJ tdtdksJ tttdksJ tttd	  tdksJ tttd	  td	ksJ tttd	  tdksJ ttdks"J tt	d
d  tt	dd  ttdd  ttdd  tt dttt u svJ 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sJ tt td	 td  td  ttdks0J 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 r2  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   ;  r   c                   S   s
   t tdS )Ng?r   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   rG  r   r   r   r   test_Poly_degree  sR    """"$(&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s`J t dt dksvJ t dtt dksJ t dttt dksJ t td t td td   d  dksJ tdtdksJ tttd	ksJ tttd  d
ksJ ttdd  d S )Nr   r   r   r   r  r   r   )r   r   r   r   r   c                   S   s   t dS 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s0J t td td   dksPJ t tt t td   dkstJ t td t d  dksJ ttt td  dksJ ttt td  ttdksJ tddksJ tt td td  td  dks
J tt td td  td  tdks6J tt td td  td  ttdksdJ 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 $  *,.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sVJ t ttd  tt tt td  ksJ d S rB  )r   r   r   Z
homogenizer   r   r   r   r   test_Poly_homogenizeg  s    .(r  c                   C   s   t dtt t u sJ t dtt dks2J t ttt dksJJ t tt tt dksfJ t td tt d u sJ t tt t tt d u sJ t td dtd  td   dt td    dksJ t td dtd  td   dt td    d u sJ d S )Nr   r   r   r   r   r  r   )r   r   r   Z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sNJ t ttd  dtd  td   ddksJ t ttd  dtd  td   ddksJ tttd  dtd  td   dddksJ tttd  dtd  td   dddksJ 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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sNJ d S )Nr   r   r   )r   r   Z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sNJ t ttd  dtd  td   ddksJ t ttd  dtd  td   ddksJ d S )Nr   r   r   r   r   rW   rX   )r   r   ZECr   r   r   r   r   test_Poly_EC  s
    "2r  c                      s  t dtddksJ t dttdks0J t dtddksHJ t dttdks`J t td tddks|J t td ttd dksJ t td ttd dksJ t td ttd dksJ t dt td  d ttddksJ t dt td  d ttttd  dks<J t dt t td d	t  tt  td	kstJ  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     r   c                   S   s   t td dt t S r  )r   r   r  r   r   r   r   r   r     r   )
r   r   r  r   rp   r   r  r{   r  
ValueErrorr   r   r   r   test_Poly_coeff  s&       ,4$ (r  c                   C   s<  t dtddksJ t dtddks0J t dtddksHJ t dtddks`J t td tddks|J t td tddksJ t td tddksJ t td tddksJ t dt td  d ttdddksJ t dt td  d ttdddks*J 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   r  r   r{   r  r   r   r   r   test_Poly_nth  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sNJ t ttd  dtd  td   dd	ksJ t ttd  dtd  td   d
dksJ tt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
dttd  ks(J d S )Nr   r   r   r   rm  r   r   rW   ro  rX   rp  r   )r   r   r
   r   r   r   r   r   test_Poly_LM  s    "22<r  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sXJ | j|dd	kslJ 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   Z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sNJ t ttd  dtd  td   dd	ksJ t ttd  dtd  td   d
dksJ d S )Nr   r   r   r   r   r   r   rW   rp  rX   ro  )r   r   ZEMr   r   r   r   r   test_Poly_EM  s
    "2r  c                   C   s0  t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   d	d
ksJ t ttd  dtd  td   ddksJ tttd  dtd  td   d	ddtd  td  ksJ tttd  dtd  td   ddttd  ks,J d S )Nr   rr  r   rs  r   )rm  r   r   r   rW   rw  rX   rx  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sNJ t ttd  dtd  td   d	d
ksJ t ttd  dtd  td   ddksJ d S )Nr   rr  r   rs  r   )r   r   r   r   rW   rx  rX   rw  )r   r   ETr   r   r   r   r   test_Poly_ET  s
    "2r  c                   C   sF   t dt dksJ t dt dks,J t dt dksBJ d S Nr   r   r   )r   r   Zmax_normr   r   r   r   test_Poly_max_norm  s    r  c                   C   sF   t dt dksJ t dt dks,J t dt dksBJ d S r  )r   r   Zl1_normr   r   r   r   test_Poly_l1_norm  s    r  c                  C   sR  t td t \} }| dkr@|t td tddkr@| tksDJ t td d t \} }| dkr|t td tddkr| tksJ t dtd  d dd \} }| dkr|t dtd  d tddkr| tdksJ t td d tjd	d
\} }| dkr4|t td tddkr4| tks8J 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rJ|t tdtd  tddkrJ| t	ksNJ d S )Nr   r   rO   r   rP   r   r   r   T)convertr  rT   )
r   r   Zclear_denomsr  rO   rP   rN   r   rr   rT   )r  r   r   r   r   test_Poly_clear_denoms  s\    



 




"




r  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sbJ | t} |t}| || |fksJ d S )Nr   r   r   )r   r   r   Zrat_clear_denomsr'  rT   r!  r   r   r   test_Poly_rat_clear_denoms!  s    *

r  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    



$


&. 
&	
r  c                   C   s`  t td  t td d t ks(J t td tt td d t ksRJ t td tdft td d t ksJ t tt d tt td t d t ksJ t tt d tt ttd  d t ksJ t tt d ttt td t d td d  ks"J t tt d ttt ttd  d td d  ks`J 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   rP  r   )r   r   Z	integrater   r   r   r   r   test_Poly_integrate<  s    (*.22>>@@>r  c                   C   sx  t td t  t dt d ks(J t td t tt dt d ksRJ t td t tdft dt d ksJ t td td  tt  tt dt td  t ksJ t td td  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s:J t td td  tt  ttt dtd  ttksxJ 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s6J t td td  tt  ttt dt t d kstJ d S )Nr   r   r   )r   r   r`   r   r   r   r   r   test_Poly_diffN  s    (*.>>>>@@>r  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sJ d S )Nr   r   Fevaluate)r`   r   r   r_   Zdoitr   r   r   r   test_issue_9585`  s
    (r  c                  C   s  t dtddksJ t dtddks0J t ttddksHJ t dtdddksbJ t dtdddks|J t ttdddksJ t dttddksJ t dttddksJ t tttddksJ t dtdddksJ t dtdddksJ t ttdddks6J 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sRJ t d	tttdt d	tksvJ t d
t tttdt dtksJ t tt tttdt dt tksJ t tt t tttdit dt tksJ t tt t tttdit dt d tks2J t tt t tttdtdidks^J 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sJ t td
 | d t  |  d ttdd}|td td  t |tddksJ 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 r  )r   r   r	  r   r   r   r   r   r   y  r   c                   S   s   t dtddS )Nr   r   r   r  r   r   r   r   r   z  r   {   r   rO  r=  rP  r  r  )rP  r   rO   r   r   c                   S   s   t tt t ttdS )N)rP  r   r=  )r   r   r   r	  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   r	  rl   Halfr   r   r   r   r     r   alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r	  r{   rF   r   rl   r  rg   rr   r  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sHJ | ddt dt d ksfJ | ddddkszJ d S )Nr   r   r   rP  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sBJ t ttd ttd d gtd ttd tttd d tgksJ t td ttd d tgtd ttd tttd d tgksJ t ttd tttd d tgtd ttd tttd d tgks"J t td td d gttd ttd ttttd d ttgkslJ 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sbJ t td td d gd ttd tttd d tgksJ t ttd ttd d gd ttd tttd d tgksJ t td ttd d tgd ttd tttd d tgks4J 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s6J t dttd d tgd tdtttd d tgksvJ t td d dgd ttd d ttdtgksJ t td d 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s*J t ttd d tdgd ttd d ttdtgksjJ 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   s   t ddgS r8  )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snJ |||ksJ |||ksJ t| |||fksJ t| ||ksJ t| ||ksJ t| ||ksJ t| |t t||fksJ t| |t t|ksJ t| |t t|ks(J t| |t t|ks@J t| |t tf||fks^J t| |t tf|ksxJ t| |t tf|ksJ t| |t tf|ksJ t||||fksJ t|||ksJ t|||ksJ t|||ks J t| |dd||fksJ t| |dd|ks4J t| |dd|ksLJ t| |dd|ksdJ t||dd||fksJ t||dd|ksJ t||dd|ksJ t||dd|ksJ ttdd	  ttd
d	  ttdd	  ttdd	  d S )Nr   r   c                 S   s   g | ]}t |ttqS r   rE  r   r   r   r   r   
<listcomp>  r   ztest_pdiv.<locals>.<listcomp>TpolysFc                   S   s
   t ddS Nr   r   )r   r   r   r   r   r     r   ztest_pdiv.<locals>.<lambda>c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  )r   r   r   r   r   r   	  r   )r   r   r   r   r   r   r{   rA   )r   r   r   rJ  r  GQRr   r   r   	test_pdiv  sF    r  c                     s  t d td  t t   t t d } }dd  | |fD \}}}}||||fks\J |||ksnJ |||ksJ |||ksJ t | |fksJ t |ksJ t | ksJ t | ksJ t t t| |fksJ t t t|ksJ t t t| ks(J t t t| ks@J t t tf| |fks^J t t tf|ksxJ t t tf| ksJ t t tf| ksJ t||||fksJ t|||ksJ t|||ksJ t|||ks J t dd||fksJ t dd|ks4J t dd|ksLJ t dd|ksdJ t||dd| |fksJ t||dd|ksJ t||dd| ksJ t||dd| ksJ 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sVJ t dd||	fksrJ 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sJ t t	dd||	fks J t t	dd||	fks>J t |	ksRJ t dd|	ksjJ 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s J t t	dd|	ksJ t |ks.J t dd|ksFJ t dd|ks^J t td|ksvJ 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s~J t tdd| ksJ tt
 fdd	 t t	dd| ksJ t t	dd| ksJ tt d tt    \} }|  jr| js J  }| js:J  } |  jsTJ  } |  jsnJ 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sJ d S )Nr   r   c                 S   s   g | ]}t |ttqS r   rE  r  r   r   r   r    r   ztest_div.<locals>.<listcomp>Tr  Fc                   S   s
   t ddS r  )r   r   r   r   r   r   5  r   ztest_div.<locals>.<lambda>c                   S   s
   t ddS r  )r   r   r   r   r   r   6  r   c                   S   s
   t ddS r  )r   r   r   r   r   r   7  r   c                   S   s
   t ddS r  r   r   r   r   r   r   8  r   r   r   r   r  r   r   r  c                      s   t  ddS NFr  r  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 )NFr  r  r   r!  r   r   r   e  r   r   rQ   rR   r   )r   r   r   r   r   r   r{   rA   rO   rP   r?   r   r  Zis_ZZZis_Fracre   rQ   rl   )r   rJ  r  r  r  r  ZqzZrzZqqZrqr   r   r!  r   test_div  s    


""
0
r   c                  C   s6   t tdt \} }t| d dk s&J |dks2J d S )Ng>,p ?g3!	@g+=r   )r   r   r   )r   rJ  r   r   r   test_issue_7864  s    r!  c            
      C   s  dt  t d d  } }t d tddd  }}}dd | ||||fD \}}}}}	||||	fkshJ |||||	fksJ |||ksJ t| |||fksJ t| ||||fksJ t| ||ksJ t| |t ||fksJ t| |t |||fksJ t| |t |ksJ t| |t f||fks8J t| |t f|||fksVJ t| |t f|ksnJ 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sJ t||d
d	||fks"J t||d
d	|||fks@J t||d
d	|ksXJ tdddkslJ tdddksJ tdddksJ ttdd  ttdd  ttdd  d S )Nr   rD  r  r   r   c                 S   s   g | ]}t |td dqS )rP   r   r   r   r   r   r   r   r    r   ztest_gcdex.<locals>.<listcomp>Tr  Fr   i  )r   )r#  r   r   r   r   r   c                   S   s   t td dt d ddS Nr   r   Fr  )r   r   r   r   r   r   r     r   ztest_gcdex.<locals>.<lambda>c                   S   s   t td dt d ddS r$  )r   r   r   r   r   r   r     r   c                   S   s   t td dt d ddS r$  )r   r   r   r   r   r   r     r   )r   rg   r   r   r   r{   rH   )
r   r   sr   r   r  r  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srJ d S )
Nr   r   r   r  rP  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sdJ t| || ||gks|J 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sJ ttdd  d S )Nr   r   Tr  Fc                   S   s
   t ddS r  )r   r   r   r   r   r     r   z$test_subresultants.<locals>.<lambda>)r   r   r   r{   rA   r   r   r   r  r  r'  r   r   r   test_subresultants  s    0r,  c                  C   s  t d dt   d t d d d  } }}t| t| }}|||ksLJ t| ||ks^J t| |t |ksrJ t| |t f|ksJ t|||ksJ t| |dd|ksJ t||dd|ksJ t| |dd|| |dt  d gfksJ t t t t tt   } }}t| t|t|  }}}|||ks:J t| ||ksNJ t| |t |ksdJ t| |t f|ks|J t|||ksJ t| |dd|ksJ t||dd|ksJ ttdd	  d S )
Nr   r   r   Tr  F)Z
includePRSc                   S   s
   t ddS r  )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sNJ t| t |ks`J t| t f|kstJ t||ksJ t| dd|ksJ t|dd|ksJ tt d  tt   t td d	t t   } }t| t| }}| |k sJ t| |ksJ t| t ttt|ks*J t| t tttf|ksFJ t||ksXJ t| dd|ksnJ t|dd|ksJ ttd
d  d S )Nr   r   r  r  ipTr  Fr   c                   S   s   t dS Nr   )r   r   r   r   r   r     r   z#test_discriminant.<locals>.<lambda>)r   r   r   r   r   r   r{   rA   r   r   r  r  r   r   r   test_discriminant  s&    &.r0  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sJ | |dksJ d S )Nr   r   r   r   r   r  )r   r   r   )r   r   sortedZdispersionsetZ
dispersionshift)fpZgpr   r   r   test_dispersion  s    
r4  c                  C   sD  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sZJ tg dksjJ tddgdks~J tg ddksJ 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	d}t|| gt| |g  kr,|ks2n J t
td	d
  d S )Nr   r   r   Tr  r   r   rP  r=  r  c                   S   s   t g ddS NTr  )r   r   r   r   r   r   #  r   ztest_gcd_list.<locals>.<lambda>)r   r   r   r   	is_Numberrl   r   is_PolyrQ  rr   r{   rA   )r  r   r   r   r   r   test_gcd_list  s    **
2r9  c                  C   s\  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sbJ t| ddtt d t d  dt d   t d  t  d ksJ tg dksJ tddgdksJ tg dd	ksJ tt td
  t t  t d
  gdksJ tg t }|jr$|tju s(J tg t dd}|jrF|jsJJ t	t
dd  d S )Nr   r   r   r   r   Tr  r5  r  r  r   c                   S   s   t g ddS r6  )r   r   r   r   r   r   8  r   ztest_lcm_list.<locals>.<lambda>)r   r   r   r   r7  rl   Oner8  rR  r{   rA   )r  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sJ |||
ksJ |||ksJ t| ||||fksJ t| ||ksJ t| ||ksJ t| |t |||fksJ t| |t |ks&J t| |t |ks<J t| |t f|||fksZJ t| |t f|ksrJ 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sJ t| |dd|ksJ t||d	d|||fks8J t||d	d|ksPJ t||d	d|kshJ d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fksJ t| ||ksJ t| || ksJ d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fks0J t| ||ksDJ t| || ksXJ tdddkslJ 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s0J t| |dd|ksHJ 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sJ t| |dd	d|ksJ t| |dd	d|ks2J tdtd  }}t||t||  krntdkstn J tdtd  }}t||t||  krtdksn 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s2J tdt } tddgt }| |fD ]V}t|ddksjJ td|dks~J t|| dksJ t| |dksRJ qRdt d  t  d } t| t
d}t| td}|||ksJ |||ksJ ||| ksJ ||| ks.J t| | | ksBJ t| | | ksVJ t| | tdt| ksrJ t| | tdt| ksJ d S )Nr   r   r   r   c                 S   s   g | ]}t |qS r   r   r"  r   r   r   r  @  r   ztest_gcd.<locals>.<listcomp>Tr  Fr   r=  rP  )r   r   r   r  rT  r   r   r   r@  r   c                   S   s   t tS r   )r   r   r   r   r   r   r     r   ztest_gcd.<locals>.<lambda>c                   S   s   t tS r   )r   r   r   r   r   r   r     r   r   r   )r   r   r   r   rr   r   re   rQ   r{   rG  rO   rP   r!   )r   r   r%  r   r   rJ  r  r  rl   r&  r'  r  lr   r   iZpfzZpfqr   r   r   test_gcd;  s    "&2, 2,  ..2


r>  c                   C   sZ  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sTJ t ttddtddtstJ t ttddt tddtsJ ttddtddtddksJ ttddt tdddksJ t tddtsJ t tdt dtsJ tdddks J tdt ddks8J ttddd	d
ddksVJ d S )Nr   r  r   r   r   r   g      "@r   Fr  )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sVJ t dt d dt d ksvJ t dt d tddt d ddksJ t td t ttd   tt td td   ksJ t dtd  t dt td   dt t td td   ksJ t td t d ttd  d  tt d td td   ksdJ 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sLJ t d
td  t dt td   tt d
td  dtd    ksJ tt d
t d d
t d sJ t ddt  ttt   dddt d tt t  ksJ 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sVJ 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   rP  r   Fr  r   r  r   gffffff@ra   T)ra   deeprA  c                   S   s   t tdk S rB  )r   r   r   r   r   r   r     r   z test_terms_gcd.<locals>.<lambda>)r   r   rc   r   rg   r\   rt   rk   r   r{   rG  r   r   r   r   test_terms_gcd  s6     *8FFBJ\J$
,(

(,rD  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szJ 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 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srJ 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s8J d S )Nr   r   r   r   rP  Tr  Fr   r   )r   r   r    r/  r   r   r   
test_trunc  s(    VXrE  c                  C   st  dt  d t tj  } }t| ddt| }}| |ks>J t| |ksNJ t| t |ks`J t| t f|kstJ t||ksJ t| dd|ksJ t|dd|ksJ ttdd	  tdt d  d
t   d ddt d dt   d ksJ ttdd	  tdt d  dt   d dt d  dt   d ks:J tdt d  dt   d ddt d t  d kspJ d S )Nr   r   rP   r   Tr  Fc                   S   s   t dS r.  )r!   r   r   r   r   r   	  r   ztest_monic.<locals>.<lambda>rP  r   r  r   c                   S   s   t dt dt  d ddS )Nr   rP  r   Fr  )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:rF  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slJ d S )Nr   r   c                   S   s   t dS r.  )r"   r   r   r   r   r   	  r   ztest_content.<locals>.<lambda>r   r   r   )r   r   r"   r{   rA   )r   r  r   r   r   test_content	  s    rG  c                  C   s>  dt  d dt  d  } }t| t| }}| d|fks@J t| d|fksTJ t| t d|fksjJ t| t fd|fksJ t|d|fksJ t| ddd|fksJ t|ddd|fksJ ttdd  tdt  d	d
} tdt  td}|  d| fks
J | d|fks J ttdtdks:J d S )Nr   r   r   Tr  Fc                   S   s   t dS 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"    
rH  c                  C   sT  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sJ t||| ksJ t||t | ksJ t||t f| ksJ t|||ksJ t||dd|ksJ t||dd| ksJ | ||gks0J t| ||gksFJ t| t ||gks^J t| t f||gksxJ 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sPJ d S )Nr  r~  r      r=  i  rP  q  r   r   r   r  r   Tr  Fc                   S   s
   t ddS r  )r$   r   r   r   r   r   L	  r   ztest_compose.<locals>.<lambda>c                   S   s   t dS 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rL  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   r2  r   r   r   r   
test_shiftS	  s    rM  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 r.  )r   r   r   Z
shift_listr   r   r   r   test_shift_listW	  s    rN  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sn J t td td  d tt td t td t dtd  d tdd t  krttd d td td  d ttd td   ksn 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sn 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@n J t td dt  d tt td t ttj t tddtdd	  krtttj d td dt  d ttd ttj   ksn 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	  r   z test_transform.<locals>.<lambda>c                   S   s    t tt td t td S r   r   r   rO  r   r   r   r   r   r   s	  r   c                   S   s    t tt td t td S r   rP  r   r   r   r   r   t	  r   c                   S   s$   t tt tt d t td S r   rP  r   r   r   r   r   u	  r   c                   S   s$   t tt td t tt d S r   rP  r   r   r   r   r   v	  r   )
r   r   rO  r7   rV  rg   rl   r  r{   r  r   r   r   r   test_transform[	  s<    060
62
82
:2
:rQ  c               
      sf  t tt dd  } dtdt dd }}|  | |gks:J t  |gksNJ t t  |gksdJ t t f |gks|J t| | |gksJ t dd| |gksJ t| dd |gksJ 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sbJ d S )&NrP   r   r   Tr  Fc                   S   s   t dS r.  r&   r   r   r   r   r   	  r   ztest_sturm.<locals>.<lambda>c                      s   t  ddS r  rR  r   r   r   r   r   	  r   i   i	=  r=  r   i   rJ  r   r  r      r   i$  zZZ(pi)r   r  r  rD     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r&   r{   rA   rH   rl   ri   rg   )r  r   r  r   r   r   
test_sturmy	  s>    <(2HrW  c                      sd  t d dt d   t d  dt d    t  tt dftt d dfgksTJ t t dft d dfgkstJ 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s
J t t d dt   d dft d dt   d dft dfgksNJ tt fdd d S )	Nr   r   r   r   r   c                      s   t  S r   r(   r   r   r   r   r   	  r   ztest_gff.<locals>.<lambda>c                      s   t  S r   rX  r   r   r   r   r   	  r   )r   r   r'   r{   r  r   r   r   r   test_gff	  s    (, 0
$DrY  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svJ d S )	Nr   r   r   r   r  r  rP   r   )rr   r   r   r   Znorm)r   r   r   r   r   r   	test_norm	  s     rZ  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sTJ t td d tdddgtd dtd t  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sJ 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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 | d|df|dfgfksJ t| d|df|dfgfks8J t| t d|df|dfgfks\J 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sJ ttd	d
  tddks.J tddg fksDJ tdt d  d d dt d d d  ksvJ t| ||d  ksJ t| t ||d  ksJ t| t f||d  ksJ t d t	d  }t| | ||d  | ksJ t| | t ||d  | ks J t| | t f||d  | ksFJ tt d t d ks`J tt  d t  d ks~J 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sJ ttt d dt   d t d d ks2J dt  t dt    t d  } t| dks`J t d dt   d d } t| t d d ksJ t| dt d dfgfksJ ttt	d d t	d  t d  t	d d tt	d t d   ksJ ttt	d d t	d  td  t	d d tt	d td   ksFJ 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sJ d S )Nr   r   r   r   r   Tr  Fc                   S   s   t dS r.  )r*   r   r   r   r   r   	  r   ztest_sqf.<locals>.<lambda>r   rS  rP  r   r  l    H/P l    _ % )r   rK  r   r*   r+   Zsqf_list_includer{   rA   r,   r   rc   rg   ra   r   re   )	r   r   r   r   r  r  r'  Pr   r   r   r   test_sqf	  sv     ""$&"&&2"$&,@. "
"
"
"
4Rr]  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sJ t t d| df|df|dfgfksJ t t fd| df|df|dfgfksJ t|d|df|df|dfgfksJ t ddd|df|df|dfgfksHJ t|ddd| df|df|dfgfkstJ | |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sJ tdt  t t ddtft tfgfks2J ttt t t dt t tjfgfks^J t	ddkrxt	dj
s|J tdt  dt dfgfksJ tdt d  dt dfgfksJ t	dt  dt  ksJ t	dt d  dt d  ksJ t	dt d  d d
 dt d d d
  ks.J t	 | |d  | ksLJ t	 t | |d  | kslJ 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sBJ tddd}tddd}tddd}
t	tt t jdu sJ t	tdt d  d tdtt d t d   ksJ t	tdt d  d tdtt d d  ksJ t	tt d  t | t| t d |  t d |  ks0J t	tt d  t | t| t d d |  ksfJ 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sDJ t	||ksVJ t d d |
d d  }tt| t	 t|ksJ ttdt  d t td   d dfgfksJ t d d  t	  ksJ t	 tdt d t t d t  ksJ t	 ddt d t t d t  ks8J t	 tddt d tdt   d t d tdt   d  ks~J 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srJ t	 td|ksJ t d dtd t   d  t	 tddt td d ksJ t	 d tddt td d ksJ t	t d dtd   tddt tdt  t tdt   k	s:J 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
sJ 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
sjJ 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
sJ 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sLJ t	|ttt d  td d  ksvJ 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slJ t	 t dksJ t	dt d dt   dt    d dt  dt d   t d  ddt d   t d    ksJ t	 dd( ksJ 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sBJ t	tt d t  t  dd.tt t d  t  ksxJ 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sJ t	|t dd.t d t d  td d"t  d2  ksJ t	|tdd.td td  t d d
t   d5  ksJ dt  dtdd
t      t	 dd.t	 ddd8ksZJ 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s2J tddtd dtd   }}}dt dt  }}t|| d	| df|dfgfksJ t|| d	| df|dfgfksJ t|| | | dfgfksJ tt| d	| dftdfgfksJ t|| t || g fks$J t|| t || g fksDJ t|| t || g fksdJ 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sJ 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sJ 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sDJ 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sJ 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   Tr  FrP  r   r   rS  r   Zpositiver=  )integerrJ  )realr   r   r   r  i    iX  i iH i r  i  iT     iY  r   r  rT  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   Tr  rb  r   r   r   r   r   
  r   r   r@  rB        ?r         ?r  M      r     ih  )rA  fractionir  r  r  rD  r  r  )r   rK  r   r-   Zfactor_list_includerr   r   rl   r  r.   Z
is_Integerrm   Zis_Powr   ra   rt   rT   re   rQ   rR   rc   ri   rk   r{   rF   rJ   r]   r   r   r   rp   )r   r   r   r  UVWr   r   r   rJ  r=  Zf_zziZf_qqier   s2Zs2pZs2npipZ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
ro  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sJ t|t d d	 td d  ksJ t| dt d dft d dft d d dfgfks J t|dtd dft d d	fgfksJJ 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sRJ 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sJ 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s*J d S )Nr   r   i r   i i  i -1i% ip  i@ r   rP  r   r   Tr  )r   r   r.   r-   re   r!  r   r   r   test_factor_large
  s|    <>0$(
*  ,

4
&

(0rp  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slJ d S )	NrP  r   r   r   r   Fr  r   )r.   r   rc   rg   r   r   r   r   test_factor_noeval  s    *rq  c               
   C   s
  t dg ksJ t dg ks J t tdddgks6J t tdgksHJ t td dgks^J t td	 td
 gdd	d
dfgksJ tttd	d tdd d
t tdd  } | j ddddgksJ |   ddgksJ | j dddddgksJ | j ddddgksJ | j tddd| j dd  krhtdddfdftddtddfdfgksnn 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sn 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"n 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sn J ttd	d tdd d
t tdd  } t | ddddgksJ t | ddgksJ t | tdddt | dd  kr0tdddfdftddtddfdfgks6n 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sn 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sn J t | tdd"dt | d#d  krDtdd$tdd$fdftddtddfdfgksJn 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sJ 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s2J 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sJ td	 d	 td
 d
td	   d
 td   } }}t | td%d
dd>g ksJ t | td%ddd>td%dtdd	fgks J t | td%d
dd?d@dtdd	fgks,J t | td%ddd?d@gksLJ t |td%d
dAg kshJ 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sJ t ||gtd%ddBd@dd	ifd;ddifgksJ 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	sLJ 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
s8J t | ddtdddM\}}|g k
s`J tdNdJ t|t| D 
sJ t
tdOdP  t
tdQdP  t
tdRdP  d S )SNr   r   T)r,   r   )r   r   rS  )r   rS  r   r   r   r   r  r   i  r   r   rO  r  )rr  r   )rs  r   )fastr,   )rt  r   epsr&  r   i  U   rP  r   {Gz?i  gMbP?i  i'  -C6?i  r   r@  r  )r   r   r   )rr  r   rT     r  r  e   r  i5  k   r  iiirO  r  )r@  r@  rz  r   r   r   )r   r   rP  )r   r   )infr,   )supr,   r@  r   r  r  )r  r   r   r   r  r~  )r   r,   c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   ro   rn   r   r   r   rJ  r   r   r   r   t  s   
&z!test_intervals.<locals>.<genexpr>ir  )r   r,   rv  c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   r  r  r   r   r   r     s   
&c                   S   s   t td d ddS Nr   r   ru  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   ru  r  r   r   r   r   r     r   )r/   r   r   rg   rl   r   r   r   r4   re   r{   r  )r   r   r   Z	real_partZ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sbJ  jddd dtd
ddfksJ  jdddddtd	dfksJ  jddddtd
ddfksJ  jddddddtd	dfksJ  jdddddtd
ddfksJ  jddtdddtddtddfksBJ  jddddtddtddfkslJ 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sBJ t ddtdddtddtddfksrJ t ddddtddtddfksJ ttdd  tt fdd tt fdd d S )Nr   r   r   )stepsr   r@  r   r  r   r  T)r  rt  r   ru  r  r  r  rx  c                      s    d j ddddS )Nr   r   T)Z	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 r2  r  r   r   r   r   r     r   c                   S   s   t dddtdddS )Nr   r   r=  r   ru  )r0   rg   r   r   r   r   r     r   c                      s   t  jddddS Nr   r   r   ru  )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   r  r   r   r   r   test_refine_root  s0    """"$&0*$$&&0*r  c                   C   s  t td d dksJ t td d t ddks6J t td d t
 ddksTJ t td d t t
 ddksvJ t td d dddksJ t td d dddksJ t td d dddksJ t td d dddksJ t td d ddddksJ t td d ddddks&J t td d ddddksFJ t td d ddddksfJ 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s
J t td d dddks(J t td d t ddksHJ t td d t
 ddkshJ t td d t
 d t
 ddksJ t td d t t d ddksJ ttd	d
  d S )Nr   r  r  r  r  r@  r   r   r   c                   S   s   t dS 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sBJ | jdddksVJ t td td tdd}| dksJ t td dtd t  d tdd}| dksJ |jdd	d
dksJ |jddd
dksJ |jddd
dksJ |jddd
dksJ |jddd
dks(J d S )Nr   Tr   r   r  r   r  ir   r  r  r@  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sRJ  ddksdJ tt fdd	 t td
 t d dttd td  d dksJ 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sZJ t ttd t d  ttd t d ddgksJ t ttd t d  ddttd t d ddfdgksJ t td td t d  ttd t d ddddgksJ t td td t d  ddttd t d ddfdgksRJ 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sxJ t t dd|ksJ t t dd|ksJ d S )Nr   Fmultipler   r   r  r~  r   r   Zradicalsr   r   r   c                      s   t  S r   r3   r   r   r   r   r     r   z!test_real_roots.<locals>.<lambda>c                      s   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                     sB  dt d  dt d   dt   d  tddddg} t t    krT| ksZn J t d t  d }t|dt|dt|dg}t|t|   kr|ksn J tt d d td tdgksJ tt d d dd	td dftddfgksJ tt d d dd
tt d d ddd
tt d d ddd
gksLJ 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                      s   t  S r   )r2   r   r   r   r   r   1  r   z test_all_roots.<locals>.<lambda>c                      s   t t tS r   )r2   r   r   r   r   r   r   r   2  r   Tr   )
r   rg   r2   r   rw   rr   rl   re   r{   r  )Zfrootsr   Zgrootsr   r  r   r   r   test_all_roots  s.    $&&&4(*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sNJ t td d t dt dt gksxJ t td d t } | ddgksJ t td d t } | dt dt gksJ t td d tdd t } | ddgksJ t td d tdd t } | dt dt gks6J t td dt  t ddt  ddt  gksnJ 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sxJ t
| d d|tj	u sJ t| d d|tj	u 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}t| d d|tju s@J t
| d dksVJ t| d td
dksrJ 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 sNJ ttdd  ttdd  ttd d ddgksJ ttd d } | ddgksJ ttt dt gksJ ttdt  dt gksJ ttdd  t td d }|ddd | D ks&J 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$  r&  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   s   t dS Nr   r4   r   r   r   r   r   w  r   c                 S   s   g | ]}| d qS rm  r  )r   r   r   r   r   r  {  r   ztest_nroots.<locals>.<listcomp>rD  r  rO  i  r  i@  r   iV  r=  i  rP  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   Z
epsilon_eqrl   truern   falser{   rH   r>   rF   r2   strr   )r  rv  r   r=  rJ  r   r   r   test_nroots8  s    "*  8
                ".




&r  c                  C   sh   t d dt d   dt d   t d  } t|  tjdtjdiksHJ t| tjdtjdiksdJ d S )NrP  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sjJ tt fdd tt fdd tt d| ksJ tt d|ksJ tt d|ksJ tt d|ksJ ttd	d  d S )
Nr   r   r   c                      s
   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 rB  )r6   r   r   r   r   r   r   r     s   )r   r6   r{   r  r.   r>   )Zf_2Zf_3Zf_4Z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sDJ | g dddgks^J | g dddgksxJ t td d } | dd	gg ksJ t td d } | g d
dgksJ t td d } | ddg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   r   )r   r   r   r   r   )r   r   Z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s6J | 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sJ t tt d } | ttdddgtgksJ t td d } | td t d gtd t d gksJ d S )Nr   r   r   r   r   )r   r   Zwhich_all_rootsre   r   r   r   r   test_which_all_roots  s    &($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sdJ 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=  rJ  r   Zr0r   r   r    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&    $&r  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sJ t td d td  ttddtdd   i} t| td u sJ d S )Nr   r   r@  r   )ra   r   rV  rr   r<   rg   r   r   r   r   test_torational_factor_list  s    .
4r  c                  C   s(  t ddksJ t ddks J t ttks0J t ttu s@J ttdd  t d. } dksbJ t| tspJ t d/t } d	ksJ t| tsJ t d
tdksJ dtd  d dt d dt d df\}}}}dd ||||fD \}}}}| |d||fksJ t ||fd||fks*J t ||ftd||fksHJ t ||ftfd||fkshJ 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sJ t |ddttd ks J td d ttd  }t ||ksJJ t |ddttd kshJ t td d d td d fdtd dfksJ t td t tt  dtt  td t  ksJ t td td  tt  ttt ksJ t td td  tt  ttt ks*J t td td  tt  tt ksTJ 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sJ 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spJ 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sJ 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sbJ 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sJ 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sJ t|t}t|t}t|t}t|t}| ||
|
| |fksJ |j |j|j|jfksJ |jj |jdd|j|jfkslJ qltttdd}tdtdd}| |dtttddtdtddfksnJ |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
sJ 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
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sJ 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s~J 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sJ t	d%dd&}t |dd't	ju s2J |tdt	ju sJJ t|t	ju s^J td(dd}t |d) d |d) d ksJ t|d* |d+ d |d,   d|d-  t  }t |tt|d* |d+ d |d,    d|d-   t ksJ t td d tt  tt ks$J d S )0Nr   r   c                   S   s   t dS )Nr   r   r   )r7   r   r   r   r   r     r   ztest_cancel.<locals>.<lambda>r   r   r  r   r  r   r  r   c                 S   s   g | ]}t |tqS r   r   r"  r   r   r   r    r   ztest_cancel.<locals>.<listcomp>Tr  F)r   r  r   r   r@  r  r=  rP  r   )includer   r   r  r   g{Gzt?r   ry  r  )Zcommutativeap	  (2*1*(x - 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2*1*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) -
        1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x)/x - 1/x)*(((-x + 1/x)/((x*(x - 1/x)**2)) +
        1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x - 1/x)) - 1/x)*((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1 + (x - 1/x)/(x - 1/x))/((x*((x -
        1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x))) + ((x - 1/x)/((x*(x - 1/x))) + 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) + 1/x)/(2*x +
        2*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x
        - 1/x)) - 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))/(2*x -
        (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x) - 1 + (x -
        1/x)/(x - 1/x))/((x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2)
        - 1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x
        - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 2*((x - 1/x)/((x*(x -
        1/x))) + 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2/x) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)/(x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2))
        - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x -
        1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x)) + (x - 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 1/xr  )Z	_signsimpMr   )r   r   r   )r   r   r   )r   r   )r   r   )r7   r   rh   r{   r  r   r  rr   r   rl   r  rp   r   r   rP   r   r   Zis_Mulrq   rg   rm   rs   NaNrV  rx   rv   rt   re   )r   r   r   r   r   r  r  r\  r  pairsr  pfZpgppZpqr  r  r  r  Zp4r  exprr   r   r   test_cancel  s    0    46,,*:D><8@ 



 (
(8>"..:.. !"0Br  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srJ d S )Nr   r   r   )r7   r   r   r   r   r   r   test_cancel_modulus  s    ($r  c                     s  t td dt  d tdd   \} }|  ks6J |tjksDJ t td dt  d tdd   \} }|   ks~J |tjksJ 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d d tdd t  tdd  tdd   \} }| t td dt  d	 tddksbJ |dkspJ 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=  rD  c                      s      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                      s      S r   r  r   r   r   r   r     r   )
r   r   r  rO   r  rc  rl   r   r{   r  )r   r   r   r   r   .test_make_monic_over_integers_by_scaling_roots  s(    2&2(r  c                  C   s>   t td d } | jdd\}}|tjks.J |du s:J d S )Nr   r   T)Zby_nameF)r   r   Zgalois_grouprZ   ZD4)r   r  Zaltr   r   r   test_galois_group  s    r  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srJ t| |t t||fksJ t|}|| ||fksJ tdt  t ttdt tg}tt d td  t t t}tt| |dd||fsJ tt| |t tdd||fs J t|dd}t|| ||fsFJ 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sFJ |j| d
dd d	ksbJ || du svJ || d d
u sJ tddgt dgd	fksJ 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 sPJ |js\J tdt t}	 |	\}}t|tsJ | dksJ tdd |D sJ d S )Nr   r   r   r   Tr  rP  r   r   Fr  c                   S   s   t ddgS r   )r8   r   r   r   r   r     r   ztest_reduced.<locals>.<lambda>rc  rd  rP   r   g      пg      ?c                 s   s   | ]}t |tV  qd S r   )r   r   r   r   r   r   r   r     r   ztest_reduced.<locals>.<genexpr>c                      s
     S r   )reducer   ZG_polyZf_wrong_gensr   r   r     r   c                 s   s   | ]}|j V  qd S r   rQ  r  r   r   r   r     r   c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   )r   r   r8   r9   r  r   r   rg   containsr{   rA   r   r   r   r  rQ  r   )
r   r  r  rJ  r'  Zf_polyZQ_polyZr_polyZ	zero_polyZ
const_polyr   r  r   test_reduced  s^    $"$p ,R*&r  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sJ 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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  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sJ t | ttddtd dtd   td  dtd   tt dt  gksJ t | dd	dtd dt  td dtd   tt dt  gksJ t dgtdgks.J t td dt  gttdtd  dt  gksdJ 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   r  r   r  rT  r   Fr   rP  )r   r   r  c                 S   s   g | ]\}}|| qS r   r   )r   r   r   r   r   r   r  /  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>Z
buchbergermethodZ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   r  r{   rA   r  )r  r   r  r  rJ  r   r   r   test_groebner  sJ    H^,&
<:
,0ZP@N6J.$0
6
0
600r  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stJ |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   rP  r  r=  r  r     N   i  i   l   i   i  i8  i  rV  r     i   rU  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 r@  )r   r   r   r   r9   rX   rW   Zfglmr   r   r   )r  r  r  r   r   r   	test_fglmE  sl    p&..2^j








^0r  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 sVJ t tttgttttdu stJ tt t tt t tt t g} t | tttdu sJ 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 s
J d S )NTr   r   Fr   r=  )r;   r   r   r   r   )r  r   r   r   test_is_zero_dimensionalo  s    ""Fr  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sJ t|tdu sJ t|dksJ |d |d kr|d jrJ |d	 |d	 kr|d	 jrJ |d |d kr|d jrJ |d	d  |d	d  krHtd
d |d	d  D rLJ |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sJ |t|ksJ |g ks(J t| t tddd}|d |d krX|d js\J |d	 |d	 krz|d	 js~J |d |d kr|d jsJ |d	d  |d	d  krtdd |d	d  D sJ |d d |d d krtdd |d	d  D sJ d S )Nr   rY   r   r   c                 S   s   g | ]}t |ttqS r   rE  r  r   r   r   r    r   z&test_GroebnerBasis.<locals>.<listcomp>r   Tr   c                 s   s   | ]}|j V  qd S r   r8  r   r   r   r   r   r     r   z%test_GroebnerBasis.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   r  c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   )r   r   r9   r   r:   r   r8  anyexprsr  r   r   rO   r   rY   r  r   )r  r  r'  r\  r   r   r   test_GroebnerBasis}  s8    $2"::""":r  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sLJ t ttt tttt tttksxJ t tt tdttt ttksJ t ttt ttdtttt tttksJ t t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  d tdtd  dt t  dtd   d ttksjJ 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svJ t ttt d  t d tttd  dt t t  ttd   t d tttksJ 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s:J 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sBJ t ttt t tttttt t tttksxJ t tt d tttd dt t  td  ttt dksJ t tt d tttd dt t  td  ttt dksJ t dttdtksJ ttdd	  t tt ttttt ttksJJ t tt ttttt ttkspJ 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   s   t dS r   )r   r   r   r   r   r     r   ztest_poly.<locals>.<lambda>r   rP  )r   r   r   r   rt   r   rO   r{   rD   rl   r   ra   )expr1Zexpr2r   r   r   	test_poly  s     ,$4LN4
<
4
8
@"<
F

6BB&&$r  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sVJ ttdtdt kspJ ttjdt dt ksJ ttdtd tksJ ttdttdtt ksJ ttdtd | ksJ ttdt dksJ ttd td| ksJ ttjtjtjks.J tdddd}ttd|t d|ddks^J 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   Fr  r   r  r   r   T)clear)
rc   r   rb   rl   r:  ZNegativeOnert   r  rj   r[   )r   r   r   r   r   r   test_keep_coeff  s*    ""
r  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     r  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sXJ d S )Nr   )ra   r.   r   re   r   r   r   r   r   r   r   test_issue_5786  s    (r  c                  C   s   G dd dt } tttt   }ddt  }t| || |ksDJ t|| | || | ksdJ t|| | || | ksJ d S )Nc                   @   s   e Zd ZdZdS )z test_noncommutative.<locals>.fooFN)__name__
__module____qualname__Zis_commutativer   r   r   r   foo  s   r  r   )r^   r   r   r7   )r  rl  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 s2J t ttd tdtd  tt  d td u shJ t tttd u s~J t ttdt d u sJ 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sZJ d S r.  )r-   r   r   r+   r   r   r   r   test_factor_terms  s    ,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sZJ t td t d tttdd dggg gdgdgggksJ d S )Nr   r   rO   r   )r   r   r   r   r   )r   r   Z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sZJ d S r   )r-   rr   r   rt   r   r   r   r   test_issue_11198  s    &r  c                  C   s0   t tdt } |  tdt ks,J d S )Nr   )r   ri   Z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s4J d S )Nr   r   rT   r   )r   rr   r   r   r   r   r   r   test_issue_12400)  s    r  c                	   C   sR  t tddtd  d tddtd  d tdddtd  ksLJ t tdtdd tdtdd tdtdd	 ksJ ttddtd tddtd tdtd d ksJ tdtd dtd d
td ksJ 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sPJ 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sJ ttddtd tddtd tddtd ftddtd ksJ 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sNJ d S )NrP  r   r   r   r   r   r   r   r   r  r=  r  r  r  rO  r  r  i  )r   rl   rr   rg   r   r   r   r   r   test_issue_14364.  s    L<>*`8<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sJ d S )Nr   Tr^  rD  r   r   r=  r   r   r   rB  )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 sN0    Y  ttddT || ||   krtt| d d t| d d ggksn J W d    n1 s0    Y  d S )Nr   r   F)Ztest_stacklevelr   )rm   r   r|   ru   r}   rz   )r   r   r  r   r   r   test_issue_17988G  s    <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svJ d S )Nr   r   r   r   rP  )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   rx  r  r   rC  r   r   r   ]  r   z"test_issue_19113.<locals>.<lambda>c                      s   t  ddS )Nr   r   r  r   rC  r   r   r   ^  r   c                      s   t  S r   r  r   rC  r   r   r   _  r   c                      s   t  S r   r  r   rC  r   r   r   `  r   c                      s   t  S r   )r5   r   rC  r   r   r   a  r   c                      s
   t  dS rB  r  r   rC  r   r   r   b  r   )rt   r   r{   rF   r   r   rC  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sXJ t t t  tt  t t  tt t  } t| tdt tt  t t t  ksJ 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s2J d| j|jksFJ 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   Z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 r.  )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sHJ d S )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   re   r   rl   )r  r   r  r   r   r   r   test_issue_20985  s    r  (Y  __doc__r  Z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=   Zsympy.polys.polyerrorsr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Zsympy.polys.polyclassesrK   Zsympy.polys.fieldsrM   Zsympy.polys.domainsrN   rO   rP   rQ   rR   rS   rT   Zsympy.polys.domains.realfieldrU   Z sympy.polys.domains.complexfieldrV   Zsympy.polys.orderingsrW   rX   rY   Zsympy.combinatorics.galoisrZ   Zsympy.core.addr[   Zsympy.core.basicr\   Zsympy.core.containersr]   Zsympy.core.exprr^   Zsympy.core.functionr_   r`   ra   Zsympy.core.mulrb   rc   Zsympy.core.numbersrd   re   rf   rg   rh   ri   Zsympy.core.powerrj   Zsympy.core.relationalrk   Zsympy.core.singletonrl   r  rm   Z$sympy.functions.elementary.complexesrn   ro   Z&sympy.functions.elementary.exponentialrp   Z%sympy.functions.elementary.hyperbolicrq   Z(sympy.functions.elementary.miscellaneousrr   Z$sympy.functions.elementary.piecewisers   Z(sympy.functions.elementary.trigonometricrt   Zsympy.matrices.denseru   Z"sympy.matrices.expressions.matexprrv   Zsympy.polys.rootoftoolsrw   Zsympy.simplify.simplifyrx   Zsympy.utilities.iterablesry   Zsympy.utilities.exceptionsrz   Zsympy.testing.pytestr{   r|   r}   r~   r   Z	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  r  r  r  r   r"  r#  r%  r(  r*  r,  r-  r/  r0  r1  r4  r5  r7  r:  r<  r?  rA  rC  rH  rK  rL  rN  rS  rU  rW  rZ  r\  r_  ra  rd  re  rf  rg  ri  rk  rq  ry  rz  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r(  r*  r,  r-  r0  r4  r9  r;  r>  r?  rD  rE  rF  rG  rH  rL  rM  rN  rQ  rW  rY  rZ  r[  r]  ro  rp  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  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
	
		