U
    ZÊ¹j� ã                   @   sÎ	  d Z ddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZSmTZTmUZUmVZVmWZWmXZX ddlYmZZZ dd	l[m\Z\ dd
l]m^Z^m_Z_m`Z` ddlambZb ddlcmdZd ddlemfZf ddlgmhZh ddlimjZj ddlkmlZlmmZmmnZn ddlompZpmqZq ddlrmsZsmtZtmuZumvZvmwZwmxZx ddlymzZz ddl{m|Z| ddl}m~Z~ ddlm€Z€ ddl�m‚Z‚mƒZƒ ddl„m…Z… ddl†m‡Z‡ ddlˆm‰Z‰ ddlŠm‹Z‹ ddlŒm�Z� ddlŽm�Z� ddl�m‘Z‘ ddl’m“Z“ dd l”m•Z• dd!l–m—Z— dd"l˜m™Z™ dd#lšm›Z›mœZœm�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© d%d&„ Zªd'd(„ Z«d)d*„ Z¬d+d,„ Z­d-d.„ Z®d/d0„ Z¯d1d2„ Z°d3d4„ Z±d5d6„ Z²d7d8„ Z³d9d:„ Z´d;d<„ Zµd=d>„ Z¶d?d@„ Z·dAdB„ Z¸dCdD„ Z¹dEdF„ ZºdGdH„ Z»dIdJ„ Z¼dKdL„ Z½dMdN„ Z¾dOdP„ Z¿dQdR„ ZÀdSdT„ ZÁdUdV„ ZÂdWdX„ ZÃdYdZ„ ZÄd[d\„ ZÅd]d^„ ZÆd_d`„ ZÇdadb„ ZÈdcdd„ ZÉdedf„ ZÊdgdh„ ZËdidj„ ZÌdkdl„ ZÍdmdn„ ZÎdodp„ ZÏdqdr„ ZÐdsdt„ ZÑdudv„ ZÒdwdx„ ZÓdydz„ ZÔd{d|„ ZÕd}d~„ ZÖdd€„ Z×d�d‚„ ZØdƒd„„ ZÙd…d†„ ZÚd‡dˆ„ ZÛd‰dŠ„ ZÜd‹dŒ„ ZÝd�dŽ„ ZÞd�d�„ Zßd‘d’„ Zàd“d”„ Zád•d–„ Zâd—d˜„ Zãd™dš„ Zäd›dœ„ Zåd�dž„ ZædŸd „ Zçd¡d¢„ Zèd£d¤„ Zéd¥d¦„ Zêd§d¨„ Zëd©dª„ Zìd«d¬„ Zíd­d®„ Zîd¯d°„ Zïd±d²„ Zðd³d´„ Zñdµd¶„ Zòd·d¸„ Zód¹dº„ Zôd»d¼„ Zõd½d¾„ Zöd¿dÀ„ Z÷dÁdÂ„ ZødÃdÄ„ ZùdÅdÆ„ ZúdÇdÈ„ ZûdÉdÊ„ ZüdËdÌ„ ZýdÍdÎ„ ZþdÏdÐ„ ZÿdÑdÒ„ �Z dÓdÔ„ �ZdÕdÖ„ �Zd×dØ„ �ZdÙdÚ„ �ZdÛdÜ„ �ZdÝdÞ„ �Zdßdà„ �Zdádâ„ �Zdãdä„ �Z	dådæ„ �Z
dçdè„ �Zdédê„ �Zdëdì„ �Zdídî„ �Zdïdð„ �Zdñdò„ �Zdódô„ �Zdõdö„ �Zd÷dø„ �Zdùdú„ �Zdûdü„ �Zdýdþ„ �Zdÿ�d „ �Z�d�d„ �Z�d�d„ �Z�d�d„ �Z�d�d„ �Z�d	�d
„ �Z�d�d„ �Z�d�d„ �Z�d�d„ �Z�d�d„ �Z �d�d„ �Z!�d�d„ �Z"�d�d„ �Z#�d�d„ �Z$�d�d„ �Z%�d�d„ �Z&�d�d „ �Z'�d!�d"„ �Z(�d#�d$„ �Z)�d%�d&„ �Z*�d'�d(„ �Z+�d)�d*„ �Z,�d+�d,„ �Z-�d-�d.„ �Z.�d/�d0„ �Z/�d1�d2„ �Z0�d3�d4„ �Z1�d5�d6„ �Z2�d7�d8„ �Z3�d9�d:„ �Z4�d;�d<„ �Z5�d=�d>„ �Z6�d?�d@„ �Z7�dA�dB„ �Z8�dC�dD„ �Z9�dE�dF„ �Z:�dG�dH„ �Z;�dI�dJ„ �Z<�dK�dL„ �Z=�dM�dN„ �Z>�dO�dP„ �Z?�dQ�dR„ �Z@�dS�dT„ �ZA�dU�dV„ �ZB�dW�dX„ �ZC�dY�dZ„ �ZD�d[�d\„ �ZE�d]�d^„ �ZF�d_�d`„ �ZG�da�db„ �ZH�dc�dd„ �ZI�de�df„ �ZJ�dg�dh„ �ZK�di�dj„ �ZL�dk�dl„ �ZMdS (m  zBTests for user-friendly public interface to polynomial functions. é    N)<ÚPolyÚPurePolyÚpolyÚparallel_poly_from_exprÚdegreeÚdegree_listÚtotal_degreeÚLCÚLMÚLTÚpdivÚpremÚpquoÚpexquoÚdivÚremÚquoÚexquoÚ
half_gcdexÚgcdexÚinvertÚsubresultantsÚ	resultantÚdiscriminantÚ	terms_gcdÚ	cofactorsÚgcdÚgcd_listÚlcmÚlcm_listÚtruncÚmonicÚcontentÚ	primitiveÚcomposeÚ	decomposeÚsturmÚgff_listÚgffÚsqf_normÚsqf_partÚsqf_listÚsqfÚfactor_listÚfactorÚ	intervalsÚrefine_rootÚcount_rootsÚ	all_rootsÚ
real_rootsÚnrootsÚground_rootsÚnth_power_roots_polyÚcancelÚreducedÚgroebnerÚGroebnerBasisÚis_zero_dimensionalÚ_torational_factor_listÚto_rational_coeffs)ÚMultivariatePolynomialErrorÚExactQuotientFailedÚPolificationFailedÚComputationFailedÚUnificationFailedÚRefinementFailedÚGeneratorsNeededÚGeneratorsErrorÚPolynomialErrorÚCoercionFailedÚDomainErrorÚOptionErrorÚ	FlagError)ÚDMP©Úfield)ÚFFÚZZÚQQÚZZ_IÚQQ_IÚRRÚEX)Ú	RealField)ÚComplexField)ÚlexÚgrlexÚgrevlex)ÚS4TransitiveSubgroups)ÚAdd)Ú_aresame)ÚTuple)ÚExpr)Ú
DerivativeÚdiffÚexpand)Ú_keep_coeffÚMul)ÚFloatÚIÚIntegerÚRationalÚooÚpi)ÚPow)ÚEq)ÚS)ÚSymbol)ÚimÚre)Úexp)Útanh)Úsqrt)Ú	Piecewise)Úsin)ÚMatrix)ÚMatrixSymbol)Úrootof)Úsignsimp)Úiterable)ÚSymPyDeprecationWarning)ÚraisesÚwarns_deprecated_sympyÚwarns)ÚaÚbÚcÚdÚpÚqÚtÚwÚxÚyÚzc                 C   s.   t | |ƒD ]\}}t|| ƒdkr
 dS q
