U
    9%e                    @   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= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZY dd	lZm[Z[ dd
l\m]Z]m^Z^m_Z_ ddl`maZa ddlbmcZc ddldmeZe ddlfmgZg ddlhmiZi ddljmkZkmlZlmmZm ddlnmoZompZp ddlqmrZrmsZsmtZtmuZumvZvmwZw ddlxmyZy ddlzm{Z{ ddl|m}Z} ddl~mZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd lmZ dd!lmZ dd"lmZ dd#lmZmZmZ dd$lmZmZmZmZmZmZmZmZmZmZmZ d%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 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΄ 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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. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1d7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dEdF Z9dGdH Z:dIdJ Z;dKdL Z<dMdN Z=dOdP Z>dQdR Z?dSdT Z@dUdV ZAdWdX ZBdYdZ ZCd[d\ ZDd]d^ ZEd_d` ZFdadb ZGdcdd ZHdedf ZIdgdh ZJdidj ZKdS (k  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
real_rootsnrootsground_rootsnth_power_roots_polycancelreducedgroebnerGroebnerBasisis_zero_dimensional_torational_factor_listto_rational_coeffs)MultivariatePolynomialErrorExactQuotientFailedPolificationFailedComputationFailedUnificationFailedRefinementFailedGeneratorsNeededGeneratorsErrorPolynomialErrorCoercionFailedDomainErrorOptionError	FlagError)DMPfield)FFZZQQZZ_IQQ_IRREX)	RealField)ComplexField)lexgrlexgrevlex)S4TransitiveSubgroups)Add)_aresame)Tuple)Expr)
Derivativediffexpand)_keep_coeffMul)FloatIIntegerRationaloopi)Pow)Eq)S)Symbol)imre)exp)tanh)sqrt)	Piecewise)sin)Matrix)MatrixSymbol)rootof)signsimp)iterable)SymPyDeprecationWarning)raiseswarns_deprecated_sympywarns)abcdpqtwxyzc                 C   s.   t | |D ]\}}t|| dkr
 dS q
dS )Ng|=FT)zipabs)r}   r~   uv r   _/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqW   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>b   s     z_strict_eq.<locals>.<genexpr>FTstrict)typerx   lenallr   
isinstancer   eq)r}   r~   r   r   r   r   ^   s    r   c               	   C   sh   t tt} t  | tt  W 5 Q R X t  | tt  W 5 Q R X t  | tt  W 5 Q R X d S r   )r   r   r{   ro   r   r   r   r   test_Poly_mixed_operationsk   s    
r   c                  C   sv  t d} tjdddt| djt| d| dg| ks:ttjdddt| djt| d| dg| kslttjdddt| djt| d| dg| ksttjdddt| djt| d| dg| ksttjdddttf| djt| d| d	g| dgg| ksttjdddtd
jttdtdgtksDttjdddtddjtt	dt	dgt	ksxttjdddttdjttdtdgtksttjdddtt	djtt	dt	dgt	ksttjdddtd
jttdtdgtksttjdddtddjtt	dt	dgt	ksFttjdddttdjttdtdgtkszttjdddtt	djtt	dt	dgt	ksttjdt
titddtt
tt tddksttjdtitddttt tddksttjddittfddttt ttddks@ttjdtittfddttt ttddksrtd S )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rL   r   F)r   Z	compositerS   r   r   rN   r   r   )rM   r   	from_dictr   reprJ   AssertionErrorr   rN   rO   rs   r   Kr   r   r   test_Poly_from_dictu   s             
2  
  
  
 
  
  
  



r   c                  C   s  t d} tjddgt| djt| d| dg| ks8ttjddgt| djt| d| dg| kshttjddgtdjttdtdgtksttjddgtddjttdtdgtksttjddgttdjttdtdgtksttjddgttdjttdtdgtks(ttjd	d
gtdjtt	d
gt	ksRttjd
d	gtdjtt	d
t	dgt	kstt
tdd  d S )Nr   r   r   r   r   r   Tr   r         ?        c                   S   s   t jg gttfdS )Nr   )r   	from_listr   r   r   r   r   r   <lambda>       z%test_Poly_from_list.<locals>.<lambda>)rM   r   r   r   r   rJ   r   rN   rO   rR   rz   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sRtt j djt d dg ks|tt jtdjtddgtkstt jt	djtddgt	kstt jtdkstt jt djt d dg kstt jttdjtddgtks*tt jtt	djtddgt	ksPtt jtdt td td	dksvt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stt jttftdt td ttddkstt jttft	dt td ttddks6tt jttfddt td ttddksdttd t kstt jtdjtddgtkstt
tfdd t j djt d dg kstt jtdkstt jttdjtddgtks tt
tfdd t jt djt d dg ks`ttd t ks|tt jtdjttdgtdtdggtkstt jt	djtt	dgt	dt	dggt	kstt j djt dg d dgg kstt jtdt tt ttt dksHtt
tfdd t jttt dt tt ttt dkstt
tfdd t jtt	t dt tt tt	t dkstt
tfdd t jtdt tt ttt dkstt
tfdd t jttt dt tt ttt dksJtt
tfdd t jtt	t dt tt tt	t dkstt
tfdd t jttfdkstt jttftdjttdgtdtdggtkstt jttft	djtt	dgt	dt	dggt	ks2tt jttf djt dg d dgg ksntt jttfdjttdgtdtdggtkstt jttftdjttdgtdtdggtkstt jttft	djtt	dgt	dt	dggt	ks tt jttf djt dg d dgg ks\tt jttfddjtt	dgt	dt	dggt	kstt jttfddjtt	dgt	dt	dggt	kst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   rN   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   rO   r   r   r   r   r      r   rN   rO   r   r   zFF(3)c                      s   t j tdS Nr   )r   r   rO   r   gr   r   r      r   r   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   rN   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   rN   r   rM   r   r   r   rJ   rO   rz   rF   r   r   )r   r   r   r   r   test_Poly_from_poly   sB   *"".&&&,  
  
  
$,&. 
 
6*  
  
*  
  
  
  
  
 
  
  
  
  
  r   c                  C   s  t tdd  t tdd  td} tjtd | djt| d| dg| ksRttjt	d | djt| d| dg| ksttjtd t| djt| d| dg| ksttjt	d t	| djt| d| dg| ksttjtt	 | djt| dg| d| d	gg| ksttjtt	 tt	| djt| dg| d| d	gg| ksXtttd jtddgt
ks|ttt	d jtddgt
kstttd tjtddgt
ksttt	d t	jtddgt
ksttjtd t
djtddgt
ksttjt	d t
djtddgt
ks<ttjtd tt
djtddgt
ksfttjt	d t	t
djtddgt
ksttjtd tt	t
djtdgdggt
ksttjt	d tt	t
djtddggt
kstd S )
Nc                   S   s   t tjS r   )r   	from_exprrk   Zeror   r   r   r   r     r   z%test_Poly_from_expr.<locals>.<lambda>c                   S   s   t tdS Nr   )r   r   rk   r   r   r   r   r     r   r   r   r   r   r   r   )rz   rC   rM   r   r   r   r   rJ   r   r   rN   )F3r   r   r   test_Poly_from_expr  s&    ..00:>$$&&((**0r   c                  C   s  t t } t| td t| djt| td g| ks8t|  } t| td t| djt| td g| kspttt } t| td t| djt| td g| kst|  } t| td t| djt| td g| kstt 	t} t| ddgt| djt| ddgg| kst|  } t| ddgt| djt| ddgg| ksVtt	t} t| ddgt| djt| ddgg| kst|  } t| ddgt| djt| ddgg| kstt
t} t| ddgt| djt| ddgg| kstd S )Nr   r   )rN   r   r   r   r   rJ   r   	get_fieldrO   Zold_poly_ringalgebraic_fieldrd   )domr   r   r   test_poly_from_domain_element/  s$    0000
22
22
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td  tt  t } t	tttdt| ksZt
t	ttttgt| ksxt
t	tttgt| kst
t	tttft| kst
t	i ttt} | jtttfkr|  dkst
t	t	tt tt  tttt	tt tt  tkst
t	dtd  dt  d dd dddgksLt
t	dtd  dt  d dd dddgkst
t	dtd  dt  d dd d d!d"gkst
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t
tt	dtd  d$ ttdd$  d dd d%d&d"gsLt
t	d td  d!t  d dd dddgkst
t	d td  d!t  d dd dddgkst
t	d td  d!t  d dd d d!d"gkst
t td'd  t	d(td  d)t  d dd td*d+td,d+dgks6t
t	d(td  d)t  d dd d(d)d"gksjt
t	dddd-ttt	td t dt td   dt t  ttkst
t	td d td. ttkst
dtd$  td/  td  td  d0 } t	| td1d2d3t	dtd$  td/  td  td  d td1d2d3ksNt
t	| td1d4d3t	dtd$  d5td/   td  d5td   d td1d4d3kst
tt	td t d"  tst
tt	td t t d"  tst
d S )6Nc                   S   s   t td ttS Nr   r   r   r   r   r   r   r   I  r   z"test_Poly__new__.<locals>.<lambda>c                   S   s   t tt tttt dS r   r   r   r   rN   r   r   r   r   r   K  r   c                   S   s   t tt tttt dS r   r   r   r   r   r   r   L  r   c                   S   s   t ttddS )NT)	symmetricr   r   r   r   r   r   N  r   c                   S   s   t td tdtdS )Nr   r   )r   r   r   r   rO   r   r   r   r   r   O  r   c                   S   s   t td ttddS )Nr   T)r   gaussianr   r   rN   r   r   r   r   r   Q  r   c                   S   s   t td tdddS )Nr   r   T)r   r   r   r   r   r   r   r   R  r   c                   S   s   t td tttdgdS )Nr   r   r   	extension)r   r   rN   rq   r   r   r   r   r   T  r   c                   S   s   t td tdtdgdS )Nr   r   r   r   )r   r   rq   r   r   r   r   r   U  r   c                   S   s   t td ttddS )Nr   Tr   r   r   r   r   r   r   W  r   c                   S   s   t td tdddS )Nr   r   Tr   r   r   r   r   r   r   X  r   c                   S   s   t td ttddS )Nr   Tr   greedyr   r   r   r   r   r   Z  r   c                   S   s   t td ttddS )Nr   Tr   rL   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   rW   )r   orderr   r   r   r   r   r   `  r   c                   S   s   t td tddS )Nr   rW   r   r   r   r   r   r   r   a  r   c                   S   s   t dddS )Nr   r   r   r   r   r   r   r   r   c  r   c                   S   s   t ddgS Nr   r   r   r   r   r   r   r   d  r   c                   S   s   t dS )Nr   r   r   r   r   r   r   r   e  r   c                   S   s   t dS r   r   r   r   r   r   r   g  r   r   )r   r   r   r   r   r   rN   r   rO   rR         @       @r   c                   S   s*   t dtd  d ttdd  d ddS )Nr   r   r   r   rN   r   )r   r   rf   r   r   r   r   r   z  r   r   g333333?g?c                   S   s    t dtd  dt  d ddS )N@r    @r   rN   r   r   r   r   r   r   r     r   r   r      
      )r   r   r   r   r      i    Tr   r   F   )rz   rD   rH   NotImplementedErrorrC   r}   r   r~   r   r   r   iterr   r   r   as_expr
