a
    <bG                    @   s	  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZK ddlLmMZM ddlNmOZO ddlPmQZQmRZRmSZSmTZTmUZUmVZVmWZW ddlXmYZY dd	lZm[Z[ dd
l\m]Z]m^Z^m_Z_ ddl`maZa ddlbmcZc ddldmeZe ddlfmgZg ddlhmiZimjZjmkZk ddllmmZmmnZn ddlompZpmqZqmrZrmsZsmtZtmuZu ddlvmwZw ddlxmyZy ddlzm{Z{ ddl|m}Z} ddl~mZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd lmZ dd!lmZ dd"lmZmZmZ dd#lmZmZmZmZmZmZmZmZmZmZmZ d$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.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ׄ Z ddل Zddۄ Zdd݄ Zdd߄ Zdd Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d Zdd Zdd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$d d! Z%d"d# Z&d$d% Z'd&d' Z(d(d) Z)d*d+ Z*d,d- Z+d.d/ Z,d0d1 Z-d2d3 Z.d4d5 Z/d6d7 Z0d8d9 Z1d:d; Z2d<d= Z3d>d? Z4d@dA Z5dBdC Z6dDdE Z7dFdG Z8dHdI Z9dJdK Z:dLdM Z;dNdO Z<dPdQ Z=dRdS Z>dTdU Z?dVdW Z@dXdY ZAdZd[ ZBd\d] ZCd^d_ ZDd`da ZEdbdc ZFddde ZGdS (f  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)Add)_aresame)Tuple)Expr)
Derivativediffexpand)_keep_coeffMul)FloatIIntegerRationaloopi)Pow)Eq)S)Symbol)imre)exp)tanh)sqrt)	Piecewise)sin)Matrix)MatrixSymbol)rootof)signsimp)iterable)SymPyDeprecationWarning)raiseswarns_deprecated_sympywarns)abcdpqtwxyzc                 C   s.   t | |D ]\}}t|| dkr
 dS q
dS )Ng|=FT)zipabs)r|   r}   uv r   p/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/sympy/polys/tests/test_polytools.py_epsilon_eqV   s    r   c                 C   sh   t | t |kr`t| rFt| t|kr@tdd t| |D S dS qdt| to\| j|ddS ndS d S )Nc                 s   s   | ]\}}t ||V  qd S N)
_strict_eq).0r~   r   r   r   r   	<genexpr>a       z_strict_eq.<locals>.<genexpr>FTstrict)typerw   lenallr   
isinstancer   eq)r|   r}   r   r   r   r   ]   s    r   c                  C   s   t tt} t  | tt  W d    n1 s20    Y  t  | tt  W d    n1 sd0    Y  t  | tt  W d    n1 s0    Y  d S r   )r   r   rz   rn   r   r   r   r   test_Poly_mixed_operationsj   s    
**r   c                  C   sv  t d} tjdddt| djt| d| dg| ks:J tjdddt| djt| d| dg| kslJ tjdddt| djt| d| dg| ksJ tjdddt| djt| d| dg| ksJ tjdddttf| djt| d| d	g| dgg| ksJ tjdddtd
jttdtdgtksDJ tjdddtddjttdtdgtksxJ tjdddttdjttdtdgtksJ tjdddttdjttdtdgtksJ tjdddtd
jttdtdgtksJ tjdddtddjttdtdgtksFJ tjdddttdjttdtdgtkszJ tjdddttdjttdtdgtksJ tjdt	titddtt	tt tddksJ tjdtitddttt tddksJ tjddittfddttt ttddks@J tjdtitt
fddttt tt
ddksrJ d S )N         r   r   gensdomain   )r   r   )r   r   r   r   r   r   Tr   rL   r   F)r   Z	compositerS   r   r   rN   r   r   )rM   r   	from_dictr   reprJ   r   rN   rO   rr   r   Kr   r   r   test_Poly_from_dictt   s    
2










r   c                  C   s  t d} tjddgt| djt| d| dg| ks8J tjddgt| djt| d| dg| kshJ tjddgtdjttdtdgtksJ tjddgtddjttdtdgtksJ tjddgttdjttdtdgtksJ tjddgttdjttdtdgtks(J tjd	d
gtdjttd
gtksRJ tjd
d	gtdjttd
tdgtksJ t	t
dd  d S )Nr   r   r   r   r   r   Tr   r         ?        c                   S   s   t jg gttfdS )Nr   )r   	from_listr   r   r   r   r   r   <lambda>   r   z%test_Poly_from_list.<locals>.<lambda>)rM   r   r   r   r   rJ   rN   rO   rR   ry   r=   r   r   r   r   test_Poly_from_list   s    00.002*0r   c                      s  t td ttdt td tddt tt tttdtd t ksRJ t j djt d dg ks|J t jtdjtddgtksJ t jtdjtddgtksJ t jtdksJ t jt djt d dg ksJ t jttdjtddgtks*J t jttdjtddgtksPJ t jtdt td td	dksvJ t	t
 fd
d t	t
fdd t	t
fdd t jttfdt td ttddksJ t jttftdt td ttddksJ t jttftdt td ttddks6J t jttfddt td ttddksdJ td t ksJ t jtdjtddgtksJ t	t
fdd t j djt d dg ksJ t jtdksJ t jttdjtddgtks J t	t
fdd t jt djt d dg ks`J td t ks|J 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sHJ t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jttt dt tt ttt dksJ t	t
fdd t jtdt tt ttt dksJ t	t
fdd t jttt dt tt ttt dksJJ 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s2J t jttf djt dg d dgg ksnJ t jttfdjttdgtdtdggtksJ t jttftdjttdgtdtdggtk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s\J 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      r   z%test_Poly_from_poly.<locals>.<lambda>c                      s   t j ttdS r   r   r   r   rN   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   rO   r   r   r   r   r      r   rN   rO   r   r   zFF(3)c                      s   t j tdS Nr   )r   r   rO   r   gr   r   r      r   r   c                      s   t j ttdS r   r   r   r   rO   r   r   r   r   r      r   c                      s   t j ttdS r   )r   r   r   rN   r   hr   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j tddS Nr   r   )r   r   r   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j ttdS r   r   r   r   r   r   r      r   c                      s   t j tddS r   r   r   r   r   r   r      r   Tr   )r   r   rN   r   rM   r   r   rJ   rO   ry   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sRJ tjtd | djt| d| dg| ksJ tjtd t| djt| d| dg| ksJ tjtd t| djt| d| dg| ksJ tjtt | djt| dg| d| d	gg| ksJ tjtt tt| djt| dg| d| d	gg| ksXJ ttd jtddgt	ks|J 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sfJ tjtd tt	djtddgt	ksJ tjtd ttt	djtdgdggt	ksJ tjtd ttt	djtddggt	ksJ d S )
Nc                   S   s   t tjS r   )r   	from_exprrj   Zeror   r   r   r   r     r   z%test_Poly_from_expr.<locals>.<lambda>c                   S   s   t tdS Nr   )r   r   rj   r   r   r   r   r     r   r   r   r   r   r   r   )
ry   rC   rM   r   r   r   r   rJ   r   rN   )F3r   r   r   test_Poly_from_expr  s&    ..00:>$$&&((**0r   c                  C   s  t t } t| td t| djt| td g| ks8J |  } t| td t| djt| td g| kspJ tt } t| td t| djt| td g| ksJ |  } t| td t| djt| td g| ksJ t t} t| ddgt| djt| ddgg| ksJ |  } t| ddgt| djt| ddgg| ksVJ 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sJ d S )Nr   r   )rN   r   r   r   r   rJ   	get_fieldrO   Zold_poly_ringalgebraic_fieldrc   )domr   r   r   test_poly_from_domain_element.  s$    0000
22
22
r   c                  C   s  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t td	d  t td
d  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  t tdd  ttd  tt  t } t	tttdt| ksZJ t	t
tttgt| ksxJ 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sJJ 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sJ t td"d  t	dtd  d# ttdd#  d dd tdd#tdd#dgksJ tt	dtd  d# ttdd#  d d d g d$sDJ t	d%td  d&t  d dd g dksvJ 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sZJ t	dddd.ttt	td t dt td   dt t  ttksJ t	td d td/ ttksJ 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s>J 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   H  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   J  r   c                   S   s   t tt tttt dS r   r   r   r   r   r   r   K  r   c                   S   s   t ttddS )NT)	symmetricr   r   r   r   r   r   M  r   c                   S   s   t td tdtdS )Nr   r   )r   r   r   r   rO   r   r   r   r   r   N  r   c                   S   s   t td ttddS )Nr   T)r   gaussianr   r   rN   r   r   r   r   r   P  r   c                   S   s   t td tdddS )Nr   r   T)r   r   r   r   r   r   r   r   Q  r   c                   S   s   t td tttdgdS )Nr   r   r   	extension)r   r   rN   rp   r   r   r   r   r   S  r   c                   S   s   t td tdtdgdS )Nr   r   r   r   )r   r   rp   r   r   r   r   r   T  r   c                   S   s   t td ttddS )Nr   Tr   r   r   r   r   r   r   V  r   c                   S   s   t td tdddS )Nr   r   Tr   r   r   r   r   r   r   W  r   c                   S   s   t td ttddS )Nr   Tr   greedyr   r   r   r   r   r   Y  r   c                   S   s   t td ttddS )Nr   Tr   rL   r   r   r   r   r   r   Z  r   c                   S   s   t td ttddS )Nr   Fr   r   r   r   r   r   r   \  r   c                   S   s   t td ttddS )Nr   Fr   r   r   r   r   r   r   ]  r   c                   S   s   t td tdddS )Nr   r   rW   )r   orderr   r   r   r   r   r   _  r   c                   S   s   t td tddS )Nr   rW   r   r   r   r   r   r   r   `  r   c                   S   s   t dddS )Nr   r   r   r   r   r   r   r   r   b  r   c                   S   s   t ddgS Nr   r   r   r   r   r   r   r   c  r   c                   S   s   t dS )Nr   r   r   r   r   r   r   r   d  r   c                   S   s   t dS r   r   r   r   r   r   r   f  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   re   r   r   r   r   r   y  r   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     r   r   r      
      )r   r   r   )r   r   r   r   r      i    Tr   r   F   r   )ry   rD   rH   NotImplementedErrorrC   r|   r   r}   r~   r   iterr   r   r   as_expr
