a
    kºhTÇ  ã                   @   s$  d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
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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&m'Z' ddl(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZDmEZE ddlFmGZG e Heded¡ZIdd ZJdd ZKdd ZLdd  ZMd!d" ZNd#d$ ZOd%d& ZPd'd( ZQd)d* ZRd+d, ZSd-d. ZTd/d0 ZUd1d2 ZVd3d4 ZWd5d6 ZXd7d8 ZYd9d: ZZd;d< Z[d=d> Z\d?d@ Z]dAdB Z^dCdD Z_dEdF Z`dGdH ZadIdJ ZbdKdL ZcdMdN ZddOdP ZedQdR ZfdSdT ZgdUdV ZhdWdX ZidYdZ Zjd[d\ Zkd]d^ Zld_d` Zmdadb Zndcdd Zodedf Zpdgdh Zqdidj Zrdkdl Zsdmdn Ztdodp Zudqdr Zvdsdt Zwdudv Zxdwdx Zydydz Zzd{d| Z{d}d~ Z|dS )zPTests for classes defining properties of ground domains, e.g. ZZ, QQ, ZZ[x] ... é    )ÚGROUND_TYPES)	ÚAlgebraicNumberÚEÚFloatÚIÚIntegerÚRationalÚooÚpiÚ_illegal)ÚS)Úexp)Úsqrt)Úsin)ÚPoly)ÚxÚyÚz)ÚZZÚQQÚRRÚCCÚFFÚGFÚEXÚEXRAWÚZZ_gmpyÚ	ZZ_pythonÚQQ_gmpyÚ	QQ_python)ÚAlgebraicField)ÚZZ_IÚQQ_I)ÚPolynomialRing)Ú	RealField)Úfield_isomorphism)ÚringÚPolyElement)Úcyclotomic_poly)ÚfieldÚFracElement)ÚFiniteExtension)ÚUnificationFailedÚGeneratorsErrorÚCoercionFailedÚNotInvertibleÚDomainError)ÚraisesÚwarns_deprecated_sympy)Úproducté   é   c                 C   s
   |   |¡S ©N©Úunify)ZK0ÚK1© r:   úT/var/www/auris/lib/python3.9/site-packages/sympy/polys/domains/tests/test_domains.pyr8   )   s    r8   c                      sú	  t d t dt   ks"J 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 tt fd
