o
    8Va                    @   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`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZtmuZumvZvmwZw ddlxmyZy ddlzm{Z{ ddl|m}Z} ddl~mZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZ ddl`mZmZ dd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFdG ZdHdI ZdJdK ZdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdXdY ZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc Zddde Zdfdg Zdhdi Zdjdk Zdldm Zdndo Zdpdq Zdrds Zdtdu Zdvdw Zdxdy Zdzd{ 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ӄ 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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 d0d1 Z!d2d3 Z"d4d5 Z#d6d7 Z$d8d9 Z%d:d; Z&d<d= Z'd>d? Z(d@dA Z)dBdC Z*dDdE Z+dFdG Z,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dS (T  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)SIntegerRationalFloatMulSymbolsqrt	Piecewise
DerivativeexpsintanhexpandooIpireimrootofEqTupleExprdiff)Add)_aresame)iterable)_keep_coeff)Pow)raiseswarns_deprecated_sympy)abcdpqtwxyz)MatrixSymbolMatrixc                 C   s.   t | |D ]\}}t|| dkr dS qdS )Ng|=FT)zipabs)rw   rx   uv r   B/usr/lib/python3/dist-packages/sympy/polys/tests/test_polytools.py_epsilon_eqH   s
   r   c                 C   s`   t | t |kr.t| r"t| t|kr tdd t| |D S dS t| to-| j|ddS dS )Nc                 s   s    | ]
\}}t ||V  qd S N)
_strict_eq).0ry   rz   r   r   r   	<genexpr>S   s    z_strict_eq.<locals>.<genexpr>FTstrict)typerr   lenallr   
isinstancer   eq)rw   rx   r   r   r   r   O   s   r   c                  C   s   t tt} t  | tt  W d    n1 sw   Y  t  | tt  W d    n1 s2w   Y  t  | tt  W d    d S 1 sLw   Y  d S r   )r   r   rv   rb   r{   r   r   r   test_Poly_mixed_operations\   s   
"r   c                  C   sl  t d} tjdddt| djt| d| dg| ksJ tjdddt| djt| d| dg| ks6J tjdddt| djt| d| dg| ksOJ tjdddt| djt| d| dg| kshJ tjdddttf| djt| d| d	g| dgg| ksJ tjdddtd
jttdtdgtksJ tjdddtddjttdtdgtksJ tjdddttdjttdtdgtksJ tjdddttdjttdtdgtksJ tjdddtd
jttdtdgtksJ tjdddtddjttdtdgtksJ tjdddttdjttdtdgtks8J tjdddttdjttdtdgtksRJ tjdt	titddtt	tt tddkslJ tjdtitddttt tddksJ tjddittfddttt ttddksJ tjdtitt
fddttt tt
ddksJ d S )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rL   r   F)r   Z	compositerS   r   r   rN   r   r   )rM   r   Z	from_dictr   reprJ   r   rN   rO   rc   r   Kr   r   r   test_Poly_from_dictf   s    0







r   c                  C   s  t d} tjddgt| djt| d| dg| ksJ tjddgt| djt| d| dg| ks4J tjddgtdjttdtdgtksKJ tjddgtddjttdtdgtkscJ tjddgttdjttdtdgtks{J tjddgttdjttdtdgtksJ tjd	d
gtdjttd
gtksJ tjd
d	gtdjttd
tdgtksJ t	t
dd  d S )Nr   r   r   r   r   r   Tr   r         ?        c                   S   s   t jg gttfdS )Nr   )r   	from_listr   r   r   r   r   r   <lambda>       z%test_Poly_from_list.<locals>.<lambda>)rM   r   r   r   r   rJ   rN   rO   rR   ru   r=   r   r   r   r   test_Poly_from_list   s   00.000(.r   c                      s  t td ttdt td tddt tt tttdtd t ks)J t j djt d dg ks>J t jtdjtddgtksOJ t jtdjtddgtks`J t jtdkskJ t jt djt d dg ksJ t jttdjtddgtksJ t jttdjtddgtksJ t jtdt td td	dksJ t	t
 fd
d t	t
fdd t	t
fdd t jttfdt td ttddksJ t jttftdt td ttddksJ t jttftdt td ttddksJ t jttfddt td ttddks,J td t ks:J t jtdjtddgtksLJ t	t
fdd t j djt d dg kskJ t jtdkswJ t jttdjtddgtksJ t	t
fdd t jt djt d dg ksJ td t ksJ t jtdjttdgtdtdggtksJ t jtdjttdgtdtdggtksJ t j djt dg d dgg ks	J t jtdt tt ttt dksJ t	t
fdd t jttt dt tt ttt dks?J t	t
fdd t jttt dt tt ttt dks`J t	t
fdd t jtdt tt ttt dks~J t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jttfdksJ t jttftdjttdgtdtdggtksJ t jttftdjttdgtdtdggtksJ t jttf djt dg d dgg ks1J t jttfdjttdgtdtdggtksNJ t jttftdjttdgtdtdggtkslJ t jttftdjttdgtdtdggtksJ t jttf djt dg d dgg ksJ t jttfddjttdgtdtdggtksJ t jttfddjttdgtdtdggtksJ d S )N   r   r   r   modulusr   r   r   ZZ[x]c                      s   t jt dS Nr   r   	from_polyr   r   )r   fr   r   r          z%test_Poly_from_poly.<locals>.<lambda>c                         t j ttdS r   r   r   r   rN   r   r   r   r   r      r   c                      r   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   c                      r   r   r   r   r   rO   r   r   r   r   r      r   c                      r   r   )r   r   r   rN   r   hr   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                         t j tddS Nr   r   )r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   c                      r   r   r   r   r   r   r   r      r   Tr   )r   r   rN   r   rM   r   r   rJ   rO   ru   rF   r   r   )r   r   r   r   r   test_Poly_from_poly   s   *"",$$$*




$,&. 
 
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s)J tjtd | djt| d| dg| ks@J tjtd t| djt| d| dg| ksXJ tjtd t| djt| d| dg| kspJ tjtt | djt| dg| d| d	gg| ksJ tjtt tt| djt| dg| d| d	gg| ksJ ttd jtddgt	ksJ ttd jtddgt	ksJ ttd tjtddgt	ksJ ttd tjtddgt	ksJ tjtd t	djtddgt	ksJ tjtd t	djtddgt	ksJ tjtd tt	djtddgt	ks-J tjtd tt	djtddgt	ksBJ tjtd ttt	djtdgdggt	ksZJ tjtd ttt	djtddggt	ksqJ d S )
Nc                   S   s   t tjS r   )r   	from_exprrY   Zeror   r   r   r   r         z%test_Poly_from_expr.<locals>.<lambda>c                   S   s   t tdS Nr   )r   r   rY   r   r   r   r   r     r   r   r   r   r   r   r   )
ru   rC   rM   r   r   r   r   rJ   r   rN   )F3r   r   r   test_Poly_from_expr  s&   ..008<""$$((**02r   c                  C   s  t t } t| td t| djt| td g| ksJ |  } t| td t| djt| td g| ks8J tt } t| td t| djt| td g| ksTJ |  } t| td t| djt| td g| kspJ t t} t| ddgt| djt| ddgg| ksJ |  } t| ddgt| djt| ddgg| ksJ tt} t| ddgt| djt| ddgg| ksJ |  } t| ddgt| djt| ddgg| ksJ t	t
} t| ddgt| djt| ddgg| ksJ d S )Nr   r   )rN   r   r   r   r   rJ   Z	get_fieldrO   Zold_poly_ringalgebraic_fieldrg   )Zdomr   r   r   test_poly_from_domain_element   s$   0000
00
00
4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sJ t	t
tttgt| ksJ t	tttgt| ksJ t	tttft| ksJ t	i ttt} | jtttfkr|  dksJ t	t	tt tt  tttt	tt tt  tksJ t	dtd  dt  d dd g dksJ t	dtd  dt  d dd g dks8J t	dtd  dt  d d d g d!ksQJ t td"d  t	dtd  d# ttdd#  d dd tdd#tdd#dgks}J tt	dtd  d# ttdd#  d d d g d$sJ t	d%td  d&t  d dd g dksJ t	d%td  d&t  d dd g dksJ t	d%td  d&t  d d d g d!ksJ t td'd  t	d(td  d)t  d dd td*d+td,d+dgksJ t	d(td  d)t  d d d g d-ks'J t	dddd.ttt	td t dt td   dt t  ttksLJ t	td d td/ ttks`J dtd#  td0  td  td  d1 } t	| td2d3d4t	dtd#  td0  td  td  d td2d3d4ksJ t	| td2d5d4t	dtd#  d6td0   td  d6td   d td2d5d4ksJ tt	td t d7  tsJ tt	td t t d7  tsJ d S )8Nc                   S   s   t td ttS Nr   r   r   r   r   r   r   r   :  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   <      c                   S   s   t tt tttt dS r   r   r   r   r   r   r   =  r   c                   S   s   t ttddS )NT)	symmetricr   r   r   r   r   r   ?  r   c                   S   s   t td tdtdS )Nr   r   )r   r   r   r   rO   r   r   r   r   r   @  r   c                   S      t td ttddS )Nr   T)r   gaussianr   r   rN   r   r   r   r   r   B  r   c                   S      t td tdddS )Nr   r   T)r   r   r   r   r   r   r   r   C  r   c                   S   s   t td tttdgdS )Nr   r   r   	extension)r   r   rN   r_   r   r   r   r   r   E      c                   S   s   t td tdtdgdS )Nr   r   r   r   )r   r   r_   r   r   r   r   r   F  r   c                   S   r   )Nr   Tr   r   r   r   r   r   r   H  r   c                   S   r   )Nr   r   Tr   r   r   r   r   r   r   I  r   c                   S   r   )Nr   Tr   greedyr   r   r   r   r   r   K  r   c                   S   r   )Nr   Tr   rL   r   r   r   r   r   r   L  r   c                   S   r   )Nr   Fr   r   r   r   r   r   r   N  r   c                   S   r   )Nr   Fr   r   r   r   r   r   r   O  r   c                   S   r   )Nr   r   rW   )r   orderr   r   r   r   r   r   Q  r   c                   S   s   t td tddS )Nr   rW   r   r   r   r   r   r   r   R      c                   S   s   t dddS )Nr   r   r   r   r   r   r   r   r   T  r   c                   S      t ddgS Nr   r   r   r   r   r   r   r   U  r   c                   S      t dS )Nr   r   r   r   r   r   r   r   V      c                   S   r   r   r   r   r   r   r   r   X  r   r   )r   r   r   r   r   r   rN   r   )r   r   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   r[   r   r   r   r   r   k  s   * r   )g333333?g?r   r   r   c                   S   s    t dtd  dt  d ddS )N@r    @r   rN   r   r   r   r   r   r   r   v       r   r      
      )r   r   r   )r   r   r   r   r      i    Tr   r   F   r   )ru   rD   rH   NotImplementedErrorrC   rw   r   rx   ry   r   iterr   r   r   as_expr