all_coeffsrF   rf   r   rd   
get_domainrO   r   r   rT   rU   r   r   r   r   test_Poly__new__H  s    $:444  
, 
44 
@4.
((,
2 
$r   c                   C   s*   t td d jtd d tfks&td S r   )r   r   argsr   r   r   r   r   test_Poly__args  s    r   c                   C   s  t tt tt  tjtfks"tt tt tt  tjtfksDtt tt tt  tjtfksftt tt tt  ttjttfkstt tt tt  ttjttfkstt tt tt  tttjtttfkstt tt tt  tttjtttfkstt tt tt  tttjtttfks4tt tt tt  jtttfksZtt tt tt  ddjtttfkstt tt tt  ddjtttfkstt tt tt  ddjtttfkstt tt tt  tttddjtttfkstt tt tt  ddjtttfks2tt tt tt  ddjtttfks\tt tt tt  ddjtttfkstt tt tt  tdjtttfkstt tt tt  tdjtttfkstt tt tt  tdjtttfkstt tt tt  tttddjtttfks4tt tt tt  dd	d
jtttfks`tt tt tt  ddd
jtttfkst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   r   test_Poly__gens  s,    """&&*,,&***0******0,r   c                   C   s@   t tjt dttdkstt td jt dttdks<td S )Nr   r   r   )r   r   zerorN   r   rO   r   r   r   r   test_Poly_zero  s    r  c                   C   s@   t tjt dttdkstt td jt dttdks<td S )Nr   r   r   )r   r   onerN   r   rO   r   r   r   r   test_Poly_one  s    r  c                  C   s
  t tdd  t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stttttddtttdddd  t|dgg g|t|d|dgg|fksttttttttdddd  t| d| dgg| t| dgg g| fks ttttddttttdd  t| dgg g| t| d| dgg| fksvtttd tttd tdd  tddgt	tddgt	fkstttd td	d
ttd tdd  tddgt
tddgt
fks
tttd tttd td	d
dd  tddgt
tddgt
fksVtttd tttd ttdd  tdgdggt	tdgdggt	fkstttd td	d
ttd ttdd  tdgdggt
tdgdggt
fkstttd tttd ttd	d
dd  tdgdggt
tdgdggt
fksTtttd ttttd tdd  tdgdggt	tdgdggt	fkstttd ttd	d
ttd tdd  tdgdggt
tdgdggt
fkstttd ttttd td	d
dd  tdgdggt
tdgdggt
fksRtttd ttttd ttdd  tdgdggt	tdgdggt	fkstttd ttd	d
ttd ttdd  tdgdggt
tdgdggt
fkstttd ttttd ttd	d
dd  tdgdggt
tdgdggt
fksVtttd tttd ttdd  tddggt	tddggt	fkstttd td	d
ttd ttdd  tddggt
tddggt
fkstttd tttd ttd	d
dd  tddggt
tddggt
fksHtttd ttttd tdd  tddggt	tddggt	fkstttd ttd	d
ttd tdd  tddggt
tddggt
fkstttd ttttd td	d
dd  tddggt
tddggt
fks:tttd ttttd ttdd  tdgdggt	tdgdggt	fkstttd ttd	d
ttd ttdd  tdgdggt
tdgdggt
fkstttd ttttd ttd	d
dd  tdgdggt
tdgdggt
fks>tttd ttttd ttdd  tddggt	tddggt	fkstttd ttd	d
ttd ttdd  tddggt
tddggt
fkstttd ttttd ttd	d
dd  tddggt
tddggt
fk	s6t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	st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
stttt tdd
ttt t tdd
dd  t||dg| t|| |dg| fk
s~t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
st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   r   rO   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   TrK   ZZ(x)r   )r   r   r   r   r   r   r   r   r     r   zQQ(x)zQQ[x])rz   rA   rM   r   r   r  r   rJ   r   rN   rO   rd   rP   Zunifyrq   rL   r}   r~   Z	to_domainrF   r   r   )r   ZF5FABr   r   r   r   r   test_Poly__unify  sf    $ 
$ 
VVHLLRVVRVVTXXNRRNRRTXXPTT0.
0.
0.
r  c                   C   s4  t td d jthkstt td tt  jttthks@tt td tt  tjttthksftt td ttt  jttthkstt td ttt  tjttthkstt td ttt  ttdjttthkstt dt td  tttjthkstt ttt tjtthks0td S Nr   r   r   )r   r   free_symbolsr   r   r   rs   rS   r   r   r   r   test_Poly_free_symbols  s    $&(*.(r  c                   C   s   t td d jt kstt td tt  jt ks<tt td tt  tjtthks`tt td ttt  jt kstt td ttt  tjtthkstt td ttt  ttdjtthkstd S r  )	r   r   r  setr   r   r   rs   rS   r   r   r   r   test_PurePoly_free_symbols  s     $$(r  c                  C   sN  t ttt ttkdkstt tttdt ttkdks<tt ttt tttdkdks\tt tttt dt ttkdkstt ttt tttt dkdkstt tt ttt ttkdkstt tttt ttkdkstt ttt tttkdkstt td d tt td d tkdks2tt td d tt td d tkdks`tt tttd} t tttd}| |dkst| |dkst| j|dddkst| j|dddkst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ksJtd S )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))r   r   r   rO   rN   r}   r   r   nerl   r   )r   r   r  r   r   r   test_Poly__eq__   s(      $$" ....r  c                  C   sL  t ttt ttkdkstt tttdt ttkdks<tt ttt tttdkdks\tt tttt dt ttkdkstt ttt tttt dkdkstt tt ttt ttkdkstt tttt ttkdkstt ttt tttkdkstt td d tt td d tkdks2tt td d tt td d tkdks`tt tttd} t tttd}| |dkst| |dkst| j|dddkst| j|dddkstt tttd} t tttd}| |dkst| |dkst| j|dddks0t| j|dddksHtd S )NTr   Fr   r   r   )	r   r   r   rO   rN   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ks"tt tttd d tdksDtd S )Nr   r   T)r   r   r   r   r   r   r   r   r   test_PurePoly_Polyc  s    "r  c                   C   s   t dt  tkstt dt dd tks4tt dt dd tksPtt td  tkshtttdd  t td dd tksttt dt  t	std S )Nr   rN   r   rO   c                   S   s   t td ddS )Nr   rN   r   r   r   r   r   r   r   p  r   z&test_Poly_get_domain.<locals>.<lambda>皙?)
r   r   r   rN   r   rO   rz   rF   r   rT   r   r   r   r   test_Poly_get_domainh  s    r  c                   C   sL  t dt d tt dt d ks*tt dt d dt dt d ksTtt dt d tt dt d ddkstt dt d dt dt d ddkstt tddt tdd dt dt d	 kstt dt d	 dt tddt tdd kstttd
d  ttdd  tt	dd  d S )Nr   r   rN   rO   r   r   rR   r  皙?c                   S   s   t td d tS r   )r   r   
set_domainrN   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  rO   r   r   r   r   r     r   c                   S   s   t tt tttt S r   )r   r   r   r  rN   r   r   r   r   r     r   )
r   r   r  rN   r   rO   rf   rz   rF   rD   r   r   r   r   test_Poly_set_domainv  s    **..68r  c                   C   s2   t td d dd dks t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   rz   rE   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s2tt td d dddt td d ddksdtt td d dt td d ddkst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   rz   rF   r   r   r   r   test_Poly_set_modulus  s$    
 
 .r  c                   C   s&   t td dt td ks"td S )Nr   r   r   )r   r   Z