d tt fdd tt fdd tt fdd tksèJ tt fdd tt fdd tt fdd tt fdd ttttksJJ ttttks^J ttttksrJ ttttksJ ttttksJ tttt	 tt	 ks¶J ttt 
t	¡t 
t	¡ksÖJ ttttksêJ tt fdd ttttksJ ttttks$J ttttks8J ttttksLJ ttttks`J tttt	 tt	 ks|J ttt 
t	¡t 
t	¡ksJ ttttks°J tt fdd ttttksÖJ ttttksêJ ttttksþJ tttt ttdtd¡ks$J ttttks8J ttttksLJ tttt	 tt	 kshJ tttt	 tt	 ksJ ttt 
t	¡t 
t	¡ks€J ttt 
t	¡t 
t	¡ksÄJ ttttksØJ tt fdd ttttksþJ ttttksJ ttttks&J tttt ttdtd¡ksLJ ttttks`J ttttkstJ tttt	 tt	 ksJ tttt	 tt	 ks¬J tttt	 tt	 ksÈJ tttt	 tt	 ksäJ ttt 
t	¡t 
t	¡ksJ ttt 
t	¡t 
t	¡ks$J ttt 
t	¡t 
t	¡ksDJ ttt 
t	¡t 
t	¡ksdJ ttttksxJ tt fdd ttttksJ ttttks²J ttttksÆJ ttttksÚJ ttttksîJ tttt	 tt	 ks
J ttt 
t	¡t 
t	¡ks*J ttttks>J tt	  t 
t¡¡t 
t	t¡ksdJ tt fdd ttttksJ ttttksJ ttttks²J ttttksÆJ ttttksÚJ tttt	 tt	 ksöJ ttt 
t	¡t 
t	¡ksJ ttttks*J tt fdd ttt	 ttt	 ksXJ ttt	 ttt	 kstJ ttt	 ttt	 ksJ ttt	 ttt	 ks¬J ttt	 ttt	 ksÈJ ttt	 tt	 tt	 ksèJ ttt	 t 
t	¡t 
t	¡ksJ ttt	 ttks$J tt fdd tt 
t	¡tt 
t	¡ksVJ tt 
t	¡tt 
t	¡ksvJ tt 
t	¡tt 
t	¡ksJ tt 
t	¡tt 
t	¡ks¶J tt 
t	¡tt 
t	¡ksÖJ tt 
t	¡tt	 t 
t	¡ksúJ tt 
t	¡t 
t	¡t 
t	¡k	s J tt 
t	¡ttk	s:J tt fdd ttttk	s`J ttttk	stJ ttttk	sJ ttttk	sJ ttttk	s°J tttt	 tk	sÈJ ttt 
t	¡tk	sâJ ttttk	söJ d S )Nr5   é   c                      s
   t  tS r6   ©r8   r   r:   ©ÚF3r:   r;   Ú<lambda>1   ó    z#test_Domain_unify.<locals>.<lambda>c                      s
   t  tS r6   ©r8   r   r:   r>   r:   r;   r@   2   rA   c                      s
   t  tS r6   ©r8   r!   r:   r>   r:   r;   r@   3   rA   c                      s
   t  tS r6   ©r8   r"   r:   r>   r:   r;   r@   4   rA   c                      s
   t  tS r6   )r8   ÚALGr:   r>   r:   r;   r@   5   rA   c                      s
   t  tS r6   ©r8   r   r:   r>   r:   r;   r@   6   rA   c                      s
   t  tS r6   ©r8   r   r:   r>   r:   r;   r@   7   rA   c                      s   t  tt S r6   ©r8   r   r   r:   r>   r:   r;   r@   8   rA   c                      s   t  t t¡S r6   ©r8   r   Ú
frac_fieldr   r:   r>   r:   r;   r@   9   rA   c                      s
   t  tS r6   ©r8   r   r:   r>   r:   r;   r@   :   rA   c                      s
   t  S r6   r7   r:   ©r?   ÚF5r:   r;   r@   =   rA   c                      s   t  t S r6   )r8   r   r:   rL   r:   r;   r@   >   rA   c                      s   t   t¡S r6   )r8   rJ   r   r:   rL   r:   r;   r@   ?   rA   c                      s
   t t S r6   r=   r:   r>   r:   r;   r@   A   rA   c                      s
   t t S r6   rB   r:   r>   r:   r;   r@   K   rA   c                      s
   t t S r6   rC   r:   r>   r:   r;   r@   U   rA   r4   c                      s
   t t S r6   rD   r:   r>   r:   r;   r@   b   rA   c                      s
   t t S r6   rF   r:   r>   r:   r;   r@   s   rA   c                      s
   t t S r6   rG   r:   r>   r:   r;   r@   ~   rA   c                      s   t tt  S r6   rH   r:   r>   r:   r;   r@      rA   c                      s   t t t¡ S r6   rI   r:   r>   r:   r;   r@      rA   c                      s
   t t S r6   rK   r:   r>   r:   r;   r@      rA   )r   r8   r1   r,   r   r   rE   r   r   r   rJ   r   r!   r"   Úalgebraic_fieldr   r   r   r:   r:   rL   r;   Útest_Domain_unify,   sÚ      &  &     &  $     $&rO   c                   C   sŽ  t t t¡tt t¡ksJ t t t¡tt t¡ks<J t t t¡tt t¡ksZJ t t t¡tt t¡ksxJ t tt t¡t t¡ksJ t tt t¡t t¡ksŽJ t tt t¡t t¡ksÒJ t tt t¡t t¡ksðJ t t tt¡tt tt¡ksJ t t tt¡tt tt¡ks8J t t tt¡tt tt¡ks\J t t tt¡tt tt¡ksJ t tt tt¡t tt¡ks€J t tt tt¡t tt¡ksÈJ t tt tt¡t tt¡ksìJ t tt tt¡t tt¡ksJ t t t¡tt t¡ks0J t t t¡tt t¡ksPJ t t t¡tt t¡kspJ t t t¡tt t¡ksJ t tt t¡t t¡ks°J t tt t¡t t¡ksÐJ t tt t¡t t¡ksðJ t tt t¡t t¡ksJ t t tt¡tt tt¡ks4J t t tt¡tt tt¡ksXJ t t tt¡tt tt¡ks|J t t tt¡tt tt¡ks J t tt tt¡t tt¡ksÄJ t tt tt¡t tt¡ksèJ t tt tt¡t tt¡ksJ t tt tt¡t tt¡ks0J t t t¡t t¡t t¡ksVJ t t t¡t t¡t t¡ks|J t t t¡t t¡t t¡ks¢J t t t¡t t¡t t¡ksÈJ t t tt¡t t¡t tt¡ksòJ t t tt¡t t¡t tt¡ksJ t t tt¡t t¡t tt¡ksFJ t t tt¡t t¡t tt¡kspJ t t t¡t tt¡t tt¡ksJ t t t¡t tt¡t tt¡ksÄJ t t t¡t tt¡t tt¡ksîJ t t t¡t tt¡t tt¡ksJ t t tt¡t tt¡t ttt¡ksFJ t t tt¡t tt¡t ttt¡kstJ t t tt¡t tt¡t ttt¡ks¢J t t tt¡t tt¡t ttt¡ksÐJ t t t¡t t¡t t¡ksöJ t t t¡t t¡t t¡ksJ t t t¡t t¡t t¡ksBJ t t t¡t t¡t t¡kshJ t t tt¡t t¡t tt¡ksJ t t tt¡t t¡t tt¡ksŒJ t t tt¡t t¡t tt¡ksæJ t t tt¡t t¡t tt¡ksJ t t t¡t tt¡t tt¡ks:J t t t¡t tt¡t tt¡ksdJ t t t¡t tt¡t tt¡ksJ t t t¡t tt¡t tt¡ksžJ t t tt¡t tt¡t ttt¡ksæJ t t tt¡t tt¡t ttt¡k	sJ t t tt¡t tt¡t ttt¡k	sBJ t t tt¡t tt¡t ttt¡k	spJ t t t¡t t¡t t¡k	sJ t t t¡t t¡t t¡k	sŒJ t t t¡t t¡t t¡k	sâJ t t t¡t t¡t t¡k
sJ t t tt¡t t¡t tt¡k
s2J t t tt¡t t¡t tt¡k
s\J t t tt¡t t¡t tt¡k
sJ t t tt¡t t¡t tt¡k
s°J t t t¡t tt¡t tt¡k
sÚJ t t t¡t tt¡t tt¡ksJ t t t¡t tt¡t tt¡ks.J t t t¡t tt¡t tt¡ksXJ t t tt¡t tt¡t ttt¡ksJ t t tt¡t tt¡t ttt¡ksŽJ t t tt¡t tt¡t ttt¡ksâJ t t tt¡t tt¡t ttt¡ksJ t t t¡t t¡t t¡ks6J t t t¡t t¡t t¡ks\J t t t¡t t¡t t¡ksJ t t t¡t t¡t t¡ksšJ t t tt¡t t¡t tt¡ksÒJ t t tt¡t t¡t tt¡ksüJ t t tt¡t t¡t tt¡ks&J t t tt¡t t¡t tt¡ksPJ t t t¡t tt¡t tt¡kszJ t t t¡t tt¡t tt¡ks€J t t t¡t tt¡t tt¡ksÎJ t t t¡t tt¡t tt¡ksøJ t t tt¡t tt¡t ttt¡ks&J t t tt¡t tt¡t ttt¡ksTJ t t tt¡t tt¡t ttt¡ksJ t t tt¡t tt¡t ttt¡ks°J d S r6   )r8   r   Ú	poly_ringr   r   r   rJ   r   r:   r:   r:   r;   Útest_Domain_unify_compositeŠ   sÀ    $$$$$$$$        $$$$$$$$&&&&********....&&&&********....&&&&********....&&&&********...rQ   c                  C   s\  t  td¡} t  td¡}t  tdtd¡}|  |¡|ksBJ |  | ttf ¡| ttf ksdJ | ttf  | ¡| ttf ksJ |  |  tt¡¡|  tt¡ksšJ |  tt¡ | ¡|  tt¡ksÊJ |  |ttf ¡|ttf ksìJ | ttf  |¡|ttf ksJ |  | tt¡¡| tt¡ks4J |  tt¡ |¡| tt¡ksXJ d S )Nr<   é   )r   rN   r   r8   r   r   rJ   )Zsqrt5Zsqrt7Zsqrt57r:   r:   r;   Útest_Domain_unify_algebraic  s    """""$$rS   c            	      C   sÂ  t ttd d ttd} t ttd d ttd}t ttd d ttt d}t ttd d ttt d}|  | ¡| ksJ | |¡|ksJ | |¡|ksŠJ | |¡|ksžJ |  t¡| ksÊJ |  t¡|ksÜJ | t¡|ksîJ | t¡|ksJ |  tt ¡|ksJ |  tt ¡|ks2J | tt ¡|ksJJ | tt ¡|ksbJ | t¡|ksvJ | t¡|ksJ | t¡|ksJ | t¡|ks²J | tt ¡|ksÊJ | tt ¡|ksâJ | tt ¡|ksúJ | tt ¡|ksJ t ttd d ttt d}| t¡|ksDJ | tt ¡|ks\J | tt ¡|kstJ | tttf ¡|ksJ t ttd d ttttf d}| tt ¡|ksÊJ | tttf ¡|ksæJ | tttf ¡|ksJ | ttttf ¡|ks J t ttd d ttd}t ttd d ttd}t ttd d t|d}| |¡|ksJ | |¡|ksJ | |¡|ksªJ | |¡|ksŸJ d S )Nr4   ©Údomain)r+   r   r   r   r   r   r8   r   )	ZKxZZZKxQQZKxZZyZKxQQyÚKZKzZKxÚKyZKxyr:   r:   r;   Ú!test_Domain_unify_FiniteExtension2  sR    "rX   c                   C   s    t tdd  t tdd  d S )Nc                   S   s   t ttf  t ttf¡S r6   )r   r   r   Úunify_with_symbolsr   r:   r:   r:   r;   r@   f  rA   z0test_Domain_unify_with_symbols.<locals>.<lambda>c                   S   s   t  t ttf ttf¡S r6   )r   rY   r   r   r   r:   r:   r:   r;   r@   g  rA   )r1   r,   r:   r:   r:   r;   Útest_Domain_unify_with_symbolse  s    rZ   c                   C   s   dt v du sJ dtv du s J dtv du s0J dtv du s@J dtv du sPJ dtv du s`J dtttf v du sxJ dtttf v du sJ dtttf v du sšJ dt v du sžJ dtv du sÈJ dtv du sØJ dtv du sèJ dtv du søJ dtv du s
J dtttf v du s$J dtttf v du s>J dtttf v du sXJ dt v du sjJ dtv du s|J dtv du sJ dtv du s J dtv du s²J dtv du sÄJ dtttf v du sÞJ dtttf v du søJ dtttf v du sJ tddt v du s*J tddtv du sBJ tddtv du sZJ tddtv du srJ tddtv du sJ tddtv du s¢J tddtttf v du sÂJ tddtttf v du sâJ tddtttf v du sJ tdd	t v du sJ tdd	tv du s2J tdd	tv du sJJ tdd	tv du sbJ tdd	tv du szJ tdd	tv du sJ tdd	tttf v du s²J tdd	tttf v du sÒJ tdd	tttf v du sòJ d
t v du sJ d
tv du sJ d
tv du s(J d
tv du s:J d
tv du sLJ d
tv du s^J d
tttf v du sxJ d
tttf v du sJ d
tttf v du s¬J dt v du sŸJ dtv du sÐJ dtv du sâJ dtv du sôJ dtv du sJ dtv du sJ dtttf v du s2J dtttf v du sLJ dtttf v du sfJ t	tv du sxJ t	tttf v du sJ t	tttf v du s¬J t	 tv du sÀJ t	 tv du sÔJ t	 tv du sèJ t	 tttf v du sJ t	 tttf v du s J t
dt v du s6J t
dtv du sLJ t
dtv du sbJ t
dtv du sxJ t
dtv du sJ t
dtv du s€J t
dtttf v du sÂJ t
dtttf v du sàJ t
dtttf v du sþJ dt
d d t v du sJ dt
d d tv du s:J dt
d d tv du sXJ dt
d d tv du svJ dt
d d tv du sJ dt
d d tv du s²J dt
d d tttf v du sØJ dt
d d tttf v du sþJ dt
d d tttf v du s$J tdt v du s:J tdtv du sPJ tdtv du sfJ tdtv du s|J tdtv du sJ tdtv du sšJ tdtttf v du sÆJ tdtttf v du säJ tdtttf v du 	sJ td d t v du 	sJ td d tv du 	s6J td d tv du 	sPJ td d tv du 	sjJ td d tv du 	sJ td d tv du 	sJ td d tt v du 	sŒJ td d tt v du 	sÚJ td d tt v du 	søJ td d tttf v du 
sJ td d tttf v du 
s<J td d tttf v du 
s^J td td  t v du 
s|J td td  tv du 
sJ td td  tv du 
sžJ td td  tv du 
sÖJ td td  tv du 
sôJ td td  tv du sJ td td  tt v du s4J td td  tt v du sVJ td td  tt v du sxJ td td  tttf v du sJ td td  tttf v du sÄJ td td  tttf v du sêJ tddt td  t ttttf v du sJ d S )Nr   Téùÿÿÿé   éÿÿÿÿrR   Fr5   r<   g      @çëQž	@r4   é   )r   r   r   r   r   rE   r   r   r   r	   r   r   r   r:   r:   r:   r;   Útest_Domain__contains__i  sö          &&&""""""&&&r`   c                   C   s®   t ddt t dt ¡v du s$J dt t t¡v du s>J td td  t dt dt ¡v du sjJ tt t dt t¡v du sJ tt t tdt ¡v du sªJ d S )Nr4   r5   r_   T)r   r   r   rJ   r   r:   r:   r:   r;   Útest_issue_14433õ  s
    $, ra   c                   C   s¢   t jdu sJ tdjdu s J tdjdu s2J tjdu s@J tjdu sNJ tjdu s\J tjdu sjJ tjdu sxJ tt jdu sJ t  	t¡jdu sJ d S )NFr<   Té   )
r   Zis_Fieldr   r   r   r   r   rE   r   rJ   r:   r:   r:   r;   Útest_Domain_is_fieldý  s    rc   c                   C   s6  t jdu sJ tjdu sJ t t jdu s.J tt jdu s@J t ttf jdu sVJ tttf jdu slJ t  t¡jdu sJ t t¡jdu sJ t  tt¡jdu sªJ t tt¡jdu sÀJ tjdu sÎJ tjdu sÜJ tjdu sêJ t  	¡ t ksúJ t 	¡ t ksJ t t  	¡ t t ks&J tt  	¡ tt ks@J t ttf  	¡ t ttf ksbJ tttf  	¡ tttf ksJ t  t¡ 	¡ t t ks J t t¡ 	¡ tt ksŒJ t  tt¡ 	¡ t ttf ksÞJ t tt¡ 	¡ tttf ks J t 	¡ tksJ t 	¡ tks$J t
tdd  d S )NTFc                   S   s   t  ¡ S r6   )rE   Úget_ringr:   r:   r:   r;   r@   )  rA   z&test_Domain_get_ring.<locals>.<lambda>)r   Zhas_assoc_Ringr   r   r   rJ   r   r   rE   rd   r1   r0   r:   r:   r:   r;   Útest_Domain_get_ring
  s4    """"re   c                   C   sf  t jdu sJ tjdu sJ tjdu s*J tjdu s8J tjdu sFJ tt jdu sXJ tt jdu sjJ tttf jdu sJ tttf jdu sJ t  ¡ t ksŠJ t ¡ tks¶J t ¡ tksÆJ t ¡ tksÖJ t ¡ tksæJ tt  ¡ t 	t¡ksJ tt  ¡ t 	t¡ksJ tttf  ¡ t 	tt¡ks@J tttf  ¡ t 	tt¡ksbJ d S )NT)
r   Zhas_assoc_Fieldr   r   r   rE   r   r   Ú	get_fieldrJ   r:   r:   r:   r;   Útest_Domain_get_field,  s$    "rg   c                  C   sP  t dtttttttt tt tt tt tt g} | D ]}| D ]}|t  	|¡|t ksbJ |tt
f  	|¡|tt
f ksJ | t¡ 	|¡| t¡ks¢J | tt
¡ 	|¡| tt
¡ksÄJ | t¡ 	|¡| t¡ksâJ | tt
¡ 	|¡| tt
¡ksJ | t¡ 	|¡| t¡ks&J | tt
¡ 	|¡| tt
¡ksBJ qBq8d S )Nr<   )r   r   r   rE   r   r   r   r   r   Z
set_domainr   rJ   Úold_poly_ringÚold_frac_field)ÚdomsZD1ZD2r:   r:   r;   Útest_Domain_set_domainB  s    4

""$ rk   c                  C   s|   t dttttg} ttg}| | D ]T}||t | t¡| 	t¡| 
t¡fD ]*}|| v rf|jdu stJ qJ|jdu sJJ qJq"d S )Nr<   TF)r   r   r   rE   r   r   r   r   rJ   rh   ri   Zis_Exact)ÚexactZinexactÚDÚRr:   r:   r;   Útest_Domain_is_ExactP  s    (ro   c                   C   sJ  t  ¡ t ksJ t ¡ tks J t ¡ tks0J t ¡ tks@J t ¡ tksPJ t ¡ tks`J tt  ¡ tt ksxJ tt  ¡ tt ksJ tt  ¡ tt ksšJ tt  ¡ tt ksÀJ ttt	f  ¡ ttt	f ksàJ ttt	f  ¡ ttt	f ksJ ttt	f  ¡ ttt	f ks$J ttt	f  ¡ ttt	f ksFJ t 
t¡ ¡ t 
t¡ksdJ t 
t¡ ¡ t 
t¡ksJ t 
t¡ ¡ t 
t¡ks J t 
t¡ ¡ t 
t¡ksŸJ t 
tt	¡ ¡ t 
tt	¡ksàJ t 
tt	¡ ¡ t 
tt	¡ksJ t 
tt	¡ ¡ t 
tt	¡ks$J t 
tt	¡ ¡ t 
tt	¡ksFJ t t¡ ¡ t t¡ksdJ t t¡ ¡ t t¡ksJ t t¡ ¡ t t¡ks J t t¡ ¡ t t¡ksŸJ t tt	¡ ¡ t tt	¡ksàJ t tt	¡ ¡ t tt	¡ksJ t tt	¡ ¡ t tt	¡ks$J t tt	¡ ¡ t tt	¡ksFJ t t¡ ¡ t t¡ksdJ t t¡ ¡ t t¡ksJ t t¡ ¡ t t¡ks J t t¡ ¡ t t¡ksŸJ t tt	¡ ¡ t tt	¡ksàJ t tt	¡ ¡ t tt	¡ksJ t tt	¡ ¡ t tt	¡ks$J t tt	¡ ¡ t tt	¡ksFJ d S r6   )r   Z	get_exactr   r   r   r   r"   rE   r   r   rJ   rh   ri   r:   r:   r:   r;   Útest_Domain_get_exact[  sL     """"""""""""""rp   c                  C   sÔ   t ddft ddft ddffD ]P\} }| | t |  t¡|  t¡|  t¡fD ]"}|jdu s`J | ¡ |ksNJ qNq"ttt	t
tfD ]L}||t | t¡| t¡| t¡fD ]"}|jdu sŒJ | ¡ dksªJ qªqd S )Nr5   r<   rR   FTr   )r   r   rJ   rh   ri   Zhas_CharacteristicZeroZcharacteristicr   r   r!   r"   rE   )ÚFÚcrn   rm   r:   r:   r;   Útest_Domain_characteristic  s    *((rs   c                     sö   g d¢} g d¢}g d¢}t t tt t t¡   dd | D |ksLJ dd | D |ksbJ fdd| D |ks|J  fdd| D |ksJ fd	d| D |ks°J  t¡d
u sÆJ    t¡d
u sÜJ  t¡du sòJ d S )N)éþÿÿÿr]   r   r_   r4   )FTFTF)TTFTTc                 S   s   g | ]}t  t |¡qS r:   )r   Úis_unit©Ú.0Únr:   r:   r;   Ú
<listcomp>  rA   z'test_Domain_is_unit.<locals>.<listcomp>c                 S   s   g | ]}t  t |¡qS r:   )r   ru   rv   r:   r:   r;   ry     rA   c                    s   g | ]}    |¡qS r:   ©ru   rv   )ÚZZxr:   r;   ry     rA   c                    s   g | ]}    |¡qS r:   rz   rv   )ÚQQxr:   r;   ry     rA   c                    s   g | ]}    |¡qS r:   rz   rv   )ÚQQxfr:   r;   ry     rA   FT)r   r   r   rJ   ru   )ÚnumsZinvringZinvfieldr:   )r|   r}   r{   r;   Útest_Domain_is_unit  s    r   c                     s\  dd   fdd} dd }t  td¡}t  td¡}tt ||ttttg}t|D ]@\}}||d  D ]*}||D ]}||D ]}	| ||	 qqtqhqTt  	d	¡t d
dks®J t
dt\}
}t 	|| ¡dksÒJ t 	|| |
 ¡ ¡dksîJ t 	tdd¡tddksJ t 	tdd¡tddks.J t  tdt¡t ddksNJ t t ddt ¡tdksnJ t tddt¡tt ddt ddksJ t tt ddt ddt¡tddksÊJ t  t¡}t t¡}t t }tt }	||||	g}t||D ],\}}| | t¡|¡| t¡ksJ q| t ddt ¡|t ddksXJ d S )Nc                 S   s   t | tr&t |tr | j|jksrJ nLt | trLt |trF| j|jksrJ n&t| t|u srJ d| ||||f | |ksJ d| ||||f d S )Nz%s, %s: %s %s -> %s)Ú
isinstancer'   r&   r*   r)   Útype)Úe1Úe2r9   ÚK2ÚK3r:   r:   r;   Úcheck_element   s    

&z*test_Domain_convert.<locals>.check_elementc                    s~   |   |¡} | | j| ¡|j| ||  | |j|¡|j| ||  | | j| ¡|j| ||  | |j|¡|j| || d S r6   )r8   Úconvert_fromÚoneÚzero)r9   r   r   ©r   r:   r;   Úcheck_domains©  s
    
z*test_Domain_convert.<locals>.check_domainsc              
   S   s:   | | t  | t | t tf |  t ¡|  t¡|  t t¡g}|S r6   )r   r   rJ   )rV   Údomainsr:   r:   r;   Úcomposite_domains°  s
    ýz.test_Domain_convert.<locals>.composite_domainsr4   r5   gLoûñW5l   Ó$7ûq/ l                                r   r   r_   g      à?g      è?é   )r   rN   r   r   r"   r!   r   r   Ú	enumerateÚconvertr&   Ú	to_domainr   rJ   r   r3   Ú
from_sympy)r   r   ZQQ2ZQQ3rj   Úir9   r   r   ZK4rn   ZxrZKsZKaZKbr:   r   r;   Útest_Domain_convert  s:    	
    ..

&r   c                  C   sÄ   t t dfttddfttddfttddfttdfttddfttdfttdftt 	t
d¡fg	} | D ]N\}}ttfD ]<}| 	| |¡¡}| ||¡|ksšJ | ||¡|ksJ qqpd S )Nr5   r_   r4   )r   r   r!   r"   r   r   r   r   rE   r   r   Úto_sympyr   )Úelementsrn   ÚeZEEÚelemr:   r:   r;   Útest_EX_convertÝ  s    



÷r   c                  C   sŸ   t  t¡} t t }|  t¡|  | t¡|¡ks2J | t¡| |  t¡| ¡ksRJ t  tt¡} t t }|  t¡|  | t¡|¡ksJ t tt¡} t t }|  t¡|  | t¡|¡ksºJ d S r6   )r   rh   r   r   r   r   )r9   r   r:   r:   r;   Ú!test_GlobalPolynomialRing_convertò  s    
   r   c                  C   s$   t dt\} t ¡ |  ¡ ks J d S ©NÚ )r&   r   rP   r   )rn   r:   r:   r;   Útest_PolynomialRing__init  s    r   c                  C   s$   t dt\} t ¡ |  ¡ ks J d S r   )r)   r   rJ   r   )rq   r:   r:   r;   Útest_FractionField__init  s    r   c                  C   s`   t  t¡} |  t ddt ¡|  tdd¡ks0J t  t¡} |  tdt¡|  td¡ks\J d S )Nr4   r5   )r   rJ   r   r   r   r   r   r   ©rV   r:   r:   r;   Útest_FractionField_convert  s    