all_coeffsrF   re   r   rc   
get_domainrO   r   r   rT   rU   r   r   r   r   test_Poly__new__G  s    $:222"
2
22
@2.
((,
2
$r   c                   C   s*   t td d jtd d tfks&J d S r   )r   r   argsr   r   r   r   test_Poly__args  s    r   c                   C   s  t tt tt  tjtfks"J t tt tt  tjtfksDJ t tt tt  tjtfksfJ t tt tt  ttjttfksJ t tt tt  ttjttfksJ t tt tt  tttjtttfksJ t tt tt  tttjtttfksJ t tt tt  tttjtttfks4J t tt tt  jtttfksZJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  ddjtttfksJ t tt tt  tttddjtttfksJ t tt tt  ddjtttfks2J t tt tt  ddjtttfks\J t tt tt  ddjtttfksJ t tt tt  tdjtttfksJ t tt tt  tdjtttfksJ t tt tt  tdjtttfksJ t tt tt  tttddjtttfks4J t tt tt  dd	d
jtttfks`J t tt tt  ddd
jtttfksJ d S )Nz	x > p > q)sortz	p > x > qz	p > q > xr   wrtr   r   zq > x)r   r   zp > x)r   r   r   r   r   r   r   r   r   test_Poly__gens  s,    """&&*,,&***0******0,r   c                   C   s@   t tjt dttdksJ t td jt dttdks<J d S )Nr   r   r   )r   r   ZzerorN   rO   r   r   r   r   test_Poly_zero  s    r   c                   C   s@   t tjt dttdksJ t td jt dttdks<J d S )Nr   r   r   )r   r   ZonerN   rO   r   r   r   r   test_Poly_one  s    r   c                  C   s
  t tdd  td} td}tttddtttdddd  t| dgg g| t| d| dgg| fkstJ tttddtttdddd  t|dgg g|t|d|dgg|fksJ tttttttdddd  t| d| dgg| t| dgg g| fks J tttddttttdd  t| dgg g| t| d| dgg| fksvJ 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sVJ 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sJ 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sJ 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sTJ 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sRJ 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sVJ 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sHJ 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sJ 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sJ ttd ttttd td	d
dd  tddggt	tddggt	fks: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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sJ 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sJ 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	s6J 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
sJ d S )Nc                   S   s   t ttS r   )r   r   _unifyr   r   r   r   r   r     r   z"test_Poly__unify.<locals>.<lambda>r   r   r   r   r   r   rO   r   Tr   zQQ<sqrt(2) + I>za,bZZ[a]zZZ(a,b)zZZ(a)c                   S   s&   t t td td t  tddddS )Nr   TrK   ZZ(x)r   )r   r   r   r   r   r   r   r   r     r   zQQ(x)zQQ[x])ry   rA   rM   r   r   r  r   rJ   rN   rO   rc   rP   Zunifyrp   rL   r|   r}   Z	to_domainrF   r   r   )r   ZF5FABr   r   r   r   r   test_Poly__unify  sb    $(
$(
VVHLLRVVRVVTXXNRRNRRTXXPTT0.
0.
0.
r  c                   C   s4  t td d jthksJ t td tt  jttthks@J t td tt  tjttthksfJ t td ttt  jttthksJ t td ttt  tjttthksJ t td ttt  ttdjttthksJ t dt td  tttjthksJ t ttt tjtthks0J d S Nr   r   r   )r   r   free_symbolsr   r   rr   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s`J t td ttt  jt ksJ t td ttt  tjtthksJ t td ttt  ttdjtthksJ d S r  )r   r   r	  setr   r   rr   rS   r   r   r   r   test_PurePoly_free_symbols  s     $$(r  c                  C   sN  t ttt ttkdu sJ t tttdt ttkdu s<J t ttt tttdkdu s\J t tttt dt ttkdu sJ t ttt tttt dkdu sJ t tt ttt ttkdu sJ t tttt ttkdu sJ t ttt tttkdu sJ t td d tt td d tkdu s2J t td d tt td d tkdu s`J t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ td}t |d td  t	d  td t	  t	dd} t |d td  t	d  td t	  t	d	d}| |kdu sJJ d S )
NTr   Fr   r   r   t0zQQ[x,t0]zZZ(x,t0))
r   r   rO   rN   r|   r   r   nerk   r   )r   r   r  r   r   r   test_Poly__eq__  s(      $$" ....r  c                  C   sL  t ttt ttkdu sJ t tttdt ttkdu s<J t ttt tttdkdu s\J t tttt dt ttkdu sJ t ttt tttt dkdu sJ t tt ttt ttkdu sJ t tttt ttkdu sJ t ttt tttkdu sJ t td d tt td d tkdu s2J t td d tt td d tkdu s`J t tttd} t tttd}| |du sJ | |du sJ | j|dddu sJ | j|dddu sJ t tttd} t tttd}| |du sJ | |du sJ | j|dddu s0J | j|dddu sHJ d S )NTr   Fr   r   r   )r   r   rO   rN   r|   r   r   r  r   r   r   r   r   test_PurePoly__eq__?  s,      $$" ..r  c                   C   sH   t tttd d tdu s"J t tttd d tdu sDJ d S )Nr   r   T)r   r   r   r   r   r   r   r   test_PurePoly_Polyb  s    "r  c                   C   s   t dt  tksJ t dt dd tks4J t dt dd tksPJ t td  tkshJ ttdd  t td dd tksJ tt dt  tsJ d S )Nr   rN   r   rO   c                   S   s   t td ddS )Nr   rN   r   r   r   r   r   r   r   o  r   z&test_Poly_get_domain.<locals>.<lambda>皙?)	r   r   r   rN   rO   ry   rF   r   rT   r   r   r   r   test_Poly_get_domaing  s    r  c                   C   sL  t dt d tt dt d ks*J t dt d dt dt d ksTJ t dt d tt dt d ddksJ t dt d dt dt d ddksJ t tddt tdd dt dt d	 ksJ t dt d	 dt tddt tdd ksJ ttd
d  ttdd  ttdd  d S )Nr   r   rN   rO   r   r   rR   r  皙?c                   S   s   t td d tS r   )r   r   
set_domainrN   r   r   r   r   r     r   z&test_Poly_set_domain.<locals>.<lambda>c                   S   s   t td ddtS )Nr   r   r   )r   r   r  rO   r   r   r   r   r     r   c                   S   s   t tt tttt S r   )r   r   r   r  rN   r   r   r   r   r     r   )	r   r   r  rN   rO   re   ry   rF   rD   r   r   r   r   test_Poly_set_domainu  s    **..68r  c                   C   s2   t td d dd dks J ttdd  d S )Nr   r   r   c                   S   s   t td d  S r   )r   r   get_modulusr   r   r   r   r     r   z'test_Poly_get_modulus.<locals>.<lambda>)r   r   r  ry   rE   r   r   r   r   test_Poly_get_modulus  s     r  c                   C   s   t td d dddt td d ddks2J t td d dddt td d ddksdJ t td d dt td d ddksJ ttdd  d S )Nr   r   r   r   r   c                   S   s   t td d dS r   )r   r   set_modulusr   r   r   r   r     r   z'test_Poly_set_modulus.<locals>.<lambda>)r   r   r  ry   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  s    r  c                   C   s&   t td dt td ks"J d S Nr   r   )r   r   Z
sub_groundr   r   r   r   test_Poly_sub_ground  s    r  c                   C   s*   t td dt dt d ks&J d S r  )r   r   Z
mul_groundr   r   r   r   test_Poly_mul_ground  s    r  c                   C   sP   t dt d dt td ks&J t dt d dt td ksLJ d S )Nr   r   r   r   )r   r   Z
quo_groundr   r   r   r   test_Poly_quo_ground  s    &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"  ry   r>   r   r   r   r   test_Poly_exquo_ground  s    &r#  c                   C   sH   t t d t tt t d t  kr>t td tksDn J d S r   )r   r   r   r   r   r   r   test_Poly_abs  s    r$  c                   C   sF   t t d t t t d t   kr<t td tksBn J d S r   )r   r   negr   r   r   r   test_Poly_neg  s    r&  c                   C   s  t dtt dtt dtks$J t dtt dt t dtksFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t td tksJ t " t dttt  W d    n1 s20    Y  t ttd t td tks^J dt tt t td tksJ d S Nr   r   )r   r   addr   rz   rr   r   r   r   r   test_Poly_add  s    $"$&(("2"r)  c                   C   s  t dtt dtt dtks$J t dtt dt t dtksFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t dt tksJ t " t dttt  W d    n1 s20    Y  t ttd t td tks^J dt tt t dt tksJ d S )Nr   r   r   )r   r   subr   rz   rr   r   r   r   r   test_Poly_sub  s    $"$&(("2"r+  c                   C   s~  t dtt dtt dtks$J t dtt dt t dtksFJ t dtt dtt dtksjJ t dttt dt t dttksJ t dtt dttt dttksJ t dttt dtt t dttksJ t dtt t ttksJ t " t dttt  W d    n1 s,0    Y  t ttd t dt tksXJ dt tt t dt tkszJ d S )Nr   r   r      r   )r   r   mulr   rz   rr   r   r   r   r   test_Poly_mul  s    $"$&((2"r.  c                   C   s   t tt t td tddks"J tt t t td tddksDJ dt t t dt tddksfJ tdt t t dt tddksJ t ttd t dt tddksJ d S )Nr   rN   r   )r   r   rj   r   r   r   r   test_issue_13079  s
    """&r0  c                   C   s4   t tt tt t td td  ttks0J d S Nr   )r   r   r   Zsqrr   r   r   r   test_Poly_sqr  s    r2  c                   C   s   t ttdt td tks"J t tttdt td tksHJ t dt ttdt dtd  ttksvJ t dt tttdt dtd  ttksJ t dt t ttd t dtd  td  ttksJ ttdd	  ttd
d	  d S )Nr   r   r      r   r   iW  c                   S   s   t tt d ttd S )Nr   r   r   r   r   r   r   r   r   r     r   ztest_Poly_pow.<locals>.<lambda>c                   S   s   t tt d ttt S r   r4  r   r   r   r   r     r   )r   r   powrd   r   ry   	TypeErrorr   r   r   r   test_Poly_pow  s    "&.28r7  c                  C   s:  t td t t } }|t dt }}t| |||fks<J | | |ksLJ | | |ks\J t| t||fksrJ | t |ksJ | t |ksJ t dtt dt }}td|||fksJ d| |ksJ d| |ksJ t tt t dksJ t td t t tksJ t tt td  dt ks6J d S )Nr   r   r   )r   r   divmod)r   r   r   rr   r   r   test_Poly_divmod  s    r:  c                   C   s  t tt ttt tt ttkdu s(J t tt tt tt ttkdu sNJ t tt ttt tt tkdu stJ t tt tt tt tkdu sJ t tt tt tt tkdu sJ t tt tttt kdu sJ t tt ttt kdu sJ t tt tttt kdu sJ t tt ttt kdu s<J t tt ttt kdu s\J t tt ttt tt ttkdu sJ t tt tt tt ttkdu sJ t tt ttt tt tkdu sJ t tt tt tt tkdu sJ t tt tt tt tkdu s"J t tt tttt kdu sDJ t tt ttt kdu sdJ t tt tttt kdu sJ t tt ttt kdu sJ t tt ttt kdu sJ t ttttkdu sJ t ttttkdu sJ d S )NTF)r   r   r   rr   r   r   r   r   test_Poly_eq_ne  s,    (&&$$ "  *((&&" "  r;  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_nonzero1  s    r=  c                   C   s  t dtjdu sJ t dtjdu s(J t dtjdu s<J t dtjdu sPJ t td tjdu shJ t td d tjdu sJ t td tjdu sJ t dt d tjdu sJ t dt d tjdu sJ t dt d tjdu sJ t dtjdu sJ t ttjdu sJ t tt t	 d j
du s<J t tt t	 d j
du s\J t tt t	 d jdu s|J t tt t	 d jdu sJ t tt jdu sJ t tt d jdu sJ t td tt  jdu sJ t td tt  jdu sJ t tjdu s$J t tt jdu s<J t tt jdu sTJ t tjdu shJ t td td	  td
  td  td  td  d jdu sJ t td td	  td
  td  td  td  d jdu sJ d S )Nr   Tr   Fr   r   r   r3     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_properties6  sD          2
2rB  c                   C   s   t td t d jdu sJ t td dt  d jdu s@J t dt d ddjdu s^J t dtd  dt  d ddjdu sJ d S )	Nr   r   TFr   r      r   )r   r   Zis_irreducibler   r   r   r   test_Poly_is_irreduciblea  s    "rD  c                   C   s   t td tddksJ t td ttt td ks@J t td ttt td ksdJ t tt ttttd ksJ t tt ttttd ksJ d S )Nr   r   r   )r   r   subsr   r   r   r   r   test_Poly_subsi  s
    $$"rF  c                   C   s  t td tt td ks"J t td tt td ksDJ ttdd  t td ttt td ksvJ t td ttt td ksJ t tt ttt tt ksJ t tt ttt tt ttksJ t tt ttt tt ksJ t tt ttt tt ttks6J t tt ttt tt ks\J ttdd  t tt tttt tt tksJ t tt tttt tt tksJ ttdd  ttdd  d S )Nr   c                   S   s   t tt tS r   )r   r   r   replacer   r   r   r   r   r   w  r   z#test_Poly_replace.<locals>.<lambda>c                   S   s   t tt ttS r   r   r   r   rG  r   r   r   r   r     r   c                   S   s   t tt tttS r   rH  r   r   r   r   r     r   c                   S   s   t tt tttS r   rH  r   r   r   r   r     r   )r   r   rG  r   ry   rE   r   r   r   r   r   r   test_Poly_replaces  s    ""$$$(&*&**rI  c                   C   s  t tdd  ttt ttttttt ttks:J ttt ttttttt ttksfJ ttt ttttttt ttksJ ttt ttttttt ttksJ ttt ttjtdttt ttksJ ttt ttjtdttt ttksJ d S )Nc                   S   s   t tt ttS r   )r   r   r   reorderr   r   r   r   r   r     r   z#test_Poly_reorder.<locals>.<lambda>r   )ry   rE   r   r   r   rJ  r   r   r   r   test_Poly_reorder  s    ,,,,,rK  c                  C   s   t td ttd   tttt} |  td ttd   krN| jttfksRJ t tt t tttdt tt t ttksJ ttdd  ttdd  d S )Nr   r   c                   S   s"   t ttd  td  tttS r1  r   r   r   ltrimr   r   r   r   r     r   z!test_Poly_ltrim.<locals>.<lambda>c                   S   s   t tt t ttdS )Nr   rL  r   r   r   r   r     r   )	r   r   r   r   rM  r   r   ry   rE   r   r   r   r   test_Poly_ltrim  s
    $.4rN  c                   C   s^   t tt d tttttdu s&J t tt t tttttdu sLJ ttdd  d S )Nr   TFc                   S   s"   t ttd  td  tttS r1  )r   r   r   has_only_gensr   r   r   r   r   r     r   z)test_Poly_has_only_gens.<locals>.<lambda>)r   r   r   r   rO  ry   rD   r   r   r   r   test_Poly_has_only_gens  s    &&rP  c                   C   s   t dt d dd t dt d ddks0J t dt d dd t dt d ddks`J ttdd  ttdd  d S )	Nr   r   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   rQ  r   r   r   r   r     r   )r   r   rR  ry   rF   rG   r   r   r   r   test_Poly_to_ring  s    00rS  c                   C   s   t dt d dd t dt d ddks0J t dt d dd t dt d ddks`J t td d dd t td d ddksJ t dt d dd t dt d ddksJ t dt d	  t dt d	 ksJ d S )
Nr   r   rN   r   rO   r   r   r   r   )r   r   Zto_fieldr   r   r   r   test_Poly_to_field  s
    0000rT  c                   C   sd   t dt  t dt ks J t td  t td ks@J t dt  t td ks`J d S )Nr   r  r   )r   r   Zto_exactr   r   r   r   test_Poly_to_exact  s      rU  c                  C   s   t td d ttt d} |  t td d tddks<J | jddt td d tddksbJ t dtt t dttksJ d S )	Nr   r   r   rN   TrK   rO   r   )r   r   rO   r   Zretractr   r   r   r   test_Poly_retract  s    "&rV  c                  C   s  t td dtd   dt  d } | ddt dtks>J | ddt dtksXJ | ddt dt d tkszJ | ddt dtd  dt  d tksJ | ddt td dtd   dt  d tksJ | tddt dtksJ | tddt dtksJ | tddt dt d tks>J | tddt dtd  dt  d tkspJ | tddt td dtd   dt  d tksJ d S )Nr   r   r   r   r   )r   r   slicer   r   r   r   test_Poly_slice  s    $".6&2rX  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g dksJ t ttd  dtd  td   dddgksJ t ttd  dtd  td   d	ddgksJ d S )
Nr   r   r   r   r   r   r   r   r   rV   rW   )r   r   Zcoeffsr   r   r   r   r   test_Poly_coeffs  s    "..6rZ  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g d	ksJ t ttd  dtd  td
   dddgksJ t ttd  dtd  td
   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )r   r   r   r   rV   r   r   r   r   rW   )r   r   Zmonomsr   r   r   r   r   test_Poly_monoms  s    "..6r`  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd	  dt  d t g d
ksJ t ttd  dtd  td   dddgksJ t ttd  dtd  td   dddgksJ d S )Nr   r   r   r   r   r   r   r   r   r   )r\  r   rc  rb  r   )r]  r   rc  rb  r   rV   r^  r   r_  r   rW   )r   r   Ztermsr   r   r   r   r   test_Poly_terms  s&    "..rh  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g dksJ d S )Nr   r   r   r   rY  r   )r   r   r   r   r   )r   r   r   r   r   r   r   test_Poly_all_coeffs  s
    ".ri  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd  dt  d t g d	ksJ d S )
Nr   r   r   r   r   r   r[  r   )r]  r   r\  r   r   )r   r   Z
all_monomsr   r   r   r   test_Poly_all_monoms  s
    ".rk  c                   C   s   t dt dgksJ t dt dgks0J t dt d t ddgksRJ t dtd  dt  d t g dksJ t dtd	  dt  d t g d
ksJ d S )Nr   ra  r   rb  r   rc  r   rd  r   )re  )rj  r   )r\  r   rc  rb  )r   r   Z	all_termsr   r   r   r   test_Poly_all_terms  s    "  rl  c                  C   sh   t td dt  d } t td dt  d }dd }| ||ksJJ dd }| ||ksdJ d S )Nr      i  r   c                 S   s   | \}|dd|   S Nr   r   r   monomcoeffkr   r   r   func'  s    z test_Poly_termwise.<locals>.funcc                 S   s   | \}|f|dd|   fS rn  r   ro  r   r   r   rs  -  s    )r   r   Ztermwise)r   r   rs  r   r   r   test_Poly_termwise#  s    rt  c                   C   s   t dt dksJ t dt dks,J t tt dksBJ t td t dks\J t td d t dkszJ t td t d t dksJ d S )Nr   r   r   r   )r   r   lengthr   r   r   r   test_Poly_length4  s    rv  c                   C   s   t dt i ksJ t dttt i ks0J t dt ddiksJJ t dttt ddikshJ t td d t dddksJ t td d ttt dddksJ t dtd  t td  d	t t  d
t t   dd	d
dksJ d S )Nr   r   r   r   r   r   r   r   )r\  r   ))r   r   r   rw  r   r   )r   r   r   r   r   r   r   r   r   )r   r   Zas_dictr   r   r   r   r   r   test_Poly_as_dict>  s    $(8r{  c                      s  t dt dksJ t dttt dks0J t dt dksFJ t dttt dks`J t td d t td d ksJ t td d ttt td d ksJ t dtd  t td  dt t  dt t   dtd  t td  dt t  dt t  ksJ t td dt td   t tt   t td  dt td   ksnJ  tdidt dtd   ksJ  td	id
dt  td  ksJ  tdtd	idksJ  dd	dksJ tt fdd d S )Nr   r   r   r   r   r      r   r?  iH   i{  c                      s     tdiS r   )r   r   r   r   r   r   r   c  r   z#test_Poly_as_expr.<locals>.<lambda>)r   r   r   r   r   ry   rD   r   r   r   r   test_Poly_as_exprL  s$    &*..
$,((r~  c                   C   sp   t td tt  dt  tdd t td dtd   dtd	   td  dtd   d
 tddkslJ d S )Nr      Tr   r3  r   r   iB  r,  iAF rO   r   )r   r   rc   Zliftr   r   r   r   test_Poly_liftf  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s`J t td t dt ttfksJ t td t dt ttfksJ t td t td  td	 td    d
t tt t td t  fksJ d S )Nr   r   r   r   r\  r  )r  rC  r   )r   r   rC  )r   r   deflater   r   r   r   r   r   test_Poly_deflatel  s       $$"r  c                  C   s   t td t ttd   tt  d t} |  t td t ttd   tt  d ttksbJ | jddt td t ttd   tt  d ttksJ d S )Nr   r   r   T)front)r   r   r   Zinjectr   r   r   r   test_Poly_injectx  s    *8r  c               	   C   s  t td t ttd   tt  d tt} | tt ttd  td t t  d tddksdJ | tt ttd  td t t  d tddksJ tt t t t }t |ttttt}|tt |ttttddksJ |ttt |tttddksJ |tttt |ttddks,J |tt |ttttd	dksPJ |ttt |tttd
dkstJ |tttt |ttddksJ ttdd  tt	dd  d S )Nr   r   r   r   r   ZZ[y]zZZ[x, y]zZZ[x, y, z]zZZ[w]zZZ[t, w]zZZ[z, t, w]c                   S   s   t tt tttt dtS r   )r   r   r   rN   r   ejectr   r   r   r   r     r   z!test_Poly_eject.<locals>.<lambda>c                   S   s   t tt ttttS r   )r   r   r   r   r  r   r   r   r   r     r   )
r   r   r   r  r   r   r   ry   rG   r   )r   exr   r   r   r   test_Poly_eject  s    ,88"$$$$$r  c                   C   sj   t ttt t ttksJ t tt tt t tt ttksFJ t dtt t dttksfJ d S r   )r   r   r   excluder   r   r   r   test_Poly_exclude  s    (r  c                   C   s  t dttddksJ t dttddks4J t dttddksNJ t dttddkshJ ttdd  ttdd  t dtttdksJ t dtttdksJ t dttddksJ t dttd	dksJ ttd
d  ttdd  d S )Nr   r/  r   r   c                   S   s   t dttdS )Nr   r   r   r   _gen_to_levelr   r   r   r   r     r   z)test_Poly__gen_to_level.<locals>.<lambda>c                   S   s   t dttdS r  r  r   r   r   r   r     r   r   r   c                   S   s   t dtttS r   )r   r   r   r  r   r   r   r   r   r     r   c                   S   s   t dttdS )Nr   r   r  r   r   r   r   r     r   )r   r   r   r  ry   rE   r   r   r   r   test_Poly__gen_to_level  s    r  c                   C   s4  t dt t u sJ t dt dks.J t tt dksDJ t dtjddt u s`J t dtjdddkszJ t ttjdddksJ t dtjtdt u sJ t dtjtddksJ t ttjtddksJ t dtjddt u sJ t dtjdddksJ t ttjdddks:J ttdd  ttdd  ttdd  t dtt dks~J t d	t tt dksJ t tt tt dksJ t dttjtddksJ t d	t ttjtddksJ t tt ttjtddksJ t dttjtddks:J t d	t ttjtddks\J t tt ttjtddks~J tdtt u sJ tdtdksJ tttdksJ tttd	  tdksJ tttd	  td	ksJ tttd	  tdksJ ttdks"J tt	d
d  tt	dd  ttdd  ttdd  tt dttt u svJ tt dttdksJ tt td	 td  tdksJ tt td	 td  ttddksJ tt td	 td  ttdksJ tt td	 td  td  ttdks0J d S )Nr   r   genr   c                   S   s   t dtjddS Nr   r  r   r   r   r   r   r   r   r     r   z"test_Poly_degree.<locals>.<lambda>c                   S   s   t dtjtdS r  )r   r   r   r   r   r   r   r   r     r   c                   S   s   t dtjddS )Nr   r   r  r  r   r   r   r   r     r   r   c                   S   s   t td td  S r!  r   r   r   r   r   r   r   r     r   c                   S   s   t td td  dS Nr   r   r   r  r   r   r   r   r     r   c                   S   s
   t tdS )Ng?r   r   r   r   r   r   r     r   c                   S   s   t td td d  tS r  r  r   r   r   r   r     r   r   r   )
r   r   r   rf   ry   rE   r   r   rg   r6  r   r   r   r   test_Poly_degree  sR    """"$(&r  c                   C   s(  t dt t fksJ t dtt t t fks:J t dttt t t t fks`J t dt dksvJ t dtt dksJ t dttt dksJ t td t td td   d  dksJ tdtdksJ tttd	ksJ tttd  d
ksJ ttdd  d S )Nr   r   r   r   rw  r   r   )r   r   r   r   r   c                   S   s   t dS r   )r   r   r   r   r   r     r   z'test_Poly_degree_list.<locals>.<lambda>)r   r   r   rf   r   r   ry   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s0J t td td   dksPJ t tt t td   dkstJ t td t d  dksJ ttt td  dksJ ttt td  ttdksJ tddksJ tt td td  td  dks
J tt td td  td  tdks6J tt td td  td  ttdksdJ tt td tt t  td td   td  ttdksJ d S )	Nr   r   r   r   r   r   	   r   )r   r   r   r   r   r   r   r   r   test_Poly_total_degree  s    0 $  *,.r  c                   C   s   t td t tt td tt  ks.J t tt tt tt tttksVJ t ttd  tt tt td  ksJ d S r1  )r   r   r   Z
homogenizer   r   r   r   r   test_Poly_homogenize  s    .(r  c                   C   s   t dtt t u sJ t dtt dks2J t ttt dksJJ t tt tt dksfJ t td tt d u sJ t tt t tt d u sJ t td dtd  td   dt td    dksJ t td dtd  td   dt td    d u sJ d S )Nr   r   r   r   r   r  r   )r   r   r   Zhomogeneous_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sNJ t ttd  dtd  td   ddksJ t ttd  dtd  td   ddksJ tttd  dtd  td   dddksJ tttd  dtd  td   dddksJ d S )	Nr   r   r   r   r   rV   rW   r   )r   r   r	   r   r   r   r   r   test_Poly_LC  s    "220r  c                   C   sR   t dt dksJ t dt dks,J t dtd  t t dksNJ d S )Nr   r   r   )r   r   ZTCr   r   r   r   test_Poly_TC#  s    r  c                   C   s   t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   ddksJ t ttd  dtd  td   ddksJ d S )Nr   r   r   r   r   rV   rW   )r   r   ZECr   r   r   r   r   test_Poly_EC)  s
    "2r  c                      s  t dtddksJ t dttdks0J t dtddksHJ t dttdks`J t td tddks|J t td ttd dksJ t td ttd dksJ t td ttd dksJ t dt td  d ttddksJ t dt td  d ttttd  dks<J t dt t td d	t  tt  td	kstJ  tdksJ  tt dtd ksJ   tdt td d	 ksJ tt fd