dS )Ng»½×Ùß|Û=FT)ÚzipÚabs)r~   r   ÚuÚv© r�   ú_/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/polys/tests/test_polytools.pyÚ_epsilon_eqW   s    r�   c                 C   sh   t | ƒt |ƒkr`t| ƒrFt| ƒt|ƒkr@tdd„ t| |ƒD ƒƒS dS qdt| tƒo\| j|dd�S ndS d S )Nc                 s   s   | ]\}}t ||ƒV  qd S ©N)Ú
_strict_eq)Ú.0r€   r�   r�   r�   rŽ   Ú	<genexpr>b   s     z_strict_eq.<locals>.<genexpr>FT©Ústrict)Útypery   ÚlenÚallr‰   Ú
isinstancer   Úeq)r~   r   r�   r�   rŽ   r‘   ^   s    r‘   c               	   C   sh   t ttƒ} tƒ � | ttƒ  W 5 Q R X tƒ � | ttƒ  W 5 Q R X tƒ � | ttƒ  W 5 Q R X d S r�   )r   r†   r|   rp   ©r‚   r�   r�   rŽ   Útest_Poly_mixed_operationsk   s    
rœ   c                  C   sv  t dƒ} tjdddœt| d�jt| dƒ| dƒg| ƒks:t‚tjdddœt| d�jt| dƒ| dƒg| ƒkslt‚tjdddœt| d�jt| dƒ| dƒg| ƒksžt‚tjdddœt| d�jt| dƒ| dƒg| ƒksÐt‚tjdddœttf| d�jt| dƒ| d	ƒg| dƒgg| ƒk�st‚tjdddœtd
�jttdƒtdƒgtƒk�sDt‚tjdddœtdd�jtt	dƒt	dƒgt	ƒk�sxt‚tjdddœttd�jttdƒtdƒgtƒk�s¬t‚tjdddœtt	d�jtt	dƒt	dƒgt	ƒk�sàt‚tjdddœtd
�jttdƒtdƒgtƒk�st‚tjdddœtdd�jtt	dƒt	dƒgt	ƒk�sFt‚tjdddœttd�jttdƒtdƒgtƒk�szt‚tjdddœtt	d�jtt	dƒt	dƒgt	ƒk�s®t‚tjdt
tƒitdd�tt
tƒt tdd�k�sât‚tjdtitdd�ttt tdd�k�st‚tjddittfdd�ttt ttdd�k�s@t‚tjdtittfdd�ttt ttdd�k�srt‚d S )Né   é   é   ©r   rž   ©ÚgensÚdomainé   )©r   ©rž   )©r   r   ©rž   rž   r   ©r¢   T©r¢   rM   r¦   F)r¢   Z	compositerT   ©r£   r¨   rO   ©rž   r   )rN   r   Ú	from_dictr†   ÚreprK   ÚAssertionErrorr‡   rO   rP   rt   rˆ   ©ÚKr�   r�   rŽ   Útest_Poly_from_dictu   sÄ      ÿÿ  ÿÿ  ÿÿ  ÿÿ ÿÿÿ
2  ÿÿ
  ÿÿ
  ÿÿ
 ÿÿ
  ÿÿ
  ÿÿ
  ÿÿ
ÿ
ÿ
ÿ
ÿr²   c                  C   s”  t dƒ} tjddgt| d�jt| dƒ| dƒg| ƒks8t‚tjddgt| d�jt| dƒ| dƒg| ƒksht‚tjddgtd�jttdƒtdƒgtƒks–t‚tjddgtdd�jttdƒtdƒgtƒksÆt‚tjddgttd�jttdƒtdƒgtƒksöt‚tjddgttd�jttdƒtdƒgtƒk�s(t‚tjd	d
gtd�jtt	d
ƒgt	ƒk�sRt‚tjd
d	gtd�jtt	d
ƒt	dƒgt	ƒk�s‚t‚t
tdd„ ƒ d S )Nr�   rŸ   rž   r¡   r¤   r©   Trª   r   ç      ð?ç        c                   S   s   t jg gttfd�S )Nr©   )r   Ú	from_listr†   r‡   r�   r�   r�   rŽ   Ú<lambda>±   ó    z%test_Poly_from_list.<locals>.<lambda>)rN   r   rµ   r†   r®   rK   r¯   rO   rP   rS   r{   r>   r°   r�   r�   rŽ   Útest_Poly_from_list¢   s    00.002*0r¸   c                      s  t td ttd�‰t td tdd�‰t tt tttd�‰tdƒ‰ t  ˆ¡ˆksRt‚t jˆˆ d�jtˆ dƒˆ dƒgˆ ƒks|t‚t jˆtd�jttdƒtdƒgtƒks¦t‚t jˆt	d�jtt	dƒt	dƒgt	ƒksÐt‚t jˆtd�ˆksæt‚t jˆtˆ d�jtˆ dƒˆ dƒgˆ ƒk�st‚t jˆttd�jttdƒtdƒgtƒk�sBt‚t jˆtt	d�jtt	dƒt	dƒgt	ƒk�spt‚t jˆtd�t td td	d�k�s–t‚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�sút‚t jˆttftd�t td ttdd�k�s(t‚t jˆttft	d�t td ttdd�k�sVt‚t jˆttfdd�t td ttdd�k�s„t‚tdƒ‰ t  ˆ¡ˆk�s t‚t jˆtd�jttdƒtdƒgtƒk�sÌt‚t
t‡fdd„ƒ t jˆˆ d�jtˆ dƒˆ dƒgˆ ƒk�s
t‚t jˆtd�ˆk�s"t‚t jˆttd�jttdƒtdƒgtƒk�sPt‚t
t‡fdd„ƒ t jˆtˆ d�jtˆ dƒˆ dƒgˆ ƒk�s�t‚tdƒ‰ t  ˆ¡ˆk�s¬t‚t jˆtd�jttdƒgtdƒtdƒggtƒk�sât‚t jˆt	d�jtt	dƒgt	dƒt	dƒggt	ƒk�st‚t jˆˆ d�jtˆ dƒgˆ dƒˆ dƒggˆ ƒk�sNt‚t jˆtd�t tt ttt d�k�sxt‚t
t‡fdd„ƒ t jˆttt d�t tt ttt d�k�sºt‚t
t‡fdd„ƒ t jˆtt	t d�t tt tt	t d�k�süt‚t
t‡fdd„ƒ t jˆtd�t tt ttt d�k�s8t‚t
t‡fdd„ƒ t jˆttt d�t tt ttt d�k�szt‚t
t‡fdd„ƒ t jˆtt	t d�t tt tt	t d�k�s¼t‚t
t‡fdd„ƒ t jˆttfd�ˆk�sêt‚t jˆttftd�jttdƒgtdƒtdƒggtƒk�s&t‚t jˆttft	d�jtt	dƒgt	dƒt	dƒggt	ƒk�sbt‚t jˆttfˆ d�jtˆ dƒgˆ dƒˆ dƒggˆ ƒk�sžt‚t jˆttfd�jttdƒgtdƒtdƒggtƒk�sØt‚t jˆttftd�jttdƒgtdƒtdƒggtƒk�st‚t jˆttft	d�jtt	dƒgt	dƒt	dƒggt	ƒk�sPt‚t jˆttfˆ d�jtˆ dƒgˆ dƒˆ dƒggˆ ƒk�sŒt‚t jˆttfdd�jtt	dƒgt	dƒt	dƒggt	ƒk�sÈt‚t jˆttfdd�jtt	dƒgt	dƒt	dƒggt	ƒk�st‚d S )Né   r«   rŸ   r�   ©Úmodulusrž   r©   r¡   úZZ[x]c                      s   t jˆtˆ d�S ©Nr¡   ©r   Ú	from_polyr‡   r�   )r±   Úfr�   rŽ   r¶   Æ   r·   z%test_Poly_from_poly.<locals>.<lambda>c                      s   t jˆ ttd�S r½   ©r   r¿   r‡   rO   r�   ©rÀ   r�   rŽ   r¶   Ç   r·   c                      s   t jˆ ttd�S r½   ©r   r¿   r‡   rP   r�   rÂ   r�   rŽ   r¶   È   r·   rO   rP   ©r¢   r»   zFF(3)éÿÿÿÿc                      s   t jˆ td�S ©Nr«   )r   r¿   rP   r�   ©Úgr�   rŽ   r¶   Ö   r·   r   c                      s   t jˆ ttd�S r½   ©r   r¿   r†   rP   r�   rÇ   r�   rŽ   r¶   Û   r·   c                      s   t jˆ ttd�S r½   )r   r¿   r†   rO   r�   ©Úhr�   rŽ   r¶   è   r·   c                      s   t jˆ ttd�S r½   rÉ   r�   rÊ   r�   rŽ   r¶   ë   r·   c                      s   t jˆ tdd�S ©Nr�   rÄ   )r   r¿   r†   r�   rÊ   r�   rŽ   r¶   î   r·   c                      s   t jˆ ttd�S r½   rÁ   r�   rÊ   r�   rŽ   r¶   ñ   r·   c                      s   t jˆ ttd�S r½   rÃ   r�   rÊ   r�   rŽ   r¶   ô   r·   c                      s   t jˆ tdd�S rÌ   r¾   r�   rÊ   r�   rŽ   r¶   ÷   r·   Trª   )r   r†   rO   r‡   rN   r¿   r¯   r®   rK   rP   r{   rG   r�   r�   )r±   rÀ   rÈ   rË   rŽ   Útest_Poly_from_poly´   sB   ***...&,  ÿÿ
  ÿÿ
  ÿÿ
,,.. ÿÿ
 ÿÿ
6*  ÿÿ
  ÿÿ
*  ÿÿ
  ÿÿ
  ÿÿ
  ÿÿ
  ÿÿ
 ÿÿ
  ÿÿ
  ÿÿ
  ÿÿ
  ÿÿ
  ÿÿrÍ   c                  C   sB  t tdd„ ƒ t tdd„ ƒ tdƒ} tjtd | d�jt| dƒ| dƒg| ƒksRt‚tjt	d | d�jt| dƒ| dƒg| ƒks€t‚tjtd t| d�jt| dƒ| dƒg| ƒks°t‚tjt	d t	| d�jt| dƒ| dƒg| ƒksàt‚tjtt	 | d�jt| dƒg| dƒ| d	ƒgg| ƒk�st‚tjtt	 tt	| d�jt| dƒg| dƒ| d	ƒgg| ƒk�sXt‚t td ¡jtt
dƒt
dƒgt
ƒk�s„t‚t t	d ¡jtt
dƒt
dƒgt
ƒk�s°t‚t td t¡jtt
dƒt
dƒgt
ƒk�sÞt‚t t	d t	¡jtt
dƒt
dƒgt
ƒk�st‚tjtd t
d�jtt
dƒt
dƒgt
ƒk�s<t‚tjt	d t
d�jtt
dƒt
dƒgt
ƒk�slt‚tjtd tt
d�jtt
dƒt
dƒgt
ƒk�sžt‚tjt	d t	t
d�jtt
dƒt
dƒgt
ƒk�sÐt‚tjtd tt	t
d�jtt
dƒgt
dƒggt
ƒk�st‚tjt	d tt	t
d�jtt
dƒt
dƒggt
ƒk�s>t‚d S )
Nc                   S   s   t  tj¡S r�   )r   Ú	from_exprrl   ÚZeror�   r�   r�   rŽ   r¶     r·   z%test_Poly_from_expr.<locals>.<lambda>c                   S   s   t  tdƒ¡S ©Nr¹   )r   rÎ   rl   r�   r�   r�   rŽ   r¶     r·   r�   r¤   r«   rž   rŸ   r   )r{   rD   rN   r   rÎ   r†   r®   rK   r¯   r‡   rO   )ÚF3r�   r�   rŽ   Útest_Poly_from_expr  s&    ..00:>,,..00228rÒ   c                  C   sL  t t } t| td ƒt| d�jt| td ƒg| ƒks8t‚|  ¡ } t| td ƒt| d�jt| td ƒg| ƒkspt‚tt } t| td ƒt| d�jt| td ƒg| ƒks¨t‚|  ¡ } t| td ƒt| d�jt| td ƒg| ƒksàt‚t  	t¡} t| t dƒt dƒgƒt| d�jt| t dƒt dƒgƒg| ƒk�s,t‚|  ¡ } t| t dƒt dƒgƒt| d�jt| t dƒt dƒgƒg| ƒk�svt‚t 	t¡} t| tdƒtdƒgƒt| d�jt| tdƒtdƒgƒg| ƒk�sÂt‚|  ¡ } t| tdƒtdƒgƒt| d�jt| tdƒtdƒgƒg| ƒk�st‚t 
t¡} t| ddgƒt| d�jt| ddgƒg| ƒk�sHt‚d S )Nrž   r«   )rO   r†   r   r‡   r®   rK   r¯   Ú	get_fieldrP   Zold_poly_ringÚalgebraic_fieldre   )Údomr�   r�   rŽ   Útest_poly_from_domain_element/  s$    0000
BB
BB
rÖ   c                  C   s  t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t td	d„ ƒ t td
d„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ t tdd„ ƒ tdƒtdtƒk�s>t‚ttd  t	t  t
 } ttt	t
dœtƒ| k�srt‚tttt	t
gƒtƒ| k�s�t‚ttt	t
gtƒ| k�sªt‚ttt	t
ftƒ| k�sÄt‚ti tttƒ} | jtttfk�rò|  ¡ dk�söt‚tttt t	t  ttƒtƒttt t	t  tƒk�s0t‚tdtd  dt  d dd� ¡ dddgk�sdt‚tdtd  dt  d dd� ¡ dddgk�s˜t‚tdtd  dt  d d d� ¡ d!d"d#gk�sÌt‚t td$d„ ƒ tdtd  d% ttdd%ƒ  d dd� ¡ tdd%ƒtdd%ƒdgk�s$t‚ttdtd  d% ttdd%ƒ  d d d� ¡ d&d'd#gƒ�sdt‚td!td  d"t  d dd� ¡ dddgk�s˜t‚td!td  d"t  d dd� ¡ dddgk�sÌt‚td!td  d"t  d d d� ¡ d!d"d#gk�s t‚t td(d„ ƒ td)td  d*t  d dd� ¡ td+d,ƒtd-d,ƒdgk�sNt‚td)td  d*t  d d d� ¡ d)d*d#gk�s‚t‚tdddd.œttƒttd t dt td   dt t  ttƒk�sÌt‚ttd d td/� ¡ t t¡k�sôt‚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�sft‚t| td2d5d4�tdtd%  d6td0   td  d6td   d td2d5d4�k�s¸t‚tttd t d# ƒ ¡ tƒ�sÜt‚tttd t t d# ƒ ¡ tƒ�st‚d S )7Nc                   S   s   t td ttƒS ©Nrž   ©r   r†   r�   r�   r�   rŽ   r¶   I  r·   z"test_Poly__new__.<locals>.<lambda>c                   S   s   t tt tttt d�S rÆ   ©r   r†   r‡   rO   r�   r�   r�   rŽ   r¶   K  r·   c                   S   s   t tt tttt d�S rÆ   rÙ   r�   r�   r�   rŽ   r¶   L  r·   c                   S   s   t ttdd�S )NT)Ú	symmetricrØ   r�   r�   r�   rŽ   r¶   N  r·   c                   S   s   t td tdtd�S )NrŸ   r�   )r»   r£   ©r   r†   rP   r�   r�   r�   rŽ   r¶   O  r·   c                   S   s   t td ttdd�S )NrŸ   T)r£   Úgaussian©r   r†   rO   r�   r�   r�   rŽ   r¶   Q  r·   c                   S   s   t td tddd�S )NrŸ   r�   T)r»   rÜ   rØ   r�   r�   r�   rŽ   r¶   R  r·   c                   S   s   t td tttdƒgd�S )NrŸ   r�   ©r£   Ú	extension)r   r†   rO   rr   r�   r�   r�   rŽ   r¶   T  r·   c                   S   s   t td tdtdƒgd�S )NrŸ   r�   ©r»   rß   )r   r†   rr   r�   r�   r�   rŽ   r¶   U  r·   c                   S   s   t td ttdd�S )NrŸ   TrÞ   rÝ   r�   r�   r�   rŽ   r¶   W  r·   c                   S   s   t td tddd�S )NrŸ   r�   Trà   rØ   r�   r�   r�   rŽ   r¶   X  r·   c                   S   s   t td ttdd�S )NrŸ   T©r£   ÚgreedyrÝ   r�   r�   r�   rŽ   r¶   Z  r·   c                   S   s   t td ttdd�S )NrŸ   T©r£   rM   rÛ   r�   r�   r�   rŽ   r¶   [  r·   c                   S   s   t td ttdd�S )NrŸ   Frá   rÝ   r�   r�   r�   rŽ   r¶   ]  r·   c                   S   s   t td ttdd�S )NrŸ   Frã   rÛ   r�   r�   r�   rŽ   r¶   ^  r·   c                   S   s   t td tddd�S )Nrž   r�   rX   )r»   ÚorderrØ   r�   r�   r�   rŽ   r¶   `  r·   c                   S   s   t td tdd�S )Nrž   rX   ©rä   rØ   r�   r�   r�   rŽ   r¶   a  r·   c                   S   s   t dddœƒS )NrŸ   rž   r¬   ©r   r�   r�   r�   rŽ   r¶   c  r·   c                   S   s   t ddgƒS ©NrŸ   rž   ræ   r�   r�   r�   rŽ   r¶   d  r·   c                   S   s   t dƒS )N©rŸ   rž   ræ   r�   r�   r�   rŽ   r¶   e  r·   c                   S   s   t dƒS r×   ræ   r�   r�   r�   rŽ   r¶   g  r·   zx-xr   rŸ   )rŸ   rž   r   r�   rž   rO   r«   rP   rS   ç      @ç       @r³   c                   S   s*   t dtd  d ttddƒ  d dd�S )Nr�   rŸ   r¤   rž   rO   r«   )r   r†   rg   r�   r�   r�   rŽ   r¶   |  r·   r¤   g333333ã?gš™™™™™Ù?c                   S   s    t dtd  dt  d dd�S )NçÍÌÌÌÌÌ@rŸ   çÍÌÌÌÌÌ @rž   rO   r«   rØ   r�   r�   r�   rŽ   r¶   ‡  r·   rë   rì   é   é
   é   )rè   ©rž   rŸ   r¨   ©rß   é   i  é  T©r»   rÚ   Fé   )r{   rE   rI   ÚNotImplementedErrorrD   r   r†   r¯   r~   r   r€   Úiterr‡   rˆ   r¢   Úas_exprÚ
all_coeffsrG   rg   r�   re   Ú
get_domainrP   rÔ   r™   rU   rV   rÂ   r�   r�   rŽ   Útest_Poly__new__H  s’    $:444  ÿÿ
, ÿ
44 ÿÿ
@4.ÿ
((,ÿÿ
2 ÿÿ
$rû   c                   C   s*   t td d ƒjtd d tfks&t‚d S rç   )r   r†   Úargsr¯   r�   r�   r�   rŽ   Útest_Poly__args�  s    rý   c                   C   s�  t tt tt  tƒjtfks"t‚t tt tt  tƒjtfksDt‚t tt tt  tƒjtfksft‚t tt tt  ttƒjttfksŒt‚t tt tt  ttƒjttfks²t‚t tt tt  tttƒjtttfksÜt‚t tt tt  tttƒjtttfk�st‚t tt tt  tttƒjtttfk�s4t‚t tt tt  ƒjtttfk�sZt‚t tt tt  dd�jtttfk�s„t‚t tt tt  dd�jtttfk�s®t‚t tt tt  dd�jtttfk�sØt‚t tt tt  tttdd�jtttfk�st‚t tt tt  dd�jtttfk�s2t‚t tt tt  dd�jtttfk�s\t‚t tt tt  dd�jtttfk�s†t‚t tt tt  td�jtttfk�s°t‚t tt tt  td�jtttfk�sÚt‚t tt tt  td�jtttfk�st‚t tt tt  tttdd�jtttfk�s4t‚t tt tt  dd	d
�jtttfk�s`t‚t tt tt  ddd
�jtttfk�sŒt‚d S )Nz	x > p > q)Úsortz	p > x > qz	p > q > xr†   ©Úwrtr‚   rƒ   zq > x)r   rþ   zp > x)r   r†   r‚   rƒ   r¢   r¯   r�   r�   r�   rŽ   Útest_Poly__gens¡  s,    """&&*,,&***0******0,r  c                   C   s@   t tƒjt dttd�kst‚t td ƒjt dttd�ks<t‚d S )Nr   r«   rŸ   )r   r†   ÚzerorO   r¯   rP   r�   r�   r�   rŽ   Útest_Poly_zeroÃ  s    r  c                   C   s@   t tƒjt dttd�kst‚t td ƒjt dttd�ks<t‚d S )Nrž   r«   rŸ   )r   r†   ÚonerO   r¯   rP   r�   r�   r�   rŽ   Útest_Poly_oneÈ  s    r  c                  C   sŽ  t tdd„ ƒ tdƒ} tttdd� tttdd�¡dd … t| dƒgg g| ƒt| dƒ| dƒgg| ƒfkslt‚t tdd„ ƒ t td	d„ ƒ t td
d„ ƒ ttd tƒ ttd tƒ¡dd … tt	dƒt	dƒgt	ƒtt	dƒt	dƒgt	ƒfksìt‚ttd tdd� ttd tƒ¡dd … tt
dƒt
dƒgt
ƒtt
dƒt
dƒgt
ƒfk�sHt‚ttd tƒ ttd tdd�¡dd … tt
dƒt
dƒgt
ƒtt
dƒt
dƒgt
ƒfk�s¤t‚ttd tƒ ttd ttƒ¡dd … tt	dƒgt	dƒggt	ƒtt	dƒgt	dƒggt	ƒfk�st‚ttd tdd� ttd ttƒ¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�slt‚ttd tƒ ttd ttdd�¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�sÒt‚ttd ttƒ ttd tƒ¡dd … tt	dƒgt	dƒggt	ƒtt	dƒgt	dƒggt	ƒfk�s4t‚ttd ttdd� ttd tƒ¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�sšt‚ttd ttƒ ttd tdd�¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�s t‚ttd ttƒ ttd ttƒ¡dd … tt	dƒgt	dƒggt	ƒtt	dƒgt	dƒggt	ƒfk�sdt‚ttd ttdd� ttd ttƒ¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�sÌt‚ttd ttƒ ttd ttdd�¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�s4t‚ttd tƒ ttd ttƒ¡dd … tt	dƒt	dƒggt	ƒtt	dƒt	dƒggt	ƒfk�s’t‚ttd tdd� ttd ttƒ¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�sôt‚ttd tƒ ttd ttdd�¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�sVt‚ttd ttƒ ttd tƒ¡dd … tt	dƒt	dƒggt	ƒtt	dƒt	dƒggt	ƒfk�s´t‚ttd ttdd� ttd tƒ¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�st‚ttd ttƒ ttd tdd�¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�sxt‚ttd ttƒ ttd ttƒ¡dd … tt	dƒgt	dƒggt	ƒtt	dƒgt	dƒggt	ƒfk�sÜt‚ttd ttdd� ttd ttƒ¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�sDt‚ttd ttƒ ttd ttdd�¡dd … tt
dƒgt
dƒggt
ƒtt
dƒgt
dƒggt
ƒfk�s¬t‚ttd ttƒ ttd ttƒ¡dd … tt	dƒt	dƒggt	ƒtt	dƒt	dƒggt	ƒfk�	st‚ttd ttdd� ttd ttƒ¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�	spt‚ttd ttƒ ttd ttdd�¡dd … tt
dƒt
dƒggt
ƒtt
dƒt
dƒggt
ƒfk�	sÔt‚ttd t ttd� ttd tdƒ tdd�¡ttd t tdd�ttd tdƒ tdd�fk�
s<t‚tdt	ƒ\}}}ttt tdd� ttt t tdd�¡dd … t||dƒg| ¡ ƒt|| |dƒg| ¡ ƒfk�
s´t‚ttt tdd� ttt t tdd�¡dd … t||dƒg| ¡ ƒt|| |dƒg| ¡ ƒfk�st‚t tdd„ ƒ ttd td  t tdd�}ttd td  t tdd�}| |¡dd … |j|jfk�sŠt‚d S )Nc                   S   s   t tƒ t¡S r�   ©r   r†   Ú_unifyr‡   r�   r�   r�   rŽ   r¶   Î  r·   z"test_Poly__unify.<locals>.<lambda>r�   rº   rŸ   rž   r   c                   S   s   t ttdd� t ttdd�¡S )Nr�   rº   r¤   r  r�   r�   r�   rŽ   r¶   Ô  r·   c                   S   s   t tttƒ t ttdd�¡S ©Nr�   rº   )r   r‡   r†   r  r�   r�   r�   rŽ   r¶   Ö  r·   c                   S   s   t ttdd� t tttƒ¡S r  r  r�   r�   r�   rŽ   r¶   ×  r·   rP   r«   Trñ   zQQ<sqrt(2) + I>za,búZZ[a]zZZ(a,b)zZZ(a)c                   S   s&   t t td td t  tdd�dd�S )NrŸ   TrL   úZZ(x)r«   )r   r†   rˆ   r‡   r�   r�   r�   rŽ   r¶     r·   zQQ(x)zQQ[x])r{   rB   rN   r   r†   r  r‡   rK   r¯   rO   rP   re   rQ   Zunifyrr   rM   r~   r   Z	to_domainrG   r„   r®   )rÑ   ÚFÚAÚBrÀ   rÈ   r�   r�   rŽ   Útest_Poly__unifyÍ  s¾    $ ÿ
$*ÿ(*ÿ
(*ÿ
&2ÿ
*2ÿ
*2ÿ
&2ÿ
*2ÿ
*2ÿ
(2ÿ
,2ÿ
,2ÿ
&.ÿ
*.ÿ
*.ÿ
&.ÿ
*.ÿ
*.ÿ
(2ÿ
,2ÿ
,2ÿ
(.ÿ
,.ÿ
,.ÿ
0.ÿ
0.ÿ
0.ÿ
r  c                   C   s4  t td d ƒjthkst‚t td tt  ƒjttthks@t‚t td tt  tƒjttthksft‚t td ttt ƒ ƒjttthksŽt‚t td ttt ƒ tƒjttthks¸t‚t td ttt ƒ ttd�jttthksæt‚t dt td  tttƒjthk�st‚t tttƒ tƒjtthk�s0t‚d S ©NrŸ   rž   r«   )r   r†   Úfree_symbolsr¯   r‡   rˆ   rt   rT   r�   r�   r�   rŽ   Útest_Poly_free_symbols$  s    $&(*.(r  c                   C   sÜ   t td d ƒjtƒ kst‚t td tt  ƒjtƒ ks<t‚t td tt  tƒjtthks`t‚t td ttt ƒ ƒjtƒ ks„t‚t td ttt ƒ tƒjtthks¬t‚t td ttt ƒ ttd�jtthksØt‚d S r  )	r   r†   r  Úsetr¯   r‡   rˆ   rt   rT   r�   r�   r�   rŽ   Útest_PurePoly_free_symbols/  s     $$(r  c                  C   sN  t ttƒt ttƒkdkst‚t tttd�t ttƒkdks<t‚t ttƒt tttd�kdks\t‚t tttt d�t ttƒkdks€t‚t ttƒt tttt d�kdks¤t‚t tt ttƒt ttƒkdksÆt‚t tttƒt ttƒkdksät‚t ttƒt tttƒkdk�st‚t td d tƒt td d tƒkdk�s2t‚t td d tƒt td d tƒkdk�s`t‚t tttd�} t tttd�}|  |¡dk�s�t‚|  |¡dk�s¤t‚| j|dd�dk�s¼t‚| j|dd�dk�sÔt‚t	dƒ}t |d td  t
d  td t
  t
dd�} t |d td  t
d  td t
  t
d	d�}| |kdk�sJt‚d S )
NTr«   FrŸ   rž   r”   Út0zQQ[x,t0]zZZ(x,t0))r   r†   r¯   rP   rO   r~   r‡   rš   Únerm   r„   )rÀ   rÈ   r  r�   r�   rŽ   Útest_Poly__eq__8  s(      $$" ....r  c                  C   sL  t ttƒt ttƒkdkst‚t tttd�t ttƒkdks<t‚t ttƒt tttd�kdks\t‚t tttt d�t ttƒkdks€t‚t ttƒt tttt d�kdks¤t‚t tt ttƒt ttƒkdksÆt‚t tttƒt ttƒkdksät‚t ttƒt tttƒkdk�st‚t td d tƒt td d tƒkdk�s2t‚t td d tƒt td d tƒkdk�s`t‚t tttd�} t tttd�}|  |¡dk�s�t‚|  |¡dk�s¤t‚| j|dd�dk�s¼t‚| j|dd�dk�sÔt‚t tttd�} t tttd�}|  |¡dk�st‚|  |¡dk�st‚| j|dd�dk�s0t‚| j|dd�dk�sHt‚d S )NTr«   FrŸ   rž   r”   )	r   r†   r¯   rP   rO   r~   r‡   rš   r  ©rÀ   rÈ   r�   r�   rŽ   Útest_PurePoly__eq__X  s,      $$" ..r  c                   C   sH   t tttd d ƒƒtƒdks"t‚t tttd d ƒƒtƒdksDt‚d S )NrŸ   rž   T)r™   r   r   r†   r¯   r�   r�   r�   rŽ   Útest_PurePoly_Poly{  s    "r  c                   C   s°   t dt ƒ ¡ tkst‚t dt dd� ¡ tks4t‚t dt dd� ¡ tksPt‚t td ƒ ¡ tksht‚ttdd„ ƒ t td dd� ¡ tks’t‚tt dt ƒ ¡ t	ƒs¬t‚d S )NrŸ   rO   r«   rP   c                   S   s   t td dd�S )NrŸ   rO   r«   rØ   r�   r�   r�   rŽ   r¶   ˆ  r·   z&test_Poly_get_domain.<locals>.<lambda>çš™™™™™É?)
r   r†   rú   rO   r¯   rP   r{   rG   r™   rU   r�   r�   r�   rŽ   Útest_Poly_get_domain€  s    r  c                   C   sL  t dt d ƒ t¡t dt d ƒks*t‚t dt d ƒ d¡t dt d ƒksTt‚t dt d ƒ t¡t dt d dd�ks‚t‚t dt d ƒ d¡t dt d dd�ks°t‚t tddƒt tddƒ ƒ d¡t dt d	 ƒksæt‚t dt d	 ƒ d¡t tddƒt tddƒ ƒk�st‚ttd
d„ ƒ ttdd„ ƒ tt	dd„ ƒ d S )NrŸ   rž   rO   rP   r«   rî   rS   r  çš™™™™™¹?c                   S   s   t td d ƒ t¡S rç   )r   r†   Ú
set_domainrO   r�   r�   r�   rŽ   r¶   ˜  r·   z&test_Poly_set_domain.<locals>.<lambda>c                   S   s   t td dd� t¡S )Nrž   rŸ   rº   )r   r†   r  rP   r�   r�   r�   rŽ   r¶   ™  r·   c                   S   s   t tt ttƒ tt ¡S r�   )r   r†   r‡   r  rO   r�   r�   r�   rŽ   r¶   ›  r·   )
r   r†   r  rO   r¯   rP   rg   r{   rG   rE   r�   r�   r�   rŽ   Útest_Poly_set_domainŽ  s    **..68r  c                   C   s2   t td d dd� ¡ dks t‚ttdd„ ƒ d S )NrŸ   rž   rº   c                   S   s   t td d ƒ ¡ S rç   )r   r†   Úget_modulusr�   r�   r�   rŽ   r¶      r·   z'test_Poly_get_modulus.<locals>.<lambda>)r   r†   r  r¯   r{   rF   r�   r�   r�   rŽ   Útest_Poly_get_modulusž  s     r   c                   C   s¤   t td d dd� d¡t td d dd�ks2t‚t td d dd� d¡t td d dd�ksdt‚t td d ƒ d¡t td d dd�ks’t‚ttdd„ ƒ d S )NrŸ   rž   rº   r¹   r¤   c                   S   s   t td d ƒ d¡S rç   )r   r†   Úset_modulusr�   r�   r�   rŽ   r¶   «  r·   z'test_Poly_set_modulus.<locals>.<lambda>)r   r†   r!  r¯   r{   rG   r�   r�   r�   rŽ   Útest_Poly_set_modulus£  s$    
 ÿÿÿ
 ÿÿÿ.r"  c                   C   s&   t td ƒ d¡t td ƒks"t‚d S )Nrž   rŸ   r�   )r   r†   Z