all_coeffsrF   r[   r   rg   
get_domainrO   r   r   rT   rU   r   r   r   r   test_Poly__new__9  s    :222"
2
22

@2.
((,
2
$,r   c                   C   s*   t td d jtd d tfksJ d S r   )r   r   argsr   r   r   r   test_Poly__args     *r  c                   C   s  t tt tt  tjtfksJ t tt tt  tjtfks"J t tt tt  tjtfks3J t tt tt  ttjttfksFJ t tt tt  ttjttfksYJ t tt tt  tttjtttfksnJ t tt tt  tttjtttfksJ t tt tt  tttjtttfksJ t tt tt  jtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  tttddjtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfks'J t tt tt  ddjtttfks<J t tt tt  tdjtttfksQJ t tt tt  tdjtttfksfJ t tt tt  tdjtttfks{J t tt tt  tttddjtttfksJ t tt tt  dd	d
jtttfksJ t tt tt  ddd
jtttfksJ d S )Nz	x > p > q)sortz	p > x > qz	p > q > xr   wrtr{   r|   zq > x)r  r  zp > x)r   r   r{   r|   r   r   r   r   r   test_Poly__gens  s,   """&&***$(((.******0,0r  c                   C   @   t tjt dttdksJ t td jt dttdksJ d S )Nr   r   r   )r   r   ZzerorN   rO   r   r   r   r   test_Poly_zero     $r	  c                   C   r  )Nr   r   r   )r   r   ZonerN   rO   r   r   r   r   test_Poly_one  r
  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s:J tttddtttdddd  t|dgg g|t|d|dgg|fkseJ tttttttdddd  t| d| dgg| t| dgg g| fksJ tttddttttdd  t| dgg g| t| d| dgg| fksJ ttd tttd tdd  tddgttddgtfksJ 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J ttd tttd td	d
dd  tddgt	tddgt	fks(J 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sQJ 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s|J 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sJ 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sJ 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sJ 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s&J 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sPJ 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s|J 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sJ 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sJ 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sJ 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s!J 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sHJ 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sqJ 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sJ 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sJ 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sJ 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J 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sDJ 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snJ 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sJ ttd t
 ttd
ttd td tddttd t
 tdd
ttd td tdd
fksJ 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J ttt tdd
ttt t tdd
dd  t||dg| t|| |dg| fks<J t tdd  ttd td  t tdd
}ttd td  t tdd
}||dd  |j|jfkssJ 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     s   & zQQ(x)zQQ[x])ru   rA   rM   r   r   r  r   rJ   rN   rO   rg   rP   Zunifyr_   rL   rw   rx   Z	to_domainrF   r}   r   )r   ZF5FABr   r   r   r   r   test_Poly__unify  sb   $(
$(
TTF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   s0  t td d jthksJ t td tt  jttthks J t td tt  tjttthks3J t td ttt  jttthksGJ t td ttt  tjttthks\J t td ttt  ttdjttthkssJ t dt td  tttjthksJ t ttt tjtthksJ d S Nr   r   r   )r   r   free_symbolsr   r   rc   rS   r   r   r   r   test_Poly_free_symbols  s   $&(*.&$r  c                   C   s   t td d jt ksJ t td tt  jt ksJ t td tt  tjtthks0J t td ttt  jt ksBJ t td ttt  tjtthksVJ t td ttt  ttdjtthkslJ d S r  )r   r   r  setr   r   rc   rS   r   r   r   r   test_PurePoly_free_symbols  s    $$(0r  c                  C   s@  t ttt ttkdu sJ t tttdt ttkdu sJ t ttt tttdkdu s.J t tttt dt ttkdu s@J t ttt tttt dkdu sRJ t tt ttt ttkdu scJ t tttt ttkdu srJ t ttt tttkdu sJ t td d tt td d tkdu sJ t td d tt td d tkdu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ td}t |d td  t	d  td t	  t	dd} t |d td  t	d  td t	  t	d	d}| |kdu sJ d S )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))
r   r   rO   rN   rw   r   r   ner^   r}   )r   r   r  r   r   r   test_Poly__eq__  s(     $$",,..r  c                  C   s<  t ttt ttkdu sJ t tttdt ttkdu sJ t ttt tttdkdu s.J t tttt dt ttkdu s@J t ttt tttt dkdu sRJ t tt ttt ttkdu scJ t tttt ttkdu srJ t ttt tttkdu sJ t td d tt td d tkdu sJ t td d tt td d tkdu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ d S )NTr   Fr   r   r   )r   r   rO   rN   rw   r   r   r  r   r   r   r   r   test_PurePoly__eq__1  s,     $$",,r  c                   C   sH   t tttd d tdu sJ t tttd d tdu s"J d S )Nr   r   T)r   r   r   r   r   r   r   r   test_PurePoly_PolyT  s   "&r  c                   C   s   t dt  tksJ t dt dd tksJ t dt dd tks(J t td  tks4J ttdd  t td dd tksIJ tt dt  tsVJ d S )Nr   rN   r   rO   c                   S   s   t td ddS )Nr   rN   r   r   r   r   r   r   r   a  r   z&test_Poly_get_domain.<locals>.<lambda>皙?)	r   r   r   rN   rO   ru   rF   r   rT   r   r   r   r   test_Poly_get_domainY  s   r  c                   C   sJ  t dt d tt dt d ksJ t dt d dt dt d ks*J t dt d tt dt d ddksAJ t dt d dt dt d ddksXJ t tddt tdd dt dt d	 kssJ t dt d	 dt tddt tdd ksJ ttd
d  ttdd  ttdd  d S )Nr   r   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   q      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  r"  c                   S   s   t tt tttt S r   )r   r   r   r!  rN   r   r   r   r   r   t  r   )	r   r   r!  rN   rO   r[   ru   rF   rD   r   r   r   r   test_Poly_set_domaing  s   **..66r#  c                   C   s2   t td d dd dksJ ttdd  d S )Nr   r   r   c                   S   s   t td d  S r   )r   r   get_modulusr   r   r   r   r   y  r   z'test_Poly_get_modulus.<locals>.<lambda>)r   r   r$  ru   rE   r   r   r   r   test_Poly_get_modulusw  s    r%  c                   C   s   t td d dddt td d ddksJ t td d dddt td d ddks2J t td d dt td d ddksIJ ttdd  d S )Nr   r   r   r   r   c                   S   s   t td d dS r   )r   r   set_modulusr   r   r   r   r     r"  z'test_Poly_set_modulus.<locals>.<lambda>)r   r   r&  ru   rF   r   r   r   r   test_Poly_set_modulus|  s   .r'  c                   C   s&   t td dt td ksJ d S )Nr   r   r   )r   r   Z
add_groundr   r   r   r   test_Poly_add_ground     &r(  c                   C   s&   t td dt td ksJ d S Nr   r   )r   r   Z
sub_groundr   r   r   r   test_Poly_sub_ground  r)  r+  c                   C   s*   t td dt dt d ksJ d S r*  )r   r   Z
mul_groundr   r   r   r   test_Poly_mul_ground  r  r,  c                   C   sP   t dt d dt td ksJ t dt d dt td ks&J d S )Nr   r   r   r   )r   r   Z
quo_groundr   r   r   r   test_Poly_quo_ground  s   &*r-  c                   C   s8   t dt d dt td ksJ ttdd  d S )Nr   r   c                   S   s   t dt d dS Nr   r   )r   r   exquo_groundr   r   r   r   r     r"  z(test_Poly_exquo_ground.<locals>.<lambda>)r   r   r/  ru   r>   r   r   r   r   test_Poly_exquo_ground  s   &r0  c                   C   sJ   t t d t tt t d t  kr t td tks#J  J d S r   )r   r   r   r   r   r   r   test_Poly_abs  s   Jr1  c                   C   sH   t t d t t t d t   krt td tks"J  J d S r   )r   r   negr   r   r   r   test_Poly_neg  s   Hr3  c                   C   s|  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t td tksJ t  t dttt  W d    n1 sw   Y  t ttd t td tksJ dt tt t td tksJ d S Nr   r   )r   r   addr   rv   rc   r   r   r   r   test_Poly_add     $"$&((  $r6  c                   C   s|  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t dt tksJ t  t dttt  W d    n1 sw   Y  t ttd t td tksJ dt tt t dt tksJ d S )Nr   r   r   )r   r   subr   rv   rc   r   r   r   r   test_Poly_sub  r7  r9  c                   C   sx  t dtt dtt dtksJ t dtt dt t dtks#J t dtt dtt dtks5J t dttt dt t dttksHJ t dtt dttt dttks\J t dttt dtt t dttkspJ t dtt t ttks~J t  t dttt  W d    n1 sw   Y  t ttd t dt tksJ dt tt t dt tksJ d S )Nr   r   r      r   )r   r   mulr   rv   rc   r   r   r   r   test_Poly_mul  s   $"$&(( $r<  c                   C   s   t tt t td tddksJ tt t t td tddks"J dt t t dt tddks3J tdt t t dt tddksFJ t ttd t dt tddksYJ d S )Nr   rN   r   )r   r   rY   r   r   r   r   test_issue_13079  s
   """&*r>  c                   C   s4   t tt tt t td td  ttksJ d S Nr   )r   r   r   Zsqrr   r   r   r   test_Poly_sqr  s   4r@  c                   C   s   t ttdt td tksJ t tttdt td tks$J t dt ttdt dtd  ttks;J t dt tttdt dtd  ttksTJ t dt t ttd t dtd  td  ttkspJ ttdd	  ttd
d	  d S )Nr   r   r      r   r   iW  c                   S   s   t tt d ttd S )Nr   r   r   r   r   r   r   r   r   r     r   ztest_Poly_pow.<locals>.<lambda>c                   S   s   t tt d ttt S r   rB  r   r   r   r   r     r   )r   r   powrZ   r   ru   	TypeErrorr   r   r   r   test_Poly_pow  s   "&.28rE  c                  C   s6  t td t t} }|t dt}}t| |||fksJ | | |ks&J | | |ks.J t| t||fks9J | t |ksAJ | t |ksIJ t dtt dt}}td|||fks_J d| |ksgJ d| |ksoJ t tt t dks{J t td t t tksJ t tt td  dt ksJ d S )Nr   r   r   )r   r   divmod)r   r   r|   rr   r   r   test_Poly_divmod  s   $rH  c                   C   s  t tt ttt tt ttkdu sJ t tt tt tt ttkdu s'J t tt ttt tt tkdu s:J t tt tt tt tkdu sLJ t tt tt tt tkdu s^J t tt tttt kdu snJ t tt ttt kdu s}J t tt tttt kdu sJ t tt ttt kdu sJ t tt ttt kdu sJ t tt ttt tt ttkdu sJ t tt tt tt ttkdu sJ t tt ttt tt tkdu sJ t tt tt tt tkdu sJ t tt tt tt tkdu s
J t tt tttt kdu sJ t tt ttt kdu s+J t tt tttt kdu s<J t tt ttt kdu sLJ t tt ttt kdu s\J t ttttkdu sjJ t ttttkdu sxJ d S )NTF)r   r   r   rc   r   r   r   r   test_Poly_eq_ne  s,   (&&$$  (&&$&" "   rI  c                   C   s0   t tdtdusJ t tdtdusJ d S )Nr   Tr   F)boolr   r   r   r   r   r   test_Poly_nonzero#  s   rK  c                   C   s  t dtjdu s
J t dtjdu sJ t dtjdu sJ t dtjdu s(J t td tjdu s4J t td d tjdu sBJ t td tjdu sNJ t dt d tjdu s\J t dt d tjdu sjJ t dt d tjdu sxJ t dtjdu sJ t ttjdu sJ t tt t	 d j
du sJ t tt t	 d j
du sJ t tt t	 d jdu sJ t tt t	 d jdu sJ t tt jdu sJ t tt d jdu sJ t td tt  jdu sJ t td tt  jdu sJ t tjdu sJ t tt jdu sJ t tt jdu s J t tjdu s*J t td td	  td
  td  td  td  d jdu sLJ t td td	  td
  td  td  td  d jdu snJ d S )Nr   Tr   Fr   r   r   rA     r   r:     )r   r   is_zerois_oneZis_sqfZis_monicZis_primitiveZ	is_groundr   r   Z	is_linearZis_quadraticZis_monomialZis_homogeneousZis_univariateZis_multivariateZis_cyclotomicr   r   r   r   test_Poly_properties(  sD   2
2rP  c                   C   s   t td t d jdu sJ t td dt  d jdu s J t dt d ddjdu s/J t dtd  dt  d ddjdu sDJ d S )	Nr   r   TFr   r      r   )r   r   Zis_irreducibler   r   r   r   test_Poly_is_irreducibleS  s   ".rR  c                   C   s   t td tddksJ t td ttt td ks J t td ttt td ks2J t tt ttttd ksCJ t tt ttttd ksTJ d S )Nr   r   r   )r   r   subsr   r   r   r   r   test_Poly_subs[  s
   $$"&rT  c                   C   s  t td tt td ksJ t td tt td ks"J ttdd  t td ttt td ks;J t td ttt td ksMJ t tt ttt tt ks_J t tt ttt tt ttkssJ t tt ttt tt ksJ t tt ttt tt ttksJ t tt ttt tt ksJ ttdd  t tt tttt tt tksJ t tt tttt tt tksJ ttdd  ttdd  d S )Nr   c                   S   s   t tt tS r   )r   r   r   replacer   r   r   r   r   r   i  r   z#test_Poly_replace.<locals>.<lambda>c                   S   s   t tt ttS r   r   r   r   rU  r   r   r   r   r   u  r   c                   S   s   t tt tttS r   rV  r   r   r   r   r   z  r"  c                   S   s   t tt tttS r   rV  r   r   r   r   r   {  r"  )r   r   rU  r   ru   rE   r   r}   r   r   r   r   test_Poly_replacee  s   ""$$$($($((rW  c                   C   s  t tdd  ttt ttttttt ttksJ ttt ttttttt ttks3J ttt ttttttt ttksIJ ttt ttttttt ttks_J ttt ttjtdttt ttksuJ ttt ttjtdttt ttksJ d S )Nc                   S   s   t tt ttS r   )r   r   r   reorderr   r   r   r   r   r     r   z#test_Poly_reorder.<locals>.<lambda>r  )ru   rE   r   r   r   rX  r   r   r   r   test_Poly_reorder~  s   ,,,,,0rY  c                  C   s   t td ttd   tttt} |  td ttd   kr'| jttfks)J t tt t tttdt tt t ttksCJ ttdd  ttdd  d S )Nr   r   c                   S   s"   t ttd  td  tttS r?  r   r   r   ltrimr   r   r   r   r        " z!test_Poly_ltrim.<locals>.<lambda>c                   S   s   t tt t ttdS )Nr   rZ  r   r   r   r   r     r   )	r   r   r   r   r[  r   r   ru   rE   r   r   r   r   test_Poly_ltrim  s
   $.4r]  c                   C   s^   t tt d tttttdu sJ t tt t tttttdu s&J ttdd  d S )Nr   TFc                   S   s"   t ttd  td  tttS r?  )r   r   r   has_only_gensr}   r   r   r   r   r     r\  z)test_Poly_has_only_gens.<locals>.<lambda>)r   r   r   r   r^  ru   rD   r   r   r   r   test_Poly_has_only_gens  s   &&r_  c                   C   s   t dt d dd t dt d ddksJ t dt d dd t dt d ddks0J ttdd  ttdd  d S )	Nr   r   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   r`  r   r   r   r   r     r   )r   r   ra  ru   rF   rG   r   r   r   r   test_Poly_to_ring  s   00rb  c                   C   s   t dt d dd t dt d ddksJ t dt d dd t dt d ddks0J t td d dd t td d ddksHJ t dt d dd t dt d ddks`J t dt d	  t dt d	 kstJ d S )