&
r    c                   C   sx   t  ttt¡t tttf ks J t t  tt¡t tttf ksBJ t  t¡ tt¡t  ttt¡ksfJ ttdd  d S )Nc                   S   s   t t  t¡S r6   )r   r   Úinjectr:   r:   r:   r;   r@     rA   ztest_inject.<locals>.<lambda>)r   r¡   r   r   r   rJ   r1   r-   r:   r:   r:   r;   Útest_inject  s     "$r¢   c                     s^  t  t¡t ksJ t t  t¡t ks(J t ttf  t¡t t ksFJ t  t¡ t¡t ks^J t  tt¡ t¡t  t¡ks~J t t t  t¡t t ksJ t t t  t¡t t ksºJ t  t¡t  t¡t t ksÚJ t  t¡t  t¡t  t¡ksüJ tttd d tt t d tttd d tt d}   t¡| ksHJ tt fdd d S )Nr4   r_   rT   c                      s
      t¡S r6   )Údropr   r:   ©rW   r:   r;   r@   (  rA   ztest_drop.<locals>.<lambda>)	r   r£   r   r   rJ   r+   r   r1   r-   r   r:   r€   r;   Ú	test_drop  s      "r¥   c                  C   s^   t  g d¢¡} tdd | D s$J t  g d¢g¡} tdd | d D rVt| dksZJ d S )N)r_   r4   r5   r   c                 s   s   | ]}t  |¡V  qd S r6   ©r   Úof_type©rw   Úeltr:   r:   r;   Ú	<genexpr>.  rA   z"test_Domain_map.<locals>.<genexpr>c                 s   s   | ]}t  |¡V  qd S r6   rŠ   rš   r:   r:   r;   rª   2  rA   r   r_   )r   ÚmapÚallÚlen)Úseqr:   r:   r;   Útest_Domain_map+  s    r¯   c                   C   s  t ttf t ttf kdu s J tttf tttf kdu s@J t ttf tttf kdu s`J tttf t ttf kdu sJ t  tt¡t  tt¡kdu s J t tt¡t tt¡kdu sÀJ t  tt¡t tt¡kdu sàJ t tt¡t  tt¡kdu sJ t t tt ksJ d S )NTF)r   r   r   r   rJ   r$   r   r:   r:   r:   r;   Útest_Domain___eq__5  s           "r°   c                  C   sž   t  td¡} | jjttd d ks*J | jtks8J t td¡} | jjttd d ksbJ | jtkspJ |  td¡} | jjttd dtd   d ksŠJ | jtksŽJ d S ©Nr4   r5   r   é
   r_   )	r   rN   r   ÚextÚminpolyr   r   Údomr   )Úalgr:   r:   r;   Útest_Domain__algebraic_fieldE  s    (r·   c                  C   sž   t td d } t td d }t td dtd   d }t | ¡}|jj| ksVJ |jtksdJ t | ¡}|jj| ks~J |jtksJ | |¡}|jj|ksŠJ |jtksŽJ d S r±   )r   r   r   Zalg_field_from_polyr³   rŽ   rµ   r   )ÚfÚgÚhr¶   r:   r:   r;   Útest_Domain_alg_field_from_polyS  s    


r»   c                  C   s   t  d¡} | jjttdks"J | jtks0J t d¡}|jjttdksRJ |jtks`J | d¡}t|j| jd usJ |jtksJ d S )Né   r5   r   )	r   Zcyclotomic_fieldr³   rŽ   r   r(   rµ   r   r%   )rV   rq   r   r:   r:   r;   Útest_Domain_cyclotomic_fielde  s    