add_groundr   r   r   r   r   test_Poly_add_ground  s    r   c                   C   s&   t td dt td ks"td S Nr   r   )r   r   Z
sub_groundr   r   r   r   r   test_Poly_sub_ground  s    r"  c                   C   s*   t td dt dt d ks&td S r!  )r   r   Z
mul_groundr   r   r   r   r   test_Poly_mul_ground  s    r#  c                   C   sP   t dt d dt td ks&tt dt d dt td ksLtd S )Nr   r   r   r   )r   r   Z
quo_groundr   r   r   r   r   test_Poly_quo_ground  s    &r$  c                   C   s8   t dt d dt td ks&t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   r&  r   rz   r>   r   r   r   r   test_Poly_exquo_ground  s    &r'  c                   C   sH   t t d t tt t d t  kr>t td tksDn td S r   )r   r   r   r   r   r   r   r   test_Poly_abs  s    r(  c                   C   sF   t t d t t t d t   kr<t td tksBn td S r   )r   r   negr   r   r   r   r   test_Poly_neg  s    r*  c                	   C   sn  t dtt dtt dtks$tt dtt dt t dtksFtt dtt dtt dtksjtt dttt dt t dttkstt dtt dttt dttkstt dttt dtt t dttkstt dtt t td tkstt  t dttt  W 5 Q R X t ttd t td tksHtdt tt t td tksjtd S Nr   r   )r   r   addr   r   r{   rs   r   r   r   r   test_Poly_add  s    $"$&((""r-  c                	   C   sn  t dtt dtt dtks$tt dtt dt t dtksFtt dtt dtt dtksjtt dttt dt t dttkstt dtt dttt dttkstt dttt dtt t dttkstt dtt t dt tkstt  t dttt  W 5 Q R X t ttd t td tksHtdt tt t dt tksjtd S )Nr   r   r   )r   r   subr   r   r{   rs   r   r   r   r   test_Poly_sub  s    $"$&((""r/  c                	   C   sh  t dtt dtt dtks$tt dtt dt t dtksFtt dtt dtt dtksjtt dttt dt t dttkstt dtt dttt dttkstt dttt dtt t dttkstt dtt t ttkstt  t dttt  W 5 Q R X t ttd t dt tksBtdt tt t dt tksdtd S )Nr   r   r      r   )r   r   mulr   r   r{   rs   r   r   r   r   test_Poly_mul  s    $"$&(("r2  c                   C   s   t tt t td tddks"ttt t t td tddksDtdt t t dt tddksfttdt t t dt tddkstt ttd t dt tddkstd S )Nr   rN   r   )r   r   r   rk   r   r   r   r   test_issue_13079  s
    """&r4  c                   C   s4   t tt tt t td td  ttks0td S Nr   )r   r   r   Zsqrr   r   r   r   r   test_Poly_sqr  s    r6  c                   C   s   t ttdt td tks"tt tttdt td tksHtt dt ttdt dtd  ttksvtt dt tttdt dtd  ttkstt dt t ttd t dtd  td  ttkst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   r8  r   r   r   r   r     r   )r   r   powr   re   r   rz   	TypeErrorr   r   r   r   test_Poly_pow  s    "&.28r;  c                  C   s:  t td t t } }|t dt }}t| |||fks<t| | |ksLt| | |ks\tt| t||fksrt| t |kst| t |kstt dtt dt }}td|||fkstd| |kstd| |kstt tt t dkstt td t t tkstt tt td  dt ks6td S )Nr   r   r   )r   r   divmodr   )r   r   r   rr   r   r   test_Poly_divmod  s    r>  c                   C   s  t tt ttt tt ttkdks(tt tt tt tt ttkdksNtt tt ttt tt tkdksttt tt tt tt tkdkstt tt tt tt tkdkstt tt tttt kdkstt tt ttt kdkstt tt tttt kdkstt tt ttt kdks<tt tt ttt kdks\tt tt ttt tt ttkdkstt tt tt tt ttkdkstt tt ttt tt tkdkstt tt tt tt tkdkstt tt tt tt tkdks"tt tt tttt kdksDtt tt ttt kdksdtt tt tttt kdkstt tt ttt kdkstt tt ttt kdkstt ttttkdkstt ttttkdkstd S )NTF)r   r   r   r   rs   r   r   r   r   test_Poly_eq_ne  s,    (&&$$ "  *((&&" "  r?  c                   C   s0   t tdtdk	stt tdtdk	s,td S )Nr   Tr   F)boolr   r   r   r   r   r   r   test_Poly_nonzero2  s    rA  c                   C   s  t dtjdkstt dtjdks(tt dtjdks<tt dtjdksPtt td tjdkshtt td d tjdkstt td tjdkstt dt d tjdkstt dt d tjdkstt dt d tjdkstt dtjdkstt ttjdkstt tt	 t
 d jdks<tt tt	 t
 d jdks\tt tt	 t
 d jdks|tt tt	 t
 d jdkstt tt	 jdkstt tt	 d jdkstt td tt	  jdkstt td tt	  jdkstt tjdks$tt tt	 jdks<tt tt	 jdksTtt tjdkshtt td td	  td
  td  td  td  d jdkstt td td	  td
  td  td  td  d jdkstd S )Nr   Tr   Fr   r   r   r7     r   r0     )r   r   is_zeror   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_properties7  sD          2
2rF  c                   C   s   t td t d jdkstt td dt  d jdks@tt dt d ddjdks^tt dtd  dt  d ddjdkstd S )	Nr   r   TFr   r      r   )r   r   Zis_irreducibler   r   r   r   r   test_Poly_is_irreducibleb  s    "rH  c                   C   s   t td tddkstt td ttt td ks@tt td ttt td ksdtt tt ttttd kstt tt ttttd kstd S )Nr   r   r   )r   r   subsr   r   r   r   r   r   test_Poly_subsj  s
    $$"rJ  c                   C   s  t td tt td ks"tt td tt td ksDtttdd  t td ttt td ksvtt td ttt td kstt tt ttt tt kstt tt ttt tt ttkstt tt ttt tt kstt tt ttt tt ttks6tt tt ttt tt ks\tttdd  t tt tttt tt tkstt tt tttt tt tkst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   x  r   z#test_Poly_replace.<locals>.<lambda>c                   S   s   t tt ttS r   r   r   r   rK  r   r   r   r   r     r   c                   S   s   t tt tttS r   rL  r   r   r   r   r     r   c                   S   s   t tt tttS r   rL  r   r   r   r   r     r   )	r   r   rK  r   r   rz   rE   r   r   r   r   r   r   test_Poly_replacet  s    ""$$$(&*&**rM  c                   C   s  t tdd  ttt ttttttt ttks:tttt ttttttt ttksftttt ttttttt ttkstttt ttttttt ttkstttt ttjtdttt ttkstttt ttjtdttt ttkst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   )rz   rE   r   r   r   rN  r   r   r   r   r   test_Poly_reorder  s    ,,,,,rO  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sRtt tt t tttdt tt t ttkst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 r5  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   rP  r   r   r   r   r     r   )
r   r   r   r   rQ  r   r   r   rz   rE   r   r   r   r   test_Poly_ltrim  s
    $.4rR  c                   C   s^   t tt d tttttdks&tt tt t tttttdksLtttdd  d S )Nr   TFc                   S   s"   t ttd  td  tttS r5  )r   r   r   has_only_gensr   r   r   r   r   r     r   z)test_Poly_has_only_gens.<locals>.<lambda>)r   r   r   r   rS  r   rz   rD   r   r   r   r   test_Poly_has_only_gens  s    &&rT  c                   C   s   t dt d dd t dt d ddks0tt dt d dd t dt d ddks`tttdd  ttdd  d S )	Nr   r   rN   r   rO   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   rU  r   r   r   r   r     r   )r   r   rV  r   rz   rF   rG   r   r   r   r   test_Poly_to_ring  s    00rW  c                   C   s   t dt d dd t dt d ddks0tt dt d dd t dt d ddks`tt td d dd t td d ddkstt dt d dd t dt d ddkstt dt d	  t dt d	 kstd S )
Nr   r   rN   r   rO   r   r   r   r   )r   r   Zto_fieldr   r   r   r   r   test_Poly_to_field  s
    0000rX  c                   C   sd   t dt  t dt ks tt td  t td ks@tt dt  t td ks`td S )Nr   r  r   )r   r   Zto_exactr   r   r   r   r   test_Poly_to_exact  s      rY  c                  C   s   t td d ttt d} |  t td d tddks<t| jddt td d tddksbtt dtt t dttkstd S )	Nr   r   r   rN   TrK   rO   r   )r   r   rO   r   Zretractr   r   r   r   r   test_Poly_retract  s    "&rZ  c                  C   s  t td dtd   dt  d } | ddt dtks>t| ddt dtksXt| ddt dt d tkszt| ddt dtd  dt  d tkst| ddt td dtd   dt  d tkst| tddt dtkst| tddt dtkst| tddt dt d tks>t| tddt dtd  dt  d tkspt| tddt td dtd   dt  d tkstd S )Nr   r   r   r   r   )r   r   slicer   r   r   r   r   test_Poly_slice  s    $".6&2r\  c                   C   s$  t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd  dt  d t dddgkstt ttd  dtd  td   dddgkstt ttd  dtd  td   dddgks td S )	Nr   r   r   r   r   r   rV   rW   )r   r   Zcoeffsr   r   r   r   r   r   test_Poly_coeffs  s    "006r]  c                   C   s$  t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd  dt  d t d	ddgkstt ttd  dtd  td
   dddgkstt ttd  dtd  td
   dddgks td S )Nr   r   r   r   r   r   r   r   r   r   rV   r   r   r   r   rW   )r   r   Zmonomsr   r   r   r   r   r   test_Poly_monoms  s    "006rb  c                   C   s$  t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd	  dt  d t d
ddgkstt ttd  dtd  td   dddgkstt ttd  dtd  td   dddgks td S )Nr   r   r   r   r   r   r   r   r   r   r^  r   r   r_  r   r   rV   r`  r   ra  r   rW   )r   r   Ztermsr   r   r   r   r   r   test_Poly_terms  s&    "00rj  c                   C   s   t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd  dt  d t dddddgkstd S )Nr   r   r   r   r   )r   r   r   r   r   r   r   r   test_Poly_all_coeffs  s
    "0rk  c                   C   s   t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd  dt  d t d	d
dddgkstd S )Nr   r   r   r   r   r   r^  r   r_  r   )r   r   Z
all_monomsr   r   r   r   r   test_Poly_all_monoms  s
    "0rm  c                   C   s   t dt dgkstt dt dgks0tt dt d t ddgksRtt dtd  dt  d t dddgkstt dtd	  dt  d t d
ddddgkstd S )Nr   rc  r   rd  r   re  r   rf  r   rg  )rl  r   )r^  r   )r   r   Z	all_termsr   r   r   r   r   test_Poly_all_terms  s    "  rn  c                  C   sh   t td dt  d } t td dt  d }dd }| ||ksJtdd }| ||ksdtd S )Nr      i  r   c                 S   s   | \}|dd|   S Nr   r   r   monomcoeffkr   r   r   func(  s    z test_Poly_termwise.<locals>.funcc                 S   s   | \}|f|dd|   fS rp  r   rq  r   r   r   ru  .  s    )r   r   Ztermwiser   )r   r   ru  r   r   r   test_Poly_termwise$  s    rv  c                   C   s   t dt dkstt dt dks,tt tt dksBtt td t dks\tt td d t dksztt td t d t dkstd S )Nr   r   r   r   )r   r   lengthr   r   r   r   r   test_Poly_length5  s    rx  c                   C   s   t dt i kstt dttt i ks0tt dt ddiksJtt dttt ddikshtt td d t dddkstt td d ttt dddkstt dtd  t td  d	t t  d
t t   dd	d
dkstd S )Nr   r   r   r   r   r   r   r   )r^  r   ))r   r   r   ry  r   r   )r   r   r   r   r   r   r   r   r   )r   r   as_dictr   r   r   r   r   r   r   test_Poly_as_dict?  s    $(8 r~  c                      s  t dt dkstt dttt dks0tt dt dksFtt dttt dks`tt td d t td d kstt td d ttt td d kst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tt td dt td   t tt   t td  dt td   ksnt tdidt dtd   kst td	id
dt  td  kst tdtd	idkst dd	dksttt fdd d S )Nr   r   r   r   r   r      r   rC  iH   i{  c                      s     tdiS r   )r   r   r   r   r   r   r   d  r   z#test_Poly_as_expr.<locals>.<lambda>)r   r   r   r   r   r   rz   rD   r   r   r   r   test_Poly_as_exprM  s$    &*..
$,((r  c                   C   sp   t td tt  dt  tdd t td dtd   dtd	   td  dtd   d
 tddksltd S )Nr      Tr   r7  r   r   iB  r0  iAF rO   r   )r   r   rd   Zliftr   r   r   r   r   test_Poly_liftg  s    $8 r  c                   C   s   t dt dt dtfks tt dt dt dtfks@tt tt dt ttfks`tt td t dt ttfkstt td t dt ttfkstt td t td  td	 td    d
t tt t td t  fkstd S )Nr   r   r   r   r^  r  )r  rG  r   )r   r   rG  )r   r   deflater   r   r   r   r   r   r   test_Poly_deflatem  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sbt| jddt td t ttd   tt  d ttkstd S )Nr   r   r   T)Zfront)r   r   r   Zinjectr   r   r   r   r   test_Poly_injecty  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sdt| tt ttd  td t t  d tddksttt t t t }t |ttttt}|tt |ttttddkst|ttt |tttddkst|tttt |ttddks,t|tt |ttttd	dksPt|ttt |tttd
dkstt|tttt |ttddkst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   rN   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   rz   rG   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tt tt tt t tt ttksFtt dtt t dttksftd S r   )r   r   r   excluder   r   r   r   r   test_Poly_exclude  s    (r  c                   C   s  t dttddkstt dttddks4tt dttddksNtt dttddkshtttdd  ttdd  t dtttdkstt dtttdkstt dttddkstt dttd	dkstttd
d  ttdd  d S )Nr   r3  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   rz   rE   r   r   r   r   test_Poly__gen_to_level  s    r  c                   C   s4  t dt t kstt dt dks.tt tt dksDtt dtjddt ks`tt dtjdddksztt ttjdddkstt dtjtdt kstt dtjtddkstt ttjtddkstt dtjddt kstt dtjdddkstt ttjdddks:tttdd  ttdd  ttdd  t dtt dks~tt d	t tt dkstt tt tt dkstt dttjtddkstt d	t ttjtddkstt tt ttjtddkstt dttjtddks:tt d	t ttjtddks\tt tt ttjtddks~ttdtt ksttdtdksttttdksttttd	  tdksttttd	  td	ksttttd	  tdksttt	dks"ttt
d
d  tt
dd  ttdd  ttdd  tt dttt ksvttt dttdksttt td	 td  tdksttt td	 td  ttddksttt td	 td  ttdksttt td	 td  td  ttdks0t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 r%  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   rg   r   rz   rE   r   r   rh   r:  r   r   r   r   test_Poly_degree  sR    """"$(&r  c                   C   s(  t dt t fkstt dtt t t fks:tt dttt t t t fks`tt dt dksvtt dtt dkstt dttt dkstt td t td td   d  dksttdtdksttttd	ksttttd  d
kstttdd  d S )Nr   r   r   r   ry  r   r   )r   r   r   r   r   c                   S   s   t dS r   )r   r   r   r   r   r     r   z'test_Poly_degree_list.<locals>.<lambda>)	r   r   r   rg   r   r   r   rz   r@   r   r   r   r   test_Poly_degree_list  s     &0r  c                   C   s  t td t td td   d  dks0tt td td   dksPtt tt t td   dksttt td t d  dkstttt td  dkstttt td  ttdksttddksttt td td  td  dks
ttt td td  td  tdks6ttt td td  td  ttdksdttt td tt t  td td   td  ttdkstd S )	Nr   r   r   r   r   r   	   r   )r   r   r   r   r   r   r   r   r   r   test_Poly_total_degree  s    0 $  *,.r  c                   C   s   t td t tt td tt  ks.tt tt tt tt tttksVtt ttd  tt tt td  kstd S r5  )r   r   r   Z
homogenizer   r   r   r   r   r   test_Poly_homogenize  s    .(r  c                   C   s   t dtt t kstt dtt dks2tt ttt dksJtt tt tt dksftt td tt d kstt tt t tt d kstt td dtd  td   dt td    dkstt td dtd  td   dt td    d kstd S )Nr   r   r   r   r   r  r   )r   r   r   Zhomogeneous_orderrg   r   r   r   r   r   test_Poly_homogeneous_order  s     <r  c                   C   s  t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   ddkstt ttd  dtd  td   ddksttttd  dtd  td   dddksttttd  dtd  td   dddkstd S )	Nr   r   r   r   r   rV   rW   r   )r   r   r	   r   r   r   r   r   r   test_Poly_LC  s    "220r  c                   C   sR   t dt dkstt dt dks,tt dtd  t t dksNtd S )Nr   r   r   )r   r   ZTCr   r   r   r   r   test_Poly_TC$  s    r  c                   C   s   t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   ddkstt ttd  dtd  td   ddkstd S )Nr   r   r   r   r   rV   rW   )r   r   ZECr   r   r   r   r   r   test_Poly_EC*  s
    "2r  c                      s  t dtddkstt dttdks0tt dtddksHtt dttdks`tt td tddks|tt td ttd dkstt td ttd dkstt td ttd dkstt dt td  d ttddkstt dt td  d ttttd  dks<tt dt t td d	t  tt  td	kstt tdkst tt dtd kst  tdt td d	 ksttt	 fd