d tt	dd  tt	dd  tt	dd  d S )Nr   r   r,  r   r  r   r         c                      s
     tS r   )rq  r   r   r   r   r   r   H  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   J  r   c                   S   s   t td dt S Nr   r   r  r   r   r   r   r   K  r   c                   S   s   t td dt t S r  )r   r   r  r   r   r   r   r   r   L  r   )
r   r   r  r   rn   r   rq  ry   r   
ValueErrorr   r   r   r   test_Poly_coeff2  s&       ,4$ (r  c                   C   s<  t dtddksJ t dtddks0J t dtddksHJ t dtddks`J t td tddks|J t td tddksJ t td tddksJ t td tddksJ t dt td  d ttdddksJ t dt td  d ttdddks*J ttdd	  d S )
Nr   r   r,  r   r  r   r   c                   S   s   t tt d ttdS r   )r   r   r   nthr   r   r   r   r   ^  r   ztest_Poly_nth.<locals>.<lambda>)r   r   r  r   ry   r  r   r   r   r   test_Poly_nthO  s    ,.r  c                   C   s,  t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   dd	ksJ t ttd  dtd  td   d
dksJ tttd  dtd  td   ddtd td  ksJ tttd  dtd  td   d
dttd  ks(J d S )Nr   r   r   r   r\  r   r   rV   r^  rW   r_  r   )r   r   r
   r   r   r   r   r   test_Poly_LMa  s    "22<r  c                  C   sp   t td td  t td t td   tt t  d } dd }| jdddksXJ | j|dd	kslJ d S )
Nr   r   r   c                 S   s   t t| S r   )tuplereversed)rp  r   r   r   r   o  r   z+test_Poly_LM_custom_order.<locals>.<lambda>rV   r   )r   r   r   rx  )r   r   r   r   r
   )r   Zrev_lexr   r   r   test_Poly_LM_custom_orderm  s    <r  c                   C   s   t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   dd	ksJ t ttd  dtd  td   d
dksJ d S )Nr   r   r   r   r   r   r   rV   r_  rW   r^  )r   r   ZEMr   r   r   r   r   test_Poly_EMu  s
    "2r  c                   C   s0  t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   d	d
ksJ t ttd  dtd  td   ddksJ tttd  dtd  td   d	ddtd  td  ksJ tttd  dtd  td   ddttd  ks,J d S )Nr   ra  r   rb  r   )r\  r   r   r   rV   rf  rW   rg  r   )r   r   r   r   r   r   r   r   test_Poly_LT~  s    "22@r  c                   C   s   t dt dksJ t dt dks,J t dtd  t t dksNJ t ttd  dtd  td   d	d
ksJ t ttd  dtd  td   ddksJ d S )Nr   ra  r   rb  r   )r   r   r   r   rV   rg  rW   rf  )r   r   ETr   r   r   r   r   test_Poly_ET  s
    "2r  c                   C   sF   t dt dksJ t dt dks,J t dt dksBJ d S Nr   r   r   )r   r   Zmax_normr   r   r   r   test_Poly_max_norm  s    r  c                   C   sF   t dt dksJ t dt dks,J t dt dksBJ d S r  )r   r   Zl1_normr   r   r   r   test_Poly_l1_norm  s    r  c                  C   s  t td t \} }| dkr@|t td tddkr@| tksDJ t td d t \} }| dkr|t td tddkr| tksJ t td d tjdd\} }| dkr|t td tddkr| tksJ t tt d tjdd\} }| tkr*|t tt tddkr*| tt ks.J 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)convertr  r   rS   )	r   r   Zclear_denomsr   rN   rO   r   rp   rS   )rq  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sbJ | t} |t}| || |fksJ 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   rj   rp   r   r   r   r   r   test_issue_20427  sX    



$


&. 
&	
r  c                   C   s`  t td  t td d t ks(J t td tt td d t ksRJ t td tdft td d t ksJ t tt d tt td t d t ksJ t tt d tt ttd  d t ksJ t tt d ttt td t d td d  ks"J t tt d ttt ttd  d td d  ks`J t tt d tdft td t d td d  ksJ t tt d tdft ttd  d td d  ksJ t tt d ttt td td  d tt  ksJ t tt d ttt td td  d tt  ks\J d S )Nr   r   r   r?  r   )r   r   Z	integrater   r   r   r   r   test_Poly_integrate  s    (*.22>>@@>r  c                   C   sx  t td t  t dt d ks(J t td t tt dt d ksRJ t td t tdft dt d ksJ t td td  tt  tt dt td  t ksJ t td td  tt  tt dtd  t t ksJ t td td  tt  ttt dtd  ttks:J t td td  tt  ttt dtd  ttksxJ t td td  tt  tdft dtd  ttksJ t td td  tt  tdft dtd  ttksJ t td td  tt  ttt dt t d ks6J t td td  tt  ttt dt t d kstJ d S )Nr   r   r   )r   r   r^   r   r   r   r   r   test_Poly_diff  s    (*.>>>>@@>r  c                   C   s   t ttd t tdt d ks(J t ttd t tddtttd t tks\J tttd t t tdt d ksJ d S )Nr   r   Fevaluate)r^   r   r   r]   Zdoitr   r   r   r   test_issue_9585  s
    (r  c                  C   s  t dtddksJ t dtddks0J t ttddksHJ t dtdddksbJ t dtdddks|J t ttdddksJ t dttddksJ t dttddksJ t tttddksJ t dtdddksJ t dtdddksJ t ttdddks6J ttdd  ttdd  ttdd  t d	ttdt d	tksJ t d
t ttdt d
t tksJ t tt ttdt dt tksJ t d	tttdt d	tksJ t d
t tttdt d
t tks&J t tt tttdt dt tksRJ t d	tttdt d	tksvJ t d
t tttdt dtksJ t tt tttdt dt tksJ t tt t tttdit dt tksJ t tt t tttdit dt d tks2J t tt t tttdtdidks^J t tt t tttdtdidksJ t tt t ttddksJ t tt t ttddgdksJ t td ddtjtdd
ksJ t td ddt	d
t	d
d ks*J tt
dd  ttdd  td} d
|  t d
|   td
  d td
 d
t  d  }t td
 | d t  |  d tdd}|td td  |ksJ t td
 | d t  |  d ttdd}|td td  t |tddksJ d S )Nr   r   r   r   c                   S   s   t dtddS Nr   r   r   r   evalr   r   r   r   r     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   r>  r,  r?  1   0   )r?  r   rN   r   r   c                   S   s   t tt t ttdS )N)r?  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  rj   Halfr   r   r   r   r   .  r   alphaz	ZZ[alpha]zZZ(alpha,z))r   r   r  ry   rE   r   rj   r  re   rp   r  rG   rk   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sHJ | ddt dt d ksfJ | ddddkszJ d S )Nr   r   r   r?  r   r   -   )r   r   r   r   r   r   r   r   test_Poly___call__:  s    $$r  c                   C   s  t td td d gtd ttd tttd d tgksBJ t ttd ttd d gtd ttd tttd d tgksJ t td ttd d tgtd ttd tttd d tgksJ t ttd tttd d tgtd ttd tttd d tgks"J t td td d gttd ttd ttttd d ttgkslJ t ttd ttd d gttd ttd ttttd d ttgksJ t td ttd d tgttd ttd ttttd d ttgksJ t ttd tttd d tgttd ttd ttttd d ttgksbJ t td td d gd ttd tttd d tgksJ t ttd ttd d gd ttd tttd d tgksJ t td ttd d tgd ttd tttd d tgks4J t ttd tttd d tgd ttd tttd d tgksJ t dtd d gd tdtttd d tgksJ t dtd d gd tdtttd d tgksJ t dttd d tgd tdtttd d tgks6J t dttd d tgd tdtttd d tgksvJ t td d dgd ttd d ttdtgksJ t td d dgd ttd d ttdtgksJ t ttd d tdgd ttd d ttdtgks*J t ttd d tdgd ttd d ttdtgksjJ t ttttttttgttddd ttttddttttddgksJ ttdd	  d S )