Nr   r   rN   r   rO   r   r   r   r   )r   r   Zto_fieldr   r   r   r   test_Poly_to_field  s
   0000,rc  c                   C   sd   t dt  t dt ksJ t td  t td ks J t dt  t td ks0J d S )Nr   r   r   )r   r   Zto_exactr   r   r   r   test_Poly_to_exact  s     $rd  c                  C   s   t td d ttt d} |  t td d tddksJ | jddt td d tddks1J t dtt t dttksAJ d S )	Nr   r   r   rN   TrK   rO   r   )r   r   rO   r   Zretractr   r   r   r   test_Poly_retract  s   "&$re  c                  C   s  t td dtd   dt  d } | ddt dtksJ | ddt dtks,J | ddt dt d tks=J | ddt dtd  dt  d tksTJ | ddt td dtd   dt  d tksoJ | tddt dtks}J | tddt dtksJ | tddt dt d tksJ | tddt dtd  dt  d tksJ | tddt td dtd   dt  d tksJ d S )Nr   r   r   r   r   )r   r   slicer   r   r   r   test_Poly_slice  s   $".6$0<rg  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g dksWJ t ttd  dtd  td   dddgksrJ t ttd  dtd  td   d	ddgksJ d S )
Nr   r   r   r   r   r   r   r   r   rV   rW   )r   r   Zcoeffsr   r   r   r   r   test_Poly_coeffs     "..6:ri  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g d	ksWJ t ttd  dtd  td
   dddgksrJ t ttd  dtd  td
   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )r   r   r   r   rV   r   r   r   r   rW   )r   r   Zmonomsr   r   r   r   r   test_Poly_monoms  rj  rp  c                   C   s  t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd	  dt  d t g d
ksWJ t ttd  dtd  td   dddgksrJ t ttd  dtd  td   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )rl  r   rs  rr  r   )rm  r   rs  rr  r   rV   rn  r   ro  r   rW   )r   r   Ztermsr   r   r   r   r   test_Poly_terms  s   "..rx  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g dksWJ d S )Nr   r   r   r   rh  r   )r   r   r   r   r   )r   r   r   r   r   r   r   test_Poly_all_coeffs  
   ".2ry  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd  dt  d t g d	ksWJ d S )
Nr   r   r   r   r   r   rk  r   )rm  r   rl  r   r   )r   r   Z
all_monomsr   r   r   r   test_Poly_all_monoms  rz  r|  c                   C   s   t dt dgksJ t dt dgksJ t dt d t ddgks)J t dtd  dt  d t g dks@J t dtd	  dt  d t g d
ksWJ d S )Nr   rq  r   rr  r   rs  r   rt  r   )ru  )r{  r   )rl  r   rs  rr  )r   r   Z	all_termsr   r   r   r   test_Poly_all_terms	  s   "  r}  c                  C   sh   t td dt  d } t td dt  d }dd }| ||ks%J dd }| ||ks2J d S )Nr      i  r   c                 S   s   | \}|dd|   S Nr   r   r   monomcoeffkr   r   r   func  s   z test_Poly_termwise.<locals>.funcc                 S   s   | \}|f|dd|   fS r  r   r  r   r   r   r    s   )r   r   Ztermwise)r   r   r  r   r   r   test_Poly_termwise  s   r  c                   C   s   t dt dksJ t dt dksJ t tt dks!J t td t dks.J t td d t dks=J t td t d t dksNJ d S )Nr   r   r   r   )r   r   lengthr   r   r   r   test_Poly_length&  s   &r  c                   C   s   t dt i ksJ t dttt i ksJ t dt ddiks%J t dttt ddiks4J t td d t dddksFJ t td d ttt dddksZJ t dtd  t td  d	t t  d
t t   dd	d
dks~J d S )Nr   r   r   r   r   r   r   r   )rl  r   ))r   r   r   r  r   r   )r   r   r   r   r   r   r   r   r   )r   r   Zas_dictr   r   r   r   r   r   test_Poly_as_dict0  s   $(8r  c                      s  t dt dksJ t dttt dksJ t dt dks#J t dttt dks0J t td d t td d ksCJ t td d ttt td d ksXJ t dtd  t td  dt t  dt t   dtd  t td  dt t  dt t  ksJ t td dt td   t tt   t td  dt td   ksJ  tdidt dtd   ksJ  td	id
dt  td  ksJ  tdtd	idksJ  dd	dksJ tt fdd d S )Nr   r   r   r   r   r      r   rM  iH   i{  c                      s     tdiS r   )r   r   r   r   r   r   r   U  r   z#test_Poly_as_expr.<locals>.<lambda>)r   r   r   r   r   ru   rD   r   r   r   r   test_Poly_as_expr>  s$   &*.2$*&&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s6J d S )Nr      Tr   rA  r   r   iB  r:  iAF rO   r   )r   r   rg   Zliftr   r   r   r   test_Poly_liftX  s
   $8r  c                   C   s   t dt dt dtfksJ t dt dt dtfks J t tt dt ttfks0J t td t dt ttfksBJ t td t dt ttfksTJ t td t td  td	 td    d
t tt t td t  fks|J d S )Nr   r   r   r   rl  r  )r  rQ  r   )r   r   rQ  )r   r   Zdeflater   r   r   r   r   r   test_Poly_deflate^  s      $$""r  c                  C   s   t td t ttd   tt  d t} |  t td t ttd   tt  d ttks1J | jddt td t ttd   tt  d ttksOJ d S )Nr   r   r   T)Zfront)r   r   r   Zinjectr   r   r   r   test_Poly_injectj  s   *8@r  c               	   C   s  t td t ttd   tt  d tt} | tt ttd  td t t  d tddks2J | tt ttd  td t t  d tddksNJ tt t t t }t |ttttt}|tt |ttttddksrJ |ttt |tttddksJ |tttt |ttddksJ |tt |ttttd	dksJ |ttt |tttd
dksJ |tttt |ttddksJ ttdd  tt	dd  d S )Nr   r   r   r   r   ZZ[y]zZZ[x, y]zZZ[x, y, z]zZZ[w]zZZ[t, w]zZZ[z, t, w]c                   S   s   t tt tttt dtS r   )r   r   r   rN   r   ejectr   r   r   r   r     s    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~   ru   rG   r   )r   exr   r   r   r   test_Poly_ejectq  s   ,88""""""r  c                   C   sj   t ttt t ttksJ t tt tt t tt ttks#J t dtt t dttks3J d S r   )r   r   r   Zexcluder   r   r   r   test_Poly_exclude  s   ($r  c                   C   s  t dttddksJ t dttddksJ t dttddks'J t dttddks4J ttdd  ttdd  t dtttdksOJ t dtttdks\J t dttddksiJ t dttd	dksvJ ttd
d  ttdd  d S )Nr   r=  r   r   c                   S      t dttdS )Nr   r   r   r   _gen_to_levelr   r   r   r   r     r   z)test_Poly__gen_to_level.<locals>.<lambda>c                   S   r  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   r  )Nr   r   r  r   r   r   r   r     r   )r   r   r   r  ru   rE   r   r   r   r   test_Poly__gen_to_level  s   r  c                   C   s$  t dt t u sJ t dt dksJ t tt dks"J t dtjddt u s0J t dtjdddks=J t ttjdddksJJ t dtjtdt u sXJ t dtjtddkseJ t ttjtddksrJ t dtjddt u sJ t dtjdddksJ t ttjdddksJ ttdd  ttdd  ttdd  t dtt dksJ t d	t tt dksJ t tt tt dksJ t dttjtddksJ t d	t ttjtddksJ t tt ttjtddksJ t dttjtddksJ t d	t ttjtddks&J t tt ttjtddks7J tdtt u sBJ tdtdksLJ tttdksVJ tttd	  tdksdJ tttd	  td	ksrJ tttd	  tdksJ ttdksJ tt	d
d  tt	dd  ttdd  ttdd  tt dttt u sJ tt dttdksJ tt td	 td  tdksJ tt td	 td  ttddksJ tt td	 td  ttdksJ tt td	 td  td  ttdksJ d S )Nr   r   genr   c                   S   s   t dtjddS Nr   r  r   r   r   r   r   r   r   r     r   z"test_Poly_degree.<locals>.<lambda>c                   S   s   t dtjtdS r  )r   r   r   r   r   r   r   r   r     r   c                   S   s   t dtjddS )Nr   r   r  r  r   r   r   r   r     r   r   c                   S   s   t td td  S 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        
 c                   S   s   t td td d  tS r  r  r   r   r   r   r     r   r   r   )