rœ   c            	      C   sª  t dt\} }}tdt\}}}|d |d  |d  }|d |d  d }|d |d  }| ¡  ||  ¡ ¡d u sxJ | ¡  ||  ¡ ¡|d d |d d  ksšJ | ¡  ||  ¡ ¡|d |d  ksÐJ t dt\} }}tdt\}}}|d |d  |d  }|d |d  d }|d |d  }| ¡  ||  ¡ ¡d u sJJ | ¡  ||  ¡ ¡|d d |d d  ks|J | ¡  ||  ¡ ¡|d |d  ksŠJ d S )Núx,yr4   r_   r   )r)   r   r&   r   Zfrom_FractionFieldr   )	rq   r   r   rn   ÚXÚYrž   r¹   rº   r:   r:   r;   Ú&test_PolynomialRing_from_FractionFields  s     0(2rÁ   c                  C   sž   t dt\} }}tdt\}}}d|d  d|d   }|d d |d d  }| ¡  ||  ¡ ¡d|d  d|d   ksJ | ¡  ||  ¡ ¡d|d  d|d   d ksŽJ d S )NrŸ   r5   r4   r<   é   )r&   r   r)   r   r   Zfrom_PolynomialRing)rn   r   r   rq   r¿   rÀ   rž   r¹   r:   r:   r;   Ú&test_FractionField_from_PolynomialRing  s    0rÃ   c                   C   s@   t d t dd¡du sJ t d t dd¡du s<J d S )Nr5   r_   Tr<   )r   r§   r:   r:   r:   r;   Útest_FF_of_type  s    rÄ   c                   C   s0   t t tt krJ t  t¡t t¡kr,J d S r6   )r   r   r   rJ   r:   r:   r:   r;   Útest___eq__  s    rÅ   c                   C   s   t  tj¡t  d¡ksJ t  td¡t  d¡ks6J t  tj¡t  d¡ksPJ t  td¡t  d¡kslJ t  td¡t  td ¡ ¡ksJ d S )Nr   g        r_   g      ð?)r   r   r   ÚZeroZdtypeÚOner   Zevalfr:   r:   r:   r;   Útest_RealField_from_sympy¢  s
    rÈ   c                     s   t ttg dd td d D  } tttttfD ]H | D ]>tkrP tkrPq: vsdJ  ftt	 fdd q:q2d S )Nc                 S   s   g | ]}t |qS r:   )Úfloat)rw   r   r:   r:   r;   ry   «  s   z*test_not_in_any_domain.<locals>.<listcomp>r5   c                      s
      ¡S r6   )r   r:   ©rµ   r   r:   r;   r@   ²  rA   z(test_not_in_any_domain.<locals>.<lambda>)