Nr   r   r   rV   r   rN   r   c                   S   s   t ddgS r'  )r   r   r   r   r   r   s  r   z.test_parallel_poly_from_expr.<locals>.<lambda>)r   r   r   r   ry   r?   r   r   r   r   test_parallel_poly_from_exprB  s8   
"

"

"
"












&
r  c                  C   s  t d td  t t  } }t t d }}dd | |||fD \}}}}||||fks\J |||ksnJ |||ksJ |||ksJ t| |||fksJ t| ||ksJ t| ||ksJ t| ||ksJ t| |t t||fksJ t| |t t|ksJ t| |t t|ks(J t| |t t|ks@J t| |t tf||fks^J t| |t tf|ksxJ t| |t tf|ksJ t| |t tf|ksJ t||||fksJ t|||ksJ t|||ksJ t|||ks J t| |dd||fksJ t| |dd|ks4J t| |dd|ksLJ t| |dd|ksdJ t||dd||fksJ t||dd|ksJ t||dd|ksJ t||dd|ksJ ttdd	  ttd
d	  ttdd	  ttdd	  d S )Nr   r   c                 S   s   g | ]}t |ttqS r   r4  r   r   r   r   r   
<listcomp>z  r   ztest_pdiv.<locals>.<listcomp>TpolysFc                   S   s
   t ddS Nr   r   )r   r   r   r   r   r     r   ztest_pdiv.<locals>.<lambda>c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  )r   r   r   r   r   r     r   )r   r   r   r   r   r   ry   r@   )r   r   r   r9  r  GQRr   r   r   	test_pdivv  sF    r  c                     sd  t d td  t t   t t d } }dd  | |fD \}}}}||||fks\J |||ksnJ |||ksJ |||ksJ t | |fksJ t |ksJ t | ksJ t | ksJ t t t| |fksJ t t t|ksJ t t t| ks(J t t t| ks@J t t tf| |fks^J t t tf|ksxJ t t tf| ksJ t t tf| ksJ t||||fksJ t|||ksJ t|||ksJ t|||ks J t dd||fksJ t dd|ks4J t dd|ksLJ t dd|ksdJ t||dd| |fksJ t||dd|ksJ t||dd| ksJ t||dd| ksJ ttdd	  ttd
d	  ttdd	  ttdd	  t d d dt  d   dt d d  }}t d d d }}	t ||	fksVJ t dd||	fksrJ t dd||fksJ t td||fksJ t t	d||	fksJ t tdd||	fksJ t tdd||fksJ t t	dd||	fks J t t	dd||	fks>J t |	ksRJ t dd|	ksjJ t dd|ksJ t td|ksJ t t	d|	ksJ t tdd|	ksJ t tdd|ksJ t t	dd|	ks J t t	dd|	ksJ t |ks.J t dd|ksFJ t dd|ks^J t td|ksvJ t t	d|ksJ t tdd|ksJ t tdd|ksJ t t	dd|ksJ t t	dd|ksJ t d dt  t d    } t | ks&J t dd| ks>J tt
 fdd	 tt
 fdd	 t t	d| ks~J t tdd| ksJ tt
 fdd	 t t	dd| ksJ t t	dd| ksJ tt d tt    \} }|  jr| js J  }| js:J  } |  jsTJ  } |  jsnJ tt t t tdt  t t    \} }|  jr| jsJ tddt  t td}
tdt t td} |
j| ddtdt ddtddt  t ddfksJ |
j| ddttd d dt d  t ddtdt ddfks`J d S )Nr   r   c                 S   s   g | ]}t |ttqS r   r4  r  r   r   r   r    r   ztest_div.<locals>.<listcomp>Tr  Fc                   S   s
   t ddS r  )r   r   r   r   r   r     r   ztest_div.<locals>.<lambda>c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  )r   r   r   r   r   r     r   c                   S   s
   t ddS r  r   r   r   r   r   r     r   r   r   r   r  r   r   r  c                      s   t  ddS NFr  r  r   r  r   r   r     r   c                      s   t  tdS r   r   rN   r   r  r   r   r     r   c                      s   t  tddS )NFr  r  r   r  r   r   r     r   r   rP   rQ   )r   r   r   r   r   r   ry   r@   rN   rO   r>   r   r   Zis_ZZZis_Fracrc   rP   rj   )r   r9  r  r  r  r  ZqzZrzZqqZrqr   r   r  r   test_div  s    


""
0r  c                  C   s6   t tdt \} }t| d dk s&J |dks2J d S )Ng>,p ?g3!	@g+=r   )r   r|   r   )r   r9  r   r   r   test_issue_7864  s    r  c            
      C   s  dt  t d d  } }t d tddd  }}}dd | ||||fD \}}}}}	||||	fkshJ |||||	fksJ |||ksJ t| |||fksJ t| ||||fksJ t| ||ksJ t| |t ||fksJ t| |t |||fksJ t| |t |ksJ t| |t f||fks8J t| |t f|||fksVJ t| |t f|ksnJ t||||	fksJ t|||||	fksJ t|||ksJ t| |dd	||	fksJ t| |dd	|||	fksJ t| |dd	|ksJ t||d
d	||fks"J t||d
d	|||fks@J t||d
d	|ksXJ tdddkslJ tdddksJ tdddksJ ttdd  ttdd  ttdd  d S )Nr   r3      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   s   t td dt d ddS Nr   r   Fr  )r   r   r   r   r   r   r   F  r   ztest_gcdex.<locals>.<lambda>c                   S   s   t td dt d ddS r  )r   r   r   r   r   r   r   G  r   c                   S   s   t td dt d ddS r  )r   r   r   r   r   r   r   H  r   )r   re   r   r   r   ry   rG   )
r   r   sr   r   r  r  rj   THr   r   r   
test_gcdex   s<    "r  c                  C   sv   t dtd d  td d  td d  } t dtd  d dtd  d  td d  d }| d	|ksrJ d S )
Nr   r   r   r  r?  i  =   r   r,  )r   r   revertr  r   r   r   test_revertK  s    ,4r  c                  C   s  t d dt   d t d d dt  d   } }}t| t|t|  }}}|||||gksdJ t| || ||gks|J t| |t | ||gksJ t| |t f| ||gksJ t|||||gksJ t| |dd|||gksJ t||dd| ||gksJ ttdd  d S )Nr   r   Tr  Fc                   S   s
   t ddS r  )r   r   r   r   r   r   ^  r   z$test_subresultants.<locals>.<lambda>)r   r   r   ry   r@   r   r   r   r  r  r  r   r   r   test_subresultantsR  s    0r  c                  C   s  t d dt   d t d d d  } }}t| t| }}|||ksLJ t| ||ks^J t| |t |ksrJ t| |t f|ksJ t|||ksJ t| |dd|ksJ t||dd|ksJ t| |dd|| |dt  d gfksJ t t t t tt   } }}t| t|t|  }}}|||ks:J t| ||ksNJ t| |t |ksdJ t| |t f|ks|J t|||ksJ t| |dd|ksJ t||dd|ksJ ttdd	  d S )
Nr   r   r   Tr  F)Z
includePRSc                   S   s
   t ddS r  )r   r   r   r   r   r   y  r   z test_resultant.<locals>.<lambda>)r   r   r   r|   r}   ry   r@   r  r   r   r   test_resultanta  s(    ((r  c                  C   s  t d dt d   dt   d d } }t| }| |ks>J t| |ksNJ t| t |ks`J t| t f|kstJ t||ksJ t| dd|ksJ t|dd|ksJ tt d  tt   t td d	t t   } }t| t| }}| |k sJ t| |ksJ t| t ttt|ks*J t| t tttf|ksFJ t||ksXJ t| dd|ksnJ t|dd|ksJ ttd