d tt
dd  tt
dd  tt
dd  d S )Nr   r   r0  r   r  r   r         c                      s
     tS r   )rs  r   r   r   r   r   r   I  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   K  r   c                   S   s   t td dt S Nr   r   r  r   r   r   r   r   L  r   c                   S   s   t td dt t S r  )r   r   r  r   r   r   r   r   r   M  r   )r   r   r  r   r   ro   r   rs  rz   r   
ValueErrorr   r   r   r   test_Poly_coeff3  s&       ,4$ (r  c                   C   s<  t dtddkstt dtddks0tt dtddksHtt dtddks`tt td tddks|tt td tddkstt td tddkstt td tddkstt dt td  d ttdddkstt dt td  d ttdddks*tttdd	  d S )
Nr   r   r0  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   rz   r  r   r   r   r   test_Poly_nthP  s    ,.r  c                   C   s,  t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   dd	kstt ttd  dtd  td   d
dksttttd  dtd  td   ddtd td  ksttttd  dtd  td   d
dttd  ks(td S )Nr   r   r   r   r^  r   r   rV   r`  rW   ra  r   )r   r   r
   r   r   r   r   r   r   test_Poly_LMb  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sXt| j|dd	ksltd S )
Nr   r   r   c                 S   s   t t| S r   )tuplereversed)rr  r   r   r   r   p  r   z+test_Poly_LM_custom_order.<locals>.<lambda>rV   r   )r   r   r   rz  )r   r   r   r   r
   r   )r   Zrev_lexr   r   r   test_Poly_LM_custom_ordern  s    <r  c                   C   s   t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   dd	kstt ttd  dtd  td   d
dkstd S )Nr   r   r   r   r   r   r   rV   ra  rW   r`  )r   r   ZEMr   r   r   r   r   r   test_Poly_EMv  s
    "2r  c                   C   s0  t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   d	d
kstt ttd  dtd  td   ddksttttd  dtd  td   d	ddtd  td  ksttttd  dtd  td   ddttd  ks,td S )Nr   rc  r   rd  r   )r^  r   r   r   rV   rh  rW   ri  r   )r   r   r   r   r   r   r   r   r   test_Poly_LT  s    "22@r  c                   C   s   t dt dkstt dt dks,tt dtd  t t dksNtt ttd  dtd  td   d	d
kstt ttd  dtd  td   ddkstd S )Nr   rc  r   rd  r   )r   r   r   r   rV   ri  rW   rh  )r   r   ETr   r   r   r   r   r   test_Poly_ET  s
    "2r  c                   C   sF   t dt dkstt dt dks,tt dt dksBtd S Nr   r   r   )r   r   Zmax_normr   r   r   r   r   test_Poly_max_norm  s    r  c                   C   sF   t dt dkstt dt dks,tt dt dksBtd S r  )r   r   Zl1_normr   r   r   r   r   test_Poly_l1_norm  s    r  c                  C   s  t td t \} }| dkr@|t td tddkr@| tksDtt td d t \} }| dkr|t td tddkr| tkstt td d tjdd\} }| dkr|t td tddkr| tkstt tt d tjdd\} }| tkr*|t tt tddkr*| tt ks.tt td	 td td
d \} }| d	kr|t td	td  td
dkr| t	kstt td	 td td
djdd\} }| d	kr|t td	td  td
dkr| t	kstd S )Nr   r   rN   r   rO   T)convertr  r   rS   )
r   r   Zclear_denomsr   rN   r   rO   r   rq   rS   )rs  r   r   r   r   test_Poly_clear_denoms  sl      
  
  
  
"  

  
  

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sbt| t} |t}| || |fkstd S )Nr   r   r   )r   r   r   Zrat_clear_denomsr   r  rS   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std S )Nlwf8*-    r   r   l   >< i^     i#  l   4$isDl   R r      l   wf8*- r   rS   r   )r   rk   rq   r   r   r   r   r   r   test_issue_20427  sX    



$


&. 
&	
r  c                   C   s`  t td  t td d t ks(tt td tt td d t ksRtt td tdft td d t kstt tt d tt td t d t kstt tt d tt ttd  d t kstt tt d ttt td t d td d  ks"tt tt d ttt ttd  d td d  ks`tt tt d tdft td t d td d  kstt tt d tdft ttd  d td d  kstt tt d ttt td td  d tt  kstt tt d ttt td td  d tt  ks\td S )Nr   r   r   rC  r   )r   r   Z	integrater   r   r   r   r   r   test_Poly_integrate  s    (*.22>>@@>r  c                   C   sx  t td t  t dt d ks(tt td t tt dt d ksRtt td t tdft dt d kstt td td  tt  tt dt td  t kstt td td  tt  tt dtd  t t kstt td td  tt  ttt dtd  ttks:tt td td  tt  ttt dtd  ttksxtt td td  tt  tdft dtd  ttkstt td td  tt  tdft dtd  ttkstt td td  tt  ttt dt t d ks6tt td td  tt  ttt dt t d ksttd S )Nr   r   r   )r   r   r_   r   r   r   r   r   r   test_Poly_diff  s    (*.>>>>@@>r  c                   C   s   t ttd t tdt d ks(tt ttd t tddtttd t tks\ttttd t t tdt d kstd S )Nr   r   Fevaluate)r_   r   r   r   r^   Zdoitr   r   r   r   test_issue_9585  s
    (r  c                  C   s  t dtddkstt dtddks0tt ttddksHtt dtdddksbtt dtdddks|tt ttdddkstt dttddkstt dttddkstt tttddkstt dtdddkstt dtdddkstt ttdddks6tttdd  ttdd  ttdd  t d	ttdt d	tkstt d
t ttdt d
t tkstt tt ttdt dt tkstt d	tttdt d	tkstt d
t tttdt d
t tks&tt tt tttdt dt tksRtt d	tttdt d	tksvtt d
t tttdt dtkstt tt tttdt dt tkstt tt t tttdit dt tkstt tt t tttdit dt d tks2tt tt t tttdtdidks^tt tt t tttdtdidkstt tt t ttddkstt tt t ttddgdkstt td ddtjt	dd
kstt td ddt
d
t
d
d ks*t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stt td
 | d t  |  d ttdd}|td td  t |tddkstd S )Nr   r   r   r   c                   S   s   t dtddS Nr   r   r   r   evalr   r   r   r   r     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     r   c                   S   s   t dtddS )Nr   r   r   r  r   r   r   r   r     r   {   r   rB  r0  rC  1   0   )rC  r   rN   r   r   c                   S   s   t tt t ttdS )N)rC  r   r0  )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   rN   r   Fauto)r   r   r  rk   Halfr   r   r   r   r   /  r   alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r  r   rz   rE   r   rk   r  rf   rq   r  rG   rl   r   )r  resultr   r   r   r   r   test_Poly_eval  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sHt| ddt dt d ksft| ddddksztd S )Nr   r   r   rC  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sBtt ttd ttd d gtd ttd tttd d tgkstt td ttd d tgtd ttd tttd d tgkst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"tt td td d gttd ttd ttttd d ttgkslt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st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t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sbtt td td d gd ttd tttd d tgkstt ttd ttd d gd ttd tttd d tgkstt td ttd d tgd ttd tttd d tgks4tt ttd tttd d tgd ttd tttd d tgkstt dtd d gd tdtttd d tgkstt dtd d gd tdtttd d tgkstt dttd d tgd tdtttd d tgks6tt dttd d tgd tdtttd d tgksvtt td d dgd ttd d ttdtgkstt td d dgd ttd d ttdtgkstt ttd d tdgd ttd d ttdtgks*tt ttd d tdgd ttd d ttdtgksjt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stttdd	  d S )
Nr   r   r   rV   r   rN   r   c                   S   s   t ddgS r+  )r   r   r   r   r   r   t  r   z.test_parallel_poly_from_expr.<locals>.<lambda>)r   r   r   r   r   rz   r?   r   r   r   r   test_parallel_poly_from_exprC  sP       
  "
 
 "


  "

  "