Úlistr   r   r   r   r   r   r   r1   r.   )Úcheckr:   rÊ   r;   Útest_not_in_any_domainª  s    
ÿrÍ   c               
      sÌ  t d} | d}|  |¡r"|dks&J | d}|  |¡r@|dksDJ | d}|  |¡r^|dksbJ | d}|  |¡r||dksJ | d}|  |¡r|dksJ | | d}|  |¡rŒ|dksÀJ | | d}|  |¡rÞ|dksâJ | | d}|  |¡r|dksJ | | d}|  |¡r*|dks.J | | d}|  |¡rP|dksTJ | d }|  |¡rt|dksxJ | d }|  |¡r|dksJ d| d }|  |¡rŸ|dksÂJ | dd }|  |¡rä|dksèJ | d| d }|  |¡r|dksJ | d| d }|  |¡r8|dks<J d| d }|  |¡r^|dksbJ | dd }|  |¡r|dksJ | d| d }|  |¡r®|dks²J | d| d }|  |¡rØ|dksÜJ d| d }|  |¡rþ|dksJ | dd }|  |¡r$|dks(J | d| d }|  |¡rN|dksRJ | d| d }|  |¡rx|dks|J d| d }|  |¡r|dks¢J | dd }|  |¡rÄ|dksÈJ | d| d }|  |¡rî|dksòJ | d| d }|  |¡r|dksJ | dd }|  |¡r>|dksBJ | dd }|  |¡rd|dkshJ | dd }|  |¡r|dksJ t d}|dd }| |¡rž|dksŒJ |dd }| |¡rÞ|dksâJ t| dd	u søJ t| dd