d  d S )Nr   r   r     ipTr  Fr   c                   S   s   t dS Nr   )r   r   r   r   r   r     r   z#test_discriminant.<locals>.<lambda>)r   r   r   r|   r}   r~   ry   r@   r   r   r  r  r   r   r   test_discriminant|  s&    &.r  c                  C   s   t td td  t} t|  ddgks.J |  dks>J t td dtd   d t} | d}t| |g dksJ | |dksJ d S )Nr   r   r   r   r   r  )r   r   r   )r   r   sortedZdispersionsetZ
dispersionshift)fpZgpr   r   r   test_dispersion  s    
r  c                  C   sD  t d d t d d t d dt   d g} t| t d ks>J t| ddtt d ksZJ tg dksjJ tddgdks~J tg ddksJ tt td  t t  t d  gdksJ tg t }|jr|tju sJ tg t dd}|jr|jsJ t	d}t|| gt| |g  kr,|ks2n J t
td	d
  d S )Nr   r   r   Tr  r   r   r?  r,  *   c                   S   s   t g ddS NTr  )r   r   r   r   r   r     r   ztest_gcd_list.<locals>.<lambda>)r   r   r   r   	is_Numberrj   r   is_Polyr@  rp   ry   r@   )r  r   r|   r   r   r   test_gcd_list  s    **
2r  c                  C   s\  t d d t d d t d dt   d g} t| t d t d  dt d   t d  t  d ksbJ t| ddtt d t d  dt d   t d  t  d ksJ tg dksJ tddgdksJ tg dd	ksJ tt td
  t t  t d
  gdksJ tg t }|jr$|tju s(J tg t dd}|jrF|jsJJ t	t
dd  d S )Nr   r   r   r   r   Tr  r  r  r  r   c                   S   s   t g ddS r  )r   r   r   r   r   r     r   ztest_lcm_list.<locals>.<lambda>)r   r   r   r   r  rj   Oner  rA  ry   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sJ |||
ksJ |||ksJ t| ||||fksJ t| ||ksJ t| ||ksJ t| |t |||fksJ t| |t |ks&J t| |t |ks<J t| |t f|||fksZJ t| |t f|ksrJ t| |t f|ksJ t|||
||	fksJ t|||
ksJ t|||ksJ t| |dd|
||	fksJ t| |dd|
ksJ t| |dd|ksJ t||d	d|||fks8J t||d	d|ksPJ t||d	d|kshJ d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fksJ t| ||ksJ t| || ksJ d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| ||||fks0J t| ||ksDJ t| || ksXJ tdddkslJ tdddksJ tdddksJ t d dt   d t d dt d   t  d  } }t d dt d   dt d   dt   d }t d t d t d d   }}}t| |dd|||fks0J t| |dd|ksHJ t| |dd|ks`J t d dt   d t d dt d   t  d  } }t d dt d   dt d   dt   d }t d t d t d d   }}}t| |dd	d|||fksJ t| |dd	d|ksJ t| |dd	d|ks2J tdtd  }}t||t||  krntdkstn J tdtd  }}t||t||  krtdksn J ttt d t ttt  t tdt tdksJ tt	dd  tt	dd  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,  r?  )r   r   r   r  rC  r   r   r   r/  r   c                   S   s   t tS r   )r   r   r   r   r   r   r     r   ztest_gcd.<locals>.<lambda>c                   S   s   t tS r   )r   r   r   r   r   r   r     r   )
r   r   r   r   rp   r   rc   rP   ry   r6  )r   r   r  r   r   r9  r  r  rj   r  r  r  lr|   r}   r   r   r   test_gcd  sr    "&2, 2,  ..2r  c                   C   sZ  t tddtsJ t tdt dts,J tdddks>J tdt ddksTJ t ttddtddtstJ t ttddt tddtsJ ttddtddtddksJ ttddt tdddksJ t tddtsJ t tdt dtsJ tdddks J tdt ddks8J ttddd	d
ddksVJ d S )Nr   r  r   r   r   r   g      "@r   Fr  )r   r   rd   r   re   rb   ra   r   r   r   r   test_gcd_numbers_vs_polys!  s     $$"r  c                  C   s  t ddksJ t dtdks"J t td td ks:J t t d t d ksVJ t dt d dt d ksvJ t dt d tddt d ddksJ t td t ttd   tt td td   ksJ t dtd  t dt td   dt t td td   ksJ t td t d ttd  d  tt d td td   ksdJ t td t dt td   tt td dtd    ksJ t dtd  t dt td   dt t td dtd    ksJ t dtd  t d dt td  d  tt tdd	 dtd  dtd    ksLJ t d
td  t dt td   tt d
td  dtd    ksJ tt d
t d d
t d sJ t ddt  ttt   dddt d tt t  ksJ t ddt  tttddt     ddddt td  ttdtd ddd  ksVJ t tttt  ddtttd  ksJ tdt dt dt t  } t | tdt dt td  ksJ t | ddtdt dt td  ksJ t	t
dd  d S )Nr   r   r   r?  r   Fr  r      r   gffffff@r_   T)r_   deepr  c                   S   s   t tdk S r1  )r   r   r   r   r   r   r   X  r   z test_terms_gcd.<locals>.<lambda>)r   r   ra   r   re   rZ   rr   ri   r   ry   r6  r   r   r   r   test_terms_gcd8  s6     *8FFBJ\J$
,(

(,r  c                  C   s<  t d dt d   dt d   dt d   dt   d t d t d  t d  t   } }t| t| }}|d|kszJ t| d|ksJ t| dt |ksJ t| dt f|ksJ t|d|ksJ t| ddd|ksJ t|ddd|ksJ dt d  dt d   dt d   dt d   dt   d	 t d  t d  t  d	  } }t| t| }}|d|ksrJ t| d|ksJ t| dt |ksJ t| dt f|ksJ t|d|ksJ t| ddd|ksJ t|ddd|ksJ tt d dt   d dd
} | dtt d d	 dd
ks8J d S )Nr   r   r   r   r?  Tr  Fr   r   )r   r   r    r  r   r   r   
test_trunc[  s(    VXr  c                  C   st  dt  d t tj  } }t| ddt| }}| |ks>J t| |ksNJ t| t |ks`J t| t f|kstJ t||ksJ t| dd|ksJ t|dd|ksJ ttdd	  tdt d  d
t   d ddt d dt   d ksJ ttdd	  tdt d  dt   d dt d  dt   d ks:J tdt d  dt   d ddt d t  d kspJ d S )Nr   r   rO   r   Tr  Fc                   S   s   t dS r  )r!   r   r   r   r   r     r   ztest_monic.<locals>.<lambda>r?  r   r  r   c                   S   s   t dt dt  d ddS )Nr   r?  r   Fr  )r!   r   r   r   r   r   r     r   r   g      @g      @r   r   r   r   )r   rj   r  r   r!   ry   r@   r>   r  r   r   r   
test_monicw  s    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slJ d S )Nr   r   c                   S   s   t dS r  )r"   r   r   r   r   r     r   ztest_content.<locals>.<lambda>r   r   r   )r   r   r"   ry   r@   )r   r  r   r   r   test_content  s    r  c                  C   s>  dt  d dt  d  } }t| t| }}| d|fks@J t| d|fksTJ t| t d|fksjJ t| t fd|fksJ t|d|fksJ t| ddd|fksJ t|ddd|fksJ ttdd  tdt  d	d
} tdt  td}|  d| fks
J | d|fks J ttdtdks:J d S )Nr   r   r   Tr  Fc                   S   s   t dS r  )r#   r   r   r   r   r     r   z test_primitive.<locals>.<lambda>r   r   r   r   r   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r   r   r#   ry   r@   rR   rj   r  r   r   r   test_primitive  s"    
r	  c                  C   sT  t d dt d   dt d   dt d   dt d	   d
t d   dt   d } t d	 d
t   d }t d dt   }tt| ||f\}}}|||ksJ t||| ksJ t||t | ksJ t||t f| ksJ t|||ksJ t||dd|ksJ t||dd| ksJ | ||gks0J t| ||gksFJ t| t ||gks^J t| t f||gksxJ t|||gksJ t| dd||gksJ t|dd||gksJ ttdd  ttdd  tt d
 td
  t t t tt d
 d
t  t  ksJ tt d
 td
  t t tt td
  d
t  t  ksPJ d S )Nr  rm  r      r,  i  r?  q  r   r   r   r  r   Tr  Fc                   S   s
   t ddS r  )r$   r   r   r   r   r     r   ztest_compose.<locals>.<lambda>c                   S   s   t dS r  )r%   r   r   r   r   r     r   )r   mapr   r$   r%   ry   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    r  c                	   C   s   t td dt  d tt td t td t dt  kr|ttd d td dt  d ttd td   ksn J t td td  d tt td t td t dtd  d tdd t  krttd d td td  d ttd td   ksn J t td dt  d tt ttj t td t tddt  krttd d td dt  d tttj td   ksn J t td dt  d tt td t ttj t tddt  kr:tttj d td dt  d ttd ttj   ks@n J t td dt  d tt td t ttj t tddtdd	  krtttj d td dt  d ttd ttj   ksn J tt	d