r   r   r   rf   ru   rE   r   r   rh   rD  r   r   r   r   test_Poly_degree  sR    """$(&2r  c                   C   s&  t dt t fksJ t dtt t t fksJ t dttt t t t fks0J t dt dks;J t dtt dksGJ t dttt dksTJ t td t td td   d  dkslJ tdtdksuJ tttd	ks~J tttd  d
ksJ ttdd  d S )Nr   r   r   r   r  r   r   )r   r   r   r   r   c                   S   r   r   )r   r   r   r   r   r     r   z'test_Poly_degree_list.<locals>.<lambda>)r   r   r   rf   r   r   ru   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sJ t td td   dks(J t tt t td   dks:J t td t d  dksJJ ttt td  dksXJ ttt td  ttdkshJ tddkspJ tt td td  td  dksJ tt td td  td  tdksJ tt td td  td  ttdksJ tt td tt t  td td   td  ttdksJ d S )	Nr   r   r   r   r   r   	   r   )r   r   r   r   r   r   r   r   r   test_Poly_total_degree  s   0 $  (*,Dr  c                   C   s   t td t tt td tt  ksJ t tt tt tt tttks+J t ttd  tt tt td  ksBJ d S r?  )r   r   r   Z
homogenizer   r   r   r   r   test_Poly_homogenize  s   .(2r  c                   C   s  t dtt t u sJ t dtt dksJ t ttt dks%J t tt tt dks3J t td tt d u sAJ t tt t tt d u sQJ t td dtd  td   dt td    dksoJ t td dtd  td   dt td    d u sJ d S )Nr   r   r   r   r   r  r   )r   r   r   Zhomogeneous_orderrf   r   r   r   r   test_Poly_homogeneous_order  s    <@r  c                   C   s  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   ddks@J t ttd  dtd  td   ddksYJ tttd  dtd  td   dddksqJ tttd  dtd  td   dddksJ d S )	Nr   r   r   r   r   rV   rW   r   )r   r   r	   r   r   r   r   r   test_Poly_LC	  s   "2204r  c                   C   sR   t dt dksJ t dt dksJ t dtd  t t dks'J d S )Nr   r   r   )r   r   ZTCr   r   r   r   test_Poly_TC  s   &r  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   ddks@J t ttd  dtd  td   ddksYJ d S )Nr   r   r   r   r   rV   rW   )r   r   ZECr   r   r   r   r   test_Poly_EC  
   "26r  c                      s  t dtddksJ t dttdksJ t dtddks$J t dttdks0J t td tddks>J t td ttd dksNJ t td ttd dks^J t td ttd dksnJ t dt td  d ttddksJ t dt td  d ttttd  dksJ t dt t td d	t  tt  td	ksJ  tdksJ  tt dtd ksJ   tdt td d	 ksJ tt fd
d tt	dd  tt	dd  tt	dd  d S )Nr   r   r:  r   r  r   r         c                      s
     tS r   )r  r   r   r   r   r   r   :  r  z!test_Poly_coeff.<locals>.<lambda>c                   S   s   t td dS )Nr   r   r   r   coeff_monomialr   r   r   r   r   <  r   c                   S   s   t td dt S Nr   r   r  r   r   r   r   r   =  r"  c                   S   s   t td dt t S r  )r   r   r  r   r   r   r   r   r   >  r   )
r   r   r  r   rb   r   r  ru   r   
ValueErrorr   r   r   r   test_Poly_coeff$  s&      *2$&r  c                   C   s:  t dtddksJ t dtddksJ t dtddks$J t dtddks0J t td tddks>J t td tddksLJ t td tddksZJ t td tddkshJ t dt td  d ttdddks~J t dt td  d ttdddksJ ttdd	  d S )
Nr   r   r:  r   r  r   r   c                   S   s   t tt d ttdS r   )r   r   r   nthr   r   r   r   r   P  r   ztest_Poly_nth.<locals>.<lambda>)r   r   r  r   ru   r  r   r   r   r   test_Poly_nthA  s   ,,r  c                   C   s*  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   dd	ks@J t ttd  dtd  td   d
dksYJ tttd  dtd  td   ddtd td  kswJ tttd  dtd  td   d
dttd  ksJ d S )Nr   r   r   r   rl  r   r   rV   rn  rW   ro  r   )r   r   r
   r   r   r   r   r   test_Poly_LMS  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s,J | j|dd	ks6J d S )
Nr   r   r   c                 S   s   t t| S r   )tuplereversed)r  r   r   r   r   a  r   z+test_Poly_LM_custom_order.<locals>.<lambda>rV   r   )r   r   r   r  )r   r   r   r   r
   )r   Zrev_lexr   r   r   test_Poly_LM_custom_order_  s   <r  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   dd	ks@J t ttd  dtd  td   d
dksYJ d S )Nr   r   r   r   r   r   r   rV   ro  rW   rn  )r   r   ZEMr   r   r   r   r   test_Poly_EMg  r  r  c                   C   s.  t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   d	d
ks@J t ttd  dtd  td   ddksYJ tttd  dtd  td   d	ddtd  td  ksyJ tttd  dtd  td   ddttd  ksJ d S )Nr   rq  r   rr  r   )rl  r   r   r   rV   rv  rW   rw  r   )r   r   r   r   r   r   r   r   test_Poly_LTp  s   "22@<r  c                   C   s   t dt dksJ t dt dksJ t dtd  t t dks'J t ttd  dtd  td   d	d
ks@J t ttd  dtd  td   ddksYJ d S )Nr   rq  r   rr  r   )r   r   r   r   rV   rw  rW   rv  )r   r   ZETr   r   r   r   r   test_Poly_ET|  r  r  c                   C   F   t dt dksJ t dt dksJ t dt dks!J d S Nr   r   r   )r   r   Zmax_normr   r   r   r   test_Poly_max_norm     r  c                   C   r  r  )r   r   Zl1_normr   r   r   r   test_Poly_l1_norm  r  r  c                  C   s  t td t \} }| dkr |t td tddkr | tks"J t td d t \} }| dkrD|t td tddkrD| tksFJ t td d tjdd\} }| dkrj|t td tddkrj| tkslJ t tt d tjdd\} }| tkr|t tt tddkr| tt ksJ t td	 td td
d \} }| d	kr|t td	td  td
dkr| tksJ t td	 td td
djdd\} }| d	kr|t td	td  td
dkr| tksJ d S )Nr   r   rN   r   rO   T)Zconvertr  r   rS   )	r   r   Zclear_denomsr   rN   rO   r   r_   rS   )r  r   r   r   r   test_Poly_clear_denoms  sP   






"



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s1J | t} |t}| || |fksFJ d S )Nr   r   r   )r   r   r   Zrat_clear_denomsr!  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sJ d S )Nlwf8*-    r   r   l   >< i^     i#  l   4$isDl   R r      l   wf8*- r   rS   r   )r   rY   r_   r   r   r   r   r   test_issue_20427  sX   



$


&. 
&	
r  c                   C   sX  t td  t td d t ksJ t td tt td d t ks)J t td tdft td d t ks@J t tt d tt td t d t ksYJ t tt d tt ttd  d t ksrJ t tt d ttt td t d td d  ksJ t tt d ttt ttd  d td d  ksJ t tt d tdft td t d td d  ksJ t tt d tdft ttd  d td d  ksJ t tt d ttt td td  d tt  ksJ t tt d ttt td td  d tt  ks*J d S )Nr   r   r   rM  r   )r   r   Z	integrater   r   r   r   r   test_Poly_integrate  s   (*.22<<>>>Br  c                   C   sp  t td t  t dt d ksJ t td t tt dt d ks)J t td t tdft dt d ks@J t td td  tt  tt dt td  t ks_J t td td  tt  tt dtd  t t ks~J t td td  tt  ttt dtd  ttksJ t td td  tt  ttt dtd  ttksJ t td td  tt  tdft dtd  ttksJ t td td  tt  tdft dtd  ttksJ t td td  tt  ttt dt t d ksJ t td td  tt  ttt dt t d ks6J d S )Nr   r   r   )r   r   ro   r   r   r   r   r   test_Poly_diff  s   (*.>><<>>>Br  c                   C   s   t ttd t tdt d ksJ t ttd t tddtttd t tks.J tttd t t tdt d ksEJ d S )Nr   r   FZevaluate)ro   r   r   ra   Zdoitr   r   r   r   test_issue_9585  s
   (2r  c                  C   s  t dtddksJ t dtddksJ t ttddks$J t dtdddks1J t dtdddks>J t ttdddksKJ t dttddksXJ t dttddkseJ t tttddksrJ t dtdddksJ t dtdddksJ t ttdddksJ ttdd  ttdd  ttdd  t d	ttdt d	tksJ t d
t ttdt d
t tksJ t tt ttdt dt tksJ t d	tttdt d	tksJ t d
t tttdt d
t tksJ t tt tttdt dt tks#J t d	tttdt d	tks5J t d
t tttdt dtksIJ t tt tttdt dt tks_J t tt t tttdit dt tksxJ t tt t tttdit dt d tksJ t tt t tttdtdidksJ t tt t tttdtdidksJ t tt t ttddksJ t tt t ttddgdksJ t td ddtjtdd
ksJ t td ddt	d
t	d
d ksJ tt
dd  ttdd  td} d
|  t d
|   td
  d td
 d
t  d  }t td
 | d t  |  d tdd}|td td  |ks^J t td
 | d t  |  d ttdd}|td td  t |tddksJ d S )Nr   r   r   r   c                   S   s   t dtddS Nr   r   r   r   evalr   r   r   r   r     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   rL  r:  rM  1   0   )rM  r   rN   r   r   c                   S   s   t tt t ttdS )N)rM  r   r:  )r   r   r   r  r   r   r   r   r     r   c                   S   s   t td ddjtjddS )Nr   rN   r   Fauto)r   r   r  rY   Halfr   r   r   r   r          alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r  ru   rE   r   rY   r  r[   r_   r  rG   r^   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s$J | ddt dt d ks3J | ddddks=J d S )Nr   r   r   rM  r   r   -   )r   r   r   r   r   r   r   r   test_Poly___call__,  s   $$r  c                   C   s  t td td d gtd ttd tttd d tgks!J t ttd ttd d gtd ttd tttd d tgksEJ t td ttd d tgtd ttd tttd d tgksiJ t ttd tttd d tgtd ttd tttd d tgksJ t td td d gttd ttd ttttd d ttgksJ t ttd ttd d gttd ttd ttttd d ttgksJ t td ttd d tgttd ttd ttttd d ttgksJ t ttd tttd d tgttd ttd ttttd d ttgks.J t td td d gd ttd tttd d tgksOJ t ttd ttd d gd ttd tttd d tgkssJ t td ttd d tgd ttd tttd d tgksJ t ttd tttd d tgd ttd tttd d tgksJ t dtd d gd tdtttd d tgksJ t dtd d gd tdtttd d tgksJ t dttd d tgd tdtttd d tgksJ t dttd d tgd tdtttd d tgks8J t td d dgd ttd d ttdtgksUJ t td d dgd ttd d ttdtgksrJ t ttd d tdgd ttd d ttdtgksJ t ttd d tdgd ttd d ttdtgksJ t ttttttttgttddd ttttddttttddgksJ ttdd	  d S )
Nr   r   r   rV   r   rN   r   c                   S   r   r4  )r   r   r   r   r   r   e  r   z.test_parallel_poly_from_expr.<locals>.<lambda>)r   r   r   r   ru   r?   r   r   r   r   test_parallel_poly_from_expr4  s8  "
"
"
"












&
r  c                  C   s  t d td  t t } }t t d}}dd | |||fD \}}}}||||fks.J |||ks7J |||ks@J |||ksIJ t| |||fksTJ t| ||ks]J t| ||ksfJ t| ||ksoJ t| |t t||fks|J t| |t t|ksJ t| |t t|ksJ t| |t t|ksJ t| |t tf||fksJ t| |t tf|ksJ t| |t tf|ksJ t| |t tf|ksJ t||||fksJ t|||ksJ t|||ksJ t|||ksJ t| |dd||fksJ t| |dd|ksJ t| |dd|ksJ t| |dd|ks'J t||dd||fks5J t||dd|ksAJ t||dd|ksMJ t||dd|ksYJ ttdd	  ttd
d	  ttdd	  ttdd	  d S )Nr   r   c                 S      g | ]}t |ttqS r   rB  r   r   r   r   r   
<listcomp>l  r   ztest_pdiv.<locals>.<listcomp>TpolysFc                   S   
   t ddS Nr   r   )r   r   r   r   r   r     r  ztest_pdiv.<locals>.<lambda>c                   S   r  r  )r   r   r   r   r   r     r  c                   S   r  r  )r   r   r   r   r   r     r  c                   S   r  r  )r   r   r   r   r   r     r  )r   r   r   r   r   r   ru   r@   )r   r   r|   rG  r  GQRr   r   r   	test_pdivh  sF   r  c                     sN  t d td  t t  t t d} }dd  | |fD \}}}}||||fks.J |||ks7J |||ks@J |||ksIJ t | |fksTJ t |ks]J t | ksfJ t | ksoJ t t t| |fks|J t t t|ksJ t t t| ksJ t t t| ksJ t t tf| |fksJ t t tf|ksJ t t tf| ksJ t t tf| ksJ t||||fksJ t|||ksJ t|||ksJ t|||ksJ t dd||fksJ t dd|ksJ t dd|ksJ t dd|ks'J t||dd| |fks5J t||dd|ksAJ t||dd| ksMJ t||dd| ksYJ ttdd	  ttd
d	  ttdd	  ttdd	  t d d dt  d  dt d d }}t d d d}}	t ||	fksJ t dd||	fksJ t dd||fksJ t td||fksJ t t	d||	fksJ t tdd||	fksJ t tdd||fksJ t t	dd||	fksJ t t	dd||	fksJ t |	ksJ t dd|	ks*J t dd|ks6J t td|ksBJ t t	d|	ksNJ t tdd|	ks[J t tdd|kshJ t t	dd|	ksuJ t t	dd|	ksJ t |ksJ t dd|ksJ t dd|ksJ t td|ksJ t t	d|ksJ t tdd|ksJ t tdd|ksJ t t	dd|ksJ t t	dd|ksJ t d dt  t d  } t | ksJ t dd| ksJ tt
 fdd	 tt
 fdd	 t t	d| ks4J t tdd| ksAJ tt
 fdd	 t t	dd| ksXJ t t	dd| kseJ tt d tt   \} }|  jr| jsJ  }| jsJ  } |  jsJ  } |  jsJ tt t t tdt  t t   \} }|  jr| jsJ tddt  t td}
tdt t td} |
j| ddtdt ddtddt  t ddfksJ |
j| ddttd d dt d  t ddtdt ddfks%J d S )Nr   r   c                 S   r  r   rB  r  r   r   r   r    r   ztest_div.<locals>.<listcomp>Tr  Fc                   S   r  r  )r   r   r   r   r   r     r  ztest_div.<locals>.<lambda>c                   S   r  r  )r   r   r   r   r   r     r  c                   S   r  r  )r   r   r   r   r   r     r  c                   S   r  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   ru   r@   rN   rO   r>   r   r   Zis_ZZZis_Fracrg   rP   rY   )r|   rG  r  r  r  r  ZqzZrzZqqZrqr{   r   r  r   test_div  s   


""
0r  c                  C   s6   t tdt \} }t| d dk sJ |dksJ d S )Ng>,p ?g3!	@g+=r   )r   rw   r   )r|   rG  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s4J |||||	fks@J |||ksIJ t| |||fksTJ t| ||||fks`J t| ||ksiJ t| |t ||fksuJ t| |t |||fksJ t| |t |ksJ t| |t f||fksJ t| |t f|||fksJ t| |t f|ksJ t||||	fksJ t|||||	fksJ t|||ksJ t| |dd	||	fksJ t| |dd	|||	fksJ t| |dd	|ksJ t||d
d	||fksJ t||d
d	|||fksJ t||d
d	|ks!J tdddks+J tdddks5J tdddks?J ttdd  ttdd  ttdd  d S )Nr   rA      r   r   c                 S   s   g | ]	}t |td dqS )rO   r   r   r   r   r   r   r   r    r   ztest_gcdex.<locals>.<listcomp>Tr  Fd   i  )r   )r  r   r   r   r   r   c                   S      t td dt d ddS Nr   r   Fr  )r   r   r   r   r   r   r   8  r   ztest_gcdex.<locals>.<lambda>c                   S   r  r  )r   r   r   r   r   r   r   9  r   c                   S   r  r  )r   r   r   r   r   r   r   :  r   )r   r[   r   r   r   ru   rG   )
r   r   sr}   r   r  r  rY   THr   r   r   
test_gcdex  s<   "r  c                  C   sv   t dtd d  td d  td d  } t dtd  d dtd  d  td d  d }| d	|ks9J d S )
Nr   r   r   r  rM  i  =   r   r:  )r   r   Zrevertr  r   r   r   test_revert=  s   ,4r  c                  C   s  t d dt   d t d d dt  d } }}t| t|t|}}}|||||gks2J t| || ||gks>J t| |t | ||gksKJ t| |t f| ||gksYJ t|||||gkseJ t| |dd|||gkssJ t||dd| ||gksJ ttdd  d S )Nr   r   Tr  Fc                   S   r  r  )r   r   r   r   r   r   P  r  z$test_subresultants.<locals>.<lambda>)r   r   r   ru   r@   r   r   r   r  r  r  r   r   r   test_subresultantsD  s   0r  c                  C   s  t d dt   d t d d d} }}t| t|}}|||ks&J t| ||ks/J t| |t |ks9J t| |t f|ksDJ t|||ksMJ t| |dd|ksXJ t||dd|kscJ t| |dd|| |dt  d gfkswJ t t t t tt } }}t| t|t|}}}|||ksJ t| ||ksJ t| |t |ksJ t| |t f|ksJ t|||ksJ t| |dd|ksJ t||dd|ksJ ttdd	  d S )
Nr   r   r   Tr  F)Z
includePRSc                   S   r  r  )r   r   r   r   r   r   k  r  z test_resultant.<locals>.<lambda>)r   r   r   rw   rx   ru   r@   r  r   r   r   test_resultantS  s(   ((r  c                  C   s  t d dt d   dt   d d} }t| }| |ksJ t| |ks'J t| t |ks0J t| t f|ks:J t||ksBJ t| dd|ksLJ t|dd|ksVJ tt d  tt   t td d	t t  } }t| t|}}| |ks~J t| |ksJ t| t ttt|ksJ t| t tttf|ksJ t||ksJ t| dd|ksJ t|dd|ksJ ttd
d  d S )Nr   r   r     ipTr  Fr   c                   S   r   Nr   )r   r   r   r   r   r     r   z#test_discriminant.<locals>.<lambda>)r   r   r   rw   rx   ry   ru   r@   r   r   r  r  r   r   r   test_discriminantn  s&   &.r  c                  C   s   t td td  t} t|  ddgksJ |  dksJ t td dtd   d t} | d}t| |g dks@J | |dksIJ d S )Nr   r   r   r   r   r  )r   r   r   )r   r   sortedZdispersionsetZ
dispersionshift)fpZgpr   r   r   test_dispersion  s   
r  c                  C   sB  t d d t d d t d dt   d g} t| t d ksJ t| ddtt d ks-J tg dks5J tddgdks?J tg ddksIJ tt td  t t  t d  gdks^J tg t }|jrk|tju smJ tg t dd}|jrz|js|J t	d}t|| gt| |g  kr|ksJ  J t
td	d
  d S )Nr   r   r   Tr  r   r   rM  r:  *   c                   S      t g ddS NTr  )r   r   r   r   r   r     r   ztest_gcd_list.<locals>.<lambda>)r   r   r   r   	is_NumberrY   r   is_PolyrN  r_   ru   r@   )r  r   rw   r   r   r   test_gcd_list  s   **
0r  c                  C   sR  t d d t d d t d dt   d g} t| t d t d  dt d   t d  t  d ks1J t| ddtt d t d  dt d   t d  t  d ksQJ tg dksYJ tddgdkscJ tg dd	ksmJ tt td
  t t  t d
  gdksJ tg t }|jr|tju sJ tg t dd}|jr|jsJ t	t
dd  d S )Nr   r   r   r   r   Tr  r  r  r	  r   c                   S   r
  r  )r   r   r   r   r   r     r   ztest_lcm_list.<locals>.<lambda>)r   r   r   r   r  rY   Oner  rO  ru   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sJJ |||
ksSJ |||ks\J t| ||||fkshJ t| ||ksqJ t| ||kszJ t| |t |||fksJ t| |t |ksJ t| |t |ksJ t| |t f|||fksJ t| |t f|ksJ t| |t f|ksJ t|||
||	fksJ t|||
ksJ t|||ksJ t| |dd|
||	fksJ t| |dd|
ksJ t| |dd|ksJ t||d	d|||fksJ t||d	d|ksJ t||d	d|ks)J d
t d  d
 d
t  d
 } }|d
t  d
 d
}}}t| ||||fksQJ t| ||ks[J t| || kseJ d
t d  d
 d
t  d
 } }|d
t  d
 d
}}}t| ||||fksJ t| ||ksJ t| || ksJ tdddksJ tdddksJ tdddksJ t d dt   d t d dt d   t  d } }t d dt d   dt d   dt   d }t d t d t d d }}}t| |dd|||fksJ t| |dd|ksJ t| |dd|ks%J t d dt   d t d dt d   t  d } }t d dt d   dt d   dt   d }t d t d t d d }}}t| |dd	d|||fkstJ t| |dd	d|ksJ t| |dd	d|ksJ tdtd }}t||t||  krtdksJ  J tdtd }}t||t||  krtdksJ  J ttt d t ttt  t tdt tdksJ tt	dd  tt	dd  d S )Nr   r   r   r   c                 S   s   g | ]}t |qS r   r   r  r   r   r   r    r   ztest_gcd.<locals>.<listcomp>Tr  Fr   r:  rM  )r   r   r   r  rQ  r   r   r   r=  r   c                   S      t tS r   )r   r   r   r   r   r   r     r   ztest_gcd.<locals>.<lambda>c                   S   r  r   )r   r   r   r   r   r   r     r   )
r   r   r   r   r_   r   rg   rP   ru   rD  )r   r   r  r}   r   rG  r  r  rY   r  r  r  lrw   rx   r   r   r   test_gcd  sr   "&2, 2,  002r  c                   C   sR  t tddts
J t tdt dtsJ tdddksJ tdt ddks*J t ttddtddts:J t ttddt tddtsLJ ttddtddtddks^J ttddt tdddksoJ t tddtsyJ t tdt dtsJ tdddksJ tdt ddksJ ttddd	d
ddksJ d S )Nr   r  r   r   r   r   g      "@r   Fr  )r   r   rZ   r   r[   r\   r]   r   r   r   r   test_gcd_numbers_vs_polys  s    $$" r  c                  C   s   t ddksJ t dtdksJ t td td ksJ t t d t d ks+J t dt d dt d ks;J t dt d tddt d ddksPJ t td t ttd   tt td td   kslJ t dtd  t dt td   dt t td td   ksJ t td t d ttd  d  tt d td td   ksJ t td t dt td   tt td dtd    ksJ t dtd  t dt td   dt t td dtd    ksJ t dtd  t d dt td  d  tt tdd	 dtd  dtd    ks"J t d
td  t dt td   tt d
td  dtd    ksGJ tt d
t d d
t d sYJ t ddt  ttt   dddt d tt t  ksxJ t ddt  tttddt     ddddt td  ttdtd ddd  ksJ t tttt  ddtttd  ksJ tdt dt dt t  } t | tdt dt td  ksJ t | ddtdt dt td  ksJ t	t
dd  d S )Nr   r   r   rM  r   Fr  r      r   gffffff@re   T)re   deepr  c                   S   s   t tdk S r?  )r   r   r   r   r   r   r   J  r   z test_terms_gcd.<locals>.<lambda>)r   r   r]   r   r[   rq   rc   rl   r   ru   rD  r   r   r   r   test_terms_gcd*  s6    *8DD@H\J$
,(

(,r  c                  C   s.  t d dt d   dt d   dt d   dt   d t d t d  t d  t  } }t| t|}}|d|ks=J t| d|ksFJ t| dt |ksPJ t| dt f|ks[J t|d|ksdJ t| ddd|ksoJ t|ddd|kszJ dt d  dt d   dt d   dt d   dt   d	 t d  t d  t  d	 } }t| t|}}|d|ksJ t| d|ksJ t| dt |ksJ t| dt f|ksJ t|d|ksJ t| ddd|ksJ t|ddd|ksJ tt d dt   d dd
} | dtt d d	 dd
ksJ d S )Nr   r   r   r   rM  Tr  Fr   r   )r   r   r    r  r   r   r   
test_truncM  s(   VX(r  c                  C   sp  dt  d t tj } }t| ddt|}}| |ksJ t| |ks'J t| t |ks0J t| t f|ks:J t||ksBJ t| dd|ksLJ t|dd|ksVJ ttdd	  tdt d  d
t   d ddt d dt   d ksyJ ttdd	  tdt d  dt   d dt d  dt   d ksJ tdt d  dt   d ddt d t  d ksJ d S )Nr   r   rO   r   Tr  Fc                   S   r   r  )r!   r   r   r   r   r   u  r   ztest_monic.<locals>.<lambda>rM  r   r  r   c                   S   s   t dt dt  d ddS )Nr   rM  r   Fr  )r!   r   r   r   r   r   r   x  r  r   g      @g      @r   r   r   r   )r   rY   r  r   r!   ru   r@   r>   r  r   r   r   
test_monici  s   888r  c                  C   sp   dt  d tdt  d } }| dksJ t| dksJ ttdd  tdt  dd} |  dks6J d S )Nr   r   c                   S   r   r  )r"   r   r   r   r   r     r   ztest_content.<locals>.<lambda>r   r   r   )r   r   r"   ru   r@   )r   r  r   r   r   test_content~  s   r  c                  C   s8  dt  d dt  d } }t| t|}}| d|fks J t| d|fks*J t| t d|fks5J t| t fd|fksAJ t|d|fksKJ t| ddd|fksWJ t|ddd|fkscJ ttdd  tdt  d	d
} tdt  td}|  d| fksJ | d|fksJ ttdtdksJ d S )Nr   r   r   Tr  Fc                   S   r   r  )r#   r   r   r   r   r     r   z test_primitive.<locals>.<lambda>r   r   r   r   r   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r   r   r#   ru   r@   rR   rY   r  r   r   r   test_primitive  s"   
r  c                  C   sB  t d dt d   dt d   dt d   dt d	   d
t d   dt   d } t d	 d
t   d }t d dt   }tt| ||f\}}}|||ksNJ t||| ksWJ t||t | ksaJ t||t f| kslJ t|||ksuJ t||dd|ksJ t||dd| ksJ | ||gksJ t| ||gksJ t| t ||gksJ t| t f||gksJ t|||gksJ t| dd||gksJ t|dd||gksJ ttdd  ttdd  tt d
 td
  t t t tt d
 d
t  t  ksJ tt d
 td
  t t tt td
  d
t  t  ksJ d S )Nr  r~  r      r:  i  rM  q  r   r   r   r  r   Tr  Fc                   S   r  r  )r$   r   r   r   r   r     r  ztest_compose.<locals>.<lambda>c                   S   r   r  )r%   r   r   r   r   r     r   )r   mapr   r$   r%   ru   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J d S r   )r   r   r  r   r   r   r   
test_shift  s   Br#  c                	   C   s"  t td dt  d tt td t td t dt  kr?ttd d td dt  d ttd td   ksBJ  J t td td  d tt td t td t dtd  d tdd t  krttd d td td  d ttd td   ksJ  J t td dt  d tt ttj t td t tddt  krttd d td dt  d tttj td   ksJ  J t td dt  d tt td t ttj t tddt  krtttj d td dt  d ttd ttj   ks J  J t td dt  d tt td t ttj t tddtdd	  kritttj d td dt  d ttd ttj   kslJ  J tt	d
d  tt	dd  tt	dd  tt	dd  tt	dd  d S )Nr   r   r   r   r   r  r   rR   r   c                   S   s$   t tt t td t td S r   )r   r   r   	transformr   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   rS  r[   rY   r  ru   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J t  |gks'J t t  |gks2J t t f |gks>J t| | |gksHJ t dd| |gksTJ t| dd |gks`J ttdd  tt fd	d ttd
dtd   t d  tddtd   t d   tddtd   t d   tddtd   t d   tddt   tdd t dd t tt d dt d   td d t   dtd  d  t ddtdt d  dt   td d  t ddttddtd d  t  dtd  d  t ddtd td  d!td   dtd"   d#d$td   d%td    t ddgks1J d S )&NrO   r   r   Tr  Fc                   S   r   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	=  r:  r   i   r   r   r  r      r   i$  zZZ(pi)r  @   r  rA     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r&   ru   r@   rG   rY   rh   r[   )r  r   r  r   r   r   
test_sturm  s>   <(2Hr.  c                      s`  t d dt d   t d  dt d    t  tt dftt d dfgks*J t t dft d dfgks:J tt fdd t t d d  t d d  t d d  t d   t  tt d dt   d dftt d dt   d dftt dfgksJ t t d dt   d dft d dt   d dft dfgksJ tt fdd d S )	Nr   r   r   r   r   c                         t  S r   r(   r   r   r   r   r   	  r   ztest_gff.<locals>.<lambda>c                      r/  r   r0  r   r   r   r   r   	  r   )r   r   r'   ru   r   r   r   r   r   test_gff  s   (, 0
$
Br1  c                  C   sz   t dt d} }t| t |t  tt| |fd}| tdtd  dtd  td   dtd   ttddks;J d S )	Nr   r   r   r   r  r  rO   r   )r_   r   r   r   Znorm)rw   rx   r   r   r   r   	test_norm	  s    Hr2  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s)J t td d tdddtd dtd t  d td dtd   d fksRJ 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sJ 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sJ d S )	Nr   r   r   r   r   r   rO   r   )r)   r   r_   r   r   r   r   r   test_sqf_norm	  s    44* * r3  c            	      C   s  t d t d  t d  d } t d dt d   dt   d }t d }t d t d  t  d }tt| |||f\}}}}| |ksCJ t| |ksKJ t| t |ksTJ t| t f|ks^J t||ksfJ t| dd|kspJ t|dd|kszJ | d|df|dfgfksJ t| d|df|dfgfksJ t| t d|df|dfgfksJ t| t fd|df|dfgfksJ t|d|df|dfgfksJ t| ddd|df|dfgfksJ t|ddd|df|dfgfksJ | |df|dfgksJ ttd	d
  tddksJ tddg fksJ tdt d  d d dt d d d  ks3J t| ||d  ks@J t| t ||d  ksNJ t| t f||d  ks]J t d t	d  }t| | ||d  | ksvJ t| | t ||d  | ksJ t| | t f||d  | ksJ tt d t d ksJ tt  d t  d ksJ tt d t d ksJ tdt  d t
ddt  d ddksJ tdt  d dt  d  tdddt  d t d   ksJ ttt d dt   d t d d ksJ dt  t dt    t d  } t| dks(J t d dt   d d } t| t d d ksAJ t| dt d dfgfksQJ d S )Nr   r   r   r   r   Tr  Fc                   S   r   r  )r*   r   r   r   r   r   @	  r   ztest_sqf.<locals>.<lambda>r   r)  rM  r   r  l    H/P l    _ % )r   r!  r   r*   r+   Zsqf_list_includeru   r@   r,   r   r]   r[   )	r   r   r   r{   r  r  r  Prz   r   r   r   test_sqf%	  sT      "$ $$2"$&,@.$r5  c               	      s  t d t d  t d  d  t d } t d }t d t  d }tt | ||f\}}}}| d|df|df|dfgfks>J t d| df|df|dfgfksQJ t t d| df|df|dfgfkseJ t t fd| df|df|dfgfkszJ t|d|df|df|dfgfksJ t ddd|df|df|dfgfksJ t|ddd| df|df|dfgfksJ | |df|df|dfgksJ tddg fksJ tddg fksJ ttdt tdg fksJ td	t  t dd	t fgfksJ tdt  t t ddtft tfgfksJ ttt t t dt t tjfgfks'J t	ddkr4t	dj
s6J tdt  dt dfgfksFJ tdt d  dt dfgfksXJ t	dt  dt  kseJ t	dt d  dt d  ksvJ t	dt d  d d
 dt d d d
  ksJ t	 | |d  | ksJ t	 t | |d  | ksJ t	 t f| |d  | ksJ t d td  t t t t t d d f\}}}	}
t	 | | |d  | ||	  ksJ t	 | t | |d  | ||	  ksJ t	 | t f| |d  | ||	  ksJ tddd}tddd}tddd}
t	tt t jdu s9J t	tdt d  d tdtt d t d   ksVJ t	tdt d  d tdtt d d  ksqJ t	tt d  t | t| t d |  t d |  ksJ t	tt d  t | t| t d d |  ksJ t	tt d  t t tt d  t d  t ksJ t	tt d  t t tt d d  t ksJ tt|
d d |d  |d  |d d   t|d d |d  t|d  t|
d d  }t	 |ksJ t	||ks#J t d d |
d d  }tt| t	 t|ks@J ttdt  d t td   d dfgfks[J t d d  t	  ksjJ t	 tdt d t t d t  ksJ t	 ddt d t t d t  ksJ t	 tddt d tdt   d t d tdt   d  ksJ t	t d dt t   d t dt  d ksJ t d dt t   d  t	  ksJ dt d  t ddt    d dt   tt ddt   d dt  d  }dt tdd  dt d  d  }t	 |ks&J t	 td|ks1J t	 td|ks<J t d dtd t   d  t	 tddt td d ks]J t	 d tddt td d ksrJ t	t d dtd   tddt tdt  t tdt   ksJ t	dt d  dtd   tdddt tdt  t tdt    ksJ t	t d t d ksJ t	t  d t  d ksJ t	t d t d ksJ t	dt  d  tddt  d dd!ksJ t	t d" t  d d#dd$t d t  d t d% t d&  t d  t d  t d  t d  d  ks-J t	t d" t  d d#dd$t d t  d t d% d't d&   t d  d't d   t d  d't d   d  kseJ t t t tt  t   ttd dt  d  ttt  td dt  d   }t	 t tt d  t ksJ t	|ttt d  td d  ksJ t	tt d dt   d t d d tt d d t d t d t  d  ksJ t d d t d dt   d   t	 t d t d  t d d  ksJ t	 t t d t d  t d d  ksJ dt  t dt    t d   t	 dks.J t	 t dks8J t	dt d dt   dt    d dt  dt d   t d  ddt d   t d    kshJ t	 dd( kssJ tt fd)d* ttd+d*  t	t tt d td  tt d td  dt  dt  gt tt t t t  tt t t t  t t t  t gksJ ttt d t  d  d d, d, tdusJ ttt d t  d  d d, d, tdu sJ t	tt  tt  ksJ d-t  t  d  t d  t  t  d  t d  t t d d    t d t d  t t d   t   d-t d  t d d  t t  d  t  t  d  t t d     t d t d d  t t  t  d  t d  t t d d       }t	|d,ks~J t	tt d t  t  dd.tt t d  t  ksJ t	tt d t  t  dd.tt t d  t  ksJ t	tt d tt d ksJ t	td/t  d d/t d  td0d/t  d0 d/t d0 dd!ksJ t	td/t  d/ d d1d0t  d0 d  ksJ t d td  d"t d  t  d2t d   d
t  td   d3t  t  d4t   d5td   d6t  d7 }t	|t t d t d  td d"t  d2  ksOJ t	|t dd.t d t d  td d"t  d2  kskJ t	|tdd.td td  t d d
t   d5  ksJ dt  dtdd
t      t	 dd.t	 ddd8ksJ t	 ddd8dt  dtd td9t    ksJ d S ):Nr   r   r   r   Tr  FrM  r   r   r)  r{   Zpositivei)ZintegerrG  )realr   r   r   r  i    iX  i iH i r*  i  iT     iY  r   r  rQ  r   r   r  r:  r   r  c                      s   t  tddS )NFr  r.   r   r   r   r   r   r   	  r   ztest_factor.<locals>.<lambda>c                   S   s   t td d ddS )Nr   r   Tr  r:  r   r   r   r   r   	  r   r   r=  r  g      ?r   g      ?   M      r     ih  )r  Zfractioni)r   r!  r   r-   Zfactor_list_includer_   r   rY   r  r.   Z
is_Integerr^   Zis_Powr}   re   rc   rS   rg   rP   rQ   r]   rh   rl   ru   rE   rI   rm   r   r   r   rb   )r   r   r~   r  UVWr   r{   r|   rG  r7  Zf_zziZf_qqier   r   r   r   test_factord	  s>  &&(*&**" ,, $"2 "0*,.:6>66204**.
2($$&*
""
,B
4

8"*$
 *,4:6
$
$
H
0
>66",2h488 8rC  c                  C   s(  t d dt   d d t d d  t d dt   d d  } t d dt   d d td  t d dt   d d d t  t d dt   d d  }t| t d d t d d  t d d  ksbJ t|t d d	 td d  kstJ t| dt d dft d dft d d dfgfksJ t|dtd dft d d	fgfksJ t d td  d
 t d d  } t d td  d
 t d d  }t| t d t t d
  t t d
  t d t d  t d  t d  t d  t  d  ksJ t|ddt d t tt  d
  t tt  d
  t d t d  t d  t d  t d  t  d  ks&J t| dt d dft t d
ft t d
ft d t d  t d  t d  t d  t  d dfgfksYJ t|dddt d dft tt  d
ft tt  d
ft d t d  t d  t d  t d  t  d dfgfksJ d S )Nr   r   i r   i i  i -1i% ip  i@ r   rM  r   r   Tr  )r   r   r.   r-   rg   r  r   r   r   test_factor_large
  s|   <>0$((  ,
4
&

(0rD  c                   C   sp   t dt d tddt d ddksJ t dt d dt d  ttdddt d dtd  ks6J d S )	NrM  r   r   r   r   Fr  r   )r.   r   r]   r[   r   r   r   r   test_factor_noeval<
  s   *FrE  c               
   C   s
  t dg ksJ t dg ksJ t tdddgksJ t tdgks$J t td dgks/J t td	 td
 gdd	d
dfgksCJ tttd	d tdd d
t tdd  } | j ddddgksfJ |   ddgkspJ | j dddddgks}J | j ddddgksJ | j tddd| j dd  krtdddfdftddtddfdfgksJ  J | j tddd| j dd  krtdddfdftddtddfdfgksJ  J | j tddd| j d d  krtdd!dfdftddtddfdfgksJ  J | j tdd"d| j d#d  kr=tdd$tdd$fdftddtddfdfgks@J  J ttd	d tdd d
t tdd  } t | ddddgksbJ t | ddgksmJ t | tdddt | dd  krtdddfdftddtddfdfgksJ  J t | tdddt | dd  krtdddfdftddtddfdfgksJ  J t | tdddt | d d  krtdd!dfdftddtddfdfgksJ  J t | tdd"dt | d#d  kr%tdd$tdd$fdftddtddfdfgks(J  J ttd	 d	 td	 d d%  td  d%t d d  } |   d&td'd	fd%ftd'd	dfdfd(d)dtdd	fdftdd	d	fd%fgksoJ t td d* td d+ gtd,d-td.d/fddiftd0d1td-d2fddifgksJ t td d* td d+ gddtd,d-td.d/fddiftd0d1td-d2fddifgksJ t td	 d* td	 d+ gtd3dtd4dfddiftd4dd5fddifd6tddfddiftddtd7dfddifgksJ t td td	 td td dtd td td	 d	 gd8ddifd9ddd:fd;dddd<fd=d%d	ifgksDJ td	 d	 td
 d
td	   d
 td } }}t | td%d
dd>g kskJ t | td%ddd>td%dtdd	fgksJ t | td%d
dd?d@dtdd	fgksJ t | td%ddd?d@gksJ t |td%d
dAg ksJ t |td%ddAtd%dtdd	fd	fgksJ t |td%d
dBdCdtdd	fd	fgksJ t |td%ddBdCgksJ t ||gtd%d
dAg ksJ t ||gtd%ddAtd%dtdd	fdd	ifgks#J t ||gtd%d
 dBd@dd	ifd;ddifdtdd	fdd	ifgksHJ t ||gtd%ddBd@dd	ifd;ddifgksbJ t td	 td	 d	 gd8ddifd@ddifdDddifgksJ t td	 td	 d	 gddEd8ddiftd'd	dfddifdDddifgksJ d%td
  dFtd   dGtd	   dt  dG } t | g ksJ t | dddH\}}|g ksJ tdIdJ t|t| D sJ |tdKd%t	tdLd%  dftdKd%t	tdLd% ft	tdKd% tdLd%fdtdLd%t	tdLd%  fgks"J t | ddtdddM\}}|g ks6J tdNdJ t|t| D sGJ 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   rL  r  )rF  r   )rG  r   )fastr,   )rH  r   epsr   r   i  U   rM  r  {Gz?i  gMbP?i  i'  -C6?i  r   r=  r  )r   r   r   )rF  r   r+     K      e   #   i5  k   r  iiirL  G   )r=  r=  rN  r   r   r   )r   r   rM  )r   r   )infr,   )supr,   r=  r   rW  rX  )rY  r   r   r      r~  )r   r,   c                 s   `    | ]+\\}}}t |t |  k ot |k n  o+t|t|  k o)t|k n  V  qd S r   ri   rj   r   rw   rx   rG  r   r   r   r   
      
&z!test_intervals.<locals>.<genexpr>i(   )r   r,   rJ  c                 s   r]  r   r^  r_  r   r   r   r   
  r`  c                   S   s   t td d ddS Nr   r   rI  r/   r   r   r   r   r   r   
  r   z test_intervals.<locals>.<lambda>c                   S   s   t td d jddS rb  )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   rI  rc  r   r   r   r   r   
  r   )r/   r   r   r[   rY   r   r   r   r3   rg   ru   r  )r   r   r   Z	real_partZcomplex_partr   r   r   test_intervalsA
  s   (."("($($.*$($($($.8  
6
6
..
6

00, 2. :
*

 
*
0rd  c                      s  t td d   jdddddksJ  jdddddks J  jddd ddtd	dfks1J  jddd dtd
ddfksBJ  jdddddtd	dfksSJ  jddddtd
ddfksdJ  jddddddtd	dfksvJ  jdddddtd
ddfksJ  jddtdddtddtddfksJ  jddddtddtddfksJ tt fdd tt fdd tt fdd td d  t dddddtd	dfksJ t ddddtd
ddfksJ t ddddddtd	dfks	J t dddddtd
ddfksJ t ddtdddtddtddfks4J t ddddtddtddfksIJ ttdd  tt fdd tt fdd d S )Nr   r   r   )stepsr   r=  r   rY  r   r  T)re  rH  r  rI  r  r  r  rL  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   rf  r   r   r   r   r   
  r   c                      s    d  ddS r.  rf  r   r   r   r   r   
  r   c                   S   s   t dddtdddS )Nr   r   r:  r  rI  )r0   r[   r   r   r   r   r   
  r"  c                      s   t  jddddS Nr   r   r   rI  )r   r0   r   r   r   r   r   
  r   c                      s   t  ddddS rg  rf  r   r   r   r   r   
  r   )r   r   r0   r[   ru   rE   rB   r  r   r   r   r   test_refine_root
  s0   """"$$.(""&&0*rh  c                   C   s  t td d dksJ t td d t ddksJ t td d t
 ddks*J t td d t t
 ddks;J t td d dddksIJ t td d dddksWJ t td d dddkseJ t td d dddkssJ t td d ddddksJ t td d ddddksJ t td d ddddksJ t td d ddddksJ t td d dksJ t td d dt ddksJ t td d dt ddksJ t td d dt dt ddksJ t td d dddksJ t td d dddksJ t td d t ddksJ t td d t
 ddks+J t td d t
 d t
 ddks?J t td d t t d ddksSJ ttd	d
  d S )Nr   rZ  r[  )rW  rX  r=  r   r   r   c                   S   r   r   r1   r   r   r   r   r   
  r   z"test_count_roots.<locals>.<lambda>)r1   r   rf   rg   ru   rE   r   r   r   r   test_count_roots
  s.   "  &  ((rj  c                      s   t dtd  dtd   dt  d   dtddks J  ddks)J  ddks2J tt fdd	 t td
 t d dttd td  d dksWJ d S )Nr   r   r   r   r   r   r   c                      s
     dS )Nr   )rootr   r   r   r   r     r  z test_Poly_root.<locals>.<lambda>r   )r   r   rk  r[   ru   
IndexErrorrk   r   r   r   r   test_Poly_root
  s   (<rm  c                  C   s  t tdgks	J t tdddgksJ t td g dks J t td dddgks-J t ttd t d  ttd t d ddgksHJ t ttd t d  ddttd t d ddfdgksgJ t td td t d  ttd t d ddddgksJ t td td t d  ddttd t d ddfdgksJ d	td  d
td	   dt  d } td t d }t|   tdd	d	d	gksJ t|  t|dgksJ d S )Nr   F)Zmultipler   r   r  rV  r   r   r   r   r   )r2   r   rk   r   r[   r  r   r   r   test_real_roots	  s8   6
 
$  rn  c                  C   s   dt d  dt d   dt   d } t d t  d }t|  tddddgks*J t| t|dt|dt|dgks@J d S )Nr   r   r   r   r   r   r   )r   r   	all_rootsr[   rk   r  r   r   r   test_all_roots   s   $ 0rp  c                  C   s  t dt g ksJ t dt g ksJ t td d t ddgks'J t td d t dt dt gks<J t td d t } | ddgksOJ t td d t } | dt dt gksfJ t td d tdd t } | ddgks~J t td d tdd t } | dt dt gksJ t td dt  t ddt  ddt  gksJ t td dt  ttd ddt  ddt  gksJ t dt d	  d
gksJ ttd t d dd} td}t| d d|tj	u sJ t
| d dksJ t| d d
ksJ t
| d d|tj	u s'J t| d d
ks2J t
| d d|tj	u sBJ t| d d|tj	u sRJ t
| d d|tj	u sbJ t| d d|tj	u srJ t
| d d|tj	u sJ td}t| d d|tju sJ t
| d dksJ t| d d
ksJ t
| d d|tju sJ t| d d
ksJ t
| d d|tju sJ t| d d|tju sJ t
| d d|tju sJ t| d d|tju sJ t
| d d|tju sJ ttdd  ttdd  ttd d ddgks4J ttd d } | ddgksEJ ttt dt gksSJ ttdt  dt gkscJ ttdd  t td d }|ddd | D ksJ tt td dtd    d!td"   d#td$   d%td&   d'td(   d)td   d*td   d+ dd,ksJ 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   \  r   ztest_nroots.<locals>.<lambda>c                   S   s   t tt  S r   rt  r   r   r   r   r   ]  r   g       c                   S   r   Nr   r3   r   r   r   r   r   g  r   c                 S   s   g | ]}| d qS rl  rr  )r   r~   r   r   r   r  k  r"  ztest_nroots.<locals>.<listcomp>rA  r  rL  i  r  i@  r   iV  r:  i  rM  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])r   r   r3   rg   r[   r\   ri   Z
epsilon_eqrY   truerj   Zfalseru   rG   r=   rE   ro  str)rootsrJ  r   r   r   r   test_nroots(  s   "*  6               ".



rz  c                  C   sh   t d dt d   dt d   t d  } t|  tjdtjdiks$J t| tjdtjdiks2J d S )NrM  r   r   r   )r   r   r4   rY   r  r   r   r   r   r   test_ground_rootsu  s   (  r{  c                     s   t d t d  d  t d t  d d } t d d d }t d t  d d }t d d }t d ks5J tt fdd tt fdd tt d| ksRJ tt d|ks]J tt d|kshJ tt d|kssJ ttd	d  d S )
Nr   r   r   c                      
   t  dS ru  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 r?  )r5   r   r   r   r   r   r   r     s    )r   r5   ru   r  r.   r=   )Zf_2Zf_3Zf_4Zf_12r   r   r   test_nth_power_roots_poly|  s   r~  c               
   C   s   t td d td  ttdtd  i} t| tdt dtd  d d dft dtd  d dft dtd  d dfgfksHJ t td d td  ttddtdd   i} t| td u skJ d S )Nr   r   r=  r   )re   r   rS  r_   r;   r[   r   r   r   r   test_torational_factor_list  s   .
4r  c                  C   s
  t ddksJ t ddksJ t ttksJ t ttu s J t ddks(J t dtdks1J t dtdks:J d	td
  d	 d
t d
 d
t d
 df\} }}}dd | |||fD \}}}}| |d||fksmJ t | |fd||fkszJ t | |ftd||fksJ t | |ftfd||fksJ t ||fd||fksJ t | |fddd||fksJ t ||fddd||fksJ td
 d
 ttd
  } t | | ksJ t | ddttd
 ksJ td
 d
 ttd
  } t | | ksJ t | ddttd
 ksJ t td
 d	 d td
 d fdtd
 d