u sJ t d  dd }  |¡r8|dks<J  dd }  |¡r^|dksbJ  dd }  |¡r|dksJ  dd }  |¡rª|dks®J tdkrÜtt fdd tt fdd ttdd  ttdd  tdD ]tdD ]tdkr8t .   k k u sDJ W d    n1 sZ0    Y  t .   kku sJ W d    n1 s 0    Y  t .   kku sÐJ W d    n1 sæ0    Y  t .   kku sJ W d    n1 s,0    Y  nXtt	 fdd tt	 fdd tt	 fdd tt	 fdd qq t
td ks®J  td dksÈJ d S )Nr5   r   r_   r4   r   rR   l    hí] lýÿÿÿ hí] FTr<   r]   Zflintc                      s    dd S )Nr   r]   r:   r:   ©rM   r:   r;   r@     rA   z%test_ModularInteger.<locals>.<lambda>c                      s    dd S )Nr<   r]   r:   r:   rÎ   r:   r;   r@     rA   c                   S   s   t dS ©Nr   ©r   r:   r:   r:   r;   r@     rA   c                   S   s   t dS )NgÍÌÌÌÌÌ @rÐ   r:   r:   r:   r;   r@     rA   c                      s     k S r6   r:   r:   ©rM   Zn1Zn2r:   r;   r@   '  rA   c                      s     kS r6   r:   r:   rÑ   r:   r;   r@   (  rA   c                      s     kS r6   r:   r:   rÑ   r:   r;   r@   )  rA   c                      s     kS r6   r:   r:   rÑ   r:   r;   r@   *  rA   )r   r§   Úboolr   r1   r/   Ú
ValueErrorÚranger2   Ú	TypeErrorr   r   )r?   ÚaÚF7r:   rÑ   r;   Útest_ModularIntegerµ  sÊ    