d  tt	dd  tt	dd  tt	dd  tt	dd  d S )Nr   r   r   r   r   r  r   rR   r   c                   S   s$   t tt t td t td S r   )r   r   r   	transformr   r   r   r   r     r   z test_transform.<locals>.<lambda>c                   S   s    t tt td t td S r   r   r   r  r   r   r   r   r   r     r   c                   S   s    t tt td t td S r   r  r   r   r   r   r     r   c                   S   s$   t tt tt d t td S r   r  r   r   r   r   r     r   c                   S   s$   t tt td t tt d S r   r  r   r   r   r   r     r   )
r   r   r  r6   rE  re   rj   r  ry   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sNJ t t  |gksdJ t t f |gks|J t| | |gksJ t dd| |gksJ t| dd |gksJ ttdd  tt fd	d ttd
dtd   t d  tddtd   t d   tddtd   t d   tddtd   t d   tddt   tdd t dd t tt d dt d   td d t   dtd  d  t ddtdt d  dt   td d  t ddttddtd d  t  dtd  d  t ddtd td  d!td   dtd"   d#d$td   d%td    t ddgksbJ d S )&NrO   r   r   Tr  Fc                   S   s   t dS r  r&   r   r   r   r   r     r   ztest_sturm.<locals>.<lambda>c                      s   t  ddS r  r  r   r   r   r   r     r   i   i	=  r,  r   i   r  r   r  r      r   i$  zZZ(pi)r  @   r|  r3     i N  r  `   r  l   ii ȯ r  l      ^_i  @  )	r   r   r&   ry   r@   rG   rj   rg   re   )r  r   r  r   r   r   
test_sturm  s>    <(2Hr  c                      sd  t d dt d   t d  dt d    t  tt dftt d dfgksTJ t t dft d dfgkstJ tt fdd t t d d  t d d  t d d  t d   t  tt d dt   d dftt d dt   d dftt dfgks
J t t d dt   d dft d dt   d dft dfgksNJ tt fdd d S )	Nr   r   r   r   r   c                      s   t  S r   r(   r   r   r   r   r   	  r   ztest_gff.<locals>.<lambda>c                      s   t  S r   r  r   r   r   r   r   	  r   )r   r   r'   ry   r   r   r   r   r   test_gff	  s    (, 0
$Dr  c                  C   sz   t dt d } }t| t |t  tt| |fd}| tdtd  dtd  td   dtd   ttddksvJ d S )	Nr   r   r   r   r  r  rO   r   )rp   r   r   r   Znorm)r|   r}   r   r   r   r   	test_norm	  s     r  c                   C   s  t td d tdddtd dtd t  d td dtd   d fksRJ t td d tdddtd dtd t  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sJ 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   rp   r   r   r   r   r   test_sqf_norm$	  s     44* 
* r  c            	      C   s  t d t d  t d  d } t d dt d   dt   d }t d }t d t d  t  d }tt| |||f\}}}}| |ksJ t| |ksJ t| t |ksJ t| t f|ksJ t||ksJ t| dd|ksJ t|dd|ksJ | d|df|dfgfksJ t| d|df|dfgfks8J t| t d|df|dfgfks\J t| t fd|df|dfgfksJ t|d|df|dfgfksJ t| ddd|df|dfgfksJ t|ddd|df|dfgfksJ | |df|dfgksJ ttd	d
  tddks.J tddg fksDJ tdt d  d d dt d d d  ksvJ t| ||d  ksJ t| t ||d  ksJ t| t f||d  ksJ t d t	d  }t| | ||d  | ksJ t| | t ||d  | ks J t| | t f||d  | ksFJ tt d t d ks`J tt  d t  d ks~J tt d t d ksJ tdt  d t
ddt  d ddksJ tdt  d dt  d  tdddt  d t d   ksJ ttt d dt   d t d d ks2J dt  t dt    t d  } t| dks`J t d dt   d d } t| t d d ksJ t| dt d dfgfksJ d S )Nr   r   r   r   r   Tr  Fc                   S   s   t dS r  )r*   r   r   r   r   r   N	  r   ztest_sqf.<locals>.<lambda>r   r  r?  r   r  l    H/P l    _ % )r   r  r   r*   r+   Zsqf_list_includery   r@   r,   r   ra   re   )	r   r   r   r   r  r  r  Pr   r   r   r   test_sqf3	  sT     ""$&"&&2"$&,@.r  c               	      s  t d t d  t d  d  t d } t d }t d t  d }tt | ||f\}}}}| d|df|df|dfgfks|J t d| df|df|dfgfksJ t t d| df|df|dfgfksJ t t fd| df|df|dfgfksJ t|d|df|df|dfgfksJ t ddd|df|df|dfgfksHJ t|ddd| df|df|dfgfkstJ | |df|df|dfgksJ tddg fksJ tddg fksJ ttdt tdg fksJ td	t  t dd	t fgfksJ tdt  t t ddtft tfgfks2J ttt t t dt t tjfgfks^J t	ddkrxt	dj
s|J tdt  dt dfgfksJ tdt d  dt dfgfksJ t	dt  dt  ksJ t	dt d  dt d  ksJ t	dt d  d d
 dt d d d
  ks.J t	 | |d  | ksLJ t	 t | |d  | kslJ t	 t f| |d  | ksJ t d td  t t t t t d d f\}}}	}
t	 | | |d  | ||	  ksJ t	 | t | |d  | ||	  ksJ t	 | t f| |d  | ||	  ksBJ tddd}tddd}tddd}
t	tt t jdu sJ t	tdt d  d tdtt d t d   ksJ t	tdt d  d tdtt d d  ksJ t	tt d  t | t| t d |  t d |  ks0J t	tt d  t | t| t d d |  ksfJ t	tt d  t t tt d  t d  t ksJ t	tt d  t t tt d d  t ksJ tt|
d d |d  |d  |d d   t|d d |d  t|d  t|
d d  }t	 |ksDJ t	||ksVJ t d d |
d d  }tt| t	 t|ksJ ttdt  d t td   d dfgfksJ t d d  t	  ksJ t	 tdt d t t d t  ksJ t	 ddt d t t d t  ks8J t	 tddt d tdt   d t d tdt   d  ks~J t	t d dt t   d t dt  d ksJ t d dt t   d  t	  ksJ dt d  t ddt    d dt   tt ddt   d dt  d  }dt tdd  dt d  d  }t	 |ks\J t	 td|ksrJ t	 td|ksJ t d dtd t   d  t	 tddt td d ksJ t	 d tddt td d ksJ t	t d dtd   tddt tdt  t tdt   k	s:J t	dt d  dtd   tdddt tdt  t tdt    k	sJ t	t d t d k	sJ t	t  d t  d k	sJ t	t d t d k	sJ t	dt  d  tddt  d dd!k
sJ t	t d" t  d d#dd$t d t  d t d% t d&  t d  t d  t d  t d  d  k
sjJ t	t d" t  d d#dd$t d t  d t d% d't d&   t d  d't d   t d  d't d   d  k
sJ t t t tt  t   ttd dt  d  ttt  td dt  d   }t	 t tt d  t ksLJ t	|ttt d  td d  ksvJ t	tt d dt   d t d d tt d d t d t d t  d  ksJ t d d t d dt   d   t	 t d t d  t d d  ksJ t	 t t d t d  t d d  ks>J dt  t dt    t d   t	 dkslJ t	 t dksJ t	dt d dt   dt    d dt  dt d   t d  ddt d   t d    ksJ t	 dd( ksJ tt fd)d* ttd+d*  t	t tt d td  tt d td  dt  dt  gt tt t t t  tt t t t  t t t  t gksJ ttt d t  d  d d, d, tdusJ ttt d t  d  d d, d, tdu sJ t	tt  tt  ksJ d-t  t  d  t d  t  t  d  t d  t t d d    t d t d  t t d   t   d-t d  t d d  t t  d  t  t  d  t t d     t d t d d  t t  t  d  t d  t t d d       }t	|d,ksJ t	tt d t  t  dd.tt t d  t  ksBJ t	tt d t  t  dd.tt t d  t  ksxJ t	tt d tt d ksJ t	td/t  d d/t d  td0d/t  d0 d/t d0 dd!ksJ t	td/t  d/ d d1d0t  d0 d  ksJ t d td  d"t d  t  d2t d   d
t  td   d3t  t  d4t   d5td   d6t  d7 }t	|t t d t d  td d"t  d2  ksJ t	|t dd.t d t d  td d"t  d2  ksJ t	|tdd.td td  t d d
t   d5  ksJ dt  dtdd
t      t	 dd.t	 ddd8ksZJ t	 ddd8dt  dtd td9t    ksJ tt d t td   t|t dt dft t dft t dfgfksJ d S ):Nr   r   r   r   Tr  Fr?  r   r   r  r   Zpositivei)integerr9  )realr   r   r   r  i    iX  i iH i r  i  iT     iY  r   r  rC  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  fractioni)r   r  r   r-   Zfactor_list_includerp   r   rj   r  r.   Z
is_Integerrk   Zis_Powr   r_   rr   rS   rc   rP   rQ   ra   rg   ri   ry   rE   rI   r[   r   r   r   rn   )r   r   r   r  UVWr   r   r   r9  r   Zf_zziZf_qqier   r   r   r   test_factorr	  sD   &&(*(,,$ ",, $"2 "0*,.:6>66204**.
2($$&*
""
,B
4

8"*$
 *,4:6
$
$
H
0
>66",2h488 4r.  c                  C   s.  t d dt   d d t d d  t d dt   d d  } t d dt   d d td  t d dt   d d d t  t d dt   d d  }t| t d d t d d  t d d  ksJ t|t d d	 td d  ksJ t| dt d dft d dft d d dfgfks J t|dtd dft d d	fgfksJJ t d td  d
 t d d  } t d td  d
 t d d  }t| t d t t d
  t t d
  t d t d  t d  t d  t d  t  d  ksJ t|ddt d t tt  d
  t tt  d
  t d t d  t d  t d  t d  t  d  ksRJ t| dt d dft t d
ft t d
ft d t d  t d  t d  t d  t  d dfgfksJ t|dddt d dft tt  d
ft tt  d
ft d t d  t d  t d  t d  t  d dfgfks*J d S )Nr   r   i r   i i  i -1i% ip  i@ r   r?  r   r   Tr  )r   r   r.   r-   rc   r  r   r   r   test_factor_large/
  s|    <>0$(
*  ,

4
&

(0r/  c                   C   sp   t dt d tddt d ddks*J t dt d dt d  ttdddt d dtd  kslJ d S )	Nr?  r   r   r   r   Fr  r   )r.   r   ra   re   r   r   r   r   test_factor_noevalM
  s    *r0  c               
   C   s
  t dg ksJ t dg ks J t tdddgks6J t tdgksHJ t td dgks^J t td	 td
 gdd	d
dfgksJ tttd	d tdd d
t tdd  } | j ddddgksJ |   ddgksJ | j dddddgksJ | j ddddgksJ | j tddd| j dd  krhtdddfdftddtddfdfgksnn J | j tddd| j dd  krtdddfdftddtddfdfgksn J | j tddd| j d d  krtdd!dfdftddtddfdfgks"n J | j tdd"d| j d#d  kr|tdd$tdd$fdftddtddfdfgksn J ttd	d tdd d
t tdd  } t | ddddgksJ t | ddgksJ t | tdddt | dd  kr0tdddfdftddtddfdfgks6n J t | tdddt | dd  krtdddfdftddtddfdfgksn J t | tdddt | d d  krtdd!dfdftddtddfdfgksn J t | tdd"dt | d#d  krDtdd$tdd$fdftddtddfdfgksJn J ttd	 d	 td	 d d%  td  d%t d d  } |   d&td'd	fd%ftd'd	dfdfd(d)dtdd	fdftdd	d	fd%fgksJ t td d* td d+ gtd,d-td.d/fddiftd0d1td-d2fddifgks2J t td d* td d+ gddtd,d-td.d/fddiftd0d1td-d2fddifgksJ t td	 d* td	 d+ gtd3dtd4dfddiftd4dd5fddifd6tddfddiftddtd7dfddifgksJ t td td	 td td dtd td td	 d	 gd8ddifd9ddd:fd;dddd<fd=d%d	ifgksJ td	 d	 td
 d
td	   d
 td   } }}t | td%d
dd>g ksJ t | td%ddd>td%dtdd	fgks J t | td%d
dd?d@dtdd	fgks,J t | td%ddd?d@gksLJ t |td%d
dAg kshJ t |td%ddAtd%dtdd	fd	fgksJ t |td%d
dBdCdtdd	fd	fgksJ t |td%ddBdCgksJ t ||gtd%d
dAg ksJ t ||gtd%ddAtd%dtdd	fdd	ifgks@J t ||gtd%d
 dBd@dd	ifd;ddifdtdd	fdd	ifgksJ t ||gtd%ddBd@dd	ifd;ddifgksJ t td	 td	 d	 gd8ddifd@ddifdDddifgksJ t td	 td	 d	 gddEd8ddiftd'd	dfddifdDddifgk	sLJ d%td
  dFtd   dGtd	   dt  dG } t | g k	sJ t | dddH\}}|g k	sJ tdIdJ t|t| D 	sJ |tdKd%t	dL d%  dftdKd%t	dL d% ft	tdKd% tdLd%fdtdLd%t	dL d%  fgk