fks!J t td
 t tt  dtt  td
 t  ks<J t td
 td
  tt  ttt ksRJ t td
 td
  tt  ttt kshJ t td
 td
  tt  tt ks}J t td d td
 d  td
 t d td  ksJ t td d
 tj td
 d  td
 t d d
t d
  ksJ t td
t d
tt  d ttd  ttd ksJ ttd
 t	d
  t} ttt	 t}ttt	 tdd}tdtdd}t | |fd||fksJ td td
d
 td
   d
td
 d t  dtd
  } td
 d
 }t | |fdddtd
 d
t  d ttd
 fksKJ tdt d t} ttd  td  td  td  d
td
   dt  d t}t | |fd|  | fksJ tttdd} tdtdd}|  |dtttddtdtddfksJ | j |ddtttddtdtddfksJ tdt t t tdd} td
td
  t tdd}| j |ddtdt d tddtd
t t tddfksJ dt d	t  dt
t d
    t
t t
 t d
   } t | jdks!J ttd }ttd }d|d
  d
 |d
  d  |d
  d
 d|d
  d
 d|d
  d
  | |  d|d
  d
 |d
  |d
   d|d
  d
 |d
  d  |d
  d
  d|d
  d
 |d
  |d
   d
t|d
 |d
  d    d|d
  d
  | |d
  d
 d|d
  d
 |d
  | d
  d|d
  d
 | |d
  d
 d|d
  d
 |d
  | d
   d