>>>@rØ   c                   C   s<   t tdd dd dksJ t tdd ddks8J d S )Nr4   iÐ  r5   iâ  ió éd   l   UUª*UUª*UUª*U)Úintr   r:   r:   r:   r;   Útest_QQ_int1  s    rÛ   c                   C   sd   t ddksJ t ddks J t ddks0J t ddks@J t ddksPJ t ddks`J d S )Nr^   çžÔJzî5çvIhÂ%<=ç+¡=çVç¯Ò<ç#B¡Ç;çWw'&l¡7)r   r:   r:   r:   r;   Útest_RR_double6  s    râ   c                  C   s   t d} t d}| jdksJ |jdks,J t| d dks@J t|d dk sTJ t|jd}|| d dkstJ ||d dksJ d S )Nz1.01z1.0000000000000000000001é5   éP   r_   rÜ   )Úprec)r   Z_precr   r$   )Úf1Úf2ZRR2r:   r:   r;   Útest_RR_Float?  s    rè   c                   C   sÜ   t djdksJ t djdks$J t djdks6J t djdksHJ t djdksZJ t djdkslJ t djdks~J t d	jdksJ t d
jdks¢J t djdksŽJ t djdksÆJ t djdksØJ d S )Nr^   rÜ   rÝ   rÞ   rß   rà   rá   y        ëQž	@y        vIhÂ%<=y        +¡=y        Vç¯Ò<y        #B¡Ç;y        Ww'&l¡7)r   ÚrealÚimagr:   r:   r:   r;   Útest_CC_doubleL  s    rë   c                     sD
  t j} dd dd|  d|  dd|   fD \}}}}t ||¡|ksHJ t ||¡|ks\J t ||¡|kspJ t ||¡|ksJ tddtddksJ tdddks®J tt dd dt dd ksÐJ tdd ¡ dksæJ tdd ¡ dksüJ t tdd¡ttddtdks&J t tddt¡ttddtdksRJ ttfD ]â  ddt	d	ks|J  
¡  ksJ  t¡d
ks¢J  d¡dks¶J  d|  ¡dksÎJ ttdksäJ  dd ddksþJ  dd ddksJ  dd dks0J   ddksHJ   ddks`J d  d   kr ddksn J d d   krŽ ddksºn J   ddksÒJ d d   krø ddksþn J d  ddksJ d ks(J d    krN ddksTn J d     kr~ ddksn J d d   krŒtt dd t d d ksÂn J d tddksÚJ d tt dd dksúJ d tdt dd ksJ d tt dd t d d ksDJ td\}}d| | kshJ td\}}| |  ddksJ  dd dd }}  ||¡\}}}|  ||¡ksÐJ || ||  |ksêJ 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 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 ttfd&d ttfd'd ttfd(d   t d¡ ddksJ    dd¡t dks4J tt fd)d   t¡}t|ts`J |j kspJ t|jdkr|jd  ¡ tksJ  tu rà  ¡ }	t|	tsºJ |	jtksÊJ |	j j!d | ksàJ  dd dd dd ddfD ]V}
  "|
¡d*u sJ   #|
¡d*u s0J   $|
¡d*u sDJ   %|
¡d*u sJ qt&ttt| g}|t' t( g7 }t)d+kr|t* t+ g7 }|D ]D}  |d¡ ddksŒJ   |d|¡ ddksJ qttfD ]H}  |dd¡ ddksJ   |dd|¡ ddksèJ qè tkrþt,d,ksNJ d  ddksfJ d  dd-ks~J d  ddksJ d  ddks®J | ddksÂJ | ddksÖJ   -¡  ksèJ   .¡ tk
s<J qZt,d.k	sJ   -¡ tk	s"J   .¡  k	s4J d  dt dd k	sTJ d  t d/d t d0 d k	s~J d  ddk	sJ d  ddk	s®J | t dd t d d k	sÜJ  |f| ddk	sðJ  t dd t dd }  /|¡tdd1k
s$J   0|¡tdksZJ qZd S )2Nc                 S   s   g | ]}t  |¡qS r:   )r!   r   ©rw   r   r:   r:   r;   ry   ^  rA   z)test_gaussian_domains.<locals>.<listcomp>r<   r4   r5   r   r   r]   z3 + 4*I)NN)r4   r   )r   r4   )r5   r   r_   rb   é   éüÿÿÿr[   é   é	   rŒ   iÿÿÿé,   é   c                      s    d S rÏ   r:   r:   ©Úqr:   r;   r@     rA   z'test_gaussian_domains.<locals>.<lambda>c                      s    d S rÏ   r:   r:   ró   r:   r;   r@     rA   c                      s    d S rÏ   r:   r:   ró   r:   r;   r@     rA   c                      s
   t  dS rÏ   ©Údivmodr:   ró   r:   r;   r@     rA   c                      s
   t  dS rÏ   rõ   r:   ró   r:   r;   r@     rA   c                      s    t  S r6   ©r   r:   ró   r:   r;   r@     rA   c                      s    t  S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s   t   S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s   t   S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s    t  S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s   t   S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s    t  S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s   t   S r6   r÷   r:   ró   r:   r;   r@     rA   c                      s    t  S r6   r÷   r:   ró   r:   r;   r@      rA   c                      s   t   S r6   r÷   r:   ró   r:   r;   r@   ¡  rA   c                      s
      t¡S r6   )r   r
   r:   )ÚGr:   r;   r@   ¥  rA   FZgmpyz
ZZ_I(3, 4)rt   z
QQ_I(3, 4)é$   é0   r²   )1r   ÚImaginaryUnitr!   ÚgcdÚlcmr"   Zquadrantr   r   ÚstrÚparentZ_get_xyr
   Úhashrö   Zgcdexr1   ÚZeroDivisionErrorrÕ   r   r   r.   r¡   r   r   r#   rU   r­   ZgensZas_exprZas_AlgebraicFieldr    r³   ÚargsÚis_negativeÚis_positiveÚis_nonnegativeÚis_nonpositiver   r   r   r   r   r   Úreprrd   rf   ZnumerZdenom)r   rÖ   Úbrr   Údr   Úrr¹   ZPRZAFZqir   rV   Zq2r:   )rø   rô   r;   Útest_gaussian_domains\  sÞ    ."*,
.,,,0>  *
(
(
$ &
 *.r  c                   C   s  t jtju sJ t jtju s J tdt d¡ks6J tdjtju sJJ t dtju s\J dtt	t
t	  t	  tddt
    kr dt	t
t	  t	  ksŠn J dt t	t
t	  t	  dt	t
t	  t	    krâdt
 ksèn J t  tdt¡t ju sJ t t dt ¡tjks J t  tj¡tju s8J t  t j¡tju sPJ ttdd  t  ¡ t kspJ t  t¡t ksJ t t ¡t ksJ d S )Nr_   r4   c                   S   s
   t  g ¡S r6   )r   r   r:   r:   r:   r;   r@   ô  rA   ztest_EX_EXRAW.<locals>.<lambda>)r   r   r   rÆ   r   rÇ   r   Ú