&
r  c                  C   s  t d td  t t  } }t t d }}dd | |||fD \}}}}||||fks\t|||ksnt|||kst|||kstt| |||fkstt| ||kstt| ||kstt| ||kstt| |t t||fkstt| |t t|kstt| |t t|ks(tt| |t t|ks@tt| |t tf||fks^tt| |t tf|ksxtt| |t tf|kstt| |t tf|kstt||||fkstt|||kstt|||kstt|||ks tt| |dd||fkstt| |dd|ks4tt| |dd|ksLtt| |dd|ksdtt||dd||fkstt||dd|kstt||dd|kstt||dd|kst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   r8  r   r   r   r   r   
<listcomp>{  s     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   rz   r@   )r   r   r   r=  r  GQRr   r   r   	test_pdivw  sF    r  c                     sd  t d td  t t   t t d } }dd  | |fD \}}}}||||fks\t|||ksnt|||kst|||kstt | |fkstt |kstt | kstt | kstt t t| |fkstt t t|kstt t t| ks(tt t t| ks@tt t tf| |fks^tt t tf|ksxtt t tf| kstt t tf| kstt||||fkstt|||kstt|||kstt|||ks tt dd||fkstt dd|ks4tt dd|ksLtt dd|ksdtt||dd| |fkstt||dd|kstt||dd| kstt||dd| kst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sVtt dd||	fksrtt dd||fkstt t	d||fkstt t
d||	fkstt t	dd||	fkstt t	dd||fkstt t
dd||	fks tt t
dd||	fks>tt |	ksRtt dd|	ksjtt dd|kstt t	d|kstt t
d|	kstt t	dd|	kstt t	dd|kstt t
dd|	ks tt t
dd|	kstt |ks.tt dd|ksFtt dd|ks^tt t	d|ksvtt t
d|kstt t	dd|kstt t	dd|kstt t
dd|kstt t
dd|kstt d dt  t d    } t | ks&tt dd| ks>ttt fdd	 tt fdd	 t t
d| ks~tt t	dd| ksttt fdd	 t t
dd| kstt t
dd| ksttt d tt    \} }|  jr| js t }| js:t } |  jsTt } |  jsnttt t t tdt  t t    \} }|  jr| jst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t|
j| ddttd d dt d  t ddtdt ddfks`td S )Nr   r   c                 S   s   g | ]}t |ttqS r   r8  r  r   r   r   r    s     ztest_div.<locals>.<listcomp>Tr  Fc                   S   s
   t ddS r  )r   r   r   r   r   r     r   ztest_div.<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  c                      s   t  ddS NFr  r  r   r  r   r   r     r   c                      s   t  tdS r   r   rN   r   r  r   r   r     r   c                      s   t  tddS )NFr  r  r   r  r   r   r     r   r   rP   rQ   )r   r   r   r   r   r   r   rz   r@   rN   rO   r>   r   r   Zis_ZZZis_Fracrd   rP   rk   )r   r=  r  r  r  r  ZqzZrzZqqZrqr   r   r  r   test_div  s    


""
0r  c                  C   s6   t tdt \} }t| d dk s&t|dks2td S )Ng>,p ?g3!	@g+=r   )r   r}   r   r   )r   r=  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sht|||||	fkst|||kstt| |||fkstt| ||||fkstt| ||kstt| |t ||fkstt| |t |||fkstt| |t |kstt| |t f||fks8tt| |t f|||fksVtt| |t f|ksntt||||	fkstt|||||	fkstt|||kstt| |dd	||	fkstt| |dd	|||	fkstt| |dd	|kstt||d
d	||fks"tt||d
d	|||fks@tt||d
d	|ksXttdddkslttdddksttdddkstttdd  ttdd  ttdd  d S )Nr   r7      r   r   c                 S   s   g | ]}t |td dqS )rO   r   r   r   r   r   r   r   r  %  s     ztest_gcdex.<locals>.<listcomp>Tr  Fd   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   G  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   H  r   c                   S   s   t td dt d ddS r  )r   r   r   r   r   r   r   I  r   )r   rf   r   r   r   r   rz   rG   )
r   r   sr   r   r  r  rk   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srtd S )
Nr   r   r   r  rC  i  =   r   r0  )r   r   revertr   r  r   r   r   test_revertL  s    ,4r  c                  C   s  t d dt   d t d d dt  d   } }}t| t|t|  }}}|||||gksdtt| || ||gks|tt| |t | ||gkstt| |t f| ||gkstt|||||gkstt| |dd|||gkstt||dd| ||gkst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   rz   r@   r   r   r   r  r  r  r   r   r   test_subresultantsS  s    0r  c                  C   s  t d dt   d t d d d  } }}t| t| }}|||ksLtt| ||ks^tt| |t |ksrtt| |t f|kstt|||kstt| |dd|kstt||dd|kstt| |dd|| |dt  d gfkstt t t t tt   } }}t| t|t|  }}}|||ks:tt| ||ksNtt| |t |ksdtt| |t f|ks|tt|||kstt| |dd|kstt||dd|kst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   z  r   z test_resultant.<locals>.<lambda>)r   r   r   r   r}   r~   rz   r@   r  r   r   r   test_resultantb  s(    ((r  c                  C   s  t d dt d   dt   d d } }t| }| |ks>tt| |ksNtt| t |ks`tt| t f|ksttt||kstt| dd|kstt|dd|ksttt d  tt   t td d	t t   } }t| t| }}| |k stt| |kstt| t ttt|ks*tt| t tttf|ksFtt||ksXtt| dd|ksntt|dd|kstttd
d  d S )Nr   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   rz   r@   r   r   r  r  r   r   r   test_discriminant}  s&    &.r  c                  C   s   t td td  t} t|  ddgks.t|  dks>tt td dtd   d t} | d}t| |dddgkst| |dkstd S )Nr   r   r   r   r   r  )r   r   sortedZdispersionsetr   Z
dispersionshift)fpgpr   r   r   test_dispersion  s    
r  c                  C   sF  t d d t d d t d dt   d g} t| t d ks>tt| ddtt d ksZttg dksjttddgdks~ttddd	gdksttt td
  t t  t d
  gdksttg t }|jr|tjksttg t dd}|jr|j	stt
d}t|| gt| |g  kr.|ks4n tttdd  d S )Nr   r   r   Tr  r   r   rC  r0  *   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   r   	is_Numberrk   r   is_PolyrD  rq   rz   r@   )r  r   r}   r   r   r   test_gcd_list  s    **
2r  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sbtt| ddtt d t d  dt d   t d  t  d ksttg dksttddgdksttddd	gd
ksttt td  t t  t d  gdksttg t }|jr&|tjks*ttg t dd}|jrH|j	sLtt
tdd  d S )Nr   r   r   r   r   Tr  rC  r0  r  r  r   c                   S   s   t g ddS r  )r   r   r   r   r   r     r   ztest_lcm_list.<locals>.<lambda>)r   r   r   r   r   r  rk   Oner  rE  rz   r@   )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st|||
kst|||kstt| ||||fkstt| ||kstt| ||kstt| |t |||fkstt| |t |ks&tt| |t |ks<tt| |t f|||fksZtt| |t f|ksrtt| |t f|kstt|||
||	fkstt|||
kstt|||kstt| |dd|
||	fkstt| |dd|
kstt| |dd|kstt||d	d|||fks8tt||d	d|ksPtt||d	d|kshtd
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fkstt| ||kstt| || kstd
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fks0tt| ||ksDtt| || ksXttdddkslttdddksttdddkst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s0tt| |dd|ksHtt| |dd|ks`t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stt| |dd	d|kstt| |dd	d|ks2ttdtd  }}t||t||  krntdkstn ttdtd  }}t||t||  krtdksn tttt d t ttt  t tdt tdkstt	t
dd  t	t
dd  d S )Nr   r   r   r   c                 S   s   g | ]}t |qS r   r   r  r   r   r   r    s     ztest_gcd.<locals>.<listcomp>Tr  Fr   r0  rC  )r   r   r   r  rG  r   r   r   r3  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   rq   r   rd   rP   rz   r:  )r   r   r  r   r   r=  r  r  rk   r  r  r  lr}   r~   r   r   r   test_gcd  sr    "&2, 2,  ..2r   c                   C   sZ  t tddtstt tdt dts,ttdddks>ttdt ddksTtt ttddtddtsttt ttddt tddtstttddtddtddkstttddt tdddkstt tddtstt tdt dtsttdddks ttdt ddks8tttddd	d
ddksVtd S )Nr   r  r   r   r   r   g      "@r   Fr  )r   r   re   r   r   rf   rc   rb   r   r   r   r   test_gcd_numbers_vs_polys"  s     $$"r  c                  C   s  t ddkstt dtdks"tt td td ks:tt t d t d ksVtt dt d dt d ksvtt dt d tddt d ddkstt td t ttd   tt td td   kstt dtd  t dt td   dt t td td   kstt td t d ttd  d  tt d td td   ksdtt td t dt td   tt td dtd    kstt dtd  t dt td   dt t td dtd    kstt dtd  t d dt td  d  tt tdd	 dtd  dtd    ksLtt d
td  t dt td   tt d
td  dtd    ksttt d
t d d
t d stt ddt  ttt   dddt d tt t  kst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sVtt tttt  ddtttd  ksttdt dt dt	 t  } t | tdt dt t	d  kstt | ddtdt dt t	d  kstt
tdd  d S )Nr   r   r   rC  r   Fr  r      r   gffffff@r`   T)r`   deepr  c                   S   s   t tdk S r5  )r   r   r   r   r   r   r   Y  r   z test_terms_gcd.<locals>.<lambda>)r   r   r   rb   r   rf   r[   rs   rj   r   rz   r:  r   r   r   r   test_terms_gcd9  s6     *8FFBJ\J$
,(

(,r  c                  C   s<  t d dt d   dt d   dt d   dt   d t d t d  t d  t   } }t| t| }}|d|ksztt| d|kstt| dt |kstt| dt f|kstt|d|kstt| ddd|kstt|ddd|kst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srtt| d|kstt| dt |kstt| dt f|kstt|d|kstt| ddd|kstt|ddd|ksttt d dt   d dd
} | dtt d d	 dd
ks8td S )Nr   r   r   r   rC  Tr  Fr   r   )r   r   r    r   r  r   r   r   
test_trunc\  s(    VXr  c                  C   st  dt  d t tj  } }t| ddt| }}| |ks>tt| |ksNtt| t |ks`tt| t f|ksttt||kstt| dd|kstt|dd|kstttdd	  tdt d  d
t   d ddt d dt   d kstttdd	  tdt d  dt   d dt d  dt   d ks:ttdt d  dt   d ddt d t  d ksptd S )Nr   r   rO   r   Tr  Fc                   S   s   t dS r  )r!   r   r   r   r   r     r   ztest_monic.<locals>.<lambda>rC  r   r  r   c                   S   s   t dt dt  d ddS )Nr   rC  r   Fr  )r!   r   r   r   r   r   r     r   r   g      @g      @r   r   r   r   )	r   rk   r  r   r!   r   rz   r@   r>   r  r   r   r   
test_monicx  s    8:r	  c                  C   sp   dt  d tdt  d  } }| dks.tt| dks>tttdd  tdt  dd} |  dkslt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   rz   r@   )r   r  r   r   r   test_content  s    r
  c                  C   s>  dt  d dt  d  } }t| t| }}| d|fks@tt| d|fksTtt| t d|fksjtt| t fd|fkstt|d|fkstt| ddd|fkstt|ddd|fkstttdd  tdt  d	d
} tdt  td}|  d| fks
t| d|fks tttdtdks:t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   rz   r@   rR   rk   r  r   r   r   test_primitive  s"    
r  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stt||| kstt||t | kstt||t f| kstt|||kstt||dd|kstt||dd| kst| ||gks0tt| ||gksFtt| t ||gks^tt| t f||gksxtt|||gkstt| dd||gkstt|dd||gkstttdd  ttdd  tt d
 td
  t t t tt d
 d