add_groundr¯   r�   r�   r�   rŽ   Útest_Poly_add_ground®  s    r#  c                   C   s&   t td ƒ d¡t td ƒks"t‚d S ©Nrž   rŸ   )r   r†   Z
sub_groundr¯   r�   r�   r�   rŽ   Útest_Poly_sub_ground²  s    r%  c                   C   s*   t td ƒ d¡t dt d ƒks&t‚d S r$  )r   r†   Z
mul_groundr¯   r�   r�   r�   rŽ   Útest_Poly_mul_ground¶  s    r&  c                   C   sP   t dt d ƒ d¡t td ƒks&t‚t dt d ƒ d¡t td ƒksLt‚d S )NrŸ   rò   r�   rž   )r   r†   Z
quo_groundr¯   r�   r�   r�   rŽ   Útest_Poly_quo_groundº  s    &r'  c                   C   s8   t dt d ƒ d¡t td ƒks&t‚ttdd„ ƒ d S )NrŸ   rò   c                   S   s   t dt d ƒ d¡S ©NrŸ   r�   )r   r†   Úexquo_groundr�   r�   r�   rŽ   r¶   Á  r·   z(test_Poly_exquo_ground.<locals>.<lambda>)r   r†   r)  r¯   r{   r?   r�   r�   r�   rŽ   Útest_Poly_exquo_ground¿  s    &r*  c                   C   sH   t t d tƒ ¡ tt t d tƒƒ  kr>t td tƒksDn t‚d S r×   )r   r†   rŠ   r¯   r�   r�   r�   rŽ   Útest_Poly_absÄ  s    r+  c                   C   sF   t t d tƒ ¡ t t d tƒ   kr<t td tƒksBn t‚d S r×   )r   r†   Únegr¯   r�   r�   r�   rŽ   Útest_Poly_negÈ  s    r-  c                	   C   sn  t dtƒ t dtƒ¡t dtƒks$t‚t dtƒt dtƒ t dtƒksFt‚t dtƒ t dtƒ¡t dtƒksjt‚t dttƒt dtƒ t dttƒks�t‚t dtƒ t dttƒ¡t dttƒks¸t‚t dttƒt dttƒ t dttƒksàt‚t dtƒt t td tƒk�st‚tƒ � t dtƒttƒ  W 5 Q R X t ttƒd t td tƒk�sHt‚dt ttƒ t td tƒk�sjt‚d S ©Nr   rž   )r   r†   Úaddr¯   r‡   r|   rt   r�   r�   r�   rŽ   Útest_Poly_addÌ  s    $"$&((""r0  c                	   C   sn  t dtƒ t dtƒ¡t dtƒks$t‚t dtƒt dtƒ t dtƒksFt‚t dtƒ t dtƒ¡t dtƒksjt‚t dttƒt dtƒ t dttƒks�t‚t dtƒ t dttƒ¡t dttƒks¸t‚t dttƒt dttƒ t dttƒksàt‚t dtƒt t dt tƒk�st‚tƒ � t dtƒttƒ  W 5 Q R X t ttƒd t td tƒk�sHt‚dt ttƒ t dt tƒk�sjt‚d S )Nr   rž   rÅ   )r   r†   Úsubr¯   r‡   r|   rt   r�   r�   r�   rŽ   Útest_Poly_subÝ  s    $"$&((""r2  c                	   C   sh  t dtƒ t dtƒ¡t dtƒks$t‚t dtƒt dtƒ t dtƒksFt‚t dtƒ t dtƒ¡t dtƒksjt‚t dttƒt dtƒ t dttƒks�t‚t dtƒ t dttƒ¡t dttƒks¸t‚t dttƒt dttƒ t dttƒksàt‚t dtƒt t ttƒksüt‚tƒ � t dtƒttƒ  W 5 Q R X t ttƒd t dt tƒk�sBt‚dt ttƒ t dt tƒk�sdt‚d S )Nr   rŸ   rò   é   rž   )r   r†   Úmulr¯   r‡   r|   rt   r�   r�   r�   rŽ   Útest_Poly_mulî  s    $"$&(("r5  c                   C   s¶   t tƒt t td tdd�ks"t‚tt tƒ t td tdd�ksDt‚dt tƒ t dt tdd�ksft‚tdƒt tƒ t dt tdd�ksŒt‚t tƒtdƒ t dt tdd�ks²t‚d S )NrŸ   rO   r«   éþÿÿÿ)r   r†   r¯   rl   r�   r�   r�   rŽ   Útest_issue_13079þ  s
    """&r7  c                   C   s4   t tt ttƒ ¡ t td td  ttƒks0t‚d S ©NrŸ   )r   r†   r‡   Zsqrr¯   r�   r�   r�   rŽ   Útest_Poly_sqr  s    r9  c                   C   s   t ttƒ d¡t td tƒks"t‚t ttƒ tdƒ¡t td tƒksHt‚t dt ttƒ d¡t dtd  ttƒksvt‚t dt ttƒ tdƒ¡t dtd  ttƒks¨t‚t dt t ttƒd t dtd  td  ttƒksàt‚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×   r;  r�   r�   r�   rŽ   r¶     r·   )r   r†   Úpowr¯   rf   r‡   r{   Ú	TypeErrorr�   r�   r�   rŽ   Útest_Poly_pow	  s    "&.28r>  c                  C   s:  t td ƒt tƒ } }|t dtƒ }}t| |ƒ||fks<t‚| | |ksLt‚| | |ks\t‚t| tƒ||fksrt‚| t |ks‚t‚| t |ks’t‚t dtƒt dtƒ }}td|ƒ||fks¾t‚d| |ksÎt‚d| |ksÞt‚t tƒt tƒ dksöt‚t td ƒt tƒ tk�st‚t tƒt td ƒ dt k�s6t‚d S )NrŸ   r   rž   )r   r†   Údivmodr¯   )rÀ   rÈ   rƒ   Úrr�   r�   rŽ   Útest_Poly_divmod  s    rA  c                   C   s  t tt ttƒt tt ttƒkdks(t‚t tt tƒt tt ttƒkdksNt‚t tt ttƒt tt tƒkdkstt‚t tt tƒt tt tƒkdks˜t‚t tt tƒt tt tƒkdks¼t‚t tt ttƒtt kdksÜt‚t tt tƒtt kdksút‚t tt ttƒtt kdk�st‚t tt tƒtt kdk�s<t‚t tt tƒtt kdk�s\t‚t tt ttƒt tt ttƒkdk�s†t‚t tt tƒt tt ttƒkdk�s®t‚t tt ttƒt tt tƒkdk�sÖt‚t tt tƒt tt tƒkdk�süt‚t tt tƒt tt tƒkdk�s"t‚t tt ttƒtt kdk�sDt‚t tt tƒtt kdk�sdt‚t tt ttƒtt kdk�s†t‚t tt tƒtt kdk�s¦t‚t tt tƒtt kdk�sÆt‚t ttƒttƒkdk�sât‚t ttƒttƒkdk�sþt‚d S )NTF)r   r†   r‡   r¯   rt   r�   r�   r�   rŽ   Útest_Poly_eq_ne-  s,    (&&$$ "  *((&&" "  rB  c                   C   s0   t tdtƒƒdk	st‚t tdtƒƒdk	s,t‚d S )Nr   Trž   F)Úboolr   r†   r¯   r�   r�   r�   rŽ   Útest_Poly_nonzeroJ  s    rD  c                   C   sô  t dtƒjdkst‚t dtƒjdks(t‚t dtƒjdks<t‚t dtƒjdksPt‚t td tƒjdksht‚t td d tƒjdks„t‚t td tƒjdksœt‚t dt d tƒjdks¸t‚t dt d tƒjdksÔt‚t dt d tƒjdksðt‚t dtƒjdk�st‚t ttƒjdk�st‚t tt	 t
 d ƒjdk�s<t‚t tt	 t
 d ƒjdk�s\t‚t tt	 t
 d ƒjdk�s|t‚t tt	 t
 d ƒjdk�sœt‚t tt	 ƒjdk�s´t‚t tt	 d ƒjdk�sÐt‚t td tt	  ƒjdk�sðt‚t td tt	  ƒjdk�st‚t tƒjdk�s$t‚t tt	 ƒjdk�s<t‚t tt	 ƒjdk�sTt‚t tƒjdk�sht‚t td td	  td
  td  td  td  d ƒjdk�s¬t‚t td td	  td
  td  td  td  d ƒjdk�sðt‚d S )Nr   Trž   FrŸ   r�   rò   r:  é   rî   r3  é   )r   r†   Úis_zeror¯   Úis_oneZis_sqfZis_monicZis_primitiveZ	is_groundr‡   rˆ   Z	is_linearZis_quadraticZis_monomialZis_homogeneousZis_univariateZis_multivariateZis_cyclotomicr�   r�   r�   rŽ   Útest_Poly_propertiesO  sD          2ÿÿ
2ÿÿrI  c                   C   sŒ   t td t d ƒjdkst‚t td dt  d ƒjdks@t‚t dt d dd�jdks^t‚t dtd  dt  d dd�jdksˆt‚d S )	NrŸ   rž   TFr¹   r�   é   rº   )r   r†   Zis_irreducibler¯   r�   r�   r�   rŽ   Útest_Poly_is_irreduciblez  s    "rK  c                   C   s¬   t td ƒ td¡dkst‚t td ƒ tt¡t td ƒks@t‚t td ƒ tt¡t td ƒksdt‚t tt tƒ tt¡td ks†t‚t tt tƒ tt¡td ks¨t‚d S )Nrž   r   rŸ   )r   r†   Úsubsr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_subs‚  s
    $$"rM  c                   C   sÞ  t td ƒ t¡t td ƒks"t‚t td ƒ t¡t td ƒksDt‚ttdd„ ƒ t td ƒ tt¡t td ƒksvt‚t td ƒ tt¡t td ƒksšt‚t tt ƒ tt¡t tt ƒks¾t‚t tt ƒ tt¡t tt ttƒksæt‚t tt ƒ tt¡t tt ƒk�st‚t tt ƒ tt¡t tt ttƒk�s6t‚t tt ƒ tt¡t tt ƒk�s\t‚ttdd„ ƒ t tt tƒ tt¡t tt tƒk�s”t‚t tt tƒ tt¡t tt tƒk�s¾t‚ttdd„ ƒ ttdd„ ƒ d S )Nrž   c                   S   s   t tt ƒ t¡S r�   )r   r†   r‡   Úreplacerˆ   r�   r�   r�   rŽ   r¶   �  r·   z#test_Poly_replace.<locals>.<lambda>c                   S   s   t tt ƒ tt¡S r�   ©r   r†   r‡   rN  r�   r�   r�   rŽ   r¶   œ  r·   c                   S   s   t tt tƒ tt¡S r�   rO  r�   r�   r�   rŽ   r¶   ¡  r·   c                   S   s   t tt tƒ tt¡S r�   rO  r�   r�   r�   rŽ   r¶   ¢  r·   )	r   r†   rN  r¯   r‡   r{   rF   rˆ   r„   r�   r�   r�   rŽ   Útest_Poly_replaceŒ  s    ""$$$(&*&**rP  c                   C   s  t tdd„ ƒ ttt ttƒ tt¡ttt ttƒks:t‚ttt ttƒ tt¡ttt ttƒksft‚ttt ttƒ tt¡ttt ttƒks’t‚ttt ttƒ tt¡ttt ttƒks¾t‚ttt ttƒjtd�ttt ttƒksêt‚ttt ttƒjtd�ttt ttƒk�st‚d S )Nc                   S   s   t tt ƒ tt¡S r�   )r   r†   r‡   Úreorderrˆ   r�   r�   r�   rŽ   r¶   ¦  r·   z#test_Poly_reorder.<locals>.<lambda>rÿ   )r{   rF   r   r†   r‡   rQ  r¯   r�   r�   r�   rŽ   Útest_Poly_reorder¥  s    ,,,,,rR  c                  C   s¦   t td ttd   tttƒ t¡} |  ¡ td ttd   krN| jttfksRt‚t tt t tttƒ d¡t tt t ttƒks†t‚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 r8  ©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Å   rS  r�   r�   r�   rŽ   r¶   ¸  r·   )
r   r‡   rˆ   r†   rT  rø   r¢   r¯   r{   rF   rÂ   r�   r�   rŽ   Útest_Poly_ltrim²  s
    $.4rU  c                   C   s^   t tt d tttƒ tt¡dks&t‚t tt t tttƒ tt¡dksLt‚ttdd„ ƒ d S )Nrž   TFc                   S   s"   t ttd  td  ttƒ t¡S r8  )r   r†   r‡   Úhas_only_gensr„   r�   r�   r�   rŽ   r¶   ¾  r·   z)test_Poly_has_only_gens.<locals>.<lambda>)r   r†   r‡   rˆ   rV  r¯   r{   rE   r�   r�   r�   rŽ   Útest_Poly_has_only_gensº  s    &&rW  c                   C   s€   t dt d dd� ¡ t dt d dd�ks0t‚t dt d dd� ¡ t dt d dd�ks`t‚ttdd„ ƒ ttdd„ ƒ d S )	NrŸ   rž   rO   r«   rP   c                   S   s   t td d ƒ ¡ S rç   ©r   r†   Úto_ringr�   r�   r�   rŽ   r¶   Å  r·   z#test_Poly_to_ring.<locals>.<lambda>c                   S   s   t dt d dd� ¡ S )NrŸ   rž   r�   rº   rX  r�   r�   r�   rŽ   r¶   Æ  r·   )r   r†   rY  r¯   r{   rG   rH   r�   r�   r�   rŽ   Útest_Poly_to_ringÁ  s    00rZ  c                   C   sì   t dt d dd� ¡ t dt d dd�ks0t‚t dt d dd� ¡ t dt d dd�ks`t‚t td d dd� ¡ t td d dd�ks�t‚t dt d dd� ¡ t dt d dd�ksÀt‚t dt d	 ƒ ¡ t dt d	 ƒksèt‚d S )
NrŸ   rž   rO   r«   rP   r�   rº   rê   r³   )r   r†   Zto_fieldr¯   r�   r�   r�   rŽ   Útest_Poly_to_fieldÉ  s
    0000r[  c                   C   sd   t dt ƒ ¡ t dt ƒks t‚t td ƒ ¡ t td ƒks@t‚t dt ƒ ¡ t td ƒks`t‚d S )NrŸ   r  rî   )r   r†   Zto_exactr¯   r�   r�   r�   rŽ   Útest_Poly_to_exactÓ  s      r\  c                  C   s†   t td d ttt d�} |  ¡ t td d tdd�ks<t‚| jdd�t td d tdd�ksbt‚t dttƒ ¡ t dttƒks‚t‚d S )	NrŸ   rž   r«   rO   TrL   rP   r   )r   r†   rP   r‡   Zretractr¯   rÂ   r�   r�   rŽ   Útest_Poly_retractÚ  s    "&r]  c                  C   sÚ  t td dtd   dt  d ƒ} |  dd¡t dtƒks>t‚|  dd¡t dtƒksXt‚|  dd¡t dt d tƒkszt‚|  dd¡t dtd  dt  d tƒks¨t‚|  dd¡t td dtd   dt  d tƒksÞt‚|  tdd¡t dtƒksút‚|  tdd¡t dtƒk�st‚|  tdd¡t dt d tƒk�s>t‚|  tdd¡t dtd  dt  d tƒk�spt‚|  tdd¡t td dtd   dt  d tƒk�sªt‚t td d ƒ}| dd¡t dtƒk�sÖt‚d S )Nr�   rŸ   rò   r   rž   )r   r†   Úslicer¯   r  r�   r�   rŽ   Útest_Poly_sliceã  s    $".6&2:r_  c                   C   s$  t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd  dt  d tƒ ¡ dddgks²t‚t ttd  dtd  td   ƒ d¡ddgksèt‚t ttd  dtd  td   ƒ d¡ddgk�s t‚d S )	Nr   rž   rŸ   r¹   rò   r�   rW   rX   )r   r†   Zcoeffsr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_coeffs÷  s    "006r`  c                   C   s$  t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd  dt  d tƒ ¡ d	ddgks²t‚t ttd  dtd  td
   ƒ d¡ddgksèt‚t ttd  dtd  td
   ƒ d¡ddgk�s t‚d S )Nr   r¥   rž   rŸ   r¦   r¹   ©rŸ   rò   ©rò   r�   rW   ©rŸ   r�   ©rž   r¹   rX   )r   r†   Zmonomsr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_monoms  s    "006re  c                   C   s$  t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd	  dt  d tƒ ¡ d
ddgks²t‚t ttd  dtd  td   ƒ d¡ddgksèt‚t ttd  dtd  td   ƒ d¡ddgk�s t‚d S )Nr   ©r¥   r   rž   ©r¥   rž   rŸ   ©r¦   rŸ   r¹   ©ra  r¹   rò   ©rb  r¹   r�   rW   ©rc  rŸ   ©rd  rž   rX   )r   r†   Ztermsr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_terms  s&    "00ÿÿÿÿÿÿrm  c                   C   sº   t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd  dt  d tƒ ¡ dddddgks¶t‚d S )Nr   rž   rŸ   r¹   rò   )r   r†   rù   r¯   r�   r�   r�   rŽ   Útest_Poly_all_coeffs   s
    "0rn  c                   C   sº   t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd  dt  d tƒ ¡ d	d
dddgks¶t‚d S )Nr   r¥   rž   rŸ   r¦   r¹   ra  rò   rb  ©r�   )r   r†   Z
all_monomsr¯   r�   r�   r�   rŽ   Útest_Poly_all_monoms*  s
    "0rp  c                   C   sº   t dtƒ ¡ dgkst‚t dtƒ ¡ dgks0t‚t dt d tƒ ¡ ddgksRt‚t dtd  dt  d tƒ ¡ dddgks‚t‚t dtd	  dt  d tƒ ¡ d
ddddgks¶t‚d S )Nr   rf  rž   rg  rŸ   rh  r¹   ri  rò   rj  )ro  r   )ra  r   )r   r†   Z	all_termsr¯   r�   r�   r�   rŽ   Útest_Poly_all_terms4  s    " ÿ ÿrq  c                  C   sh   t td dt  d ƒ} t td dt  d ƒ}dd„ }|  |¡|ksJt‚dd„ }|  |¡|ksdt‚d S )NrŸ   é   i�  rò   c                 S   s   | \}|dd|   S ©Nrî   rŸ   r�   ©ÚmonomÚcoeffÚkr�   r�   rŽ   ÚfuncD  s    z test_Poly_termwise.<locals>.funcc                 S   s   | \}|f|dd|   fS rs  r�   rt  r�   r�   rŽ   rx  J  s    )r   r†   Ztermwiser¯   )rÀ   rÈ   rx  r�   r�   rŽ   Útest_Poly_termwise@  s    ry  c                   C   s    t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t ttƒ ¡ dksBt‚t td tƒ ¡ dks\t‚t td d tƒ ¡ dkszt‚t td t d tƒ ¡ dksœt‚d S )Nr   rž   rŸ   r�   )r   r†   Úlengthr¯   r�   r�   r�   rŽ   Útest_Poly_lengthQ  s    r{  c                   C   s   t dtƒ ¡ i kst‚t dtttƒ ¡ i ks0t‚t dtƒ ¡ ddiksJt‚t dtttƒ ¡ ddiksht‚t td d tƒ ¡ dddœksŒt‚t td d tttƒ ¡ dddœks´t‚t dtd  t td  d	t t  d
t t  ƒ ¡ dd	d
dœksüt‚d S )Nr   rž   r¥   ©r   r   r   rŸ   r�   )ra  r¥   ))rŸ   r   r   r|  rò   r¤   )©rŸ   rž   r�   ©rž   rž   r   ©rž   r   rž   )r   r†   Úas_dictr¯   r‡   rˆ   r�   r�   r�   rŽ   Útest_Poly_as_dict[  s    $(8 ÿr�  c                      s  t dtƒ ¡ dkst‚t dtttƒ ¡ dks0t‚t dtƒ ¡ dksFt‚t dtttƒ ¡ dks`t‚t td d tƒ ¡ td d ks†t‚t td d tttƒ ¡ td d ks°t‚t dtd  t td  dt t  dt t  ƒ ¡ dtd  t td  dt t  dt t  k�st‚t td dt td   t ttƒ‰ ˆ  ¡ t td  dt td   k�snt‚ˆ  tdi¡dt dtd   k�s–t‚ˆ  td	i¡d
dt  td  k�s¾t‚ˆ  tdtd	i¡dk�sÚt‚ˆ  dd	¡dk�sðt‚tt‡ fdd„ƒ d S )Nr   rž   rŸ   r�   rò   r¤   é   rî   rF  iúÿÿÿéH   i{  c                      s   ˆ   tdi¡S rÐ   )rø   rˆ   r�   rÂ   r�   rŽ   r¶   €  r·   z#test_Poly_as_expr.<locals>.<lambda>)r   r†   rø   r¯   r‡   rˆ   r{   rE   r�   r�   rÂ   rŽ   Útest_Poly_as_expri  s$    &*.ÿ.ÿ
$,((r„  c                   C   sp   t td tt  dt  tdd� ¡ t td dtd   dtd	   td  dtd   d
 tdd�kslt‚d S )Nrò   é   T©rÜ   r:  rŸ   rî   iB  r3  iAF rP   r«   )r   r†   re   Zliftr¯   r�   r�   r�   rŽ   Útest_Poly_liftƒ  s    $8 ÿÿr‡  c                   C   sü   t dtƒ ¡ dt dtƒfks t‚t dtƒ ¡ dt dtƒfks@t‚t ttƒ ¡ dt ttƒfks`t‚t td tƒ ¡ dt ttƒfks„t‚t td tƒ ¡ dt ttƒfks¨t‚t td t td  td	 td   ƒ ¡ d
t tt t td t  ƒfksøt‚d S )Nr   r¦   rž   rŸ   ra  r…  )r…  rJ  rò   )rŸ   rž   rJ  )r   r†   Údeflater¯   r‡   rˆ   r�   r�   r�   rŽ   Útest_Poly_deflate‰  s       $$"ÿÿr‰  c                  C   s¢   t td t ttd   tt  d tƒ} |  ¡ t td t ttd   tt  d ttƒksbt‚| jdd�t td t ttd   tt  d ttƒksžt‚d S )NrŸ   r�   rž   T)Úfront)r   r†   r‡   Zinjectr¯   rÂ   r�   r�   rŽ   Útest_Poly_inject•  s    *8r‹  c               	   C   s¸  t td t ttd   tt  d ttƒ} |  t¡t ttd  td t t  d tdd�ksdt‚|  t¡t ttd  td t t  d tdd�ksœt‚tt t t t }t |tttttƒ}| t¡t |ttttdd�ksät‚| tt¡t |tttdd�k�st‚| ttt¡t |ttdd�k�s,t‚| t¡t |ttttd	d�k�sPt‚| tt¡t |tttd
d�k�stt‚| ttt¡t |ttdd�k�s˜t‚tt	dd„ ƒ tt
dd„ ƒ d S )NrŸ   r�   rž   r¼   r«   úZZ[y]zZZ[x, y]zZZ[x, y, z]zZZ[w]zZZ[t, w]zZZ[z, t, w]c                   S   s   t tt tttt d� t¡S rÆ   )r   r†   r‡   rO   rˆ   Úejectr�   r�   r�   rŽ   r¶   ¬  r·   z!test_Poly_eject.<locals>.<lambda>c                   S   s   t tt tttƒ t¡S r�   )r   r†   r‡   rˆ   r�  r�   r�   r�   rŽ   r¶   ­  r·   )r   r†   r‡   r�  r¯   rˆ   r„   r…   r{   rH   rö   )rÀ   ÚexrÈ   r�   r�   rŽ   Útest_Poly_ejectœ  s    ,88"$$$$$r�  c                   C   sj   t tttƒ ¡ t ttƒkst‚t tt ttƒ ¡ t tt ttƒksFt‚t dttƒ ¡ t dttƒksft‚d S r×   )r   r†   r‡   Úexcluder¯   r�   r�   r�   rŽ   Útest_Poly_exclude°  s    (r‘  c                   C   s  t dttƒ d¡dkst‚t dttƒ d¡dks4t‚t dttƒ d¡dksNt‚t dttƒ d¡dksht‚ttdd„ ƒ ttdd„ ƒ t dttƒ t¡dksžt‚t dttƒ t¡dks¸t‚t dttƒ d¡dksÒt‚t dttƒ d	¡dksìt‚ttd
d„ ƒ ttdd„ ƒ d S )Nrž   r6  r   rÅ   c                   S   s   t dttƒ d¡S )Nrž   éýÿÿÿ©r   r†   r‡   Ú_gen_to_levelr�   r�   r�   rŽ   r¶   ¼  r·   z)test_Poly__gen_to_level.<locals>.<lambda>c                   S   s   t dttƒ d¡S r$  r“  r�   r�   r�   rŽ   r¶   ½  r·   r†   r‡   c                   S   s   t dttƒ t¡S r×   )r   r†   r‡   r”  rˆ   r�   r�   r�   rŽ   r¶   Å  r·   c                   S   s   t dttƒ d¡S )Nrž   rˆ   r“  r�   r�   r�   rŽ   r¶   Æ  r·   )r   r†   r‡   r”  r¯   r{   rF   r�   r�   r�   rŽ   Útest_Poly__gen_to_level¶  s    r•  c                   C   s4  t dtƒ ¡ t kst‚t dtƒ ¡ dks.t‚t ttƒ ¡ dksDt‚t dtƒjdd�t ks`t‚t dtƒjdd�dkszt‚t ttƒjdd�dks”t‚t dtƒjtd�t ks°t‚t dtƒjtd�dksÊt‚t ttƒjtd�dksät‚t dtƒjdd�t k�st‚t dtƒjdd�dk�st‚t ttƒjdd�dk�s:t‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ t dttƒ ¡ dk�s~t‚t d	t ttƒ ¡ dk�sœt‚t tt ttƒ ¡ dk�sºt‚t dttƒjtd�dk�sØt‚t d	t ttƒjtd�dk�sút‚t tt ttƒjtd�dk�st‚t dttƒjtd�dk�s:t‚t d	t ttƒjtd�dk�s\t‚t tt ttƒjtd�dk�s~t‚tdtƒt k�s”t‚tdtƒdk�s¨t‚tttƒdk�s¼t‚tttd	  tƒdk�sØt‚tttd	  tƒd	k�sôt‚tttd	  tƒdk�st‚tt	ƒdk�s"t‚tt
d
d„ ƒ tt
dd„ ƒ ttdd„ ƒ ttdd„ ƒ tt dtƒtƒt k�svt‚tt dtƒtƒdk�s�t‚tt td	 td  tƒƒdk�s´t‚tt td	 td  ttƒdƒdk�sÜt‚tt td	 td  tƒtƒdk�st‚tt td	 td  td  tƒtƒdk�s0t‚d S )Nr   rž   ©Úgenr†   c                   S   s   t dtƒjdd�S ©Nrž   r–  ©r   r†   r   r�   r�   r�   rŽ   r¶   Ú  r·   z"test_Poly_degree.<locals>.<lambda>c                   S   s   t dtƒjtd�S r˜  )r   r†   r   r‡   r�   r�   r�   rŽ   r¶   Û  r·   c                   S   s   t dtƒjdd�S )Nrž   r‡   r–  r™  r�   r�   r�   rŽ   r¶   Ü  r·   rŸ   c                   S   s   t td td  ƒS r(  ©r   r‡   r†   r�   r�   r�   rŽ   r¶   ô  r·   c                   S   s   t td td  dƒS ©NrŸ   r�   rž   rš  r�   r�   r�   rŽ   r¶   õ  r·   c                   S   s
   t tdƒS )Ngš™™™™™ñ?©r   r†   r�   r�   r�   rŽ   r¶   ö  r·   c                   S   s   t td td d  tƒS r›  rœ  r�   r�   r�   rŽ   r¶   ÷  r·   r�   rò   )r   r†   r   rh   r¯   r{   rF   r‡   rˆ   ri   r=  r�   r�   r�   rŽ   Útest_Poly_degreeÉ  sR    """"$(&r�  c                   C   s(  t dtƒ ¡ t fkst‚t dttƒ ¡ t t fks:t‚t dtttƒ ¡ t t t fks`t‚t dtƒ ¡ dksvt‚t dttƒ ¡ dksŽt‚t dtttƒ ¡ dks¨t‚t td t td td   d ƒ ¡ dksØt‚tdtƒdksêt‚tttƒd	ksüt‚tttd  ƒd