ExpressionÚexr   r   r   r   r   r1   r.   rf   r8   r:   r:   r:   r;   Útest_EX_EXRAWã  s    JBr  c                  C   s<   t dt tt dg} t| t dt dt tgks8J d S )Nr_   r5   )r   r   Úsorted)r   r:   r:   r;   Útest_EX_orderingü  s    r  c                  C   s  t ttfD ]8} |  | d¡| dks(J |  | d¡| dks
J q
ttfD ]|} |  t¡}|  | d¡| dkstJ |  | d| ¡| ksJ |  | d ¡| dks¬J |  | d | ¡|ksLJ qLt t } |  | td ¡| dksðJ |  | t d ¡| dksJ tt } |  |  tt ¡¡tddks>J t 	tt
¡} |  t¡}|| | jkshJ | j| || j  | ksJ d S )Nr4   r_   rt   r]   r   )r   r   r   Zcanonical_unitr!   r"   r   r   r   rJ   r   r   )rV   r   r:   r:   r;   Útest_canonical_unit  s$    
"$
r  c                  C   sH   t j} dd d|  dfD \}}t |¡dks2J t |¡dksDJ d S )Nc                 S   s   g | ]}t  |¡qS r:   ©r   r   rì   r:   r:   r;   ry     rA   z+test_Domain_is_negative.<locals>.<listcomp>r4   r<   F)r   rû   r   r  ©r   rÖ   r  r:   r:   r;   Útest_Domain_is_negative  s    r  c                  C   sH   t j} dd d|  dfD \}}t |¡dks2J t |¡dksDJ d S )Nc                 S   s   g | ]}t  |¡qS r:   r  rì   r:   r:   r;   ry   $  rA   z+test_Domain_is_positive.<locals>.<listcomp>r4   r<   F)r   rû   r   r  r  r:   r:   r;   Útest_Domain_is_positive"  s    r  c                  C   sH   t j} dd d|  dfD \}}t |¡dks2J t |¡dksDJ d S )Nc                 S   s   g | ]}t  |¡qS r:   r  rì   r:   r:   r;   ry   +  rA   z.test_Domain_is_nonnegative.<locals>.<listcomp>r4   r<   F)r   rû   r   r  r  r:   r:   r;   Útest_Domain_is_nonnegative)  s    r  c                  C   sH   t j} dd d|  dfD \}}t |¡dks2J t |¡dksDJ d S )Nc                 S   s   g | ]}t  |¡qS r:   r  rì   r:   r:   r;   ry   2  rA   z.test_Domain_is_nonpositive.<locals>.<listcomp>r4   r<   F)r   rû   r   r  r  r:   r:   r;   Útest_Domain_is_nonpositive0  s    r  c                  C   sJ   t t } |  t¡}|  td¡|d ks,J |  td¡|d ksFJ d S )Nr5   )r   r   r   r   r   )rV   ZeKr:   r:   r;   Útest_exponential_domain7  s    
r  c                  C   s
  t  td¡} | jjd u sJ ttddd}t  |¡} | jjjdksJJ t j|dd} | jjjdksjJ t  tdtd¡} | jjd u sJ t  |td¡} | jjd u s®J t jtdtddd} | jjjdksØJ t  |¡} |  | g d¢¡}|j|ju sJ d S )Nr4   Úalpha)ÚaliasÚthetar5   )r_   r4   r5   )r   rN   r   r³   r  r   ÚnameZ
to_alg_num)Úkr  Úbetar:   r:   r;   Útest_AlgebraicField_alias>  s     

r  c                  C   sh  t  t d¡du sJ t  t d¡t dks0J t  t d¡du sFJ t  t d¡d u s\J t  t d¡du srJ t  t d¡t dksJ t  t d¡du s¢J t  t d¡d u sžJ t tdd¡du sÐJ t tdd¡td	dksîJ t td
d¡du sJ t td
d¡td	dks(J t tdd¡du sBJ t tdd¡td	dksbJ t tdd¡du s|J t tdd¡d u sJ t tdd¡du s°J t tdd¡d u sÊJ t td¡du sâJ t td¡tdksþJ t td¡du sJ t td¡tdks2J t tdd¡du sLJ t tdd¡d u sfJ t td¡du s~J t td¡tdksJ t td¡du s²J tjt td¡tdddsÖJ t td¡du sîJ t td¡tdks
J t td¡du s"J t td¡d u s:J t td¡du sRJ tjt td¡tdddsvJ t td¡du sJ t td¡tdksªJ t td¡du sÂJ t td¡tddksàJ t tdd¡du súJ t tdd¡tddksJ t tdd¡du s4J t tdd¡tddksTJ td} |  | d¡du stJ |  | d¡| dksJ |  | d¡du sšJ |  | d¡| dksÄJ td}| |d¡du säJ | |d¡|d	ks J | |d	¡du sJ | |d	¡d u s0J | |d¡du sHJ | |d¡|dksdJ d S )Nr   Tr4   é*   Fr   r]   rð   r5   é   rí   i÷ÿÿÿrî   é   r<   iðÿÿÿg      @g      @gÍ;f ö?rß   )Z	tolerancer_   éýÿÿÿrt   rR   )r   Z	is_squareZexsqrtr   r   Zalmosteqr   r   )ZF2r×   r:   r:   r;   Útest_exsqrt_  sl      $$  r$  N)}Ú__doc__Zsympy.external.gmpyr   Zsympy.core.numbersr   r   r   r   r   r   r	   r
   r   Zsympy.core.singletonr   Z&sympy.functions.elementary.exponentialr   Z(sympy.functions.elementary.miscellaneousr   Z(sympy.functions.elementary.trigonometricr   Zsympy.polys.polytoolsr   Z	sympy.abcr   r   r   Zsympy.polys.domainsr   r   r   r   r   r   r   r   r   r   r   r   Z"sympy.polys.domains.algebraicfieldr    Z#sympy.polys.domains.gaussiandomainsr!   r"   Z"sympy.polys.domains.polynomialringr#   Zsympy.polys.domains.realfieldr$   Z!sympy.polys.numberfields.subfieldr%   Zsympy.polys.ringsr&   r'   Zsympy.polys.specialpolysr(   Zsympy.polys.fieldsr)   r*   Zsympy.polys.agca.extensionsr+   Zsympy.polys.polyerrorsr,   r-   r.   r/   r0   Zsympy.testing.pytestr1   r2   Ú	itertoolsr3   rN   rE   r8   rO   rQ   rS   rX   rZ   r`   ra   rc   re   rg   rk   ro   rp   rs   r   r   r   r   r   r   r    r¢   r¥   r¯   r°   r·   r»   rœ   rÁ   rÃ   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   ,8zy3 ")?
|	 !