t  t  ksttt d
 td
  t t tt td
  d
t  t  ksPtd S )Nr  ro  r      r0  i  rC  q  r   r   r   r  r   Tr  Fc                   S   s
   t ddS r  )r$   r   r   r   r   r     r   ztest_compose.<locals>.<lambda>c                   S   s   t dS r  )r%   r   r   r   r   r     r   )	r   mapr   r$   r   r%   rz   r@   r   r  r   r   r   test_compose  s,    P8r  c                   C   sB   t td dt  d tdt td dt  d tks>td S r   )r   r   r  r   r   r   r   r   
test_shift  s    r  c                	   C   s   t td dt  d tt td t td t dt  kr|ttd d td dt  d ttd td   ksn t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 t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 t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 t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 t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   rR   r   c                   S   s$   t tt t td t td S r   )r   r   r   	transformr   r   r   r   r     r   z test_transform.<locals>.<lambda>c                   S   s    t tt td t td S r   r   r   r  r   r   r   r   r   r     r   c                   S   s    t tt td t td S r   r  r   r   r   r   r     r   c                   S   s$   t tt tt d t td S r   r  r   r   r   r   r     r   c                   S   s$   t tt td t tt d S r   r  r   r   r   r   r     r   )r   r   r  r6   rI  r   rf   rk   r  rz   r  r   r   r   r   test_transform  s<    060
62
82
:2
:r  c               
      sf  t tt dd  } dtdt dd }}|  | |gks:tt  |gksNtt t  |gksdtt t f |gks|tt| | |gkstt dd| |gkstt| dd |gkst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sbtd S )&NrO   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  r  r   r   r   r   r     r   i   i	=  r0  r   i   r  r   r  r      r   i$  zZZ(pi)r  @   r  r7     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )
r   r   r&   r   rz   r@   rG   rk   rh   rf   )r  r   r  r   r   r   
test_sturm  s@     <(2Hr  c                      sd  t d dt d   t d  dt d    t  tt dftt d dfgksTtt t dft d dfgkstt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
tt t d dt   d dft d dt   d dft dfgksNt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   r  r   r   r   r   r   	  r   )r   r   r'   r   rz   r   r   r   r   r   test_gff	  s    (, 0
  
Dr  c                  C   sz   t dt d } }t| t |t  tt| |fd}| tdtd  dtd  td   dtd   ttddksvtd S )	Nr   r   r   r   r  r  rO   r   )rq   r   r   r   Znormr   )r}   r~   r   r   r   r   	test_norm	  s     r  c                   C   s  t td d tdddtd dtd t  d td dtd   d fksRtt td d tdddtd dtd t  d td dtd   d fkstttd d tdd  d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tttd d tdd  dttd dtd t  d ttddttd dtd   d tddfkstd S )	Nr   r   r   r   r   r   rO   r   )r)   r   rq   r   r   r   r   r   r   test_sqf_norm%	  s     44* 
* 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stt| |kstt| t |kstt| t f|kstt||kstt| dd|kstt|dd|kst| d|df|dfgfkstt| d|df|dfgfks8tt| t d|df|dfgfks\tt| t fd|df|dfgfkstt|d|df|dfgfkstt| ddd|df|dfgfkstt|ddd|df|dfgfkst| |df|dfgkstttd	d
  t	ddks.ttddg fksDtt	dt d  d d dt d d d  ksvtt	| ||d  kstt	| t ||d  kstt	| t f||d  kstt d t
d  }t	| | ||d  | kstt	| | t ||d  | ks tt	| | t f||d  | ksFtt	t d t d ks`tt	t  d t  d ks~tt	t d t d kstt	dt  d tddt  d ddkstt	dt  d dt  d  tdddt  d t d   kstt	tt d dt   d t d d ks2tdt  t dt    t d  } t	| dks`tt d dt   d d } t	| t d d kstt| dt d dfgfkstd S )Nr   r   r   r   r   Tr  Fc                   S   s   t dS r  )r*   r   r   r   r   r   O	  r   ztest_sqf.<locals>.<lambda>r   r  rC  r   r  l    H/P l    _ % )r   r  r   r*   r   r+   Zsqf_list_includerz   r@   r,   r   rb   rf   )	r   r   r   r   r  r  r  Pr   r   r   r   test_sqf4	  sT     ""$&"&&2"$&,@.r   c               	      s  t d t d  t d  d  t d } t d }t d t  d }tt | ||f\}}}}| d|df|df|dfgfks|tt d| df|df|dfgfkstt t d| df|df|dfgfkstt t fd| df|df|dfgfkstt|d|df|df|dfgfkstt ddd|df|df|dfgfksHtt|ddd| df|df|dfgfkstt| |df|df|dfgksttddg fksttddg fkstttdt tdg fksttd	t  t dd	t fgfksttdt  t t ddtft tfgfks2tttt t t dt t tj	fgfks^tt
ddkrxt
djs|ttdt  dt dfgfksttdt d  dt dfgfkstt
dt  dt  kstt
dt d  dt d  kstt
dt d  d d
 dt d d d
  ks.tt
 | |d  | ksLtt
 t | |d  | ksltt
 t f| |d  | kstt d td  t t t t t d d f\}}}	}
t
 | | |d  | ||	  kstt
 | t | |d  | ||	  kstt
 | t f| |d  | ||	  ksBttddd}tddd}tddd}
t
tt t jdkstt
tdt d  d tdtt d t d   kstt
tdt d  d tdtt d d  kstt
tt d  t | t| t d |  t d |  ks0tt
tt d  t | t| t d d |  ksftt
tt d  t t tt d  t d  t kstt
tt d  t t tt d d  t ksttt|
d d |d  |d  |d d   t|d d |d  t|d  t|
d d  }t
 |ksDtt
||ksVtt d d |
d d  }tt| t
 t|kstttdt  d t td   d dfgfkstt d d  t
  kstt
 tdt d t t d t  kstt
 ddt d t t d t  ks8tt
 tddt d tdt   d t d tdt   d  ks~tt
t d dt t   d t dt  d kstt d dt t   d  t
  kst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\tt
 td|ksrtt
 td|kstt d dtd t   d  t
 tddt td d kstt
 d tddt td d kstt
t d dtd   tddt tdt  t tdt   k	s:tt
dt d  dtd   tdddt tdt  t tdt    k	stt
t d t d k	stt
t  d t  d k	stt
t d t d k	stt
dt  d  tddt  d dd!k
st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
sjt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
st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sLtt
|ttt d  td d  ksvtt
tt d dt   d t d d tt d d t d t d t  d  kstt d d t d dt   d   t
 t d t d  t d d  kstt
 t t d t d  t d d  ks>tdt  t dt    t d   t
 dksltt
 t dkstt
dt d dt   dt    d dt  dt d   t d  ddt d   t d    kstt
 dd( kst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stttt d t  d  d d, d, tdk	stttt d t  d  d d, d, tdkstt
tt  tt  kst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tt
tt d t  t  dd.tt t d  t  ksBtt
tt d t  t  dd.tt t d  t  ksxtt
tt d tt d kstt
td/t  d d/t d  td0d/t  d0 d/t d0 dd!kstt
td/t  d/ d d1d0t  d0 d  kst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stt
|t dd.t d t d  td d"t  d2  kstt
|tdd.td td  t d d
t   d5  kstdt  dtdd
t      t
 dd.t
 ddd8ksZtt
 ddd8dt  dtd td9t    ksttt d t td   t|t dt dft t dft t dfgfkstd S ):Nr   r   r   r   Tr  FrC  r   r   r  r   Zpositivei)integerr=  )realr   r   r   r  i    iX  i iH i r  i  iT     iY  r   r  rG  r   r   r  r0  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  r&  r   r   r   r   r   
  r   r   r3  r  g      ?r   g      ?   M      r     ih  )r  fractioni) r   r  r   r-   r   Zfactor_list_includerq   r   rk   r  r.   Z