k�st‚ttdd„ ƒ d S )Nr   rž   r¥   r§   r|  rŸ   r�   )r�   rž   rŸ   r¦   rð   c                   S   s   t dƒS r×   )r   r�   r�   r�   rŽ   r¶     r·   z'test_Poly_degree_list.<locals>.<lambda>)	r   r†   r   rh   r¯   r‡   rˆ   r{   rA   r�   r�   r�   rŽ   Útest_Poly_degree_list   s     &0rž  c                   C   sª  t td t td td   d ƒ ¡ dks0t‚t td td  ƒ ¡ dksPt‚t tt t td  ƒ ¡ dkstt‚t td t d ƒ ¡ dks”t‚ttt td  ƒdks°t‚ttt td  ttƒdksÐt‚tdƒdksàt‚tt td td  td  ƒƒdk�s
t‚tt td td  td  tƒƒdk�s6t‚tt td td  td  tƒtƒdk�sdt‚tt td tt t  td td   td  tƒtƒdk�s¦t‚d S )	NrŸ   r�   rž   r¤   rò   r   é	   r¹   )r   r†   r‡   rˆ   r   r¯   r�   r�   r�   rŽ   Útest_Poly_total_degree  s    0 $  *,.r   c                   C   sˆ   t td t ƒ t¡t td tt  ƒks.t‚t tt ƒ t¡t tt tttƒksVt‚t ttd  ƒ t¡t tt td  ƒks„t‚d S r8  )r   r†   r‡   Z
homogenizerˆ   r¯   r�   r�   r�   rŽ   Útest_Poly_homogenize!  s    .(r¡  c                   C   s   t dttƒ ¡ t kst‚t dttƒ ¡ dks2t‚t tttƒ ¡ dksJt‚t tt ttƒ ¡ dksft‚t td ttƒ ¡ d ks‚t‚t tt t ttƒ ¡ d ks¢t‚t td dtd  td   dt td   ƒ ¡ dksÞt‚t td dtd  td   dt td   ƒ ¡ d k�st‚d S )Nr   rž   rŸ   r¤   r�   rŸ  rò   )r   r†   r‡   Zhomogeneous_orderrh   r¯   r�   r�   r�   rŽ   Útest_Poly_homogeneous_order'  s     <r¢  c                   C   s  t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d¡dks€t‚t ttd  dtd  td   ƒ d¡dks²t‚tttd  dtd  td   dd�dksât‚tttd  dtd  td   dd�dk�st‚d S )	Nr   rž   rŸ   r¹   r�   rW   rX   rå   )r   r†   r	   r¯   r‡   r�   r�   r�   rŽ   Útest_Poly_LC4  s    "220r£  c                   C   sR   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚d S )Nr   rž   rŸ   )r   r†   ZTCr¯   r�   r�   r�   rŽ   Útest_Poly_TC@  s    r¤  c                   C   s¶   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d¡dks€t‚t ttd  dtd  td   ƒ d¡dks²t‚d S )Nr   rž   rŸ   r¹   r�   rW   rX   )r   r†   ZECr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_ECF  s
    "2r¥  c                      s  t dtƒ d¡dkst‚t dtƒ t¡dks0t‚t dtƒ d¡dksHt‚t dtƒ t¡dks`t‚t td tƒ d¡dks|t‚t td tƒ td ¡dksœt‚t td tƒ td ¡dks¼t‚t td tƒ td ¡dksÜt‚t dt td  d ttƒ d¡dk�st‚t dt td  d ttƒ ttd  ¡dk�s<t‚t dt t tdƒ d	t  ttƒ‰ ˆ  t¡d	k�stt‚ˆ  t¡dk�sˆt‚ˆ  tt ¡dtdƒ k�s¨t‚ˆ  ¡  t¡dt tdƒ d	 k�sÐt‚tt	‡ fd
d„ƒ tt
dd„ ƒ tt
dd„ ƒ tt
dd„ ƒ d S )Nr   rž   r3  r¹   rŸ  r�   rŸ   é   é   c                      s
   ˆ   t¡S r�   )rv  r†   r�   r›   r�   rŽ   r¶   e  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¶   g  r·   c                   S   s   t td ƒ dt ¡S ©Nrž   r�   r¨  r�   r�   r�   rŽ   r¶   h  r·   c                   S   s   t td ƒ dt t ¡S rª  )r   r†   r©  r‡   r�   r�   r�   rŽ   r¶   i  r·   )r   r†   r©  r¯   r‡   rp   rø   rv  r{   rö   Ú
ValueErrorr�   r�   r›   rŽ   Útest_Poly_coeffO  s&       ,4$ (r¬  c                   C   s<  t dtƒ d¡dkst‚t dtƒ d¡dks0t‚t dtƒ d¡dksHt‚t dtƒ d¡dks`t‚t td tƒ d¡dks|t‚t td tƒ d¡dks˜t‚t td tƒ d¡dks´t‚t td tƒ d¡dksÐt‚t dt td  d ttƒ dd¡dksüt‚t dt td  d ttƒ dd¡dk�s*t‚ttdd	„ ƒ d S )
Nr   rž   r3  r¹   rŸ  r�   rŸ   c                   S   s   t tt d ttƒ d¡S r×   )r   r†   r‡   Únthr�   r�   r�   rŽ   r¶   {  r·   ztest_Poly_nth.<locals>.<lambda>)r   r†   r­  r¯   r‡   r{   r«  r�   r�   r�   rŽ   Útest_Poly_nthl  s    ,.r®  c                   C   s,  t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d¡d	ks€t‚t ttd  dtd  td   ƒ d
¡dks²t‚tttd  dtd  td   dd�td td  ksît‚tttd  dtd  td   d
d�ttd  k�s(t‚d S )Nr   r¥   rž   rŸ   ra  r¹   r�   rW   rc  rX   rd  rå   )r   r†   r
   r¯   r‡   r�   r�   r�   rŽ   Útest_Poly_LM~  s    "22<r¯  c                  C   sp   t td td  t td t td   tt t  d ƒ} dd„ }| jdd�dksXt‚| j|d�d	kslt‚d S )
NrŸ   r�   rž   c                 S   s   t t| ƒƒS r�   )ÚtupleÚreversed)ru  r�   r�   rŽ   r¶   Œ  r·   z+test_Poly_LM_custom_order.<locals>.<lambda>rW   rå   )rŸ   r�   rž   r}  )r   r†   r‡   rˆ   r
   r¯   )rÀ   Zrev_lexr�   r�   rŽ   Útest_Poly_LM_custom_orderŠ  s    <r²  c                   C   s¶   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d¡d	ks€t‚t ttd  dtd  td   ƒ d
¡dks²t‚d S )Nr   r¥   rž   rŸ   r¦   r¹   r�   rW   rd  rX   rc  )r   r†   ZEMr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_EM’  s
    "2r³  c                   C   s0  t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d	¡d
ks€t‚t ttd  dtd  td   ƒ d¡dks²t‚tttd  dtd  td   d	d�dtd  td  ksòt‚tttd  dtd  td   dd�ttd  k�s,t‚d S )Nr   rf  rž   rg  rŸ   )ra  rŸ   r¹   r�   rW   rk  rX   rl  rå   )r   r†   r   r¯   r‡   r�   r�   r�   rŽ   Útest_Poly_LT›  s    "22@r´  c                   C   s¶   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtd  t tƒ ¡ dksNt‚t ttd  dtd  td   ƒ d	¡d
ks€t‚t ttd  dtd  td   ƒ d¡dks²t‚d S )Nr   rf  rž   rg  rŸ   )r¦   rž   r¹   r�   rW   rl  rX   rk  )r   r†   ÚETr¯   r‡   r�   r�   r�   rŽ   Útest_Poly_ET§  s
    "2r¶  c                   C   sF   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtƒ ¡ dksBt‚d S ©NrÅ   rž   r   )r   r†   Zmax_normr¯   r�   r�   r�   rŽ   Útest_Poly_max_norm°  s    r¸  c                   C   sF   t dtƒ ¡ dkst‚t dtƒ ¡ dks,t‚t dtƒ ¡ dksBt‚d S r·  )r   r†   Zl1_normr¯   r�   r�   r�   rŽ   Útest_Poly_l1_norm¶  s    r¹  c                  C   sò  t td tƒ ¡ \} }| dkr@|t td tdd�kr@| ¡ tksDt‚t td d tƒ ¡ \} }| dkrˆ|t td tdd�krˆ| ¡ tksŒt‚t td d tƒjdd�\} }| dkrÔ|t td tdd�krÔ| ¡ tksØt‚t tt d tƒjdd�\} }| tk�r*|t tt tdd�k�r*| ¡ tt k�s.t‚t td	 tdƒ td
d� ¡ \} }| d	k�rˆ|t td	tdƒ  td
d�k�rˆ| ¡ t	k�sŒt‚t td	 tdƒ td
d�jdd�\} }| d	k�rê|t td	tdƒ  td
d�k�rê| ¡ t	k�sît‚d S )NrŸ   rž   rO   r«   rP   T)ÚconvertrŒ  r�   rT   )
r   r†   Zclear_denomsrú   rO   r¯   rP   r‡   rr   rT   )rv  r   r�   r�   rŽ   Útest_Poly_clear_denoms¼  sl      ÿ
ÿ  ÿ
ÿ  ÿ
ÿ  ÿ
ÿ"  ÿ

ÿ  ÿÿ
  ÿ

ÿr»  c                  C   s�   t td t d tƒ} t td t tƒ}|  |¡t td t tƒt ttd  td  tƒfksbt‚|  t¡} | t¡}|  |¡| |fksŒt‚d S )NrŸ   rž   r�   )r   r†   r‡   Zrat_clear_denomsr¯   r  rT   r  r�   r�   rŽ   Útest_Poly_rat_clear_denoms×  s    *ÿ

r¼  c               	   C   sê  t ddtdƒd   dddtdƒ  tdƒd   d	tdƒ ddtdƒ  tdƒd     d
dtdƒd   dtdƒd   ddtdƒ  tdƒd   dddtdƒ  tdƒd   d	tdƒ ddtdƒ  tdƒd      d
dtdƒd   ddtdƒ  tdƒd   dddtdƒ  tdƒd   d	tdƒ ddtdƒ  tdƒd      ddtdƒd   dtdƒd   dddtdƒ  tdƒd   d	tdƒ ddtdƒ  tdƒd      tƒ} | t dtdd�k�sæt‚d S )Nlüÿÿÿ¨wf8*- é   rž   r�   l   Ø>ø<£ i‰^  éý   iÍ#  l   4$isDl   éR rŸ   é   l   ¨wf8*- r   rT   r«   )r   rl   rr   r†   r¯   rÂ   r�   r�   rŽ   Útest_issue_20427ä  sX    
ÿ
ÿ
ÿ
ÿÿ$
ÿ
ÿ
ÿ&ÿÿþ. ÿÿÿû
ÿÿ&ÿÿù	÷
rÀ  c                   C   s`  t td ƒ ¡ t td d t ƒks(t‚t td ƒ t¡t td d t ƒksRt‚t td ƒ tdf¡t td d t ƒks€t‚t tt d ƒ t¡t td t d t ƒks²t‚t tt d ƒ t¡t ttd  d t ƒksät‚t tt d ƒ tt¡t td t d td d  ƒk�s"t‚t tt d ƒ tt¡t ttd  d td d  ƒk�s`t‚t tt d ƒ tdf¡t td t d td d  ƒk�s t‚t tt d ƒ tdf¡t ttd  d td d  ƒk�sàt‚t tt d ƒ tt¡t td td  d tt  ƒk�st‚t tt d ƒ tt¡t td td  d tt  ƒk�s\t‚d S )Nrž   rŸ   r�   rF  rò   )r   r†   Z	integrater¯   r‡   r�   r�   r�   rŽ   Útest_Poly_integrateò  s    (*.22>>@@>rÁ  c                   C   sx  t td t ƒ ¡ t dt d ƒks(t‚t td t ƒ t¡t dt d ƒksRt‚t td t ƒ tdf¡t dt d ƒks€t‚t td td  tt  ƒ t¡t dt td  t ƒks¾t‚t td td  tt  ƒ t¡t dtd  t t ƒksüt‚t td td  tt  ƒ tt¡t dtd  ttƒk�s:t‚t td td  tt  ƒ tt¡t dtd  ttƒk�sxt‚t td td  tt  ƒ tdf¡t dtd  ttƒk�s¸t‚t td td  tt  ƒ tdf¡t dtd  ttƒk�søt‚t td td  tt  ƒ tt¡t dt t d ƒk�s6t‚t td td  tt  ƒ tt¡t dt t d ƒk�stt‚d S )NrŸ   rž   rò   )r   r†   r`   r¯   r‡   r�   r�   r�   rŽ   Útest_Poly_diff  s    (*.>>>>@@>rÂ  c                   C   sŽ   t ttd t ƒƒtdt d ƒks(t‚t ttd t ƒtdd�tttd t ƒtƒks\t‚tttd t ƒtƒ ¡ tdt d ƒksŠt‚d S )NrŸ   rž   F©Úevaluate)r`   r   r†   r¯   r_   Zdoitr�   r�   r�   rŽ   Útest_issue_9585  s
    (ÿrÅ  c                  C   s  t dtƒ d¡dkst‚t dtƒ d¡dks0t‚t ttƒ d¡dksHt‚t dtƒ dd¡dksbt‚t dtƒ dd¡dks|t‚t ttƒ dd¡dks–t‚t dtƒ td¡dks°t‚t dtƒ td¡dksÊt‚t ttƒ td¡dksät‚t dtƒ dd¡dksþt‚t dtƒ dd¡dk�st‚t ttƒ dd¡dk�s6t‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ t d	ttƒ d¡t d	tƒk�s‚t‚t d
t ttƒ d¡t d
t tƒk�s¬t‚t tt ttƒ d¡t dt tƒk�sÖt‚t d	ttƒ td¡t d	tƒk�sút‚t d
t ttƒ td¡t d
t tƒk�s&t‚t tt ttƒ td¡t dt tƒk�sRt‚t d	ttƒ td¡t d	tƒk�svt‚t d
t ttƒ td¡t dtƒk�sžt‚t tt ttƒ td¡t dt tƒk�sÊt‚t tt t ttƒ tdi¡t dt tƒk�süt‚t tt t ttƒ tdi¡t dt d tƒk�s2t‚t tt t ttƒ tdtdi¡dk�s^t‚t tt t ttƒ tdtdi¡dk�sŠt‚t tt t ttƒ d¡dk�s®t‚t tt t ttƒ ddg¡dk�sÖt‚t td dd� tj¡t	dd
ƒk�sþt‚t td dd� t
d
ƒ¡t
d
ƒd k�s*t‚ttdd„ ƒ ttdd„ ƒ tdƒ} d
|  t d
|   td
  d td
 d
t  d  }t td
 | d t  |  d tdd�}| td td  ¡|k�sÈt‚t td
 | d t  |  d ttdd�}| td td  ¡t |tdd�k�st‚d S )Nr   r¹   rž   r†   c                   S   s   t dtƒ dd¡S ©Nrž   r¹   ©r   r†   Úevalr�   r�   r�   rŽ   r¶   .  r·   z test_Poly_eval.<locals>.<lambda>c                   S   s   t dtƒ td¡S rÆ  )r   r†   rÈ  r‡   r�   r�   r�   rŽ   r¶   /  r·   c                   S   s   t dtƒ dd¡S )Nrž   r‡   r¹   rÇ  r�   r�   r�   rŽ   r¶   0  r·   é{   rŸ   rE  r3  rF  é1   é0   )rF  r¹   rO   r«   r�   c                   S   s   t tt t ttƒ d¡S )N)rF  r¹   r3  )r   r†   r‡   rÈ  r�   r�   r�   rŽ   r¶   J  r·   c                   S   s   t td dd�jtjdd�S )Nrž   rO   r«   F©Úauto)r   r†   rÈ  rl   ÚHalfr�   r�   r�   rŽ   r¶   K  r·   Úalphaz	ZZ[alpha]zZZ(alpha,z))r   r†   rÈ  r¯   r{   rF   r‡   rl   rÎ  rg   rr   r«  rH   rm   rˆ   )rÏ  ÚresultrÀ   rÈ   r�   r�   rŽ   Útest_Poly_eval  sP    "**$,,$(,26,,$((,4& (rÑ  c                  C   s~   t dt t dt  t dt  ƒ} | dƒt dt dt  d ƒksHt‚| ddƒt dt d ƒksft‚| dddƒdkszt‚d S )NrŸ   r�   r¤   rF  rí   r¹   é-   )r   r†   r‡   rˆ   r¯   rÂ   r�   r�   rŽ   Útest_Poly___call__W  s    $$rÓ  c                   C   sÊ  t td td d gtƒd ttd tƒttd d tƒgksBt‚t ttd tƒtd d gtƒd ttd tƒttd d tƒgksŠt‚t td ttd d tƒgtƒd ttd tƒttd d tƒgksÒt‚t ttd tƒttd d tƒgtƒd ttd tƒttd d tƒgk�s"t‚t td td d gttƒd ttd ttƒttd d ttƒgk�slt‚t ttd tƒtd d gttƒd ttd ttƒttd d ttƒgk�s¼t‚t td ttd d tƒgttƒd ttd ttƒttd d ttƒgk�st‚t ttd tƒttd d tƒgttƒd ttd ttƒttd d ttƒgk�sbt‚t td td d gƒd ttd tƒttd d tƒgk�s¤t‚t ttd tƒtd d gƒd ttd tƒttd d tƒgk�sìt‚t td ttd d tƒgƒd ttd tƒttd d tƒgk�s4t‚t ttd tƒttd d tƒgƒd ttd tƒttd d tƒgk�s‚t‚t dtd d gƒd tdtƒttd d tƒgk�s¼t‚t dtd d gƒd tdtƒttd d tƒgk�söt‚t dttd d tƒgƒd tdtƒttd d tƒgk�s6t‚t dttd d tƒgƒd tdtƒttd d tƒgk�svt‚t td d dgƒd ttd d tƒtdtƒgk�s°t‚t td d dgƒd ttd d tƒtdtƒgk�sêt‚t ttd d tƒdgƒd ttd d tƒtdtƒgk�s*t‚t ttd d tƒdgƒd ttd d tƒtdtƒgk�sjt‚t ttttƒttttƒgttdd�d ttttdd�ttttdd�gk�s¸t‚ttdd	„ ƒ d S )