|d
 |d
  d  tdd
    } t | jdksJ td!dd"}t|td
 d  td  tdkftd
 td
 d
t   df}	t|td  tdkfdt df}
t |	|
ks4J t d
|	 d
|
 ksAJ t d|	 d|
 ksNJ t td
 d td  |	 td |
 kseJ t td
 d td  |	 td |
 ks|J ttd
 d td  tdkftd
 td
 d
t   df}ttd tdkfdt df}t ||ksJ t d
| d
| ksJ t d| d| ksJ t td
 d td  | td | ksJ t td
 d td  | td | ksJ td#dd}t |d$ d |d$ d ksJ t|d% |d& d |d'   d|d(  t
  }t |t
t|d% |d& d |d'    d|d(   t
 ksIJ t td
 d tt  tt ks\J d S ))Nr   r   rn  )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    r"  ztest_cancel.<locals>.<listcomp>Tr  F)r   r   r  r   r   r=  r  r:  rM  r   r  r   )Zincludeg{Gzt?r   rM  r  )ZcommutativeMr   )r   r   r   )r   r   r   )r6   r   rf   r_   r   rY   r  rb   r   rw   r   Zis_Mulrd   r[   r^   r`   r   rc   rg   )r   r   r{   r|   r  r  r4  r  r  Zp1Zp2Zp3Zp4r  exprr   r   r   test_cancel  s   046,,*:D><8@ 