is_Integerrl   Zis_Powr   r`   rs   rS   rd   rP   rQ   rb   rh   rj   rz   rE   rI   r\   r   r   r   ro   )r   r   r   r  UVWr   r   r   r=  r"  Zf_zziZf_qqier   r   r   r   test_factors	  sP   &&(*(,,$ ",, $"2 "0*,.:6>66204** .
2($$&*
""
,B
4

8"* 
$
 *,4:6
" 
" 
H
0
>66",
 2h488 4 r0  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stt|t d d	 td d  kstt| dt d dft d dft d d dfgfks tt|dtd dft d d	fgfksJt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st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sRt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st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*td S )Nr   r   i r   i i  i -1i% ip  i@ r   rC  r   r   Tr  )r   r   r.   r   r-   rd   r  r   r   r   test_factor_large0
  s    <> 0$(
*  ,

4
&

(. r1  c                   C   sp   t dt d tddt d ddks*tt dt d dt d  ttdddt d dtd  ksltd S )	NrC  r   r   r   r   Fr  r   )r.   r   rb   r   rf   r   r   r   r   test_factor_noevalN
  s    *r2  c               
   C   s
  t dg kstt dg ks tt tdddgks6tt tdgksHtt td dgks^tt td	 td
 gdd	d
dfgksttttd	d tdd d
t tdd  } | j ddddgkst|   ddgkst| j dddddgkst| j ddddgkst| 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 t| 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 t| 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 t| 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 tttd	d tdd d
t tdd  } t | ddddgkstt | ddgkst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 t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 t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 t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 t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st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s2t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st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t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sttd	 d	 td
 d
td	   d
 td   } }}t | td%d
dd>g kstt | td%ddd>td%dtdd	fgks tt | td%d
dd?d@dtdd	fgks,tt | td%ddd?d@gksLtt |td%d
dAg kshtt |td%ddAtd%dtdd	fd	fgkstt |td%d
dBdCdtdd	fd	fgkstt |td%ddBdCgkstt ||gtd%d
dAg kstt ||gtd%ddAtd%dtdd	fdd	ifgks@t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stt ||gtd%ddBd@dd	ifd;ddifgkstt td	 td	 d	 gd8ddifd@ddifdDddifgkst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	sLtd%td
  dFtd   dGtd	   dt  dG } t | g k	stt | dddH\}}|g k	sttdIdJ t|t	| D 	st|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
s8tt | ddtdddM\}}|g k
s`ttdNdJ t|t	| D 
stttdOdP  ttdQdP  ttdRdP  d S )SNr   r   T)r,   r   )r   r   r  )r   r  r   r   r   r   r  r   i  r   r   rB  r  )r3  r   )r4  r   )fastr,   )r5  r   epsr  r   i  U   rC  r  {Gz?i  gMbP?i  i'  -C6?i  r   r3  r  )r   r   r   )r3  r   r     K      e   #   i5  k   r  iiirB  G   )r3  r3  r;  r   r   r   )r   r   rC  )r   r   )infr,   )supr,   r3  r   rD  rE  )rF  r   r   r      ro  )r   r,   c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   rn   rm   r   r}   r~   r=  r   r   r   r   
  s   
&z!test_intervals.<locals>.<genexpr>i(   )r   r,   r7  c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   rJ  rK  r   r   r   r   
  s   
&c                   S   s   t td d ddS Nr   r   r6  r/   r   r   r   r   r   r   
  r   z test_intervals.<locals>.<lambda>c                   S   s   t td d jddS rM  )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   r6  rN  r   r   r   r   r   
  r   )r/   r   r   r   rf   rk   r   r   r   r3   rd   rz   r  )r   r   r   Z	real_partZcomplex_partr   r   r   test_intervalsS
  s    (.$($($($.*$($($($.8   
6
6
. 
6  

00, 2. :
*
 
 
*
0 rO  c                      s  t td d   jdddddks(t jdddddks@t jddd ddtd	dfksbt jddd dtd
ddfkst jdddddtd	dfkst jddddtd
ddfkst jddddddtd	dfkst jdddddtd
ddfkst jddtdddtddtddfksBt jddddtddtddfkslt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stt ddddtd
ddfkstt ddddddtd	dfkstt dddddtd
ddfksBtt ddtdddtddtddfksrtt ddddtddtddfkstttdd  tt fdd tt fdd d S )Nr   r   r   )stepsr   r3  r   rF  r   r  T)rP  r5  r  r6  r  r  r  r9  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   rQ  r   r   r   r   r   
  r   c                      s    d  ddS r%  rQ  r   r   r   r   r   
  r   c                   S   s   t dddtdddS )Nr   r   r0  r  r6  )r0   rf   r   r   r   r   r   
  r   c                      s   t  jddddS Nr   r   r   r6  )r   r0   r   r   r   r   r   
  r   c                      s   t  ddddS rR  rQ  r   r   r   r   r   
  r   )	r   r   r0   r   rf   rz   rE   rB   r  r   r   r   r   test_refine_root
  s0    """"$&0*$$&&0*rS  c                   C   s  t td d dkstt td d t ddks6tt td d t
 ddksTtt td d t t
 ddksvtt td d dddkstt td d dddkstt td d dddkstt td d dddkstt td d ddddkstt td d ddddks&tt td d ddddksFtt td d ddddksftt td d dkstt td d dt ddkstt td d dt ddkstt td d dt dt ddkstt td d dddks
tt td d dddks(tt td d t ddksHtt td d t
 ddkshtt td d t
 d t
 ddkstt td d t t d ddkstttd	d
  d S )Nr   rG  rH  )rD  rE  r3  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   r   rg   rd   rz   rE   r   r   r   r   test_count_roots
  s.    "    ""(  ((rU  c                      s   t dtd  dtd   dt  d   dtddks@t ddksRt ddksdttt fdd	 t td
 t d dttd td  d dkst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   rV  rf   r   rz   
IndexErrorrv   r   r   r   r   test_Poly_root  s    (rX  c                  C   s  t tdgkstt tdddgks(tt td dddgksBtt td dddgks\tt ttd t d  ttd t d ddgkstt ttd t d  ddttd t d ddfdgkstt td td t d  ttd t d ddddgkstt td td t d  ddttd t d ddfdgksTtdtd  d	td   d
t  d
 } td t d }t|   tddddgkstt|  t|dgkstd S )Nr   F)Zmultipler   r   rC  r   r   r   r   r   )r2   r   r   rv   r   rf   r  r   r   r   test_real_roots  s<    6 

  $"rY  c                  C   s   dt d  dt d   dt   d } t d t  d }t|  tddddgksTtt| t|dt|dt|dgkstd S )Nr   r   r   r   r   r   r   )r   r   	all_rootsrf   r   rv   r  r   r   r   test_all_roots2  s    $ r[  c                  C   s  t dt g kstt dt g ks,tt td d t ddgksNtt td d t dt dt gksxtt td d t } | ddgkstt td d t } | dt dt gkstt td d tdd t } | ddgkstt td d tdd t } | dt dt gks6tt td dt  t ddt  ddt  gksntt td dt  ttd ddt  ddt  gkstt dt d	  d
gkstttd t d dd} td}t| d d|t	j
ks
tt| d dks tt| d td
dks<tt| d d|t	j
ks\tt| d td
dksxtt| d d|t	j
kstt| d d|t	j
kstt| d d|t	j
kstt| d d|t	j
kstt| d d|t	j
ksttd}t| d d|t	jks@tt| d dksVtt| d td
dksrtt| d d|t	jkstt| d td
dkstt| d d|t	jkstt| d d|t	jkstt| d d|t	jkstt| d d|t	jks.tt| d d|t	jksNtttdd  ttdd  ttd d ddgkstttd d } | ddgkstttt dt gkstttdt  dt gkstttdd  t td d }|ddd | D ks&t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sttt d-td  d  d.kstd S )/Nr   r   r         r   r   r   r  r  g      r   nz1e-5ghW!'r   gJ5ogJ5o?gP?gg'r   gg'?z1e-6c                   S   s   t tt t S r   r   r   r   r3   r   r   r   r   r   n  r   ztest_nroots.<locals>.<lambda>c                   S   s   t tt  S r   r_  r   r   r   r   r   o  r   g       c                   S   s   t dS Nr   r3   r   r   r   r   r   y  r   c                 S   s   g | ]}| d qS r^  r]  )r   r   r   r   r   r  }  s     ztest_nroots.<locals>.<listcomp>r7  r  rB  i  r  i@  r   iV  r0  i  rC  i\ i ie z[-1.7 - 1.9*I, -1.7 + 1.9*I, -1.7 - 2.5*I, -1.7 + 2.5*I, -1.0*I, 1.0*I, -1.7*I, 1.7*I, -2.8*I, 2.8*I, -3.4*I, 3.4*I, 1.7 - 1.9*I, 1.7 + 1.9*I, 1.7 - 2.5*I, 1.7 + 2.5*I]gV瞯<z%[-31622776.6016838, 31622776.6016838])r   r   r3   r   rd   rf   rc   rn   Z
epsilon_eqrk   truerm   falserz   rG   r=   rE   rZ  str)rootsr7  r   r   r   r   test_nroots:  s    "*  8  
                ".




rf  c                  C   sh   t d dt d   dt d   t d  } t|  tjdtjdiksHtt| tjdtjdiksdtd S )NrC  r   r   r   )r   r   r4   rk   r  r   r   r   r   r   r   test_ground_roots  s    ( rg  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sjttt fdd tt fdd tt d| ksttt d|ksttt d|ksttt d|kstttd	d  d S )
Nr   r   r   c                      s
   t  dS r`  r5   r   r   r   r   r     r   z+test_nth_power_roots_poly.<locals>.<lambda>c                      s
   t  tS r   )r5   r   r   r   r   r   r     r   r   r  c                   S   s   t tt dttS r5  )r5   r   r   r   r   r   r   r     s
      )r   r5   r   rz   r  r.   r=   )Zf_2Zf_3Zf_4Zf_12r   r   r   test_nth_power_roots_poly  s    ri  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sdt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"  r=  r   Zr0r   r   r    s     
 z"test_same_root.<locals>.<listcomp>c                   S   s   t td tdddS Nr   r   r   )r   r   rO   	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   rM   rl  r   r   r   r   r     r   c                   S   s   t td d tdddS Nr   r   r   r   )r   r   rP   rl  r   r   r   r   r     r   c                   S   s$   t ttd  d tt dddS rm  )r   r   r   rN   rl  r   r   r   r   r     r   c                   S   s   t tt d tdddS rk  )r   r   r   rN   rl  r   r   r   r   r     r   )r   r   rl  ro   rd   rh   	enumeraterZ  r   rz   rE   rG   r=   r   r   rj  r   test_same_root  s&    $&ro  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stt td d td  ttddtdd   i} t| td kstd S )Nr   r   r3  r   )r`   r   rI  rq   r;   r   rf   r   r   r   r   test_torational_factor_list  s    .
4rp  c                  C   s  t ddkstt ddks tt ttks0tt ttks@tt ddksPtt dtdksbtt dtdksttd	td
  d	 d
t d
 d
t d
 df\} }}}dd | |||fD \}}}}| |d||fkstt | |fd||fkstt | |ftd||fkstt | |ftfd||fks2tt ||fd||fksNtt | |fddd||fksntt ||fddd||fksttd
 d
 ttd
  } t | | kstt | ddttd
 ksttd
 d
 ttd
  } t | | ks tt | ddttd
 kstt td
 d	 d td
 d fdtd
 d
fksRtt td
 t tt  dtt  td
 t  kstt td
 td
  tt  ttt kstt td
 td
  tt  ttt kstt td
 td
  tt  tt ks
tt td d td
 d  td
 t d td  ksDtt td d
 tj td
 d  td
 t d d
t d
  kstt td
t d
tt  d ttd  ttd kstt	td
 t
d
  t} t	tt
 t}t	tt
 tdd}t	dtdd}t | |fd||fks&t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st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stt	ttdd} t	dtdd}|  |dt	ttddt	dtddfksbt| j |ddt	ttddt	dtddfkst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tdt d	t  dtt d
    tt t t d
   } t | jdksRt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st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sxtt d
|	 d
|
 kstt d|	 d|
 kstt td
 d td  |	 td |
 kstt td
 d td  |	 td |
 k	st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	srtt d
| d
| k	stt d| d| k	stt td
 d td  | td | k	stt td
 d td  | td | k
sttd#dd$}t |dd%tjk
s&t|td
tjk
s>tt|tjk
sRttd&dd}t |d' d |d' d k
stt|d( |d) d |d*   d|d+  t  }t |tt|d( |d) d |d*    d|d+   t k
stt td
 d tt  tt kstd S ),Nr   r   r`  )r   r   r   r   r{  r   r|  r   r   r   c                 S   s   g | ]}t |tqS r   r   r  r   r   r   r    s     ztest_cancel.<locals>.<listcomp>Tr  F)r   r   r  r   r   r3  r  r0  rC  r   r  r   )includeg{Gzt?r   r:  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   )r6   r   r   rg   rq   r   rk   r  ro   r   r}   r   Zis_Mulrp   rf   rl   rr   NaNrI  rw   ru   rs   rd   )r   r   r   r   r  r  r  r  r	  p1p2Zp3Zp4rr  exprr   r   r   test_cancel  s    0   46,,*:D><8@ 
  8>"..:.. !"0Brw  c                     s  t td dt  d tdd   \} }|  ks6t|tjksDtt td dt  d tdd   \} }|   ks~t|tjkstt td d tdd t  tdd  tdd   \} }| t td dt  d tddkst|dkstt td d tdd t  tdd  tdd   \} }| t td dt  d	 tddksbt|dksptt tt tt t	t
 fd
d t tdd t	t
 fdd d S )Nr   r   r   rN   r   rO   r   r0  r7  c                      s      S r   )make_monic_over_integers_by_scaling_rootsr   r   r   r   r   q  r   z@test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>rR   c                      s      S r   rx  r   r   r   r   r   t  r   )r   r   ry  r   rN   r  rV  rk   r   rz   r  )r   r   r   r   r   .test_make_monic_over_integers_by_scaling_roots[  s(    2&2(rz  c                  C   s>   t td d } | jdd\}}|tjks.t|dks:td S )Nr   r   T)Zby_nameF)r   r   Zgalois_grouprY   ZD4r   )r   r  Zaltr   r   r   test_galois_groupw  s    r{  c                  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srtt| |t t||fkstt|}|| ||fksttdt  t ttdt tg}tt d td  t t t}tt| |dd||fsttt| |t tdd||fs tt|dd}t|| ||fsFt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t|| ||fks*tt| |d
dd d	ksFt|j| d
dd d	ksbt|	| dksvt|	| d d
ksttddgt dgd	fkstt
tdd  d S )Nr   r   r   r   Tr  rC  r   r   Fr  c                   S   s   t ddgS r   )r7   r   r   r   r   r     r   ztest_reduced.<locals>.<lambda>)r   r   r7   r   r8   reducer   r   rf   containsrz   r@   )r   r  r  r=  r  r   r   r   test_reduced~  s4    $"$pr~  c               
   C   s  t g tttg kstt td d td t td  gttdddtd  dtd  gks^t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st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t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stt td d td d gtd gkstt ttd dttd dgtd gkst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stt||tttddd	d\}}tdd t	||j
D |t|ddkst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stt | ttddtd dtd   td  dtd   tt dt  gkstt | dd	dtd dt  td dtd   tt dt  gkstt dgtdgks.tt td dt  gttdtd  dt  gksdtttdd  t td d td d gddtd gkstt td d td d gddtd gkstttdd  d S )Nr   r   r   r   rV   r   r   rX   Tr   r  r   r  rG  r   Fr   rC  )r   r   r  c                 S   s   g | ]\}}|| qS r   r   )r   r   r   r   r   r   r    s     z!test_groebner.<locals>.<listcomp>r   )r   rL   r   r   c                   S   s
   t dgS r   )r8   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  )r8   r   r   r   r   r   r   r     r   )r8   r   r   r   r   r   rj   r7   sumr   r  rz   r@   r  )r  r   r  r  r=  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stt|t|kst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st|t|kst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(t|t|ks<td S )(Nr   r   r   r   r  r   r   r   r   rC  r  r0  $   r     N   i  i   l   i   i  i8  i  r  r     i   r  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 r3  )r}   r~   r   r   r8   rW   rV   r   Zfglmr   r   r   )r  r  r
  r   r   r   	test_fglm  sl    p&..2^j








^0r  c                  C   s  t ttgttdkstt td td  gttdks:tt tttgtttdksVtt tttgttttdkstttt t tt t tt t g} t | tttdksttd dt t  d ttd  ttd   dtd  dtd   g} t | tttdks
td S )NTr   r   Fr   r0  )r:   r   r   r   r   r   )r  r   r   r   test_is_zero_dimensional  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stt|tdkstt|dkst|d |d kr|d jrt|d	 |d	 kr|d	 jrt|d |d kr|d jrt|d	d  |d	d  krHtd
d |d	d  D rLt|d d |d d krtdd |d	d  D rt|j	|kst|j
|kst|jt tfkst|jtkst|jtkst||kst|t|kst||kst|t|kst|g ks(tt| t tddd}|d |d krX|d js\t|d	 |d	 krz|d	 js~t|d |d kr|d jst|d	d  |d	d  krtdd |d	d  D st|d d |d d krtdd |d	d  D std S )Nr   rX   r   r   c                 S   s   g | ]}t |ttqS r   r8  r  r   r   r   r    s     z&test_GroebnerBasis.<locals>.<listcomp>r   Tr   c                 s   s   | ]}|j V  qd S r   r  r   r   r   r   r   r   !  s     z%test_GroebnerBasis.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r   "  s     r  c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r   7  s     c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r   8  s     )r   r   r8   r   r   r9   r   r  anyexprsr  r   r   rN   r   rX   r  r   )r  r  r  r  r   r   r   test_GroebnerBasis  s8    $2"::""":r  c                   C   st  t ttttkstt ttttks,tt tt ttt ttksLtt ttt tttt tttksxtt tt tdttt ttkstt ttt ttdtttt tttkstt tt dt td   d ttt dt td   d tttkstt dtt d  d tdtd  dt t  dtd   d ttksjtt ttt d  d tttd  dt t t  ttd   d tttkst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tt dtt d  t d tdtd  dt t  dtd   t d tttksvtt ttt d  t d tttd  dt t t  ttd   t d tttkst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:t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st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sBtt ttt t tttttt t tttksxtt tt d tttd dt t  td  ttt dkstt tt d tttd dt t  td  ttt dkstt dttdtksttt	dd	  t tt ttttt ttksJtt tt ttttt ttkspt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   r   r   r   r   rs   r   rN   rz   rC   r   r   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&tttjtt ks<tttdtdt ksVtttdtdt ksptttjdt dt kstttdtd tkstttdttdtt kstttdtd | kstttdt dkstttd td| kstttjtjtjks.tt	dddd}ttd|t d|ddks^tt
d|dd}ttj|d	d
t tj|ddkstttj|dd
t
dt tj|ddddkstd S )Nr   r   Fr  r   r\  r   r   T)clear)rb   r   ra   rk   r  r   ZNegativeOners   r  ri   rZ   )r   r   r}   r   r   r   test_keep_coeffg  s*    ""
r  c                   C   sD   t ttt tt t tks ttttt  tt t tks@td S r   )rd   r   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sXtd S )Nr   )r`   r.   r   rd   r   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sDtt|| | || | ksdtt|| | || | kst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   r6   r   )r  r/  r   r   r   r   test_noncommutative  s     r  c                   C   s   t ttd ttd   tt tddd ks2tt ttd tdtd  tt  d td kshtt tttd ks~tt ttdt d kstd S )Nr   r   rS   r   r   )r<   r   r   r   rq   r   rs   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,ttttt  dtd tt  dfgfksZtd S r!  )r-   r   r   r   r+   r   r   r   r   test_factor_terms  s    ,r  c                   C   s   t td d tdd ddddgks*tt td t d ttdd dgg ddggks^tt td t d tttdd dggg gdgdgggkstd S )Nr   r   rN   r   r   r   )r   r   as_listr   r   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&tt tdtt tttdttdfgfksZtd S r   )r-   rq   r   r   rs   r   r   r   r   test_issue_11198  s    &r  c                  C   s0   t tdt } |  tdt ks,td S )Nr  )r   rh   Zevalfr   r   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s4td S )Nr   r   rS   r   )r   rq   r   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sLtt tdtdd tdtdd tdtdd	 kstttddtd tddtd tdtd d ksttdtd dtd d
td kst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sPtt tddtd tddtd tdd kstt tdtd d tdtd d tdd kstt tdtd d tdtd d tdtd d gtdtdd kst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stttddtd tddtd tddtd ftddtd kst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sNtd S )NrC  r   r   r   r   r   r   r   r   r  r0  r  r  r  rB  /   r@  i  )r   rk   rq   rf   r   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std S )Nr   Tr!  r7  r   r   r0  r   r   r   r  )rl   rq   rf   r.   r   )r   rv  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 5 Q R X ttddJ || ||   krtt| d d t| d d ggksn tW 5 Q R X d S )Nr   r   F)Ztest_stacklevelr   )rl   r   r{   rt   r|   ry   r   )r   r   rr  r   r   r   test_issue_17988  s    (r  c                   C   s@   t dt dt  dt ks tt dt dt  dks<td S )Nr   r   r   r   )r6   rd   r   r   r   r   r   test_issue_18205  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svtd S )Nr   r   r   r   rC  )r   r+   r   )r   r  r   r   r   test_issue_8695  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   r9  rQ  r   r  r   r   r     r   z"test_issue_19113.<locals>.<lambda>c                      s   t  ddS )Nr   r   rT  r   r  r   r   r     r   c                      s   t  S r   )r2   r   r  r   r   r     r   c                      s   t  S r   ra  r   r  r   r   r     r   c                      s   t  S r   )r4   r   r  r   r   r     r   c                      s
   t  dS r5  rh  r   r  r   r   r     r   )rs   r   rz   rE   r   r   r  r   test_issue_19113  s    r  c                  C   s   dt d  dtd t  t  td  } t| tdddt tdt d  d  ksXtt t t  tt  t t  tt t  } t| tdt tt  t t t  kstd S )Nr   r   )r   rq   r   r.   r   rd   r   r   r   r   r   r   test_issue_19360  s    (0*r  c                  C   sB   t tt ttt} |  }| |ks*td| j|jks>t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   r   test_poly_copy_equals_original  s    
r  c                  C   sJ   t tt ttt} tt| }| |ks2td| j|jksFt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   )r   Zdeserializedr   r   r   &test_deserialized_poly_equals_original  s    
r  c                  C   s0   t ttd  td  t t} | t ks,td S r!  )r   r   rg   r   )r  r   r   r   test_issue_20389  s    r  c                  C   sL   ddl m}  | d\}}tdt| |  |d| }| tdksHtd S )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   rd   r   rk   r   )r  r   r  r   r   r   r   test_issue_20985  s    r  (L  __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<   Zsympy.polys.polyerrorsr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Zsympy.polys.polyclassesrJ   Zsympy.polys.fieldsrL   Zsympy.polys.domainsrM   rN   rO   rP   rQ   rR   rS   Zsympy.polys.domains.realfieldrT   Z sympy.polys.domains.complexfieldrU   Zsympy.polys.orderingsrV   rW   rX   Zsympy.combinatorics.galoisrY   Zsympy.core.addrZ   Zsympy.core.basicr[   Zsympy.core.containersr\   Zsympy.core.exprr]   Zsympy.core.functionr^   r_   r`   Zsympy.core.mulra   rb   Zsympy.core.numbersrc   rd   re   rf   rg   rh   Zsympy.core.powerri   Zsympy.core.relationalrj   Zsympy.core.singletonrk   r  rl   Z$sympy.functions.elementary.complexesrm   rn   Z&sympy.functions.elementary.exponentialro   Z%sympy.functions.elementary.hyperbolicrp   Z(sympy.functions.elementary.miscellaneousrq   Z$sympy.functions.elementary.piecewiserr   Z(sympy.functions.elementary.trigonometricrs   Zsympy.matrices.densert   Z"sympy.matrices.expressions.matexprru   Zsympy.polys.rootoftoolsrv   Zsympy.simplify.simplifyrw   Zsympy.utilities.iterablesrx   Zsympy.utilities.exceptionsry   Zsympy.testing.pytestrz   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(  r*  r-  r/  r2  r4  r6  r;  r>  r?  rA  rF  rH  rJ  rM  rO  rR  rT  rW  rX  rY  rZ  r\  r]  rb  rj  rk  rm  rn  rv  rx  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  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  rO  rS  rU  rX  rY  r[  rf  rg  ri  ro  rp  rw  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   <module>   s  <$ 4
-\S"A	 #+

	


7			



:

4
/
u

+







Q

#

? >q($N +0**,
	
		