Nrž   rŸ   r   rW   rå   rO   r«   c                   S   s   t ddgƒS r.  )r   r�   r�   r�   rŽ   r¶   �  r·   z.test_parallel_poly_from_expr.<locals>.<lambda>)r   r†   r   r¯   r‡   r{   r@   r�   r�   r�   rŽ   Útest_parallel_poly_from_expr_  sP    ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿÿÿ
  ÿÿ"ÿ
 ÿ
ÿ ÿÿ"ÿ


 ÿ ÿÿ"ÿ

 ÿ ÿÿ"ÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
ÿÿÿ
&ÿ
rÔ  c                  C   s  t d td  t t  } }t t d }}dd„ | |||fD ƒ\}}}}| |¡||fks\t‚| |¡|ksnt‚| |¡|ks€t‚| |¡|ks’t‚t| |ƒ||fks¨t‚t| |ƒ|ksºt‚t| |ƒ|ksÌt‚t| |ƒ|ksÞt‚t| |t tƒ||fksøt‚t| |t tƒ|k�st‚t| |t tƒ|k�s(t‚t| |t tƒ|k�s@t‚t| |t tfƒ||fk�s^t‚t| |t tfƒ|k�sxt‚t| |t tfƒ|k�s’t‚t| |t tfƒ|k�s¬t‚t||ƒ||fk�sÄt‚t||ƒ|k�sØt‚t||ƒ|k�sìt‚t||ƒ|k�s t‚t| |dd�||fk�st‚t| |dd�|k�s4t‚t| |dd�|k�sLt‚t| |dd�|k�sdt‚t||dd�||fk�s€t‚t||dd�|k�s˜t‚t||dd�|k�s°t‚t||dd�|k�sÈt‚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�   r;  ©r’   rË   r�   r�   rŽ   Ú
<listcomp>—  s     ztest_pdiv.<locals>.<listcomp>T©ÚpolysFc                   S   s
   t ddƒS ©Nrò   rŸ   )r   r�   r�   r�   rŽ   r¶   ¼  r·   ztest_pdiv.<locals>.<lambda>c                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   ½  r·   c                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   ¾  r·   c                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   ¿  r·   )	r†   r‡   r   r¯   r   r   r   r{   rA   )rÀ   rÈ   rƒ   r@  r  ÚGÚQÚRr�   r�   rŽ   Ú	test_pdiv“  sF    rÝ  c                     s¤  t d td  t t  ‰ ‰t t d } }dd„ ˆ ˆ| |fD ƒ\}}}}| |¡||fks\t‚| |¡|ksnt‚| |¡|ks€t‚| |¡|ks’t‚tˆ ˆƒ| |fks¨t‚tˆ ˆƒ|ksºt‚tˆ ˆƒ| ksÌt‚tˆ ˆƒ| ksÞt‚tˆ ˆt tƒ| |fksøt‚tˆ ˆt tƒ|k�st‚tˆ ˆt tƒ| k�s(t‚tˆ ˆt tƒ| k�s@t‚tˆ ˆt tfƒ| |fk�s^t‚tˆ ˆt tfƒ|k�sxt‚tˆ ˆt tfƒ| k�s’t‚tˆ ˆt tfƒ| k�s¬t‚t||ƒ||fk�sÄt‚t||ƒ|k�sØt‚t||ƒ|k�sìt‚t||ƒ|k�s t‚tˆ ˆdd�||fk�st‚tˆ ˆdd�|k�s4t‚tˆ ˆdd�|k�sLt‚tˆ ˆdd�|k�sdt‚t||dd�| |fk�s€t‚t||dd�|k�s˜t‚t||dd�| k�s°t‚t||dd�| k�sÈt‚ttdd	„ ƒ ttd
d	„ ƒ ttdd	„ ƒ ttdd	„ ƒ t d d dt  d  ‰ ‰dt d d  }}t d d d }}	tˆ ˆƒ||	fk�sVt‚tˆ ˆdd�||	fk�srt‚tˆ ˆdd�||fk�sŽt‚tˆ ˆt	d�||fk�sªt‚tˆ ˆt
d�||	fk�sÆt‚tˆ ˆt	dd�||	fk�sät‚tˆ ˆt	dd�||fk�st‚tˆ ˆt
dd�||	fk�s t‚tˆ ˆt
dd�||	fk�s>t‚tˆ ˆƒ|	k�sRt‚tˆ ˆdd�|	k�sjt‚tˆ ˆdd�|k�s‚t‚tˆ ˆt	d�|k�sšt‚tˆ ˆt
d�|	k�s²t‚tˆ ˆt	dd�|	k�sÌt‚tˆ ˆt	dd�|k�sæt‚tˆ ˆt
dd�|	k�s t‚tˆ ˆt
dd�|	k�st‚tˆ ˆƒ|k�s.t‚tˆ ˆdd�|k�sFt‚tˆ ˆdd�|k�s^t‚tˆ ˆt	d�|k�svt‚tˆ ˆt
d�|k�sŽt‚tˆ ˆt	dd�|k�s¨t‚tˆ ˆt	dd�|k�sÂt‚tˆ ˆt
dd�|k�sÜt‚tˆ ˆt
dd�|k�söt‚t d dt  t d   ‰ ‰} tˆ ˆƒ| k�s&t‚tˆ ˆdd�| k�s>t‚tt‡ ‡fdd	„ƒ tt‡ ‡fdd	„ƒ tˆ ˆt
d�| k�s~t‚tˆ ˆt	dd�| k�s˜t‚tt‡ ‡fdd	„ƒ tˆ ˆt
dd�| k�sÆt‚tˆ ˆt
dd�| k�sàt‚tt d ƒtt ƒ ‰ ‰ˆ  ˆ¡\} }|  ¡ j�r| ¡ j�s t‚ˆ  ˆ¡}| ¡ j�s:t‚ˆ  ˆ¡} |  ¡ j�sTt‚ˆ  ˆ¡} |  ¡ j�snt‚tt t t ƒtdt  t t ƒ ‰ ‰ˆ  ˆ¡\} }|  ¡ j�r¶| ¡ j�sºt‚tddt  t td�}
tdt t td�} |
j| dd�tdt dd�tddt  t dd�fk�st‚|
j| dd�ttdƒ d dt d  t dd�tdt dd�fk�s`t‚dt d  dt   d ‰ dt  d ‰tˆ ˆt	d�dˆ fk�s t‚d S )NrŸ   r   c                 S   s   g | ]}t |ttƒ‘qS r�   r;  rÕ  r�   r�   rŽ   rÖ  Æ  s     ztest_div.<locals>.<listcomp>Tr×  Fc                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   ë  r·   ztest_div.<locals>.<lambda>c                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   ì  r·   c                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   í  r·   c                   S   s
   t ddƒS rÙ  ©r   r�   r�   r�   rŽ   r¶   î  r·   rž   rò   r¤   rÌ  r«   ©r£   rÍ  c                      s   t ˆ ˆdd�S ©NFrÌ  rÞ  r�   r  r�   rŽ   r¶     r·   c                      s   t ˆ ˆtd�S rÆ   ©r   rO   r�   r  r�   rŽ   r¶     r·   c                      s   t ˆ ˆtdd�S )NFrß  rá  r�   r  r�   rŽ   r¶     r·   r�   rQ   rR   rî   )r†   r‡   r   r¯   r   r   r   r{   rA   rO   rP   r?   r   rú   Zis_ZZZis_Fracre   rQ   rl   )rƒ   r@  r  rÚ  rÛ  rÜ  ZqzZrzZqqZrqr‚   r�   r  rŽ   Útest_divÂ  sÄ    


""ÿ
0ÿ
râ  c                  C   s6   t tdt ƒ\} }t| d ƒdk s&t‚|dks2t‚d S )Ng>,p½ Ú?g3!	Ž˜@g›+¡†›„=r   )r   r~   rŠ   r¯   )rƒ   r@  r�   r�   rŽ   Útest_issue_7864;  s    rã  c            
      C   sÂ  dt  t d d  } }t d tddƒd  }}}dd„ | ||||fD ƒ\}}}}}	| |¡||	fksht‚| |¡|||	fks€t‚| |¡|ks’t‚t| |ƒ||fks¨t‚t| |ƒ|||fksÀt‚t| |ƒ|ksÒt‚t| |t ƒ||fksêt‚t| |t ƒ|||fk�st‚t| |t ƒ|k�st‚t| |t fƒ||fk�s8t‚t| |t fƒ|||fk�sVt‚t| |t fƒ|k�snt‚t||ƒ||	fk�s†t‚t||ƒ|||	fk�s t‚t||ƒ|k�s´t‚t| |dd	�||	fk�sÐt‚t| |dd	�|||	fk�sît‚t| |dd	�|k�st‚t||d
d	�||fk�s"t‚t||d
d	�|||fk�s@t‚t||d
d	�|k�sXt‚tddƒdk�slt‚tddƒdk�s€t‚tddƒdk�s”t‚ttdd„ ƒ ttdd„ ƒ ttdd„ ƒ d S )NrŸ   r:  é    rÅ   rž   c                 S   s   g | ]}t |td d�‘qS )rP   r«   rØ   ©r’   r‹   r�   r�   rŽ   rÖ  E  s     ztest_gcdex.<locals>.<listcomp>Tr×  Féd   iÔ  )éìÿÿÿrò   )rç  rž   rò   r�   r¹   r¤   c                   S   s   t td dt d dd�S ©Nrž   rŸ   FrÌ  )r   r†   r�   r�   r�   rŽ   r¶   g  r·   ztest_gcdex.<locals>.<lambda>c                   S   s   t td dt d dd�S rè  )r   r†   r�   r�   r�   rŽ   r¶   h  r·   c                   S   s   t td dt d dd�S rè  )r   r†   r�   r�   r�   rŽ   r¶   i  r·   )r†   rg   r   r¯   r   r   r{   rH   )
rÀ   rÈ   Úsr„   rË   r  rÚ  rl   ÚTÚHr�   r�   rŽ   Ú
test_gcdexA  s<    "rì  c                  C   sv   t dtd d  td d  td d  ƒ} t dtd  d dtd  d  td d  d ƒ}|  d	¡|ksrt‚d S )
Nrž   rŸ   rò   r¦  rF  iÐ  é=   r¤   r3  )r   r†   Úrevertr¯   r  r�   r�   rŽ   Útest_revertl  s    ,4rï  c                  C   s  t d dt   d t d d dt  d   } }}t| ƒt|ƒt|ƒ  }}}| |¡|||gksdt‚t| |ƒ| ||gks|t‚t| |t ƒ| ||gks–t‚t| |t fƒ| ||gks²t‚t||ƒ|||gksÊt‚t| |dd�|||gksæt‚t||dd�| ||gk�st‚ttdd„ ƒ d S )NrŸ   rž   Tr×  Fc                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶     r·   z$test_subresultants.<locals>.<lambda>)r†   r   r   r¯   r{   rA   ©rÀ   rÈ   rË   r  rÚ  rë  r�   r�   rŽ   Útest_subresultantss  s    0rñ  c                  C   sÒ  t d dt   d t d d d  } }}t| ƒt|ƒ }}| |¡|ksLt‚t| |ƒ|ks^t‚t| |t ƒ|ksrt‚t| |t fƒ|ksˆt‚t||ƒ|ksšt‚t| |dd�|ks°t‚t||dd�|ksÆt‚t| |dd�|| |dt  d gfksît‚t t t t tt   } }}t| ƒt|ƒt|ƒ  }}}| |¡|k�s:t‚t| |ƒ|k�sNt‚t| |t ƒ|k�sdt‚t| |t fƒ|k�s|t‚t||ƒ|k�s�t‚t| |dd�|k�s¨t‚t||dd�|k�sÀt‚ttdd	„ ƒ d S )
NrŸ   rž   r   Tr×  F)Z
includePRSc                   S   s
   t ddƒS rÙ  )r   r�   r�   r�   rŽ   r¶   š  r·   z test_resultant.<locals>.<lambda>)r†   r   r   r¯   r~   r   r{   rA   rð  r�   r�   rŽ   Útest_resultant‚  s(    ((rò  c                  C   s–  t d dt d   dt   d d } }t| ƒ}| ¡ |ks>t‚t| ƒ|ksNt‚t| t ƒ|ks`t‚t| t fƒ|kstt‚t|ƒ|ks„t‚t| dd�|ks˜t‚t|dd�|ks¬t‚tt d  tt   t td d	t t   } }t| ƒt|ƒ }}| ¡ |k� sþt‚t| ƒ|k�st‚t| t tttƒ|k�s*t‚t| t tttfƒ|k�sFt‚t|ƒ|k�sXt‚t| dd�|k�snt‚t|dd�|k�s„t‚ttd
d„ ƒ d S )Nr�   rŸ   rŸ  é   ipÒÿÿTr×  Frò   c                   S   s   t dƒS ©Nrò   )r   r�   r�   r�   rŽ   r¶   ´  r·   z#test_discriminant.<locals>.<lambda>)	r†   r   r   r¯   r~   r   r€   r{   rA   ©rÀ   rÈ   r  rÚ  r�   r�   rŽ   Útest_discriminant�  s&    &.rö  c                  C   s˜   t td td  tƒ} t|  ¡ ƒddgks.t‚|  ¡ dks>t‚t td dtd   d tƒ} |  d¡}t|  |¡ƒdddgks‚t‚|  |¡dks”t‚d S )Nrž   rŸ   r   rò   r�   r’  )r   r†   ÚsortedZdispersionsetr¯   Z
dispersionÚshift)ÚfpÚgpr�   r�   rŽ   Útest_dispersion·  s    
rû  c                  C   sF  t d d t d d t d dt   d g} t| ƒt d ks>t‚t| dd�tt d ƒksZt‚tg ƒdksjt‚tddgƒdks~t‚tddd	gƒdks”t‚tt td
  t t  t d
  gƒdks¾t‚tg t ƒ}|jrØ|tjksÜt‚tg t dd�}|jrö|j	sút‚t
dƒ}t|| gƒt| |gƒ  k�r.|k�s4n t‚ttdd„ ƒ d S )Nr�   rž   rŸ   Tr×  r   rò   rF  r3  é*   c                   S   s   t g dd�S ©NTr×  )r   r�   r�   r�   rŽ   r¶   Ù  r·   ztest_gcd_list.<locals>.<lambda>)r†   r   r¯   r   r‡   Ú	is_Numberrl   rÏ   Úis_PolyrG  rr   r{   rA   )r  r   r~   r�   r�   rŽ   Útest_gcd_listÄ  s    **
2r   c                  C   s^  t d d t d d t d dt   d g} t| ƒt d t d  dt d   t d  t  d ksbt‚t| dd�tt d t d  dt d   t d  t  d ƒks¢t‚tg ƒdks²t‚tddgƒdksÆt‚tddd	gƒd
ksÜt‚tt td  t t  t d  gƒdk�st‚tg t ƒ}|j�r&|tjk�s*t‚tg t dd�}|j�rH|j	�sLt‚t
tdd„ ƒ d S )Nr�   rž   rŸ   r¤   rò   Tr×  rF  r3  r¦  rü  r   c                   S   s   t g dd�S rý  )r   r�   r�   r�   rŽ   r¶   î  r·   ztest_lcm_list.<locals>.<lambda>)r†   r   r¯   r   r‡   rþ  rl   ÚOnerÿ  rH  r{   rA   )r  r   r�   r�   rŽ   Útest_lcm_listÜ  s    *8@,
r  c                  C   s’  t d d t d d  } }t d t  d t d  }}t d t d t d  t  d  }}dd„ | |||||fD ƒ\}}}}	}
}| |¡|
||	fks”t‚| |¡|
ks¦t‚| |¡|ks¸t‚t| |ƒ|||fksÐt‚t| |ƒ|ksât‚t| |ƒ|ksôt‚t| |t ƒ|||fk�st‚t| |t ƒ|k�s&t‚t| |t ƒ|k�s<t‚t| |t fƒ|||fk�sZt‚t| |t fƒ|k�srt‚t| |t fƒ|k�sŠt‚t||ƒ|
||	fk�s¤t‚t||ƒ|
k�s¸t‚t||ƒ|k�sÌt‚t| |dd�|
||	fk�sêt‚t| |dd�|
k�st‚t| |dd�|k�st‚t||d	d�|||fk�s8t‚t||d	d�|k�sPt‚t||d	d�|k�sht‚d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| |ƒ|||fk�s¸t‚t| |ƒ|k�sÌt‚t| |ƒ| k�sàt‚d
t d  d
 d
t  d
  } }|d
t  d
 d
  }}}t| |ƒ|||fk�s0t‚t| |ƒ|k�sDt‚t| |ƒ| k�sXt‚tddƒdk�slt‚tddƒdk�s€t‚tddƒdk�s”t‚t d dt   d t d dt d   t  d  } }t d dt d   dt d   dt   d }t d t d t d d   }}}t| |dd�|||fk�s0t‚t| |dd�|k�sHt‚t| |dd�|k�s`t‚t d dt   d t d dt d   t  d  } }t d dt d   dt d   dt   d }t d t d t d d   }}}t| |dd	d�|||fk�sþt‚t| |dd	d�|k�st‚t| |dd	d�|k�s2t‚tdƒtdƒ  }}t||ƒt||ƒ  k�rntdƒk�stn t‚tdƒtdƒ  }}t||ƒt||ƒ  k�r°tdƒk�s¶n t‚ttt d t ƒttt  t ƒƒtdt td�k�sèt‚t	t
dd„ ƒ t	t
dd„ ƒ tdt ƒ} tdt ƒ}t| |ƒtdt ƒk�s2t‚tdt ƒ} tddgt ƒ}| |fD ]V}t|dƒdk�sjt‚td|ƒdk�s~t‚t|| ƒdk�s’t‚t| |ƒdk�sRt‚�qRdt d  t  d } t| td�}t| td�}| |¡|k�sêt‚| |¡|k�sþt‚| |¡| ¡ k�st‚| |¡| ¡ k�s.t‚t| | ƒ| k�sBt‚t| | ƒ| k�sVt‚t| | td�t| ƒk�srt‚t| | td�t| ƒk�sŽt‚d S )Nr�   rž   rŸ   rò   c                 S   s   g | ]}t |ƒ‘qS r�   ræ   rå  r�   r�   rŽ   rÖ  ö  s     ztest_gcd.<locals>.<listcomp>Tr×  Fr³   r3  rF  )rŸ   rò   r�   r¦  rJ  rº   r¹   rô   r6  r«   c                   S   s   t tƒS r�   )r   r†   r�   r�   r�   rŽ   r¶   >  r·   ztest_gcd.<locals>.<lambda>c                   S   s   t tƒS r�   )r   r†   r�   r�   r�   rŽ   r¶   ?  r·   rÅ   r   )r†   r   r¯   r   r   rr   r   re   rQ   r{   r=  rO   rP   r!   )rÀ   rÈ   ré  r„   rË   r@  r  rÚ  rl   rê  rë  rÜ  Úlr~   r   ÚiZpfzZpfqr�   r�   rŽ   Útest_gcdñ  sœ    "&2, 2,  ..2


r  c                   C   sZ  t tddƒtƒst‚t tdt dƒtƒs,t‚tddƒdks>t‚tdt dƒdksTt‚t ttddƒtddƒƒtƒstt‚t ttddƒt tddƒƒtƒs˜t‚ttddƒtddƒƒtddƒks¼t‚ttddƒt tddƒƒdksÞt‚t tddƒtƒsòt‚t tdt dƒtƒ�st‚tddƒdk�s t‚tdt dƒdk�s8t‚ttddd	d
�dƒdk�sVt‚d S )Nr�   rŸ  rŸ   rò   rž   ré   g      "@r³   FrÃ  )r™   r   rf   r¯   r†   rg   rd   rc   r�   r�   r�   rŽ   Útest_gcd_numbers_vs_polys[  s     $$"r  c                  C   s  t dƒdkst‚t dtƒdks"t‚t td ƒtd ks:t‚t t d ƒt d ksVt‚t dt d ƒdt d ksvt‚t dt d ƒtddt d dd�ks t‚t td t ttd   ƒtt td td   ksØt‚t dtd  t dt td   ƒdt t td td   k�st‚t td t d ttd  d  ƒtt d td td   k�sdt‚t td t dt td   ƒtt td dtd    k�s¦t‚t dtd  t dt td   ƒdt t td dtd    k�sðt‚t dtd  t d dt td  d  ƒtt tdd	ƒ dtd  dtd    k�sLt‚t d
td  t dt td   ƒtt d
td  dtd    k�s–t‚tt d
t d ƒd
t d ƒ�sºt‚t ddt  ttt   dd�dt d tt t  k�søt‚t ddt  tttddt  ƒ   ddd�dt td  ttdtd dd�ƒd  k�sVt‚t tttt  ƒdd�tttd  ƒk�s„t‚tdt dt dt	 t  ƒ} t | ƒtdt dt t	d  ƒk�sÊt‚t | dd�tdt dt t	d  ƒk�söt‚t
tdd„ ƒ d S )Nrž   rŸ   r�   rF  rò   FrÃ  r¤   é   rê   gffffff@©ra   T)ra   Údeep©r	  c                   S   s   t tdk ƒS r8  )r   r†   r�   r�   r�   rŽ   r¶   ’  r·   z test_terms_gcd.<locals>.<lambda>)r   r¯   r†   rc   r‡   rg   r\   rt   rk   rˆ   r{   r=  ©rš   r�   r�   rŽ   Útest_terms_gcdr  s6     *8FFBJ\J$ÿ
,(ÿ
ÿ
(,r  c                  C   s<  t d dt d   dt d   dt d   dt   d t d t d  t d  t   } }t| ƒt|ƒ }}| d¡|kszt‚t| dƒ|ksŒt‚t| dt ƒ|ks t‚t| dt fƒ|ks¶t‚t|dƒ|ksÈt‚t| ddd�|ksÞt‚t|ddd�|ksôt‚dt d  dt d   dt d   dt d   dt   d	 t d  t d  t  d	  } }t| ƒt|ƒ }}| d¡|k�srt‚t| dƒ|k�s†t‚t| dt ƒ|k�sœt‚t| dt fƒ|k�s´t‚t|dƒ|k�sÈt‚t| ddd�|k�sàt‚t|ddd�|k�søt‚tt d dt   d dd
�} |  d¡tt d d	 dd
�k�s8t‚d S )Nr¤   rŸ   rò   r�   rF  Tr×  Frž   rº   )r†   r   r    r¯   rõ  r�   r�   rŽ   Ú
test_trunc•  s(    VXr  c                  C   st  dt  d t tj  } }t| dd�t|ƒ }}| ¡ |ks>t‚t| ƒ|ksNt‚t| t ƒ|ks`t‚t| t fƒ|kstt‚t|ƒ|ks„t‚t| dd�|ks˜t‚t|dd�|ks¬t‚ttdd	„ ƒ tdt d  d
t   d dd�t d dt   d ksòt‚ttdd	„ ƒ tdt d  dt   d ƒdt d  dt   d k�s:t‚tdt d  dt   d dd�t d t  d k�spt‚d S )NrŸ   rž   rP   r«   Tr×  Fc                   S   s   t dƒS rô  )r!   r�   r�   r�   rŽ   r¶   ½  r·   ztest_monic.<locals>.<lambda>rF  rò   rÌ  r�   c                   S   s   t dt dt  d dd�S )NrŸ   rF  rž   FrÌ  )r!   r†   r�   r�   r�   rŽ   r¶   À  r·   rê   g      @g      @r³   ré   r¤   rº   )	r†   rl   rÎ  r   r!   r¯   r{   rA   r?   rõ  r�   r�   rŽ   Ú
test_monic±  s    8:r  c                  C   sp   dt  d tdt  d ƒ } }| ¡ dks.t‚t| ƒdks>t‚ttdd„ ƒ tdt  dd�} |  ¡ dkslt‚d S )Nrò   rŸ   c                   S   s   t dƒS rô  )r"   r�   r�   r�   rŽ   r¶   Ì  r·   ztest_content.<locals>.<lambda>r�   rº   rž   )r†   r   r"   r¯   r{   rA   )rÀ   r  r�   r�   rŽ   Útest_contentÆ  s    r  c                  C   s>  dt  d dt  d  } }t| ƒt|ƒ }}| ¡ d|fks@t‚t| ƒd|fksTt‚t| t ƒd|fksjt‚t| t fƒd|fks‚t‚t|ƒd|fks–t‚t| dd�d|fks®t‚t|dd�d|fksÆt‚ttdd„ ƒ tdt  d	d
�} tdt  td�}|  ¡ d| fk�s
t‚| ¡ d|fk�s t‚ttdƒƒtdƒk�s:t‚d S )Nrò   rŸ   rž   Tr×  Fc                   S   s   t dƒS rô  )r#   r�   r�   r�   rŽ   r¶   ß  r·   z test_primitive.<locals>.<lambda>r�   rº   rê   r«   r³   z-3*x/4 + y + 11/8z(1/8, -6*x + 8*y + 11))r†   r   r#   r¯   r{   rA   rS   rl   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sœt‚t||ƒ| ks®t‚t||t ƒ| ksÂt‚t||t fƒ| ksØt‚t||ƒ|ksêt‚t||dd�|k�st‚t||dd�| k�st‚| ¡ ||gk�s0t‚t| ƒ||gk�sFt‚t| t ƒ||gk�s^t‚t| t fƒ||gk�sxt‚t|ƒ||gk�sŽt‚t| dd�||gk�s¨t‚t|dd�||gk�sÂt‚ttdd„ ƒ ttdd„ ƒ tt d
 td
  t t t tƒt d
 d
t  t  k�st‚tt d
 td
  t t tt ƒtd
  d
t  t  k�sPt‚d S )Nr¿  rr  rî   é–   r3  iô  rF  éq  rò   rŸ   r�   rŸ  r¤   Tr×  Fc                   S   s
   t ddƒS rÙ  )r$   r�   r�   r�   rŽ   r¶   	  r·   ztest_compose.<locals>.<lambda>c                   S   s   t dƒS rô  )r%   r�   r�   r�   rŽ   r¶   	  r·   )	r†   Úmapr   r$   r¯   r%   r{   rA   r‡   rð  r�   r�   rŽ   Útest_composeë  s,    P8r  c                   C   sB   t td dt  d tƒ d¡t td dt  d tƒks>t‚d S rç   )r   r†   rø  r¯   r�   r�   r�   rŽ   Ú