s8J t | ddtdddM\}}|g k
s`J tdNdJ t|t| D 
sJ t
tdOdP  t
tdQdP  t
tdRdP  d S )SNr   r   T)r,   r   )r   r   r  )r   r  r   r   r   r   r  r   i  r   r   r>  r   )r1  r   )r2  r   )fastr,   )r3  r   epsr  r   i  U   r?  r  {Gz?i  gMbP?i  i'  -C6?i  r   r/  r  )r   r   r   )r1  r   r     K      e   #   i5  k   r  iiir>  G   )r/  r/  r9  r   r   r   )r   r   r?  )r   r   )infr,   )supr,   r/  r   rB  rC  )rD  r   r   r      rm  )r   r,   c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   rm   rl   r   r|   r}   r9  r   r   r   r   
  s   
&z!test_intervals.<locals>.<genexpr>i(   )r   r,   r5  c                 s   s^   | ]V\\}}}t |t |  k o,t |k n  oTt|t|  k oPt|k n  V  qd S r   rH  rI  r   r   r   r   
  s   
&c                   S   s   t td d ddS Nr   r   r4  r/   r   r   r   r   r   r   
  r   z test_intervals.<locals>.<lambda>c                   S   s   t td d jddS rK  )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   r4  rL  r   r   r   r   r   
  r   )r/   r   r   re   rj   r   r   r   r3   rc   ry   r  )r   r   r   Z	real_partZcomplex_partr   r   r   test_intervalsR
  s    (.$($($($.*$($($($.8  
6
6
..
6

00, 2. :
*

 
*
0rM  c                      s  t td d   jdddddks(J  jdddddks@J  jddd ddtd	dfksbJ  jddd dtd
ddfksJ  jdddddtd	dfksJ  jddddtd
ddfksJ  jddddddtd	dfksJ  jdddddtd
ddfksJ  jddtdddtddtddfksBJ  jddddtddtddfkslJ tt fdd tt fdd tt fdd td d  t dddddtd	dfksJ t ddddtd
ddfksJ t ddddddtd	dfksJ t dddddtd
ddfksBJ t ddtdddtddtddfksrJ t ddddtddtddfksJ ttdd  tt fdd tt fdd d S )Nr   r   r   )stepsr   r/  r   rD  r   r  T)rN  r3  r  r4  r  r  r  r7  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   rO  r   r   r   r   r   
  r   c                      s    d  ddS r!  rO  r   r   r   r   r   
  r   c                   S   s   t dddtdddS )Nr   r   r,  r  r4  )r0   re   r   r   r   r   r   
  r   c                      s   t  jddddS Nr   r   r   r4  )r   r0   r   r   r   r   r   
  r   c                      s   t  ddddS rP  rO  r   r   r   r   r   
  r   )r   r   r0   re   ry   rE   rB   r  r   r   r   r   test_refine_root
  s0    """"$&0*$$&&0*rQ  c                   C   s  t td d dksJ t td d t ddks6J t td d t
 ddksTJ t td d t t
 ddksvJ t td d dddksJ t td d dddksJ t td d dddksJ t td d dddksJ t td d ddddksJ t td d ddddks&J t td d ddddksFJ t td d ddddksfJ t td d dksJ t td d dt ddksJ t td d dt ddksJ t td d dt dt ddksJ t td d dddks
J t td d dddks(J t td d t ddksHJ t td d t
 ddkshJ t td d t
 d t
 ddksJ t td d t t d ddksJ ttd	d
  d S )Nr   rE  rF  )rB  rC  r/  r   r   r   c                   S   s   t dS r   r1   r   r   r   r   r     r   z"test_count_roots.<locals>.<lambda>)r1   r   rf   rc   ry   rE   r   r   r   r   test_count_roots
  s.    "    ""(  ((rS  c                      s   t dtd  dtd   dt  d   dtddks@J  ddksRJ  ddksdJ tt fdd	 t td
 t d dttd td  d dksJ d S )Nr   r   r   r   r   r   r   c                      s
     dS )Nr   )rootr   r   r   r   r     r   z test_Poly_root.<locals>.<lambda>r   )r   r   rT  re   ry   
IndexErrorru   r   r   r   r   test_Poly_root  s    (rV  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sZJ t ttd t d  ttd t d ddgksJ t ttd t d  ddttd t d ddfdgksJ t td td t d  ttd t d ddddgksJ t td td t d  ddttd t d ddfdgksRJ 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)multipler   r   rw  rA  r   r   r   r   r   )r2   r   ru   r   re   r  r   r   r   test_real_roots  s8    6

 $"rX  c                  C   s   dt d  dt d   dt   d } t d t  d }t|  tddddgksTJ t| t|dt|dt|dgksJ d S )Nr   r   r   r   r   r   r   )r   r   	all_rootsre   ru   r  r   r   r   test_all_roots1  s    $ rZ  c                  C   s  t dt g ksJ t dt g ks,J t td d t ddgksNJ t td d t dt dt gksxJ t td d t } | ddgksJ t td d t } | dt dt gksJ t td d tdd t } | ddgksJ t td d tdd t } | dt dt gks6J t td dt  t ddt  ddt  gksnJ t td dt  ttd ddt  ddt  gksJ t dt d	  d
gksJ ttd t d dd} td}t| d d|tj	u s
J t
| d dks J t| d d
ks6J t
| d d|tj	u sVJ t| d d
kslJ t
| d d|tj	u sJ t| d d|tj	u sJ t
| d d|tj	u sJ t| d d|tj	u sJ t
| d d|tj	u sJ td}t| d d|tju s4J t
| d dksJJ t| d d
ks`J 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 s6J ttdd  ttdd  ttd d ddgkspJ ttd d } | ddgksJ ttt dt gksJ ttdt  dt gksJ ttdd  t td d }|ddd | D ksJ tt td dtd    d!td"   d#td$   d%td&   d'td(   d)td   d*td   d+ dd,ksJ tt d-td  d  d.ksJ 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   m  r   ztest_nroots.<locals>.<lambda>c                   S   s   t tt  S r   r^  r   r   r   r   r   n  r   g       c                   S   s   t dS Nr   r3   r   r   r   r   r   x  r   c                 S   s   g | ]}| d qS r\  r\  )r   r   r   r   r   r  |  r   ztest_nroots.<locals>.<listcomp>r3  r  r>  i  r  i@  r   iV  r,  i  r?  i\ i ie z[-1.7 - 1.9*I, -1.7 + 1.9*I, -1.7 - 2.5*I, -1.7 + 2.5*I, -1.0*I, 1.0*I, -1.7*I, 1.7*I, -2.8*I, 2.8*I, -3.4*I, 3.4*I, 1.7 - 1.9*I, 1.7 + 1.9*I, 1.7 - 2.5*I, 1.7 + 2.5*I]gV瞯<z%[-31622776.6016838, 31622776.6016838])r   r   r3   rc   re   rb   rm   Z
epsilon_eqrj   truerl   falsery   rG   r=   rE   rY  str)rootsr5  r   r   r   r   test_nroots9  s    "*  8
                ".




re  c                  C   sh   t d dt d   dt d   t d  } t|  tjdtjdiksHJ t| tjdtjdiksdJ d S )Nr?  r   r   r   )r   r   r4   rj   r  r   r   r   r   r   test_ground_roots  s    ( rf  c                     s   t d t d  d  t d t  d d } t d d d }t d t  d d }t d d }t d ksjJ tt fdd tt fdd tt d| ksJ tt d|ksJ tt d|ksJ tt d|ksJ ttd	d  d S )
Nr   r   r   c                      s
   t  dS r_  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 r1  )r5   r   r   r   r   r   r   r     s   )r   r5   ry   r  r.   r=   )Zf_2Zf_3Zf_4Zf_12r   r   r   test_nth_power_roots_poly  s    rh  c                     s   t td td  td  t d } | j tdt t d  fddt|  D dgksdJ tt	dd	  tt
d
d	  tt
dd	  tt
dd	  ttdd	  d S )Nr   r   r   r   r   c                    s   g | ]\}} |r|qS r   r   )r   r   r9  r   Zr0r   r   r    r   z"test_same_root.<locals>.<listcomp>c                   S   s   t td tdddS Nr   r   r   )r   r   rO   	same_rootr   r   r   r   r     r   z test_same_root.<locals>.<lambda>c                   S   s    t td d tddddS )Nr   r   r   r   r   )r   r   rM   rk  r   r   r   r   r     r   c                   S   s   t td d tdddS Nr   r   r   r   )r   r   rP   rk  r   r   r   r   r     r   c                   S   s$   t ttd  d tt dddS rl  )r   r   r   rN   rk  r   r   r   r   r     r   c                   S   s   t tt d tdddS rj  )r   r   r   rN   rk  r   r   r   r   r     r   )r   r   rk  rn   rc   rg   	enumeraterY  ry   rE   rG   r=   r   r   ri  r   test_same_root  s&    $&rn  c               
   C   s   t td d td  ttdtd  i} t| tdt dtd  d d dft dtd  d dft dtd  d dfgfksJ t td d td  ttddtdd   i} t| td u sJ d S )Nr   r   r/  r   )r_   r   rE  rp   r;   re   r   r   r   r   test_torational_factor_list  s    .
4ro  c                  C   s  t ddksJ t ddks J t ttks0J t ttu s@J t ddksPJ t dtdksbJ t dtdkstJ d	td
  d	 d
t d
 d
t d
 df\} }}}dd | |||fD \}}}}| |d||fksJ t | |fd||fksJ t | |ftd||fksJ t | |ftfd||fks2J t ||fd||fksNJ t | |fddd||fksnJ 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s J t | ddttd
 ksJ t td
 d	 d td
 d fdtd
 d
fksRJ t td
 t tt  dtt  td
 t  ksJ t td
 td
  tt  ttt ksJ t td
 td
  tt  ttt ksJ 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sDJ 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sJ tdt d t} ttd  td  td  td  d
td
   dt  d t}t | |fd|  | fksJ tttdd} tdtdd}|  |dtttddtdtddfksbJ | j |ddtttddtdtddfksJ tdt t t tdd} td
td
  t tdd}| j |ddtdt d tddtd
t t tddfksJ dt d	t  dt
t d
    t
t t
 t d
   } t | jdksRJ 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sxJ t d
|	 d
|
 ksJ t d|	 d|
 ksJ t td
 d td  |	 td |
 ksJ t td
 d td  |	 td |
 k	sJ ttd
 d td  tdkftd
 td
 d
t   df}ttd tdkfdt df}t ||k	srJ t d
| d
| k	sJ t d| d| k	sJ t td
 d td  | td | k	sJ t td
 d td  | td | k
sJ td#dd$}t |dd%tju 
s&J |td
tju 
s>J t|tju 
sRJ td&dd}t |d' d |d' d k
sJ t|d( |d) d |d*   d|d+  t
  }t |t
t|d( |d) d |d*    d|d+   t
 k
sJ t td
 d tt  tt ksJ d S ),Nr   r   r^  )r   r   r   r   ry  r   rz  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,  r?  r   r  r   )includeg{Gzt?r   r8  r  )Zcommutativeap	  (2*1*(x - 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2*1*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) -
        1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x)/x - 1/x)*(((-x + 1/x)/((x*(x - 1/x)**2)) +
        1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x - 1/x)) - 1/x)*((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1 + (x - 1/x)/(x - 1/x))/((x*((x -
        1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x))) + ((x - 1/x)/((x*(x - 1/x))) + 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) + 1/x)/(2*x +
        2*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x
        - 1/x)) - 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))/(2*x -
        (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x) - 1 + (x -
        1/x)/(x - 1/x))/((x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2)
        - 1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x
        - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 2*((x - 1/x)/((x*(x -
        1/x))) + 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2/x) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)/(x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2))
        - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x -
        1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x)) + (x - 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 1/xr  )Z	_signsimpMr   )r   r   r   )r   r   r   )r6   r   rf   rp   r   rj   r  rn   r   r|   r   Zis_Mulro   re   rk   rq   NaNrE  rv   rt   rr   rc   )r   r   r   r   r  r  r  r  r  p1p2Zp3Zp4rq  exprr   r   r   test_cancel  s    0   46,,*:D><8@ 
(8>"..:.. !"0Brv  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srJ t| |t t||fksJ t|}|| ||fksJ tdt  t ttdt tg}tt d td  t t t}tt| |dd||fsJ tt| |t tdd||fs J t|dd}t|| ||fsFJ dt d  td  dt  } tt d td  d t t d g}t d t td  d  t t d  td d  td d  td d  td  d td d  ttdd  g}d	}t| |||fksJ || ||fks*J t| |d
dd d	ksFJ |j| d
dd d	ksbJ || du svJ || d d
u sJ tddgt dgd	fksJ t	t
dd  d S )Nr   r   r   r   Tr  r?  r   r   Fr  c                   S   s   t ddgS r   )r7   r   r   r   r   r     r   ztest_reduced.<locals>.<lambda>)r   r   r7   r8   reducer   r   re   containsry   r@   )r   r  r  r9  r  r   r   r   test_reducedZ  s4    $"$pry  c               
   C   s  t g tttg ksJ t td d td t td  gttdddtd  dtd  gks^J t td d td t td  tt td  gtttdddtd  td dtd  gksJ t td d td t td  gttdd	d
tdtd  tttdtd  ttgksJ t td d td t td  tt td  gtttdd	d
tdtd  tttttd ttttdtd  tttgksJ t td d td d gtd gksJ t ttd dttd dgtd gksJ dtd  tt  dt  d dt dt t  td  tdt  tt  dtd   g} td td td   dt td  t  dt td   td td   d }t | tttddd}|dt t dt  dtd   dtd   dtd   td  ddt  td  dtd   dtd   dtd   dtd   dtd   ddt  dt  tt  dtd   td  td  ddt  td  dtd   dtd   dtd   dtd   td  gksJ t||tttddd	d\}}tdd t||j	D |t|ddksJ tt dt  dtd  td  g} t | ttddtd dt  td dtd   tt dt  gksJ t | ttddtd dtd   td  dtd   tt dt  gksJ t | dd	dtd dt  td dtd   tt dt  gksJ t dgtdgks.J t td dt  gttdtd  dt  gksdJ t
tdd  t td d td d gddtd gksJ t td d td d gddtd gksJ t
tdd  d S )Nr   r   r   r   rV   r   r   rX   Tr   r  r   r  rC  r   Fr   r?  )r   r   r  c                 S   s   g | ]\}}|| qS r   r   )r   r   r   r   r   r   r    r   z!test_groebner.<locals>.<listcomp>r   )r   rL   r   r   c                   S   s
   t dgS r   )r8   r   r   r   r   r     r   ztest_groebner.<locals>.<lambda>Z