(8>"..:.."0B*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s9J t| |t t||fksFJ t|}|| ||fksUJ tdt  t ttdt tg}tt d td  t t t}tt| |dd||fsJ tt| |t tdd||fsJ t|dd}t|| ||fsJ dt d  td  dt  } tt d td  d t t d g}t d t td  d  t t d  td d  td d  td d  td  d td d  ttdd  g}d	}t| |||fksJ || ||fksJ t| |d
dd d	ks!J |j| d
dd d	ks/J || du s9J || d d
u sEJ tddgt dgd	fksTJ t	t
dd  d S )Nr   r   r   r   Tr  rM  r   r   Fr  c                   S   s   t ddgS r   )r7   r   r   r   r   r   6  r   ztest_reduced.<locals>.<lambda>)r   r   r7   r8   reducer   r   r[   containsru   r@   )r   r  r  rG  r  r   r   r   test_reduced  s4   $ $pr  c               
   C   s  t g tttg ksJ t td d td t td  gttdddtd  dtd  gks/J t td d td t td  tt td  gtttdddtd  td dtd  gks^J t td d td t td  gttdd	d
tdtd  tttdtd  ttgksJ t td d td t td  tt td  gtttdd	d
tdtd  tttttd ttttdtd  tttgksJ t td d td d gtd gksJ t ttd dttd dgtd gksJ dtd  tt  dt  d dt dt t  td  tdt  tt  dtd   g} td td td   dt td  t  dt td   td td   d }t | tttddd}|dt t dt  dtd   dtd   dtd   td  ddt  td  dtd   dtd   dtd   dtd   dtd   ddt  dt  tt  dtd   td  td  ddt  td  dtd   dtd   dtd   dtd   td  gksJ t||tttddd	d\}}tdd t||j	D |t|ddksJ tt dt  dtd  td  g} t | ttddtd dt  td dtd   tt dt  gks=J t | ttddtd dtd   td  dtd   tt dt  gksdJ t | dd	dtd dt  td dtd   tt dt  gksJ t dgtdgksJ t td dt  gttdtd  dt  gksJ t
tdd  t td d td d gddtd gksJ t td d td d gddtd gksJ t
tdd  d S )Nr   r   r   r   rV   r   r   rX   Tr   r  r   r  rQ  r   Fr   rM  )r   r   r  c                 S   s   g | ]\}}|| qS r   r   )r   r|   r   r   r   r   r  S  r   z!test_groebner.<locals>.<listcomp>r   )r   rL   r   r   c                   S   s
   t dgS r   )r8   r   r   r   r   r   a  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   f  r   )r8   r   r   r   r   rl   r7   sumr   r  ru   r@   r  )r  r   r  r  rG  r   r   r   test_groebner9  sJ   H^,&<:*.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sJ |t|ksJ dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d dt	 td  dt	 td
   dt	 td   dt	 td   dt	 td   dt	 td   dt	 t  dt	  dtd   dtd
   dtd   dtd   dtd   dt  d g} t| t	ttd}dt	 dtd   d td
   d!td   d"td   d#td   d$td   d%t  d& dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d g}t| t	ttd|ksJ |t|ksJ td t dt
  d d't t