test_shift		  s    r  c                   C   s>   t tt ttgƒ ddg¡t td td  ttgƒks:t‚d S r$  )r   r†   r‡   Z
shift_listr¯   r�   r�   r�   rŽ   Útest_shift_list	  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s‚n t‚t td td  d tƒ t td ƒt td ƒ¡t dtd  d tddƒ tƒ  k�rttd d td td  d  ttd td  ¡ ƒk�sn t‚t td dt  d tƒ t ttj ƒt td ƒ¡t tddƒtƒ  k�r¨ttd d td dt  d  tttj td  ¡ ƒk�s®n t‚t td dt  d tƒ t td ƒt ttj ƒ¡t tddƒtƒ  k�r:tttj d td dt  d  ttd ttj  ¡ ƒk�s@n t‚t td dt  d tƒ t td ƒt ttj ƒ¡t tddƒtdd	�  k�rÐtttj d td dt  d  ttd ttj  ¡ ƒk�sÖn t‚t	t
d
d„ ƒ t	t
dd„ ƒ t	t
dd„ ƒ t	t
dd„ ƒ t	t
dd„ ƒ d S )NrŸ   rž   rò   r�   r¤   rŸ  r³   rS   r«   c                   S   s$   t tt ƒ t td ƒt td ƒ¡S r×   )r   r†   r‡   Ú	transformr�   r�   r�   rŽ   r¶   (	  r·   z test_transform.<locals>.<lambda>c                   S   s    t tƒ t td ƒt td ƒ¡S r×   ©r   r†   r  r‡   r�   r�   r�   rŽ   r¶   )	  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  r7   rL  r¯   rg   rl   rÎ  r{   r«  r�   r�   r�   rŽ   Útest_transform	  s<    0ÿ6þ0ÿ
6þ2ÿ
8þ2ÿ
:þ2ÿ
:þr  c               
      sf  t tt dd� ‰ } dtdt dd� }}|  ¡ | |gks:t‚tˆ ƒˆ |gksNt‚tˆ t ƒˆ |gksdt‚tˆ t fƒˆ |gks|t‚t| ƒ| |gks�t‚tˆ dd�| |gks¨t‚t| dd�ˆ |gksÀt‚ttdd„ ƒ tt‡ fd	d„ƒ ttd
ƒdtd   t d  tdƒdtd   t d   tdƒdtd   t d   tdƒdtd   t d   t	ddƒt   t	ddƒ t dd�‰ tˆ ƒtt d dt d   td d t   dtd  d  t dd�tdt d  dt   td d  t dd�tt	ddƒtd d  t  dtd  d  t dd�td td  d!td   dtd"   d#d$td   d%td    t dd�gk�sbt‚d S )&NrP   r«   rž   Tr×  Fc                   S   s   t dƒS rô  ©r&   r�   r�   r�   rŽ   r¶   ;	  r·   ztest_sturm.<locals>.<lambda>c                      s   t ˆ dd�S rà  r  r�   rÂ   r�   rŽ   r¶   <	  r·   i   i	=  r3  r¤   i   r  rò   rä  r�   é€   rŸ   i$ô  zZZ(pi)ræ  é@   r‚  r:  éÈ   i N  rŸ  é`   r½  lýÿÿÿ   ii È¯ r¿  l      ^_i  ¦é@  )
r†   r   r&   r¯   r{   rA   rH   rl   ri   rg   )r  rÈ   rÚ  r�   rÂ   rŽ   Ú
test_sturm/	  s@    ÿþýüû û<(2Hýÿr   c                      sd  t d dt d   t d  dt d   ‰ tˆ ƒ ¡ tt ƒdftt d ƒdfgksTt‚tˆ ƒt dft d dfgkstt‚tt‡ fdd„ƒ t t d d  t d d  t d d  t d  ‰ tˆ ƒ ¡ tt d dt   d ƒdftt d dt   d ƒdftt ƒdfgk�s
t‚tˆ ƒt d dt   d dft d dt   d dft dfgk�sNt‚tt‡ fdd„ƒ d S )	Nr¤   rŸ   rò   r�   rž   c                      s   t ˆ ƒS r�   ©r(   r�   rÂ   r�   rŽ   r¶   R	  r·   ztest_gff.<locals>.<lambda>c                      s   t ˆ ƒS r�   r!  r�   rÂ   r�   rŽ   r¶   Z	  r·   )r†   r   r'   r¯   r{   rö   r�   r�   rÂ   rŽ   Útest_gffL	  s    (, 0
 ÿ 
ÿDr"  c                  C   sz   t dƒt dƒ } }t| t |t  tt| |fd�}| ¡ tdtd  dtd  td   dtd   ttdd�ksvt‚d S )	NrŸ   r�   rñ   rò   r¿  rŸ  rP   r«   )rr   r   r†   r‡   Znormr¯   )r~   r   rÀ   r�   r�   rŽ   Ú	test_norm]	  s     r#  c                   C   s�  t td d tdƒd�dgtd dtdƒ t  d td dtd   d fksTt‚t td d tdƒd�dgtd dtdƒ t  d td dtd   d fks¨t‚ttd d tdƒd�  ¡ dgttd dtdƒ t  d ttdƒd�ttd dtd   d tdd�fk�st‚ttd d tdƒd�  ¡ dgttd dtdƒ t  d ttdƒd�ttd dtd   d tdd�fk�sŒt‚d S )	NrŸ   r�   rñ   rž   rò   rî   rP   r«   )r)   r†   rr   r¯   r   r�   r�   r�   rŽ   Útest_sqf_normc	  s     6ÿ6ÿ, ÿÿ
, ÿÿr$  c            	      C   s˜  t d t d  t d  d } t d dt d   dt   d }t d }t d t d  t  d }tt| |||fƒ\}}}}| ¡ |ks†t‚t| ƒ|ks–t‚t| t ƒ|ks¨t‚t| t fƒ|ks¼t‚t|ƒ|ksÌt‚t| dd�|ksàt‚t|dd�|ksôt‚| ¡ d|df|dfgfk�st‚t| ƒd|df|dfgfk�s8t‚t| t ƒd|df|dfgfk�s\t‚t| t fƒd|df|dfgfk�s‚t‚t|ƒd|df|dfgfk�s¤t‚t| dd�d|df|dfgfk�sÊt‚t|dd�d|df|dfgfk�sðt‚| ¡ |df|dfgk�st‚ttd	d
„ ƒ t	dƒdk�s.t‚tdƒdg fk�sDt‚t	dt d  d d ƒdt d d d  k�svt‚t	| ƒ||d  k�s�t‚t	| t ƒ||d  k�s¬t‚t	| t fƒ||d  k�sÊt‚t d t
d  }t	| | ƒ||d  | k�süt‚t	| | t ƒ||d  | k�s t‚t	| | t fƒ||d  | k�sFt‚t	t d ƒt d k�s`t‚t	t  d ƒt  d k�s~t‚t	t d ƒt d k�s˜t‚t	dt  d ƒtddt  d dd�k�sÄt‚t	dt  d dt  d  ƒtddƒdt  d t d   k�st‚t	tt d dt   d ƒƒt d d k�s2t‚dt  t dt    t d  } t	| ƒdk�s`t‚t d dt   d d } t	| ƒt d d k�s’t‚t| ƒdt d dfgfk�s²t‚t	tt
d d t
d  t d  ƒƒt
d d tt
d t d  ƒ k�süt‚t	tt
d d t
d  td  ƒƒt
d d tt
d td  ƒ k�sFt‚t	tt
t d t
t  t d  ƒƒt
t d tt
t t d  ƒ k�s�t‚t	tt
t d t
t  td  ƒƒt
t d tt
t td  ƒ k�sÚt‚t d d t d  t t
 d  t
d d  t
d  }t|ƒ ¡ dtt t
 t  t
 d ƒdftt d t
 dt d   t t
d   dt  t
  dt   dt
d   dt
  ƒdfgfk�s”t‚d S )Nr¤   r�   rŸ   rž   rò   Tr×  Fc                   S   s   t dƒS rô  )r*   r�   r�   r�   rŽ   r¶   �	  r·   ztest_sqf.<locals>.<lambda>r¹   r  rF  rî   rÃ  l    H/P l    _ % )r†   r  r   r*   r¯   r+   Zsqf_list_includer{   rA   r,   r‡   rc   rg   ra   rˆ   re   )	rÀ   rÈ   rË   r‚   r  rÚ  rë  ÚPr�   r�   r�   rŽ   Útest_sqfr	  sv     ""$&"&&2"$&,@. "ÿ
"ÿ
"ÿ
"ÿ
4Rþr&  c               	      sê  t d t d  t d  d ‰ t d } t d }t d t  d }ttˆ | ||fƒ\}}}}| ¡ d|df|df|dfgfks|t‚tˆ ƒd| df|df|dfgfks¢t‚tˆ t ƒd| df|df|dfgfksÊt‚tˆ t fƒd| df|df|dfgfksôt‚t|ƒd|df|df|dfgfk�st‚tˆ dd�d|df|df|dfgfk�sHt‚t|dd�d| df|df|dfgfk�stt‚| ¡ |df|df|dfgk�s˜t‚tdƒdg fk�s®t‚tdƒdg fk�sÄt‚ttdƒt ƒtdƒg fk�sät‚td	t  t ƒdd	t fgfk�st‚tdt  t t ƒddtft tfgfk�s2t‚ttt t ƒt ƒdt t tj	fgfk�s^t‚t
dƒdk�rxt
dƒj�s|t‚tdt  ƒdt dfgfk�sœt‚tdt d  ƒdt dfgfk�sÀt‚t
dt  ƒdt  k�sÚt‚t
dt d  ƒdt d  k�süt‚t
dt d  d d
 ƒdt d d d
  k�s.t‚t
ˆ ƒ| |d  | k�sLt‚t
ˆ t ƒ| |d  | k�slt‚t
ˆ t fƒ| |d  | k�sŽt‚t d td  t t t t t d d f\}}}	}
t
ˆ | ƒ| |d  | ||	  k�sèt‚t
ˆ | t ƒ| |d  | ||	  k�st‚t
ˆ | t fƒ| |d  | ||	  k�sBt‚tddd�}tddd�}tddd�}
t
tt t ƒƒjdk�s‚t‚t
tdt d  d ƒƒtdƒtt d t d  ƒ k�s¼t‚t
tdt d  d ƒƒtdƒtt d d ƒ k�sòt‚t
tt d  t | ƒt| t d |  t d |  k�s0t‚t
tt d  t | ƒt| t d d |  k�sft‚t
tt d  t t ƒtt d  t d  t k�sœt‚t
tt d  t t ƒtt d d  t k�sÎt‚tt|
d d |d  |d  |d d  ƒƒ‰ t|d d |d  ƒt|d ƒ t|
d d ƒ }t
ˆ ƒ|k�sDt‚t
|ƒ|k�sVt‚t d d |
d d  }tt|ƒƒ‰ t
ˆ ƒt|ƒk�s�t‚ttdƒt  d t td�‰ ˆ  ¡ dˆ dfgfk�sÆt‚t d d ‰ t
ˆ ƒˆ k�sät‚t
ˆ td�t d t t d t  k�st‚t
ˆ dd�t d t t d t  k�s8t‚t
ˆ tdƒd�t d tdƒt   d t d tdƒt   d  k�s~t‚t
t d dt t   d ƒt dt  d k�s°t‚t d dt t   d ‰ t
ˆ ƒˆ k�sÚt‚dt d  t ddt    d dt  ‰ tt ddt   d dt  d  }dt tdƒd  dt d  d  }t
ˆ ƒ|k�s\t‚t
ˆ td�|k�srt‚t
ˆ td�|k�sˆt‚t d dtdƒ t   d ‰ t
ˆ tdƒd�t tdƒ d k�sÊt‚t
ˆ d tdƒd�t tdƒ d k�sôt‚t
t d dtd   tdƒd�t tdƒt  t tdƒt   k�	s:t‚t
dt d  dtd   tdƒd�dt tdƒt  t tdƒt    k�	sˆt‚t
t d ƒt d k�	s¢t‚t
t  d ƒt  d k�	sÀt‚t
t d ƒt d k�	sÚt‚t
dt  d  ƒtddt  d dd!�k�
st‚t
t d" t  d d#dd$�t d t  d t d% t d&  t d  t d  t d  t d  d  k�
sjt‚t
t d" t  d d#dd$�t d t  d t d% d't d&   t d  d't d   t d  d't d   d  k�
sÚt‚t t t tt ƒ t  ‰ ttd dt  d  ttt ƒ td dt  d   }t
ˆ ƒt tt ƒd  t k�sLt‚t
|ƒttt ƒd  td d  k�svt‚t
tt d dt   d t d d ƒƒtt d d t d t d t  d  ƒk�sÈt‚t d d t d dt   d  ‰ t
ˆ ƒt d t d  t d d  k�st‚t
ˆ t ƒt d t d  t d d  k�s>t‚dt  t dt    t d  ‰ t
ˆ ƒdk�slt‚t
ˆ t ƒdk�s€t‚t
dt d dt   dt    d ƒdt  dt d   t d  ddt d   t d    k�sàt‚t
ˆ dd(�ˆ k�söt‚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�s�t‚ttt d t  d ƒ ¡ d d, d, tƒdk	�sÄt‚ttt d t  d ƒ ¡ d d, d, tƒdk�søt‚t
tt  ƒƒtt  ƒk�st‚d-t  t  d  t d  t  t  d  t d  t t d d    t d t d  t t d   t   d-t d  t d d  t t  d  t  t  d  t t d     t d t d d  t t  t  d  t d  t t d d       }t
|ƒd,k�st‚t
tt d t  ƒt  dd.�tt t d  ƒt  k�sBt‚t
tt d t  ƒt  dd.�tt t d  ƒt  k�sxt‚t
tt d ƒƒtt d ƒk�sšt‚t
td/t  d d/t d  ƒƒtd0d/t  d0 d/t d0 dd!�k�sàt‚t
td/t  d/ d ƒƒd1d0t  d0 d  k�st‚t d td  d"t d  t  d2t d   d
t  td   d3t  t  d4t   d5td   d6t  d7 }t
|t ƒt d t d  td d"t  d2  k�s®t‚t
|t dd.�t d t d  td d"t  d2  k�sæt‚t
|tdd.�td td  t d d
t   d5  k�st‚dt  dtdd
t   ƒ  ‰ t
ˆ dd.�t
ˆ ddd8�k�sZt‚t
ˆ ddd8�dt  dtdƒ td9t  ƒ  k�sŽt‚tt d t td   t|t ƒdt dft t dft t dfgfk�sÔt‚tdƒdtdƒ dtdƒ   }}}dt dt  }}t|| ƒd	| df|dfgfk�s2t‚t|| ƒd	| df|dfgfk�sZt‚t|| ƒ| | dfgfk�s~t‚tt| ƒd	| dftdfgfk�s¦t‚t|| t ƒ|| g fk�sÆt‚t|| t ƒ|| g fk�sæt‚t|| t ƒ|| g fk�st‚tt| t ƒt| g fk�s&t‚tt tdƒt  t tdƒt   t ƒdt tdƒt  dft tdƒt  dfgfk�s~t‚tt d tt  t d  }t
t|ƒƒ|k�s°t‚t t d t t  td  }t
t|ƒƒ|k�sât‚td d ttdƒ d  t d t  d dtdƒ  d  }t
t|ƒdd�|k�s8t‚t d  td  td d  dt t d  td  td d   dt t d  t td d   t d td d   dt  td  td d   dt t  td  td d   dt t  t td d   dt  td d   td  td td d   dt td   dt td  td d   dt t  dt t td d   d dtd d   }t
|ƒtt d  tt  t d dt   td  d  td d  k�sæt‚d S ):Nr¤   r�   rŸ   rž   Tr×  FrF  rÅ   r¹   r  r‚   ©Zpositiver  )Úintegerr@  )Úrealr«   rò   rñ   r†  i    i€X  i€¬ iH i‰² r  i  iT  é±   iY  rî   rÃ  rJ  ró   rô   rŸ  r3  rõ   r  c                      s   t ˆ tdd�S )NFr  ©r.   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¶   T
  r·   r   r6  r
  g      à?r³   g      Ð?é   éM   éÒ   r¿  é„   ih  )r	  Zfractioniùÿÿÿ) r†   r  r   r-   r¯   Zfactor_list_includerr   r‡   rl   rÎ  r.   Z