buchbergermethodZf5bc                   S   s   t ttgddS )Nunknownr{  )r8   r   r   r   r   r   r   r     r   )r8   r   r   r   r   ri   r7   sumr   r  ry   r@   r  )r  r   r  r  r9  r   r   r   test_groebner  sJ    H^,&
<:
,0ZP@N6J.$0
6
0
600r  c                  C   s@  t t t t t t t t  tt  tt  t t t t t t  t t t  tt t  t t t t d g} t| t ttttd}dt  dtd   dtd   dt  dt dt  dtd   dtd   dt  dtd  dtd	   dtd
   dtd   dt td  dt  td  dtd   dt  td td  td  d g}t| t ttttd|kstJ |t|ksJ dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d dt	 td  dt	 td
   dt	 td   dt	 td   dt	 td   dt	 td   dt	 t  dt	  dtd   dtd
   dtd   dtd   dtd   dt  d g} t| t	ttd}dt	 dtd   d td
   d!td   d"td   d#td   d$td   d%t  d& dtd  dtd   dtd
   dtd   dtd   dtd   dtd   dt  d g}t| t	ttd|ksJ |t|ksJ td t dt
  d d't t
d  t
 d g} t| tt
td}td t dt
  d t
d dt  t
 d g}t| tt
td|ks(J |t|ks<J d S )(Nr   r   r   r   r  r   r   r   r   r?  r  r,  $   r     N   i  i   l   i   i  i8  i  r  r}     i   r  l   ;7>rI l   *El   2t5TJl   "3CR7	 l   }wSo8 l   Hg51n? l   3&[T l   e t{ l   *JwiC1 r/  )r|   r}   r~   r   r8   rW   rV   Zfglmr   r   r   )r  r  r  r   r   r   	test_fglm  sl    p&..2^j








^0r  c                  C   s  t ttgttdu sJ t td td  gttdu s:J t tttgtttdu sVJ t tttgttttdu stJ tt t tt t tt t g} t | tttdu sJ td dt t  d ttd  ttd   dtd  dtd   g} t | tttdu s
J d S )NTr   r   Fr   r,  )r:   r   r   r   r   )r  r   r   r   test_is_zero_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sJ t|tdu sJ t|dksJ |d |d kr|d jrJ |d	 |d	 kr|d	 jrJ |d |d kr|d jrJ |d	d  |d	d  krHtd
d |d	d  D rLJ |d d |d d krtdd |d	d  D rJ |j|ksJ |j	|ksJ |j
t tfksJ |jtksJ |jtksJ ||ksJ |t|ksJ ||ksJ |t|ksJ |g ks(J t| t tddd}|d |d krX|d js\J |d	 |d	 krz|d	 js~J |d |d kr|d jsJ |d	d  |d	d  krtdd |d	d  D sJ |d d |d d krtdd |d	d  D sJ d S )Nr   rX   r   r   c                 S   s   g | ]}t |ttqS r   r4  r  r   r   r   r    r   z&test_GroebnerBasis.<locals>.<listcomp>r   Tr   c                 s   s   | ]}|j V  qd S r   r  r   r   r   r   r   r     r   z%test_GroebnerBasis.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   rz  c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   c                 s   s   | ]}|j V  qd S r   r  r  r   r   r   r     r   )r   r   r8   r   r9   r   r  anyexprsr  r   r   rN   r   rX   r  r   )r  r  r  r  r   r   r   test_GroebnerBasis  s8    $2"::""":r  c                   C   st  t ttttksJ t ttttks,J t tt ttt ttksLJ t ttt tttt tttksxJ t tt tdttt ttksJ t ttt ttdtttt tttksJ t tt dt td   d ttt dt td   d tttksJ t dtt d  d tdtd  dt t  dtd   d ttksjJ t ttt d  d tttd  dt t t  ttd   d tttksJ t dt tt d  d tdt td  dt t t  dt td   d tttksJ t dtt d  t d tdtd  dt t  dtd   t d tttksvJ t ttt d  t d tttd  dt t t  ttd   t d tttksJ t dt tt d  t d tdt td  dt t t  dt td   t d tttks:J t tt tt d  tt d  tdt t dt t  td  td  dtd   tttksJ t tt tt  tt d  ttd td  ttd  td   ttd  td   dt td  td   dt t td   ttd   tttksBJ t ttt t tttttt t tttksxJ t tt d tttd dt t  td  ttt dksJ t tt d tttd dt t  td  ttt dksJ t dttdtksJ ttdd	  t tt ttttt ttksJJ t tt ttttt ttkspJ d S )
Nr   r   r  r   r   r   r   c                   S   s   t dS r   )r   r   r   r   r   r   <  r   ztest_poly.<locals>.<lambda>)	r   r   r   r   rr   r   rN   ry   rC   r   r   r   r   	test_poly  s     ,$4LN4
<
4
8
@"<
F

6BB&r  c                  C   s  t dtd dd} ttjttks&J ttjtt ks<J ttdtdt ksVJ ttdtdt kspJ ttjdt dt ksJ ttdtd tksJ ttdttdtt ksJ ttdtd | ksJ ttdt dksJ ttd td| ksJ ttjtjtjks.J tdddd}ttd|t d|ddks^J t	d|dd}ttj|d	d
t tj|ddksJ ttj|dd
t	dt tj|ddddksJ d S )Nr   r   Fr  r   r[  r   r   T)clear)
ra   r   r`   rj   r  ZNegativeOnerr   r  rh   rY   )r   r   r|   r   r   r   test_keep_coeffC  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   )rc   r   r   r   r   r   r   test_poly_matching_consistencyY  s     r  c                   C   s\   t tt ttt  ttt   tgdt t t tt  tt  tt t  ksXJ d S )Nr   )r_   r.   r   rc   r   r   r   r   r   r   r   test_issue_5786`  s    (r  c                  C   s   G dd dt } tttt   }ddt  }t| || |ksDJ t|| | || | ksdJ t|| | || | ksJ d S )Nc                   @   s   e Zd ZdZdS )z test_noncommutative.<locals>.fooFN)__name__
__module____qualname__Zis_commutativer   r   r   r   foof  s   r  r   )r\   r   r   r6   )r  r-  r~   r   r   r   test_noncommutativee  s     r  c                   C   s   t ttd ttd   tt tddd u s2J t ttd tdtd  tt  d td u shJ t tttd u s~J t ttdt d u sJ d S )Nr   r   rS   r   r   )r<   r   r   r   rp   rr   r   r   r   r   test_to_rational_coeffso  s    $(r  c                   C   s^   t ttt  dtdftt dfgfks,J tttt  dtd tt  dfgfksZJ d S r  )r-   r   r   r+   r   r   r   r   test_factor_termsz  s    ,r  c                   C   s   t td d tdd g dks&J t td t d ttdd dgg ddggksZJ t td t d tttdd dggg gdgdgggksJ d S )Nr   r   rN   r   )r   r   r   r   r   )r   r   Zas_listr   r   r   r   r   r   test_as_list  s
    &4 r  c                   C   s^   t tdt tdtdfgfks&J t tdtt tttdttdfgfksZJ d S r   )r-   rp   r   rr   r   r   r   r   test_issue_11198  s    &r  c                  C   s0   t tdt } |  tdt ks,J d S )Nr  )r   rg   Zevalfr   r   r   r   r   r   test_Poly_precision  s    r  c                   C   s8   t ddtd  ttddtd  tddks4J d S )Nr   r   rS   r   )r   rp   r   r   r   r   r   r   test_issue_12400  s    r  c                	   C   sR  t tddtd  d tddtd  d tdddtd  ksLJ t tdtdd tdtdd tdtdd	 ksJ ttddtd tddtd tdtd d ksJ tdtd dtd d
td ksJ ttdddtdd   d tdddtdd   d tddddtdd   ksPJ t tddtd tddtd tdd ksJ t tdtd d tdtd d tdd ksJ t tdtd d tdtd d tdtd d gtdtdd ksJ t tddtd  d tddtd  d tddtd  d gdtd tdd ksJ ttddtd tddtd tddtd ftddtd ksJ ttdddtdd   d tdddtdd   d tdddtdd   d gtddddtdd   ksNJ d S )Nr?  r   r   r   r   r   r   r   r   r  r,  r   r  r  r>  /   r>  i  )r   rj   rp   re   r   r   r   r   r   test_issue_14364  s    L<>*`8<VfPr  c                  C   s   t ddd} d| d  | d  td| d  | d d d   d d  ddtdd	  |  | d  td| d  | d d d   d tdd	   d
|   }t|dd| | d d  ksJ d S )Nr   Tr  r3  r   r   r,  r   r   r   r  )rk   rp   re   r.   )r   ru  r   r   r   test_issue_15669  s    <Lr  c                  C   s   t d} t| d }t . tt| d t| d gg}W d    n1 sN0    Y  ttddT || ||   krtt| d d t| d d ggksn J W d    n1 s0    Y  d S )Nr   r   F)Ztest_stacklevelr   )rk   r   rz   rs   r{   rx   )r   r   rq  r   r   r   test_issue_17988  s    <r  c                   C   s@   t dt dt  dt ks J t dt dt  dks<J d S )Nr   r   r   r   )r6   rc   r   r   r   r   test_issue_18205  s     r  c                  C   sz   t d d t d d  t d d  t d d  } dt d d dft d dft d dt   d dfgf}t| |ksvJ d S )Nr   r   r   r   r?  )r   r+   )r   r  r   r   r   test_issue_8695  s    06r  c                      s   t td t t d  tt fdd tt fdd tt fdd tt fdd tt fdd tt fd	d d S )
Nr   r   c                      s   t  dddS )Nr   r   r7  rO  r   r  r   r   r     r   z"test_issue_19113.<locals>.<lambda>c                      s   t  ddS )Nr   r   rR  r   r  r   r   r     r   c                      s   t  S r   )r2   r   r  r   r   r     r   c                      s   t  S r   r`  r   r  r   r   r     r   c                      s   t  S r   )r4   r   r  r   r   r     r   c                      s
   t  dS r1  rg  r   r  r   r   r     r   )rr   r   ry   rE   r   r   r  r   test_issue_19113  s    r  c                  C   s   dt d  dtd t  t  td  } t| tdddt tdt d  d  ksXJ t t t  tt  t t  tt t  } t| tdt tt  t t t  ksJ d S )Nr   r   )r   rp   r   r.   rc   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s2J d| j|jksFJ dd S )Nz.Deserialized polynomial not equal to original.z?Deserialized polynomial has different generators than original.)r   r   r   r   pickleloadsdumpsr   )r   Zdeserializedr   r   r   &test_deserialized_poly_equals_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sHJ d S )Nr   )symbolszw Rr   r   )sympy.core.symbolr  r   rc   r   rj   )r  r   r  r   r   r   r   test_issue_20985  s    r  (H  __doc__r  Zsympy.polys.polytoolsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Zsympy.polys.polyerrorsr=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   Zsympy.polys.polyclassesrJ   Zsympy.polys.fieldsrL   Zsympy.polys.domainsrM   rN   rO   rP   rQ   rR   rS   Zsympy.polys.domains.realfieldrT   Z sympy.polys.domains.complexfieldrU   Zsympy.polys.orderingsrV   rW   rX   Zsympy.core.addrY   Zsympy.core.basicrZ   Zsympy.core.containersr[   Zsympy.core.exprr\   Zsympy.core.functionr]   r^   r_   Zsympy.core.mulr`   ra   Zsympy.core.numbersrb   rc   rd   re   rf   rg   Zsympy.core.powerrh   Zsympy.core.relationalri   Zsympy.core.singletonrj   r  rk   Z$sympy.functions.elementary.complexesrl   rm   Z&sympy.functions.elementary.exponentialrn   Z%sympy.functions.elementary.hyperbolicro   Z(sympy.functions.elementary.miscellaneousrp   Z$sympy.functions.elementary.piecewiserq   Z(sympy.functions.elementary.trigonometricrr   Zsympy.matrices.densers   Z"sympy.matrices.expressions.matexprrt   Zsympy.polys.rootoftoolsru   Zsympy.simplify.simplifyrv   Zsympy.utilities.iterablesrw   Zsympy.utilities.exceptionsrx   Zsympy.testing.pytestry   rz   r{   Z	sympy.abcr|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r  r  r  r  r  r  r   r#  r$  r&  r)  r+  r.  r0  r2  r7  r:  r;  r=  rB  rD  rF  rI  rK  rN  rP  rS  rT  rU  rV  rX  rZ  r`  rh  ri  rk  rl  rt  rv  r{  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  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  rM  rQ  rS  rV  rX  rZ  re  rf  rh  rn  ro  rv  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   <module>   s  <$ 4
-\S"A	 #+

	


7			

:

4
/
u

+







Q

#


? >q($N +0**,
	
		