d  t
 d g} t| tt
td}td t dt
  d t
d dt  t
 d g}t| tt
td|ksJ |t|ksJ d S )(Nr   r   r   r   r  r   r   r   r   rM  r  r:  $   r     N   i  i   l   i   i  i8  i  r-  r     i   r,  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 r=  )rw   rx   ry   rz   r8   rW   rV   Zfglmr   r}   r   )r  r  r  r   r   r   	test_fglmi  sl   p&..2^j








^0r  c                  C   s  t ttgttdu sJ t td td  gttdu sJ t tttgtttdu s+J t tttgttttdu s:J tt t tt t tt t g} t | tttdu sVJ td dt t  d ttd  ttd   dtd  dtd   g} t | tttdu sJ d S )NTr   r   Fr   r:  )r:   r   r   r   r}   )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sIJ t|tdu sRJ t|dksZJ |d |d krg|d jriJ |d	 |d	 krv|d	 jrxJ |d |d kr|d jrJ |d	d  |d	d  krtd
d |d	d  D rJ |d d |d d krtdd |d	d  D rJ |j|ksJ |j	|ksJ |j
t tfksJ |jtksJ |jtksJ ||ksJ |t|ksJ ||ksJ |t|ksJ |g ksJ t| t tddd}|d |d kr|d jsJ |d	 |d	 kr.|d	 js0J |d |d kr?|d jsAJ |d	d  |d	d  kr\tdd |d	d  D s^J |d d |d d krytdd |d	d  D s{J d S )Nr   rX   r   r   c                 S   r  r   rB  r  r   r   r   r    r   z&test_GroebnerBasis.<locals>.<listcomp>r   Tr   c                 s       | ]}|j V  qd S r   r  r   r   r   r   r   r         z%test_GroebnerBasis.<locals>.<genexpr>c                 s   r  r   r  r  r   r   r   r     r  r  c                 s   r  r   r  r  r   r   r   r     r  c                 s   r  r   r  r  r   r   r   r     r  )r   r   r8   r   r9   r   r  anyZexprsr  r   r   rN   r   rX   r  r   )r  r  r  r4  r   r   r   test_GroebnerBasis  s8   $266""":>r  c                   C   sn  t ttttksJ t ttttksJ t tt ttt ttks&J t ttt tttt tttks<J t tt tdttt ttksNJ t ttt ttdtttt tttkshJ t tt dt td   d ttt dt td   d tttksJ t dtt d  d tdtd  dt t  dtd   d ttksJ t ttt d  d tttd  dt t t  ttd   d tttksJ t dt tt d  d tdt td  dt t t  dt td   d tttksJ t dtt d  t d tdtd  dt t  dtd   t d tttks8J t ttt d  t d tttd  dt t t  ttd   t d tttksfJ t dt tt d  t d tdt td  dt t t  dt td   t d tttksJ t tt tt d  tt d  tdt t dt t  td  td  dtd   tttksJ t tt tt  tt d  ttd td  ttd  td   ttd  td   dt td  td   dt t td   ttd   tttksJ t ttt t tttttt t tttks9J t tt d tttd dt t  td  ttt dksZJ t tt d tttd dt t  td  ttt dks{J t dttdtksJ ttdd	  t tt ttttt ttksJ t tt ttttt ttksJ d S )
Nr  r   r  r   r   r   r   c                   S   r   r   )r   r   r   r   r   r     r   ztest_poly.<locals>.<lambda>)	r   r   r   r   rc   r   rN   ru   rC   r   r   r   r   	test_poly  s    ,$4JL4<
4
8
@"<
F

6BB&*r  c                  C   s  t dtd dd} ttjttksJ ttjtt ksJ ttdtdt ks+J ttdtdt ks8J ttjdt dt ksFJ ttdtd tksSJ ttdttdtt ksdJ ttdtd | ksqJ ttdt dks|J ttd td| ksJ ttjtjtjksJ tdddd}ttd|t d|ddksJ t	d|dd}ttj|d	d
t tj|ddksJ ttj|dd
t	dt tj|ddddksJ d S )Nr   r   Fr  r   rq  r   r   T)clear)
r]   r   rs   rY   r  ZNegativeOnerc   r  rt   rp   )r   r{   rw   r   r   r   test_keep_coeff  s*   " r  c                   C   sD   t ttt tt t tksJ tttt  tt t tks J d S r   )rg   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s,J d S )Nr   )re   r.   r   rg   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s"J t|| | || | ks2J t|| | || | ksBJ d S )Nc                   @   s   e Zd ZdZdS )z test_noncommutative.<locals>.fooFN)__name__
__module____qualname__Zis_commutativer   r   r   r   foo  s    r  r   )rn   r   r   r6   )r  rB  ry   r   r   r   test_noncommutative  s    $r  c                   C   s   t ttd ttd   tt tddd u sJ t ttd tdtd  tt  d td u s4J t tttd u s?J t ttdt d u sMJ d S )Nr   r   rS   r   r   )r<   r   r   r   r_   rc   r   r   r   r   test_to_rational_coeffs#  s   $( r  c                   C   s^   t ttt  dtdftt dfgfksJ tttt  dtd tt  dfgfks-J d S r*  )r-   r   r   r+   r   r   r   r   test_factor_terms.  s   ,2r  c                   C   s   t td d tdd g dksJ t td t d ttdd dgg ddggks-J t td t d tttdd dggg gdgdgggksLJ d S )Nr   r   rN   r   )r   r   r   r   r   )r   r   Zas_listr   r   r   r   r   r   test_as_list4  s
   &4 r  c                   C   s^   t tdt tdtdfgfksJ t tdtt tttdttdfgfks-J d S r   )r-   r_   r   rc   r   r   r   r   test_issue_11198<  s   &8r  c                  C   s0   t tdt } |  tdt ksJ d S )Nr  )r   rh   Zevalfr   r   r   r   r   r   test_Poly_precisionA  s   r  c                   C   s8   t ddtd  ttddtd  tddksJ d S )Nr   r   rS   r   )r   r_   r   r   r   r   r   r   test_issue_12400G  s   r  c                	   C   sL  t tddtd  d tddtd  d tdddtd  ks&J t tdtdd tdtdd tdtdd	 ksDJ ttddtd tddtd tdtd d kscJ tdtd dtd d
td ksxJ ttdddtdd   d tdddtdd   d tddddtdd   ksJ t tddtd tddtd tdd ksJ t tdtd d tdtd d tdd ksJ t tdtd d tdtd d tdtd d gtdtdd ks
J t tddtd  d tddtd  d tddtd  d gdtd tdd ks=J ttddtd tddtd tddtd ftddtd kseJ ttdddtdd   d tdddtdd   d tdddtdd   d gtddddtdd   ksJ d S )NrM  r   r   r   r   r   r   r   r   r  r:  r  r  r   rL  /   rS  i  )r   rY   r_   r[   r   r   r   r   r   test_issue_14364L  s   L<>*^6:VfPr  c                  C   s   t ddd} d| d  | d  td| d  | d d d   d d  ddtdd	  |  | d  td| d  | d d d   d tdd	   d
|   }t|dd| | d d  ks`J d S )Nr   Tr6  rA  r   r   r:  r   r   r   r  )r^   r_   r[   r.   )r   r  r   r   r   test_issue_15669^  s   <L$r  c                  C   s   t d} t| d }t  tt| d t| d gg}W d    n1 s'w   Y  t , || ||   krPtt| d d t| d d ggksSJ  J W d    d S 1 s^w   Y  d S )Nr   r   r   )r^   r   rv   r   )r   r{   r  r   r   r   test_issue_17988e  s    H"r  c                   C   s@   t dt dt  dt ksJ t dt dt  dksJ d S )Nr   r   r   r   )r6   rg   r   r   r   r   test_issue_18205n  s     r  c                  C   sz   t d d t d d  t d d  t d d  } dt d d dft d dft d dt   d dfgf}t| |ks;J d S )Nr   r   r   r   rM  )r   r+   )r{   r  r   r   r   test_issue_8695s  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   rL  rf  r   r  r   r   r   {  r   z"test_issue_19113.<locals>.<lambda>c                      s   t  ddS )Nr   r   ri  r   r  r   r   r   |  r   c                      r/  r   )r2   r   r  r   r   r   }  r   c                      r/  r   rv  r   r  r   r   r   ~  r   c                      r/  r   )r4   r   r  r   r   r     r   c                      r|  r?  r}  r   r  r   r   r     r  )rc   r   ru   rE   r   r   r  r   test_issue_19113y  s   r  c                  C   s   dt d  dtd t  t  td  } t| tdddt tdt d  d  ks,J t t t  tt  t t  tt t  } t| tdt tt  t t t  ksVJ d S )Nr   r   )r   r_   r   r.   rg   r}   r   r   r   r   r   test_issue_19360  s   (0*.r  c                  C   sB   t tt ttt} |  }| |ksJ d| j|jksJ dd S )Nz(Copied polynomial not equal to original.z9Copied polynomial has different generators than original.)r   r   r   r   copyr   )r   r  r   r   r   test_poly_copy_equals_original  s   
r  c                  C   sJ   t tt ttt} tt| }| |ksJ d| j|jks#J dd S )Nz.Deserialized polynomial not equal to original.z?Deserialized polynomial has different generators than original.)r   r   r   r   pickleloadsdumpsr   )r   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J d S r*  )r   r   rf   )r  r   r   r   test_issue_20389  s   r  c                  C   sL   ddl m}  | d\}}tdt| |  |d| }| tdks$J d S )Nr   )symbolszw Rr   r   )sympyr  r   rg   r   rY   )r  r~   r  r   r   r   r   test_issue_20985  s   r  (3  __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   r  rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   Zsympy.core.addrp   Zsympy.core.basicrq   Zsympy.core.compatibilityrr   Zsympy.core.mulrs   Zsympy.core.powerrt   Zsympy.testing.pytestru   rv   Z	sympy.abcrw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r	  r  r  r  r  r  r  r  r  r#  r%  r'  r(  r+  r,  r-  r0  r1  r3  r6  r9  r<  r>  r@  rE  rH  rI  rK  rP  rR  rT  rW  rY  r]  r_  rb  rc  rd  re  rg  ri  rp  rx  ry  r|  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r#  r'  r.  r1  r2  r3  r5  rC  rD  rE  rd  rh  rj  rm  rn  rp  rz  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   sh   <$d4
-\S"A	 #+

	


7			:4/u+Q#








? ;q($Mr+0**,
	
		