is_Integerrm   Zis_Powr„   ra   rt   rT   re   rQ   rR   rc   ri   rk   r{   rF   rJ   r]   rˆ   r™   r   rp   )r‹   rŒ   r…   r  ÚUÚVÚWrÈ   r‚   rƒ   r@  r  Zf_zziZf_qqiÚerš   Ús2Zs2pZs2nÚpipZpinr�   rÂ   rŽ   Útest_factorÂ	  s²   &&(*(,,$ ",, $"2 "0*,.:6>66204** ÿ.ÿ
2($$&*ÿ
""ÿ
,Bÿ
4ÿ
ÿÿÿ
8"* 
ÿ$ÿ
 *,4ÿÿ:6ÿ
" ÿÿ
" ÿÿ
Hÿ
ÿÿ0
ÿ>ÿÿ66",
 ÿ2h488 4 ÿ$(($(    $ &ÿ<`ÿÿÿþþþþþý
ýýýýÿr6  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sÄt‚t|ƒt d d	 td d  ksèt‚t| ƒdt d dft d dft d d dfgfk�s t‚t|ƒdtd dft d d	fgfk�sJt‚t d td  d
 t d d  } t d td  d
 t d d  }t| ƒt d t t d
  t t d
  t d t d  t d  t d  t d  t  d  k�sèt‚t|dd�t d t tt  d
  t tt  d
  t d t d  t d  t d  t d  t  d  k�sRt‚t| ƒdt d dft t d
ft t d
ft d t d  t d  t d  t d  t  d dfgfk�s¸t‚t|dd�dt d dft tt  d
ft tt  d
ft d t d  t d  t d  t d  t  d dfgfk�s*t‚d S )NrŸ   rò   i€–˜ rž   i‡Ö i¸  i -1i­% ip  i@ r¹   rF  r¤   r�   Tr†  )r†   r‡   r.   r¯   r-   re   r  r�   r�   rŽ   Útest_factor_large 
  s€    <> ÿ0$ÿ(ÿ
*  ,ÿÿÿÿÿÿ

4ÿÿÿÿÿÿ
&ÿÿÿÿÿÿÿÿ

(. ÿÿr7  c                   C   sp   t dt d ƒtddt d dd�ks*t‚t dt d dt d  ƒttddƒdt d dtd  ƒkslt‚d S )	NrF  rî   rŸ   r�   r¤   FrÃ  rž   )r.   r†   rc   r¯   rg   r�   r�   r�   rŽ   Útest_factor_noeval¾
  s    *r8  c               
   C   s°
  t dƒg kst‚t dƒg ks t‚t tdd�dgks6t‚t tƒdgksHt‚t td ƒdgks^t‚t td	 td
 gƒdd	d
dœfgks†t‚tttd	dƒ tddƒ d
t tddƒ  ƒ} | j dd�ddgksÌt‚|   ¡ ddgksàt‚| j ddd�ddgksút‚| j dd�ddgk�st‚| j tddƒd�| j dd�  k�rhtddƒdfdftddƒtddƒfdfgk�snn t‚| j tddƒd�| j dd�  k�rÂtddƒdfdftddƒtddƒfdfgk�sÈn t‚| j tddƒd�| j d d�  k�rtdd!ƒdfdftddƒtddƒfdfgk�s"n t‚| j tdd"ƒd�| j d#d�  k�r|tdd$ƒtdd$ƒfdftddƒtddƒfdfgk�s‚n t‚ttd	dƒ tddƒ d
t tddƒ  } t | dd�ddgk�sÆt‚t | ƒddgk�sÜt‚t | tddƒd�t | dd�  k�r0tddƒdfdftddƒtddƒfdfgk�s6n t‚t | tddƒd�t | dd�  k�rŠtddƒdfdftddƒtddƒfdfgk�s�n t‚t | tddƒd�t | d d�  k�rätdd!ƒdfdftddƒtddƒfdfgk�sên t‚t | tdd"ƒd�t | d#d�  k�rDtdd$ƒtdd$ƒfdftddƒtddƒfdfgk�sJn t‚ttd	 d	 td	 d d%  td  d%t d d  ƒ} |   ¡ d&td'd	ƒfd%ftd'd	ƒdfdfd(d)dtdd	ƒfdftdd	ƒd	fd%fgk�sØt‚t td d* td d+ gƒtd,d-ƒtd.d/ƒfddiftd0d1ƒtd-d2ƒfddifgk�s2t‚t td d* td d+ gdd�td,d-ƒtd.d/ƒfddiftd0d1ƒtd-d2ƒfddifgk�s�t‚t td	 d* td	 d+ gƒtd3dƒtd4dƒfddiftd4dƒd5fddifd6tddƒfddiftddƒtd7dƒfddifgk�st‚t td td	 td td dtd td td	 d	 gƒd8ddifd9ddd:œfd;dddd<œfd=d%d	ifgk�s‚t‚td	 d	 td
 d
td	   d
 td   } }}t | td%d
ƒdd>�g k�sÐt‚t | td%dƒdd>�td%dƒtdd	ƒfgk�s t‚t | td%d
ƒdd?�d@dtdd	ƒfgk�s,t‚t | td%dƒdd?�d@gk�sLt‚t |td%d
ƒdA�g k�sht‚t |td%dƒdA�td%dƒtdd	ƒfd	fgk�sšt‚t |td%d
ƒdB�dCdtdd	ƒfd	fgk�sÈt‚t |td%dƒdB�dCgk�sæt‚t ||gtd%d
ƒdA�g k�st‚t ||gtd%dƒdA�td%dƒtdd	ƒfdd	ifgk�s@t‚t ||gtd%ƒd
 dB�d@dd	ifd;ddifdtdd	ƒfdd	ifgk�sŠt‚t ||gtd%dƒdB�d@dd	ifd;ddifgk�s¾t‚t td	 td	 d	 gƒd8ddifd@ddifdDddifgk�sþt‚t td	 td	 d	 gddE�d8ddiftd'd	ƒdfddifdDddifgk�	sLt‚d%td
  dFtd   dGtd	   dt  dG } t | ƒg k�	sŽt‚t | dddH�\}}|g k�	s®t‚tdIdJ„ t|t	| ƒƒD ƒƒ�	sÐt‚|tdKd%ƒt
dL d%  dftdKd%ƒt
dL d% ft
tdKd%ƒ tdLd%ƒfdtdLd%ƒt
dL d%  fgk�
s8t‚t | ddtddƒdM�\}}|g k�
s`t‚tdNdJ„ t|t	| ƒƒD ƒƒ�
s‚t‚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   ©rE  r  )r9  rž   )r:  rž   )Úfastr,   )r;  rî   ©Úepsr  rÅ   i  éU   rF  ræ  ç{®Gáz„?iè  gü©ñÒMbP?iê  i'  ç-Cëâ6?i  r¹   r6  r’  )©rÅ   rÅ   rž   )r9  r�   r  éÉ   éK   é   ée   é#   i5  ék   rŸ  i¹ÿÿÿi«ÿÿÿiòÿÿÿrE  éG   )r6  r6  rA  ©r   r�   r¨   )rŸ   r¤   rF  )rŸ   rŸ   )Úinfr,   )Úsupr,   ©r6  rÅ   ©rJ  ©rK  )rL  rŸ   rð   r”   é   rr  )r˜   r,   c                 s   s^   | ]V\\}}}t |ƒt |ƒ  k o,t |ƒk n  oTt|ƒt|ƒ  k oPt|ƒk n  V  qd S r�   ©ro   rn   ©r’   r~   r   r@  r�   r�   rŽ   r“      s   
ÿ&ÿÿÿz!test_intervals.<locals>.<genexpr>iØÿÿÿé(   )r˜   r,   r=  c                 s   s^   | ]V\\}}}t |ƒt |ƒ  k o,t |ƒk n  oTt|ƒt|ƒ  k oPt|ƒk n  V  qd S r�   rP  rQ  r�   r�   rŽ   r“   +  s   
ÿ&ÿÿÿc                   S   s   t td d dd�S ©NrŸ   r´   r<  ©r/   r†   r�   r�   r�   rŽ   r¶   .  r·   z test_intervals.<locals>.<lambda>c                   S   s   t td d ƒjdd�S rS  )r   r†   r/   r�   r�   r�   rŽ   r¶   /  r·   c                   S   s    t td d td d gdd�S )NrŸ   r�   r´   r<  rT  r�   r�   r�   rŽ   r¶   1  r·   )r/   r¯   r†   r   rg   rl   rˆ   r˜   r‰   r4   re   r{   r«  )rÀ   rÈ   rË   Z	real_partZcomplex_partr�   r�   rŽ   Útest_intervalsÃ
  sò    (.$(ÿ$(ÿ$(ÿ$.ÿ*$(ÿ$(ÿ$(ÿ$.ÿ8   þÿ
6ÿ
6ÿ
. ÿÿ
6  ÿ
ÿÿ
00, 2. :
ÿÿ*ÿ
 ÿÿ
 ÿ
*ÿ
0ÿýÿ ÿrU  c                      sÒ  t td d ƒ‰ ˆ jdddd�dks(t‚ˆ jdddd�dks@t‚ˆ jddd d�dtd	dƒfksbt‚ˆ jddd d�td
dƒdfks„t‚ˆ jdddd�dtd	dƒfks¦t‚ˆ jdddd�td
dƒdfksÈt‚ˆ jddddd�dtd	dƒfksìt‚ˆ jddddd�td
dƒdfk�st‚ˆ jddtddƒd�tddƒtddƒfk�sBt‚ˆ jdddd�tddƒtddƒfk�slt‚tt‡ fdd„ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ td d ‰ tˆ dddd�dtd	dƒfk�sÒt‚tˆ dddd�td
dƒdfk�söt‚tˆ ddddd�dtd	dƒfk�st‚tˆ ddddd�td
dƒdfk�sBt‚tˆ ddtddƒd�tddƒtddƒfk�srt‚tˆ dddd�tddƒtddƒfk�sœt‚ttdd„ ƒ tt‡ fdd„ƒ tt‡ fdd„ƒ d S )NrŸ   rž   r   )Ústepsrð   r6  rÅ   rL  r�   r’  T)rV  r;  ræ  r<  r¦  r…  r¿  r?  c                      s   ˆ d j dddd�S )NrŸ   rž   T)Z	check_sqf©r0   r�   rÂ   r�   rŽ   r¶   F  r·   z"test_refine_root.<locals>.<lambda>c                      s   ˆ d   dd¡S rç   rW  r�   rÂ   r�   rŽ   r¶   H  r·   c                      s   ˆ d   dd¡S r(  rW  r�   rÂ   r�   rŽ   r¶   I  r·   c                   S   s   t dddtddƒd�S )Nrž   r¹   r3  ræ  r<  )r0   rg   r�   r�   r�   rŽ   r¶   V  r·   c                      s   t ˆ ƒjdddd�S ©Nrž   rŸ   r´   r<  )r   r0   r�   rÂ   r�   rŽ   r¶   X  r·   c                      s   t ˆ dddd�S rX  rW  r�   rÂ   r�   rŽ   r¶   Y  r·   )	r   r†   r0   r¯   rg   r{   rF   rC   r«  r�   r�   rÂ   rŽ   Útest_refine_root4  s0    """"$&0*$$&&0*rY  c                   C   sÊ  t td d ƒdkst‚t td d t d�dks6t‚t td d t
 d�dksTt‚t td d t t
 d�dksvt‚t td d dd�dks’t‚t td d dd�dks®t‚t td d dd�dksÊt‚t td d dd�dksæt‚t td d ddd�dk�st‚t td d ddd�dk�s&t‚t td d ddd�dk�sFt‚t td d ddd�dk�sft‚t td d ƒdk�s€t‚t td d dt d�dk�s¢t‚t td d dt d�dk�sÄt‚t td d dt dt d�dk�sìt‚t td d dd�dk�s
t‚t td d dd�dk�s(t‚t td d t d�dk�sHt‚t td d t
 d�dk�sht‚t td d t
 d t
 d�dk�s�t‚t td d t t d d�dk�s¸t‚ttd	d
„ ƒ d S )NrŸ   rM  rN  )rJ  rK  r6  rÅ   rž   r   c                   S   s   t dƒS r×   ©r1   r�   r�   r�   rŽ   r¶   }  r·   z"test_count_roots.<locals>.<lambda>)r1   r†   r¯   rh   re   r{   rF   r�   r�   r�   rŽ   Útest_count_roots\  s.    "    ""(  ((r[  c                      s²   t dtd  dtd   dt  d ƒ‰ ˆ  d¡tddƒks@t‚ˆ  d¡dksRt‚ˆ  d¡dksdt‚tt‡ fdd	„ƒ t td
 t d ƒ d¡ttd td  d dƒks®t‚d S )NrŸ   r�   r¹   rò   r   rÅ   rž   c                      s
   ˆ   d¡S )Nr�   )Úrootr�   rÂ   r�   rŽ   r¶   †  r·   z test_Poly_root.<locals>.<lambda>r¤   )r   r†   r\  rg   r¯   r{   Ú
IndexErrorrw   r�   r�   rÂ   rŽ   Útest_Poly_root€  s    (r^  c                  C   s  t tƒdgkst‚t tdd�dgks(t‚t td ƒdddgksBt‚t td dd�dgks\t‚t ttd t d  ƒttd t d dƒdgks’t‚t ttd t d  dd�ttd t d dƒdfdgksÐt‚t td td t d  ƒttd t d dƒdddgk�st‚t td td t d  dd�ttd t d dƒdfdgk�sTt‚t td d dd	�ttd d ddd	�ttd d ddd	�gk�sšt‚dtd  d
td   dt  d } td t d }t| ƒ  ¡ tddƒddgk�sðt‚t|ƒ  ¡ t|dƒgk�st‚d S )Nr   F©Zmultipler    r�   rI  rž   rŸ   ©Zradicalsr¹   rò   rÅ   )r3   r†   r¯   rw   r   rg   r  r�   r�   rŽ   Útest_real_roots‹  sD    6 ÿÿÿ
ÿÿ
  ÿÿÿþ$"ra  c                  C   sš  dt d  dt d   dt   d } tddƒddg}t| ƒt| ƒ ¡   krT|ksZn t‚t d t  d }t|dƒt|dƒt|dƒg}t|ƒt|ƒ ¡   kr¦|ks¬n t‚tt d d ƒtdƒ tdƒgksÒt‚tt d d dd	�tdƒ dftdƒdfgk�st‚tt d d dd
�tt d d ddd
�tt d d ddd
�gk�sLt‚t d t  d }t|ƒt|dƒt|dƒt|dƒt|dƒt|dƒgk�s–t‚d S )NrŸ   r�   r¹   rò   rÅ   rž   r   Fr_  r`  r¤   )r†   rg   r2   r   r¯   rw   rr   )rÀ   ZfrootsrÈ   Zgrootsr‚   r�   r�   rŽ   Útest_all_roots¨  s(    $&&&4þ    ÿrb  c                  C   sÈ  t dtƒ ¡ g kst‚t dtƒ ¡ g ks,t‚t td d tƒ ¡ ddgksNt‚t td d tƒ ¡ dt dt gksxt‚t td d tƒ ¡ } | ddgksžt‚t td d tƒ ¡ } | dt dt gksÌt‚t td d tddƒ tƒ ¡ } | ddgksüt‚t td d tddƒ tƒ ¡ } | dt dt gk�s6t‚t td dt  tƒ ¡ ddt  ddt  gk�snt‚t td dt  ttd� ¡ ddt  ddt  gk�sªt‚t dt d	 ƒ ¡ d
gk�sÊt‚ttd t d dd�} tdƒ}t| d ƒ d|¡t	j
k�s
t‚t| d ƒdk�s t‚t| d ƒtd
dƒk�s<t‚t| d ƒ d|¡t	j
k�s\t‚t| d ƒtd
dƒk�sxt‚t| d ƒ d|¡t	j
k�s˜t‚t| d ƒ d|¡t	j
k�s¸t‚t| d ƒ d|¡t	j
k�sØt‚t| d ƒ d|¡t	j
k�søt‚t| d ƒ d|¡t	j
k�st‚tdƒ}t| d ƒ d|¡t	jk�s@t‚t| d ƒdk�sVt‚t| d ƒtd
dƒk�srt‚t| d ƒ d|¡t	jk�s’t‚t| d ƒtd
dƒk�s®t‚t| d ƒ d|¡t	jk�sÎt‚t| d ƒ d|¡t	jk�sît‚t| d ƒ d|¡t	jk�st‚t| d ƒ d|¡t	jk�s.t‚t| d ƒ d|¡t	jk�sNt‚ttdd„ ƒ ttdd„ ƒ ttd d ƒddgk�sˆt‚ttd d ƒ} | ddgk�sªt‚ttt ƒdt gk�sÆt‚ttdt  ƒdt gk�sæt‚ttdd„ ƒ t td d ƒ}| d¡dd„ | ¡ D ƒk�s&t‚tt td dtd   d td!   d"td#   d$td%   d&td'   d(td   d)td   d* ƒ d¡ƒd+k�sžt‚tt d,td  d ƒ ¡ ƒd-k�sÄt‚d S ).Nr   rž   rŸ   ç      ð¿r³   r�   rñ   r  r  g      à¿r¤   ©Únz1e-5g�hW!å'è¿gJÒ5“o¶ë¿gJÒ5“o¶ë?gÝïPèì?gg'ƒ£äÕç¿rò   gg'ƒ£äÕç?z1e-6c                   S   s   t tt tƒ ¡ S r�   ©r   r†   r‡   r4   r�   r�   r�   rŽ   r¶   ó  r·   ztest_nroots.<locals>.<lambda>c                   S   s   t tt ƒ ¡ S r�   rf  r�   r�   r�   rŽ   r¶   ô  r·   g       Àc                   S   s   t dƒS ©Nr   ©r4   r�   r�   r�   rŽ   r¶   þ  r·   c                 S   s   g | ]}|  d ¡‘qS ra  rd  )r’   r…   r�   r�   rŽ   rÖ    s     ztest_nroots.<locals>.<listcomp>r:  rä  rE  iü  r¿  i@  rî   iVš  r3  i  rF  i\‡ i€ã i‘e 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†   r4   r¯   re   rg   rd   ro   Z
epsilon_eqrl   Útruern   Úfalser{   rH   r>   rF   r2   Ústr)Úrootsr=  rÀ   r�   r�   rŽ   Útest_nroots¿  sŒ    "*  8  ÿÿ
                ".
ÿ
ÿ
ÿ
ÿþþþ
rm  c                  C   sh   t d dt d   dt d   t d  } t| ƒ ¡ tjdtjdiksHt‚t| ƒtjdtjdiksdt‚d S )NrF  rò   r�   rŸ   )r†   r   r5   rl   r  rÏ   r¯   rÂ   r�   r�   rŽ   Útest_ground_roots  s    ( rn  c                     sø   t d t d  d ‰ t d t  d d } t d d d }t d t  d d }t d d }tˆ dƒˆ ksjt‚tt‡ fdd„ƒ tt‡ fdd„ƒ ttˆ dƒƒ| ks¤t‚ttˆ dƒƒ|ksºt‚ttˆ dƒƒ|ksÐt‚ttˆ dƒƒ|ksæt‚ttd	d„ ƒ d S )
Nrò   rŸ   rž   c                      s
   t ˆ dƒS rg  ©r6   r�   rÂ   r�   rŽ   r¶     r·   z+test_nth_power_roots_poly.<locals>.<lambda>c                      s
   t ˆ tƒS r�   )r6   r†   r�   rÂ   r�   rŽ   r¶     r·   r�   r¿  c                   S   s   t tt dttƒS r8  )r6   r†   r‡   r�   r�   r�   rŽ   r¶   &  s
      ÿ)r†   r6   r¯   r{   r«  r.   r>   )Zf_2Zf_3Zf_4Zf_12r�   rÂ   rŽ   Útest_nth_power_roots_poly  s    rp  c                     s®   t td td  td  t d ƒ} | j‰ tdt t d ƒ‰‡ ‡fdd„t|  ¡ ƒD ƒdgksdt‚t	t
dd	„ ƒ t	td
d	„ ƒ t	tdd	„ ƒ t	tdd	„ ƒ t	tdd	„ ƒ d S )Nrò   r�   rŸ   rž   r¤   c                    s   g | ]\}}ˆ |ˆƒr|‘qS r�   r�   )r’   r  r@  ©rš   Zr0r�   rŽ   rÖ  .  s     
 z"test_same_root.<locals>.<listcomp>c                   S   s   t td td� dd¡S ©Nrž   r«   r   )r   r†   rP   Ú	same_rootr�   r�   r�   rŽ   r¶   1  r·   z test_same_root.<locals>.<lambda>c                   S   s    t td d tdƒd� dd¡S )NrŸ   rž   r¹   r«   r   )r   r†   rN   rs  r�   r�   r�   rŽ   r¶   3  r·   c                   S   s   t td d td� dd¡S ©NrŸ   rž   r«   r   )r   r†   rQ   rs  r�   r�   r�   rŽ   r¶   5  r·   c                   S   s$   t ttd  d tt d� dd¡S rt  )r   r‡   r†   rO   rs  r�   r�   r�   rŽ   r¶   7  r·   c                   S   s   t tt d td� dd¡S rr  )r   r†   r‡   rO   rs  r�   r�   r�   rŽ   r¶   9  r·   )r   r†   rs  rp   re   ri   Ú	enumerater2   r¯   r{   rF   rH   r>   rÂ   r�   rq  rŽ   Útest_same_root*  s&    $&ÿÿÿÿÿrv  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s�t‚t td d td   ttddtddƒ   i¡ƒ} t| tƒd ksÖt‚d S )NrŸ   rž   r6  rò   )ra   r†   rL  rr   r<   r¯   rg   r›   r�   r�   rŽ   Útest_torational_factor_list<  s    .
ý4rw  c                  C   sÞ  t dƒdkst‚t dƒdks t‚t tƒtks0t‚t tƒtks@t‚t dƒdksPt‚t dtƒdksbt‚t dtƒdkstt‚d	td
  d	 d
t d
 d
t d
 df\} }}}dd„ | |||fD ƒ\}}}}|  |¡d||fksÚt‚t | |fƒd||fksôt‚t | |ftƒd||fk�st‚t | |ftfƒd||fk�s2t‚t ||fƒd||fk�sNt‚t | |fdd�d||fk�snt‚t ||fdd�d||fk�sŽt‚td
 d
 ttd
ƒ  } t | ƒ| k�s¸t‚t | dd�ttd
ƒ k�sÖt‚td
 d
 ttd
ƒ  } t | ƒ| k�s t‚t | dd�ttd
ƒ k�st‚t td
 d	 d td
 d fƒdtd
 d
fk�sRt‚t td
 t tt  ƒdtt  td
 t  k�sˆt‚t td
 td
  tt  tƒtt k�s´t‚t td
 td
  tt  tƒtt k�sàt‚t td
 td
  tt  ƒtt k�s
t‚t td d td
 d  ƒtd
 t d td  k�sDt‚t td d
 tj td
 d  ƒtd
 t d d
t d
  k�sˆt‚t td
t ƒd
ttƒ  d ttƒd  ƒttƒd k�sÆt‚t	td
 t
d
  tƒ} t	tt
 tƒ}t	tt
 tdd�}t	dtdd�}t | |fƒd||fk�s&t‚td td
ƒd
 td
   d
td
ƒ d t  dtd
ƒ  } td
 d
 }t | |fdd�dtd
 d
t  d ttd
ƒ fk�s¦t‚t	dt d tƒ} t	td  td  td  td  d
td
   dt  d tƒ}t | |fƒd|  | fk�st‚t	td d tƒ} t	td d tƒ}|   |¡tdƒd t	td ttd�t	td ttd�fk�szt‚| j |dd�t	dt d ttd�t	dt d ttd�fk�sºt‚dt dt dddfdt dt ddt dt fdt dt ddt dt fdt dt dddfg}|D ]¶\} }}	}}t | |fƒd||fk�sLt‚t	| tƒ}
t	|tƒ}t	|tƒ}t	|tƒ}|
  |¡|	|	| |fk�s’t‚|
j  |j¡|j|jfk�s²t‚|
jj |jdd�|j|jfk�s"t‚�q"t	ttdd�} t	dtdd�}|   |¡dt	ttdd�t	dtdd�fk�s$t‚| j |dd�t	ttdd�t	dtdd�fk�sTt‚t	dt t t tdd�} t	d
td
  t tdd�}| j |dd�t	dt d tdd�t	d
t t tdd�fk�sÈt‚dt d	t  d tt d
    tt t t d
   } t | ƒjdk�st‚ttd! ƒ}ttd! ƒ}d|d
  d
 |d
  d  |d
  d
 d|d
  d
 d|d
  d
  | |  d|d
  d
 |d
  |d
   d|d
  d
 |d
  d  |d
  d
  d|d
  d
 |d
  |d
   d
t|d
 |d
  d" ƒ  d|d
  d
  | |d
  d
 d|d
  d
 |d
  | d
  d|d
  d
 | |d
  d
 d|d
  d
 |d
  | d
   d
|d
 |d
  d" tdd
ƒ    } t | ƒjdk�	s¼t‚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�
s:t‚t d
| ƒd
| k�
sTt‚t d| ƒd| k�
snt‚t td
 d td  | ƒtd | k�
sœt‚t td
 d td  | ƒtd | k�
sÊt‚ttd
 d td  tdkftd
 td
 d
t   dfƒ}ttd tdkfdt dfƒ}t |ƒ|k�s4t‚t d
| ƒd
| k�sNt‚t d| ƒd| k�sht‚t td
 d td  | ƒtd | k�s–t‚t td
 d td  | ƒtd | k�sÄt‚td%dd&�}t |dd'�tjk�sèt‚| td
¡tjk�s t‚t|ƒtjk�st‚td(ddƒ}t |d) d ƒ|d) d k�sBt‚t|d* |d+ d |d,   ƒd|d-  t  }t |ƒtt|d* |d+ d |d,   ƒ d|d-   t k�s´t‚t td
 d tt  ƒtt k�sÚt‚d S ).Nr   r¹   rc  )rž   rŸ   r�   r¬   r~  r    r  rò   rŸ   rž   c                 S   s   g | ]}t |tƒ‘qS r�   rØ   rå  r�   r�   rŽ   rÖ  U  s     ztest_cancel.<locals>.<listcomp>Tr×  F)râ   r�   r	  r«   rñ   r6  rŸ  r3  rF  r¤   )Úincluderï   rÅ   r
  r¼   g{®Gázt?ré   r@  r  )Zcommutativeap	  (2*1*(x - 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2*1*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) -
        1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x)/x - 1/x)*(((-x + 1/x)/((x*(x - 1/x)**2)) +
        1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x - 1/x)) - 1/x)*((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1 + (x - 1/x)/(x - 1/x))/((x*((x -
        1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x
        - 1/x)) - 2/x))) + ((x - 1/x)/((x*(x - 1/x))) + 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) + 1/x)/(2*x +
        2*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))*((-(x - 1/x)/(x*(x
        - 1/x)) - 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x - 1/x)))/(2*x -
        (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x) - 1 + (x -
        1/x)/(x - 1/x))/((x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x -
        1/x)**2)) - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2)
        - 1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x
        - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 2*((x - 1/x)/((x*(x -
        1/x))) + 1/x)/(x*(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x -
        1/x)) - 2/x)) - 2/x) - ((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))*((-x + 1/x)*((x - 1/x)/((x*(x - 1/x)**2)) - 1/(x*(x -
        1/x)))/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) -
        2/x) + 1)/(x*((x - 1/x)/((x - 1/x)**2) - ((x - 1/x)/((x*(x - 1/x)**2))
        - 1/(x*(x - 1/x)))**2/(2*x - (-x + 1/x)/(x**2*(x - 1/x)**2) -
        1/(x**2*(x - 1/x)) - 2/x) - 1/(x - 1/x))*(2*x - (-x + 1/x)/(x**2*(x -
        1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x)) + (x - 1/x)/((x*(2*x - (-x +
        1/x)/(x**2*(x - 1/x)**2) - 1/(x**2*(x - 1/x)) - 2/x))) - 1/xrÃ  )Z	_signsimpÚMr§   )rž   rò   rè   )rò   r   rð   )r7   r¯   r†   rh   rr   r‡   rl   rÎ  rp   r   r~   rP   r®   rˆ   Zis_Mulrq   rg   rm   rs   ÚNaNrL  rx   rv   rt   re   )rÀ   rÈ   r‚   rƒ   r  rÚ  r%  rÛ  Úpairsrv  ÚpfZpgÚppZpqr  Úp1Zp2Zp3Zp4ry  Úexprr�   r�   rŽ   Útest_cancelH  sè    0   46,,*:D><8@ þþü



 (ÿÿ
 ÿ ÿ8Ö¢ÿ>"..:.. à!"0Br€  c                     s´  t td dt  d tdd�‰ ˆ  ¡ \} }| ˆ ks6t‚|tjksDt‚t td dt  d tdd�‰ ˆ  ¡ \} }| ˆ  ¡ ks~t‚|tjksŒt‚t td d tdƒd t  tdƒd  tdd�‰ ˆ  ¡ \} }| t td dt  d tdd�ksðt‚|dksüt‚t td d tdƒd t  tdƒd  tdd�‰ ˆ  ¡ \} }| t td dt  d	 tdd�k�sbt‚|dk�spt‚t tt ttƒ‰ t	t
‡ fd
d„ƒ t tdd�‰ t	t
‡ fdd„ƒ d S )NrŸ   r�   rò   rO   r«   rP   rž   r3  r:  c                      s   ˆ   ¡ S r�   ©Ú)make_monic_over_integers_by_scaling_rootsr�   rÂ   r�   rŽ   r¶     r·   z@test_make_monic_over_integers_by_scaling_roots.<locals>.<lambda>rS   c                      s   ˆ   ¡ S r�   r�  r�   rÂ   r�   rŽ   r¶     r·   )r   r†   r‚  r¯   rO   r  rY  rl   r‡   r{   r«  )rÈ   r€   r�   rÂ   rŽ   Ú.test_make_monic_over_integers_by_scaling_rootsú  s(    2&2(rƒ  c                  C   s>   t td d ƒ} | jdd�\}}|tjks.t‚|dks:t‚d S )Nrò   rŸ   T)Zby_nameF)r   r†   Zgalois_grouprZ   ZD4r¯   )rÀ   rÚ  Zaltr�   r�   rŽ   Útest_galois_group  s    r„  c                  C   s¾  dt d  td  t d  td  } t d t  td t g}dt  dg}t d td  t }t| |ƒ||fksrt‚t| |t tƒ||fksŒt‚t|ƒ}| | ¡||fksªt‚tdt  t tƒtdt tƒg}tt d td  t t tƒ}tt| |dd�||fƒsþt‚tt| |t tdd�||fƒ�s t‚t|dd�}t| | ¡||fƒ�sFt‚dt d  td  dt  } tt d td  d t t d gƒ}t d t td  d  t t d  td d  td d  td d  td  d td d  ttddƒ  g}d	}t| |ƒ||fk�st‚| | ¡||fk�s*t‚t| |d
d�d d	k�sFt‚|j| d
d�d d	k�sbt‚| 	| ¡dk�svt‚| 	| d ¡d
k�sŽt‚tddgt ƒdgd	fk�s¬t‚t
tdd„ ƒ d S )NrŸ   rò   r�   rž   Tr×  rF  r¤   r   FrÌ  c                   S   s   t ddgƒS r×   )r8   r�   r�   r�   rŽ   r¶   E  r·   ztest_reduced.<locals>.<lambda>)r†   r‡   r8   r¯   r9   Úreducer   r‘   rg   Úcontainsr{   rA   )rÀ   rÚ  rÛ  r@  rë  r�   r�   rŽ   Útest_reduced  s4    $"$pr‡  c               
   C   sä  t g tttƒg kst‚t td d td t td  gttdd�dtd  dtd  gks^t‚t td d td t td  tt td  gtttdd�dtd  td dtd  gks¼t‚t td d td t td  gttdd	d
�tdtd  ttƒtdtd  ttƒgk�st‚t td d td t td  tt td  gtttdd	d
�tdtd  tttƒttd tttƒtdtd  tttƒgk�s˜t‚t td d td d gƒtd gk�sÄt‚t ttd dƒttd dƒgƒtd gk�sôt‚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�sÌt‚t||tttddd	d�\}}tdd„ t	||j
ƒD ƒ|ƒt|dd�k�st‚tt dt  dtd  td  g} t | ttdd�td dt  td dtd   tt dt  gk�s‚t‚t | ttdd�td dtd   td  dtd   tt dt  gk�sÐt‚t | dd	d�td dt  td dtd   tt dt  gk�st‚t dgtƒdgk�s.t‚t td dt  gttƒdtd  dt  gk�sdt‚ttdd„ ƒ t td d td d gdd�td gk�s¢t‚t td d td d gdd�td gk�sÒt‚ttdd„ ƒ d S )NrŸ   rž   rò   r�   rW   rå   rÅ   rY   T©rä   rØ  r¤   rŸ  rJ  r¹   Frô   rF  )r»   rÚ   rØ  c                 S   s   g | ]\}}|| ‘qS r�   r�   )r’   rƒ   rÈ   r�   r�   rŽ   rÖ  b  s     z!test_groebner.<locals>.<listcomp>rº   )rä   rM   rê   r³   c                   S   s
   t dgƒS r×   )r9   r�   r�   r�   rŽ   r¶   p  r·   ztest_groebner.<locals>.<lambda>Z
buchberger©ÚmethodZf5bc                   S   s   t ttgdd�S )NÚunknownr‰  )r9   r†   r‡   r�   r�   r�   rŽ   r¶   u  r·   )r9   r†   r‡   rˆ   r¯   r   rk   r8   Úsumr‰   rØ  r{   rA   r«  )r  rÀ   rÚ  rÛ  r@  r�   r�   rŽ   Útest_groebnerH  sJ    H^,&ÿ
<:ÿ
,0ZP@N6Jý.$0ÿ
6ÿ
0ÿ
600r�  c                  C   s@  t t t t t t t t  tt  tt  t t t t t t  t t t  tt t  t t t t d g} t| t ttttd�}dt  dtd   dtd   dt  dt dt  dtd   dtd   dt  dtd  dtd	   dtd
   dtd   dt td  dt  td  dtd   dt  td td  td  d g}t| t ttttd�|k�stt‚| t¡|k�sˆ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
 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�sŠt‚| t¡|k�sžt‚t	d t	 dt  d d't	 td  t d g} t| t	ttd�}t	d t	 dt  d td dt	  t d g}t| t	ttd�|k�s(t‚| t¡|k�s<t‚d S )(Nrž   rå   rò   r�   rŸ  r¤   r¹   rŸ   rî   rF  r¿  r3  é$   rä  éü   éN   iÔ  i   él   i¸ÿÿÿéÀ   iì  i8  i”  r  rƒ  é   i   r  l   ;7>œr¬I° l   èÇ*¸El   2t5TæJl   ƒ"3CR7	 l   Š}wSo8 l   Hgê5Ø1n? l   Ê3&�[µT l   óe† tø{ l   *JwiÈC1Ÿ r6  )r~   r   r€   r�   r9   rX   rW   r¯   Zfglmr†   r„   r‡   )r  rÚ  r  r�   r�   rŽ   Ú	test_fglmx  sl    p&..2û^jÿ
ÿ
ÿ
ÿ
ÿ
ÿÿÿÿ
ÿ
ÿ
ÿ
þþþ^ü0þr”  c                  C   s  t ttgttƒdkst‚t td td  gttƒdks:t‚t tttgtttƒdksVt‚t tttgttttƒdkstt‚tt t tt t tt t g} t | tttƒdks¬t‚td dt t  d ttd  ttd   dtd  dtd   g} t | tttƒdk�s
t‚d S )NTr�   rŸ   Fr¤   r3  )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s’t‚t|tƒdks¤t‚t|ƒdks´t‚|d |d krÎ|d jrÒt‚|d	 |d	 krì|d	 jrðt‚|d |d k�r|d j�rt‚|d	d … |d	d … k�rHtd
d„ |d	d … D ƒƒ�rLt‚|d d… |d d… k�r‚tdd„ |d	d … D ƒƒ�r†t‚|j	|k�s–t‚|j
|k�s¦t‚|jt tfk�sºt‚|jtk�sÊt‚|jtk�sÚt‚||k�sèt‚|t|ƒk�sút‚||k�st‚|t|ƒk�st‚|g k�s(t‚t| t tddd�}|d |d k�rX|d j�s\t‚|d	 |d	 k�rz|d	 j�s~t‚|d |d k�rœ|d j�s t‚|d	d … |d	d … k�rÖtdd„ |d	d … D ƒƒ�sÚt‚|d d… |d d… k�rtdd„ |d	d … D ƒƒ�st‚d S )NrŸ   rY   rå   r�   c                 S   s   g | ]}t |ttƒ‘qS r�   r;  rÕ  r�   r�   rŽ   rÖ  µ  s     z&test_GroebnerBasis.<locals>.<listcomp>r   Trž   c                 s   s   | ]}|j V  qd S r�   ©rÿ  ©r’   rÈ   r�   r�   rŽ   r“   À  s     z%test_GroebnerBasis.<locals>.<genexpr>c                 s   s   | ]}|j V  qd S r�   r–  r—  r�   r�   rŽ   r“   Á  s     rˆ  c                 s   s   | ]}|j V  qd S r�   r–  r—  r�   r�   rŽ   r“   Ö  s     c                 s   s   | ]}|j V  qd S r�   r–  r—  r�   r�   rŽ   r“   ×  s     )r†   r‡   r9   r¯   r™   r:   r—   rÿ  ÚanyZexprsrØ  r¢   r£   rO   rä   rY   r°  r˜   )r  rÚ  rë  r%  r�   r�   rŽ   Útest_GroebnerBasis°  s8    $2"::""":r™  c                  C   sä  t tƒtttƒkst‚t tƒtttƒks,t‚t tt ƒttt ttƒksLt‚t tttƒ ƒttttƒ tttƒƒksxt‚t tt td�ttt ttƒksœt‚t tttƒ ttƒd�ttttƒ ttƒtƒksÐt‚t tt dt td   d ƒttt dt td   d tttƒk�st‚t dtt d  d ƒtdtd  dt t  dtd   d ttƒk�sjt‚t ttt d  d ƒtttd  dt t t  ttd   d tttƒk�s¾t‚t dt tt d  d ƒtdt td  dt t t  dt td   d tttƒk�st‚t dtt d  t d ƒtdtd  dt t  dtd   t d tttƒk�svt‚t ttt d  t d ƒtttd  dt t t  ttd   t d tttƒk�sÒt‚t dt tt d  t d ƒtdt td  dt t t  dt td   t d tttƒk�s:t‚t tt tt d  tt d  ƒtdt t dt t  td  td  dtd   tttƒk�s¢t‚t tt tt  tt d  ƒttd td  ttd  td   ttd  td   dt td  td   dt t td   ttd   tttƒk�sBt‚t ttt t tttƒƒttt t tttƒk�sxt‚t tt d tƒttd dt t  td  ttt d�k�sºt‚t tt d tƒttd dt t  td  ttt d�k�süt‚t dtƒtdtƒk�st‚tt	dd	„ ƒ t tt ttƒttt ttƒk�sJt‚t tt ttƒttt ttƒk�spt‚tdt d d d
  t
dƒd
  } t | ƒ ¡ |  ¡ k�s®t‚ttd  t
dƒd  }t |ƒ ¡ | ¡ k�sàt‚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¤   rF  )r   r†   r   r¯   r‡   rt   rˆ   rO   r{   rD   rl   rø   ra   )Zexpr1Zexpr2r�   r�   rŽ   Ú	test_polyÚ  s¢     ,$4LNÿ4ÿ
 ÿÿ<ÿ
 ÿÿÿ4ÿ
 ÿÿÿ8ÿ
@ÿÿÿÿ  ÿ"<ÿ
Fÿÿ
ÿ  ÿÿ
6BB&&$rš  c                  C   sÆ  t dtd dd�} ttjtƒtks&t‚ttjtƒt ks<t‚ttdƒtƒdt ksVt‚ttdƒtƒdt kspt‚ttjdt ƒdt ksŒt‚ttdƒtd ƒtks¦t‚ttdƒttƒƒdttƒ ksÈt‚ttdƒtd ƒ| ksât‚ttdt ƒdksøt‚ttd tdƒƒ| k�st‚ttjtjƒtjk�s.t‚t	dddd�}ttdƒ|ƒt d|dd�k�s^t‚t
d|dd�}ttj|d	d
�t tj|dd�k�s’t‚ttj|dd
�t
dt tj|dd�dd�k�sÂt‚d S )NrŸ   rž   FrÃ  r³   rc  r�   rÅ   T)Úclear)rc   r†   rb   rl   r  r¯   ZNegativeOnert   rÎ  rj   r[   )r‹   r‚   r~   r�   r�   rŽ   Útest_keep_coeff  s*    ""ÿ
ÿrœ  c                   C   sD   t tttƒ tt t tƒks t‚tttƒt  tt t tƒks@t‚d S r�   )re   r   r†   r¯   r�   r�   r�   rŽ   Útest_poly_matching_consistency"  s     r�  c                   C   s\   t tt ttt  ttt   ƒtgd�ƒt t t tt  tt  tt t  ksXt‚d S )Nrñ   )ra   r.   r†   re   r‡   rˆ   r„   r¯   r�   r�   r�   rŽ   Útest_issue_5786)  s    ÿÿ(ÿrž  c                  C   sˆ   G dd„ dt ƒ} tttt   }ddt  }t| |ƒƒ| |ƒksDt‚t|| |ƒ ƒ|| |ƒ ksdt‚t|| |ƒ ƒ|| |ƒ ks„t‚d S )Nc                   @   s   e Zd ZdZdS )z test_noncommutative.<locals>.fooFN)Ú__name__Ú
__module__Ú__qualname__Zis_commutativer�   r�   r�   rŽ   Úfoo/  s   r¢  rž   )r^   r†   r‡   r7   r¯   )r¢  r3  r€   r�   r�   rŽ   Útest_noncommutative.  s     r£  c                   C   sž   t ttd ttd   ttƒ tdd�ƒd ks2t‚t ttd tdƒtd  ttƒ  d tƒƒd ksht‚t tttƒƒd ks~t‚t ttdƒt ƒƒd ksšt‚d S )Nr�   rŸ   rT   r«   rž   )r=   r   r†   r‡   rr   r¯   rt   r�   r�   r�   rŽ   Útest_to_rational_coeffs8  s    $ÿÿ(ÿÿr¤  c                   C   s^   t ttt  ƒdtdftt dfgfks,t‚tttt  ƒdtd tt  dfgfksZt‚d S r$  )r-   r†   r‡   r¯   r+   r�   r�   r�   rŽ   Útest_factor_termsC  s    ,r¥  c                   C   s    t td d tdd� ¡ ddddgks*t‚t td t d ttdd� ¡ dgg ddggks^t‚t td t d tttdd� ¡ dggg gdgdgggksœt‚d S )Nr�   rŸ   rO   r«   rž   r   )r   r†   Zas_listr¯   r‡   rˆ   r�   r�   r�   rŽ   Útest_as_listI  s
    *4 ÿr¦  c                   C   s^   t tdƒt ƒtdƒtdfgfks&t‚t tdƒttƒ ttƒƒtdƒttƒdfgfksZt‚d S rç   )r-   rr   r†   r¯   rt   r�   r�   r�   rŽ   Útest_issue_11198Q  s    &r§  c                  C   s0   t t d¡t ƒ} |  ¡ t d¡t ks,t‚d S )Nræ  )r   ri   Zevalfr†   rø   r¯   r›   r�   r�   rŽ   Útest_Poly_precisionV  s    r¨  c                   C   s8   t ddtdƒ  tƒtddtdƒ  tdd�ks4t‚d S )Nrž   rŸ   rT   r«   )r   rr   r†   r   r¯   r�   r�   r�   rŽ   Útest_issue_12400\  s    ÿr©  c                	   C   sR  t tdƒdtdƒ  d tdƒdtdƒ  d ƒtddƒdtdƒ  ksLt‚t tdƒtddƒ tdƒtddƒ ƒtdƒtdd	ƒ ksˆt‚ttddƒtdƒ tddƒtdƒ ƒtdƒtdƒ d ksÆt‚tdtdƒ dtdƒ ƒd
tdƒ ksðt‚ttdƒddtddƒ   d tdƒddtddƒ   d ƒtddƒddtddƒ   k�sPt‚t tddƒtdƒ tddƒtdƒ ƒtdƒd k�sˆt‚t tdƒtdƒ d tdƒtdƒ d ƒtdƒd k�sÄt‚t tdƒtdƒ d tdƒtdƒ d tdƒtdƒ d gƒtdƒtddƒ k�st‚t tdƒdtdƒ  d tdƒdtdƒ  d tdƒdtdƒ  d gƒdtdƒ tddƒ k�s€t‚ttddƒtdƒ tddƒtdƒ tddƒtdƒ fƒtddƒtdƒ k�sÐt‚ttdƒddtddƒ   d tdƒddtddƒ   d tdƒddtddƒ   d gƒtddƒddtddƒ   k�sNt‚d S )NrF  rž   r�   r¤   rî   rò   r¹   rŸ   rï   r¿  r3  r  r½  ró  rE  é/   rF  iÇ  )r   rl   rr   rg   r¯   r   r�   r�   r�   rŽ   Útest_issue_14364a  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sÀt‚d S )Nr†   Tr'  r:  r�   rŸ   r3  rò   r¤   rî   r
  )rm   rr   rg   r.   r¯   )r†   r  r�   r�   rŽ   Útest_issue_15669s  s    <Lÿÿr¬  c               	   C   s¤   t dƒ} t| d ƒ}tƒ �$ tt| d ƒt| d ƒggƒ}W 5 Q R X ttdd��J || ||   kr�tt| d d ƒt| d d ƒggƒks–n t‚W 5 Q R X d S )Nr†   rž   F)Ztest_stacklevelrŸ   )rm   r   r|   ru   r}   rz   r¯   )r†   r‚   ry  r�   r�   rŽ   Útest_issue_17988z  s    (r­  c                   C   s@   t dt dt  ƒdt ks t‚t dt dt  ƒdks<t‚d S )NrŸ   r�   r¹   r¤   )r7   re   r¯   r�   r�   r�   rŽ   Útest_issue_18205ƒ  s     r®  c                  C   sz   t d d t d d  t d d  t d d  } dt d d dft d dft d dt   d dfgf}t| ƒ|ksvt‚d S )NrŸ   rž   r�   r¤   rF  )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Ÿ   r?  rW  r�   r  r�   rŽ   r¶   �  r·   z"test_issue_19113.<locals>.<lambda>c                      s   t ˆ ddƒS )NrÅ   rž   rZ  r�   r  r�   rŽ   r¶   ‘  r·   c                      s   t ˆ ƒS r�   )r3   r�   r  r�   rŽ   r¶   ’  r·   c                      s   t ˆ ƒS r�   rh  r�   r  r�   rŽ   r¶   “  r·   c                      s   t ˆ ƒS r�   )r5   r�   r  r�   rŽ   r¶   ”  r·   c                      s
   t ˆ dƒS r8  ro  r�   r  r�   rŽ   r¶   •  r·   )rt   r†   r{   rF   r�   r�   r  rŽ   Útest_issue_19113Ž  s    r°  c                  C   s°   dt d  dtdƒ t  t  td  } t| tdƒd�dt tdƒt d  d  ksXt‚t t t  tt  t t  tt t  } t| td�t tt  t t t  ks¬t‚d S )NrŸ   rñ   )r†   rr   r‡   r.   r¯   re   r„   rˆ   rÂ   r�   r�   rŽ   Útest_issue_19360˜  s    (0*r±  c                  C   sB   t tt tttƒ} |  ¡ }| |ks*tdƒ‚| j|jks>tdƒ‚d S )Nz(Copied polynomial not equal to original.z9Copied polynomial has different generators than original.)r   r†   r‡   rˆ   Úcopyr¯   r¢   )r   r²  r�   r�   rŽ   Útest_poly_copy_equals_original   s    
ÿÿr³  c                  C   sJ   t tt tttƒ} t t | ¡¡}| |ks2tdƒ‚| j|jksFtdƒ‚d S )Nz.Deserialized polynomial not equal to original.z?Deserialized polynomial has different generators than original.)	r   r†   r‡   rˆ   ÚpickleÚloadsÚdumpsr¯   r¢   )r   Zdeserializedr�   r�   rŽ   Ú&test_deserialized_poly_equals_original©  s    
ÿÿr·  c                  C   s0   t ttd  td  t tƒ} | t ks,t‚d S r$  )r   r†   rh   r¯   )rÐ  r�   r�   rŽ   Útest_issue_20389²  s    r¸  c                  C   sL   ddl m}  | dƒ\}}tdt| |  |d| ƒ}| ¡ tdƒksHt‚d S )Nr   )Úsymbolszw Rr³   rž   )Úsympy.core.symbolr¹  r   re   r   rl   r¯   )r¹  r…   rÜ  r   r�   r�   rŽ   Útest_issue_20985·  s    r»  (N  Ú__doc__r´  Zsympy.polys.polytoolsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   Zsympy.polys.polyerrorsr>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Zsympy.polys.polyclassesrK   Zsympy.polys.fieldsrM   Zsympy.polys.domainsrN   rO   rP   rQ   rR   rS   rT   Zsympy.polys.domains.realfieldrU   Z sympy.polys.domains.complexfieldrV   Zsympy.polys.orderingsrW   rX   rY   Zsympy.combinatorics.galoisrZ   Zsympy.core.addr[   Zsympy.core.basicr\   Zsympy.core.containersr]   Zsympy.core.exprr^   Zsympy.core.functionr_   r`   ra   Zsympy.core.mulrb   rc   Zsympy.core.numbersrd   re   rf   rg   rh   ri   Zsympy.core.powerrj   Zsympy.core.relationalrk   Zsympy.core.singletonrl   rº  rm   Z$sympy.functions.elementary.complexesrn   ro   Z&sympy.functions.elementary.exponentialrp   Z%sympy.functions.elementary.hyperbolicrq   Z(sympy.functions.elementary.miscellaneousrr   Z$sympy.functions.elementary.piecewisers   Z(sympy.functions.elementary.trigonometricrt   Zsympy.matrices.denseru   Z"sympy.matrices.expressions.matexprrv   Zsympy.polys.rootoftoolsrw   Zsympy.simplify.simplifyrx   Zsympy.utilities.iterablesry   Zsympy.utilities.exceptionsrz   Zsympy.testing.pytestr{   r|   r}   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-  r0  r2  r5  r7  r9  r>  rA  rB  rD  rI  rK  rM  rP  rR  rU  rW  rZ  r[  r\  r]  r_  r`  re  rm  rn  rp  rq  ry  r{  r�  r„  r‡  r‰  r‹  r�  r‘  r•  r�  rž  r   r¡  r¢  r£  r¤  r¥  r¬  r®  r¯  r²  r³  r´  r¶  r¸  r¹  r»  r¼  rÀ  rÁ  rÂ  rÅ  rÑ  rÓ  rÔ  rÝ  râ  rã  rì  rï  rñ  rò  rö  rû  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r"  r#  r$  r&  r6  r7  r8  rU  rY  r[  r^  ra  rb  rm  rn  rp  rv  rw  r€  rƒ  r„  r‡  r�  r”  r•  r™  rš  rœ  r�  rž  r£  r¤  r¥  r¦  r§  r¨  r©  r«  r¬  r­  r®  r¯  r°  r±  r³  r·  r¸  r»  r�   r�   r�   rŽ   Ú<module>   s’  ø<$ 4
-\U"W	 #+

	


7			




:

4
/
y

+







j

#

P _q($N 3+0**2
	
		