o
    GZ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:   úU/var/www/auris/lib/python3.10/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stJ 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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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s5J ttt 
t	¡t 
t	¡ksEJ ttttksOJ tt fdd ttttksbJ ttttkslJ ttttksvJ tttt ttdtd¡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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s'J ttttks1J tttt	 tt	 ks?J tttt	 tt	 ksMJ tttt	 tt	 ks[J tttt	 tt	 ksiJ ttt 
t	¡t 
t	¡ksyJ 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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s)J tt fdd ttttks<J ttttksFJ ttttksPJ ttttksZJ ttttksdJ tttt	 tt	 ksrJ 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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	 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s"J tt 
t	¡tt 
t	¡ks2J tt 
t	¡tt 
t	¡ksBJ tt 
t	¡tt 
t	¡ksRJ tt 
t	¡tt 
t	¡ksbJ tt 
t	¡tt	 t 
t	¡kstJ 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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ksÛJ ttt 
t	¡tksèJ ttttksòJ d S )Nr5   é   c                      ó
   t  tS r6   ©r8   r   r:   ©ÚF3r:   r;   Ú<lambda>1   ó   
 z#test_Domain_unify.<locals>.<lambda>c                      r=   r6   ©r8   r   r:   r?   r:   r;   rA   2   rB   c                      r=   r6   ©r8   r!   r:   r?   r:   r;   rA   3   rB   c                      r=   r6   ©r8   r"   r:   r?   r:   r;   rA   4   rB   c                      r=   r6   )r8   ÚALGr:   r?   r:   r;   rA   5   rB   c                      r=   r6   ©r8   r   r:   r?   r:   r;   rA   6   rB   c                      r=   r6   ©r8   r   r:   r?   r:   r;   rA   7   rB   c                      s   t  tt S r6   ©r8   r   r   r:   r?   r:   r;   rA   8   ó    c                      s   t  t t¡S r6   ©r8   r   Ú
frac_fieldr   r:   r?   r:   r;   rA   9   ó    c                      r=   r6   ©r8   r   r:   r?   r:   r;   rA   :   rB   c                      s
   t  S r6   r7   r:   ©r@   ÚF5r:   r;   rA   =   rB   c                      s   t  t S r6   )r8   r   r:   rO   r:   r;   rA   >   rJ   c                      s   t   t¡S r6   )r8   rL   r   r:   rO   r:   r;   rA   ?   rM   c                      ó
   t t S r6   r>   r:   r?   r:   r;   rA   A   rB   c                      rQ   r6   rC   r:   r?   r:   r;   rA   K   rB   c                      rQ   r6   rD   r:   r?   r:   r;   rA   U   rB   r4   c                      rQ   r6   rE   r:   r?   r:   r;   rA   b   rB   c                      rQ   r6   rG   r:   r?   r:   r;   rA   s   rB   c                      rQ   r6   rH   r:   r?   r:   r;   rA   ~   rB   c                      s   t tt  S r6   rI   r:   r?   r:   r;   rA      rJ   c                      s   t t t¡ S r6   rK   r:   r?   r:   r;   rA      rM   c                      rQ   r6   rN   r:   r?   r:   r;   rA      rB   )r   r8   r1   r,   r   r   rF   r   r   r   rL   r   r!   r"   Úalgebraic_fieldr   r   r   r:   r:   rO   r;   Útest_Domain_unify,   sÚ    &  &     &  $     $&rS   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s-J t t t¡tt t¡ks<J t tt t¡t t¡ksKJ t tt t¡t t¡ksZJ t tt t¡t t¡ksiJ 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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sJ t t t¡tt t¡ks!J t t t¡tt t¡ks1J t t t¡tt t¡ksAJ t tt t¡t t¡ksQJ t tt t¡t t¡ksaJ t tt t¡t t¡ksqJ 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 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¡ks$J t t t¡t t¡t t¡ks7J t t t¡t t¡t t¡ksJJ t t t¡t t¡t t¡ks]J t t tt¡t t¡t tt¡ksrJ 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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s3J t t tt¡t tt¡t ttt¡ksJJ t t tt¡t tt¡t ttt¡ksaJ t t t¡t t¡t t¡kstJ 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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sUJ t t tt¡t tt¡t ttt¡kslJ 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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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sQJ t t t¡t tt¡t tt¡ksfJ 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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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sMJ t t tt¡t t¡t tt¡ksbJ t t tt¡t t¡t tt¡kswJ 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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sQJ d S r6   )r8   r   Ú	poly_ringr   r   r   rL   r   r:   r:   r:   r;   Útest_Domain_unify_compositeŠ   sÀ   """""""$        $$$$$$$$&&&&********....&&&&********....&&&&********....&&&&********...2rU   c                  C   sV  t  td¡} t  td¡}t  tdtd¡}|  |¡|ks!J |  | ttf ¡| ttf ks2J | ttf  | ¡| ttf ksCJ |  |  tt¡¡|  tt¡ksTJ |  tt¡ | ¡|  tt¡kseJ |  |ttf ¡|ttf ksvJ | ttf  |¡|ttf ksJ |  | tt¡¡| tt¡ksJ |  tt¡ |¡| tt¡ks©J d S )Nr<   é   )r   rR   r   r8   r   r   rL   )Zsqrt5Zsqrt7Zsqrt57r:   r:   r;   Útest_Domain_unify_algebraic  s   """""""&rW   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sAJ | |¡|ksJJ | |¡|ksSJ | |¡|ks\J |  t¡| kseJ |  t¡|ksnJ | t¡|kswJ | 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¡|ksµJ | 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sJ | tt ¡|ks!J | tt ¡|ks-J | tttf ¡|ks;J t ttd d ttttf d}| tt ¡|ksXJ | tttf ¡|ksfJ | tttf ¡|kstJ | 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   "r\   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;   rA   f  ó    z0test_Domain_unify_with_symbols.<locals>.<lambda>c                   S   s   t  t ttf ttf¡S r6   )r   r]   r   r   r   r:   r:   r:   r;   rA   g  r^   )r1   r,   r:   r:   r:   r;   Útest_Domain_unify_with_symbolse  s   r_   c                   C   s  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 s0J dtttf v du s<J dtttf v du sHJ dtttf v du sTJ dt v du s\J dtv du sdJ dtv du slJ dtv du stJ 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 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 süJ tddt v du sJ tddtv du sJ tddtv du s J tddtv du s,J tddtv du s8J tddtv du sDJ tddtttf v du sTJ tddtttf v du sdJ tddtttf v du stJ tdd	t v du sJ tdd	tv du sJ tdd	tv du sJ tdd	tv du s€J 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 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 sIJ dt v du sRJ dtv du s[J dtv du sdJ dtv du smJ dtv du svJ 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	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	 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 sJ 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v du s:J t
dtv du sEJ t
dtttf v du sTJ t
dtttf v du scJ t
dtttf v du srJ 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 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 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 sJ tdtv du s&J tdtv du s1J tdtv du s<J tdtv du sGJ tdtttf v du sVJ tdtttf v du seJ tdtttf v du stJ td d t v du sJ td d tv du sJ td d tv du sJ td d tv du sšJ 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 s1J td td  tv du s@J td td  tv du sOJ td td  tv du s^J td td  tv du smJ td td  tv du s|J td td  tt v du sJ td td  tt v du sJ td td  tt 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 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éùÿÿÿé   éÿÿÿÿrV   Fr5   r<   g      @çëQž	@r4   é   )r   r   r   r   r   rF   r   r   r   r	   r   r   r   r:   r:   r:   r;   Útest_Domain__contains__i  sö         &&&""""""&&&6re   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 s5J tt t dt t¡v du sEJ tt t tdt ¡v du sUJ d S )Nr4   r5   rd   T)r   r   r   rL   r   r:   r:   r:   r;   Útest_issue_14433õ  s
   $, $rf   c                   C   s¢   t jdu sJ tdjdu sJ tdjdu sJ tjdu s J tjdu s'J tjdu s.J tjdu s5J tjdu s<J tt jdu sEJ t  	t¡jdu sOJ d S )NFr<   Té   )
r   Zis_Fieldr   r   r   r   r   rF   r   rL   r:   r:   r:   r;   Útest_Domain_is_fieldý  s   rh   c                   C   s"  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 s+J tttf jdu s6J t  t¡jdu s@J t t¡jdu sJJ t  tt¡jdu sUJ t tt¡jdu s`J tjdu sgJ tjdu snJ tjdu suJ 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s­J 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   )rF   Úget_ringr:   r:   r:   r;   rA   )  ó    z&test_Domain_get_ring.<locals>.<lambda>)r   Zhas_assoc_Ringr   r   r   rL   r   r   rF   ri   r1   r0   r:   r:   r:   r;   Útest_Domain_get_ring
  s4       rk   c                   C   s^  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jdu s#J tt jdu s,J tt jdu s5J tttf jdu s@J tttf jdu sKJ t  ¡ t ksSJ t ¡ tks[J t ¡ tkscJ t ¡ tkskJ t ¡ tkssJ 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s­J d S )NT)
r   Zhas_assoc_Fieldr   r   r   rF   r   r   Ú	get_fieldrL   r:   r:   r:   r;   Útest_Domain_get_field,  s$    $rm   c                  C   sH  t dtttttttt tt tt tt tt g} | D ]}| D ]}|t  	|¡|t ks/J |tt
f  	|¡|tt
f ks@J | t¡ 	|¡| t¡ksOJ | tt
¡ 	|¡| tt
¡ks`J | t¡ 	|¡| t¡ksoJ | tt
¡ 	|¡| tt
¡ksJ | t¡ 	|¡| t¡ksJ | tt
¡ 	|¡| tt
¡ks J q qd S )Nr<   )r   r   r   rF   r   r   r   r   r   Z
set_domainr   rL   Úold_poly_ringÚold_frac_field)ÚdomsZD1ZD2r:   r:   r;   Útest_Domain_set_domainB  s   4"""$øÿrq   c                  C   s|   t dttttg} ttg}| | D ]*}||t | t¡| 	t¡| 
t¡fD ]}|| v r3|jdu s2J q%|jdu s:J q%qd S )Nr<   TF)r   r   r   rF   r   r   r   r   rL   rn   ro   Zis_Exact)ÚexactZinexactÚDÚRr:   r:   r;   Útest_Domain_is_ExactP  s   (üÿru   c                   C   s8  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ks0J tt  ¡ tt ks<J tt  ¡ tt ksHJ tt  ¡ tt ksTJ tt  ¡ tt ks`J ttt	f  ¡ ttt	f kspJ 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 
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 
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¡ks8J t t¡ ¡ t t¡ksGJ t t¡ ¡ t t¡ksVJ t tt	¡ ¡ t tt	¡ksgJ 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¡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 tt	¡ks	J t tt	¡ ¡ t tt	¡ksJ d S r6   )r   Z	get_exactr   r   r   r   r"   rF   r   r   rL   rn   ro   r:   r:   r:   r;   Útest_Domain_get_exact[  sL         """""""""&rv   c                  C   sÔ   t ddft ddft ddffD ](\} }| | t |  t¡|  t¡|  t¡fD ]}|jdu s0J | ¡ |ks8J q'qttt	t
tfD ]&}||t | t¡| t¡| t¡fD ]}|jdu s^J | ¡ dksfJ qUqAd S )Nr5   r<   rV   FTr   )r   r   rL   rn   ro   Zhas_CharacteristicZeroZcharacteristicr   r   r!   r"   rF   )ÚFÚcrt   rs   r:   r:   r;   Útest_Domain_characteristic  s   *(þ(þÿry   c                     sö   g d¢} g d¢}g d¢}t t tt t t¡ dd | D |ks&J dd | D |ks1J fdd| D |ks>J  fdd| D |ksKJ fd	d| D |ksXJ  t¡d
u scJ    t¡d
u snJ  t¡du syJ d S )N)éþÿÿÿrb   r   rd   r4   )FTFTF)TTFTTc                 S   ó   g | ]	}t  t |¡qS r:   )r   Úis_unit©Ú.0Únr:   r:   r;   Ú
<listcomp>  ó    z'test_Domain_is_unit.<locals>.<listcomp>c                 S   r{   r:   )r   r|   r}   r:   r:   r;   r     r   c                    ó   g | ]	}    |¡qS r:   ©r|   r}   )ÚZZxr:   r;   r     r   c                    r   r:   r   r}   )ÚQQxr:   r;   r     r   c                    r   r:   r   r}   )ÚQQxfr:   r;   r     r   FT)r   r   r   rL   r|   )ÚnumsZinvringZinvfieldr:   )r   r   r   r;   Útest_Domain_is_unit  s   r   c                     sN  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@q:q4q*t  	d	¡t d
dksWJ t
dt\}
}t 	|| ¡dksiJ t 	|| |
 ¡ ¡dkswJ 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s€J t t ddt ¡tdks³J 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s%J d S )Nc                 S   s   t | trt |tr| j|jksJ n&t | tr&t |tr#| j|jks%J nt| t|u s9J d| ||||f | |ksHJ 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   rL   )rZ   Údomainsr:   r:   r;   Úcomposite_domains°  s
   ýz.test_Domain_convert.<locals>.composite_domainsr4   r5   gLoûñW5l   Ó$7ûq/ l                                r   r   rd   g      à?g      è?é   )r   rR   r   r   r"   r!   r   r   Ú	enumerateÚconvertr&   Ú	to_domainr   rL   r   r3   Ú
from_sympy)r   r   ZQQ2ZQQ3rp   Úir9   r   r   ZK4rt   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 ]'\}}ttfD ]}| 	| |¡¡}| ||¡|ksTJ | ||¡|ks^J q@q8d S )Nr5   rd   r4   )r   r   r!   r"   r   r   r   r   rF   r   r   Úto_sympyr   )Úelementsrt   ÚeZEEÚelemr:   r:   r;   Útest_EX_convertÝ  s"   



÷ýÿr¢   c                  C   sŸ   t  t¡} t t }|  t¡|  | t¡|¡ksJ | t¡| |  t¡| ¡ks)J t  tt¡} t t }|  t¡|  | t¡|¡ksCJ t tt¡} t t }|  t¡|  | t¡|¡ks]J d S r6   )r   rn   r   r   r   r   )r9   r   r:   r:   r;   Ú!test_GlobalPolynomialRing_convertò  s   
   $r£   c                  C   ó$   t dt\} t ¡ |  ¡ ksJ d S ©NÚ )r&   r   rT   r   )rt   r:   r:   r;   Útest_PolynomialRing__init  ó   r§   c                  C   r€   r¥   )r)   r   rL   r   )rw   r:   r:   r;   Útest_FractionField__init  rš   r©   c                  C   s`   t  t¡} |  t ddt ¡|  tdd¡ksJ t  t¡} |  tdt¡|  td¡ks.J d S )Nr4   r5   )r   rL   r   r   r   r   r   r   ©rZ   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s!J t  t¡ tt¡t  ttt¡ks3J ttdd  d S )Nc                   S   s   t t  t¡S r6   )r   r   Úinjectr:   r:   r:   r;   rA     rJ   ztest_inject.<locals>.<lambda>)r   r¬   r   r   r   rL   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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sNJ t t t  t¡t t ks]J t  t¡t  t¡t t ksmJ 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s£J tt fdd d S )Nr4   rd   rX   c                      ó
      t¡S r6   )Údropr   r:   ©r[   r:   r;   rA   (  rB   ztest_drop.<locals>.<lambda>)	r   r¯   r   r   rL   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 r+t| dks-J d S )N)rd   r4   r5   r   c                 s   ó    | ]}t  |¡V  qd S r6   ©r   Úof_type©r~   Úeltr:   r:   r;   Ú	<genexpr>.  ó    z"test_Domain_map.<locals>.<genexpr>c                 s   r²   r6   r³   rµ   r:   r:   r;   r·   2  rž   r   rd   )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 s0J tttf t ttf kdu s@J t  tt¡t  tt¡kdu sPJ t tt¡t tt¡kdu s`J t  tt¡t tt¡kdu spJ 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   rL   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sJ t td¡} | jjttd d ks1J | jtks8J |  td¡} | jjttd dtd   d ksSJ | jtksZJ d S ©Nr4   r5   r   é
   rd   )	r   rR   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s+J |jtks2J t | ¡}|jj| ks?J |jtksFJ | |¡}|jj|ksSJ |jtksZJ 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sJ t d¡}|jjttdks)J |jtks0J | d¡}t|j| jd us@J |jtksGJ d S )Né   r5   r   )	r   Zcyclotomic_fieldrÁ   rÂ   r   r(   rÃ   r   r%   )rZ   rw   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 s<J | ¡  ||  ¡ ¡|d d |d d  ksTJ | ¡  ||  ¡ ¡|d |d  kshJ t dt\} }}tdt\}}}|d |d  |d  }|d |d  d }|d |d  }| ¡  ||  ¡ ¡d u s€J | ¡  ||  ¡ ¡|d d |d d  ksŒJ | ¡  ||  ¡ ¡|d |d  ksÐJ d S )Núx,yr4   rd   r   )r)   r   r&   r   Zfrom_FractionFieldr   )	rw   r   r   rt   ÚXÚYrÆ   rÇ   rÈ   r:   r:   r;   Ú&test_PolynomialRing_from_FractionFields  s    0(0,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sZJ d S )NrÌ   r5   r4   r<   é   )r&   r   r)   r   r   Zfrom_PolynomialRing)rt   r   r   rw   rÍ   rÎ   rÆ   rÇ   r:   r:   r;   Ú&test_FractionField_from_PolynomialRing  s   08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   rd   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   rL   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sJ t  tj¡t  d¡ks(J t  td¡t  d¡ks6J t  td¡t  td ¡ ¡ksHJ d S )Nr   g        rd   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 ]$ | D ]tkr( tkr(q vs2J  ftt	 fdd qqd S )Nc                 S   s   g | ]}t |qS r:   )Úfloat)r~   r   r:   r:   r;   r   «  s    ÿz*test_not_in_any_domain.<locals>.<listcomp>r5   c                      s
      ¡S r6   )r   r:   ©rÃ   r   r:   r;   rA   ²  rB   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s"J | d}|  |¡r/|dks1J | d}|  |¡r>|dks@J | d}|  |¡rM|dksOJ | | d}|  |¡r^|dks`J | | d}|  |¡ro|dksqJ | | 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| 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 }|  |¡r2|dks4J | d| d }|  |¡rG|dksIJ | d| d }|  |¡r\|dks^J d| d }|  |¡ro|dksqJ | 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 }|  |¡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 }|  |¡r5|dks7J t d}|dd }| |¡rL|dksNJ |dd }| |¡r_|dksaJ t| dd	u slJ t| dd
u swJ t d  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 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rt    k k u sJ W d    n	1 sw   Y  t    kku s3J W d    n	1 s>w   Y  t    kku sVJ W d    n	1 saw   Y  t    kku syJ W d    n	1 sw   Y  qöt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   rd   r4   r   rV   l    hí] lýÿÿÿ hí] FTr<   rb   Zflintc                      ó    dd S )Nr   rb   r:   r:   ©rP   r:   r;   rA     ó    z%test_ModularInteger.<locals>.<lambda>c                      rÜ   )Nr<   rb   r:   r:   rÝ   r:   r;   rA     rÞ   c                   S   ó   t dS ©Nr   ©r   r:   r:   r:   r;   rA     rj   c                   S   rß   )NgÍÌÌÌÌÌ @rá   r:   r:   r:   r;   rA     rj   c                      s     k S r6   r:   r:   ©rP   Zn1Zn2r:   r;   rA   '  rM   c                      s     kS r6   r:   r:   râ   r:   r;   rA   (  rM   c                      s     kS r6   r:   r:   râ   r:   r;   rA   )  rM   c                      s     kS r6   r:   r:   râ   r:   r;   rA   *  rM   )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sJ 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sJ t ddks J t ddks(J t ddks0J d S )Nrc   çžÔ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 s*J t|jd}|| d dks:J ||d dksDJ d S )Nz1.01z1.0000000000000000000001é5   éP   rd   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sJ 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s?J t d	jdksHJ t d
jdksQJ t djdksZJ t djdkscJ t djdkslJ d S )Nrc   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                     s:
  t j} dd dd|  d|  dd|   fD \}}}}t ||¡|ks$J t ||¡|ks.J t ||¡|ks8J t ||¡|ksBJ tddtddksNJ tdddksWJ tt dd dt dd kshJ tdd ¡ dkssJ 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s§J ttfD ]n  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sJ   ddksJ   ddks'J d  d   kr< ddks?J  J d d   krS ddksVJ  J   ddksbJ d d   krv ddksyJ  J d  ddksJ d ksJ d    kr¢ ddks¥J  J d     kr» ddksŸJ  J d d   krÛtt dd t d d ksÞJ  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sJ td\}}d| | ks1J td\}}| |  ddksFJ  dd dd}}  ||¡\}}}|  ||¡kseJ || ||  |ksrJ 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sJ tt fd)d   t¡}t|ts-J |j ks5J t|jdkrG|jd  ¡ tksIJ  tu rm  ¡ }	t|	tsZJ |	jtksbJ |	j j!d | ksmJ  dd dd dd ddfD ]+}
  "|
¡d*u sJ   #|
¡d*u sJ   $|
¡d*u sJ   %|
¡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ksÛJ   |d|¡ ddksëJ qÊttfD ]$}  |dd¡ ddksJ   |dd|¡ ddksJ qñ tkr{t,d,ks$J d  ddks0J d  dd-ks<J d  ddksHJ d  ddksTJ | ddks^J | ddkshJ   -¡  ksqJ   .¡ tkszJ q«t,d.ksJ   -¡ tksJ   .¡  ksJ d  dt dd ksŠJ 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sJ q«d S )2Nc                 S   ó   g | ]}t  |¡qS r:   )r!   r   ©r~   r   r:   r:   r;   r   ^  ó    z)test_gaussian_domains.<locals>.<listcomp>r<   r4   r5   r   r   rb   z3 + 4*I)NN)r4   r   )r   r4   )r5   r   rd   rg   é   éüÿÿÿr`   é   é	   rÊ   iÿÿÿé,   é   c                      s    d S rà   r:   r:   ©Úqr:   r;   rA     rj   z'test_gaussian_domains.<locals>.<lambda>c                      s    d S rà   r:   r:   r  r:   r;   rA     rj   c                      s    d S rà   r:   r:   r  r:   r;   rA     rj   c                      ó
   t  dS rà   ©Údivmodr:   r  r:   r;   rA     rB   c                      r  rà   r	  r:   r  r:   r;   rA     rB   c                      s    t  S r6   ©r   r:   r  r:   r;   rA     rj   c                      s    t  S r6   r  r:   r  r:   r;   rA     rj   c                      s   t   S r6   r  r:   r  r:   r;   rA     rj   c                      s   t   S r6   r  r:   r  r:   r;   rA     rj   c                      s    t  S r6   r  r:   r  r:   r;   rA     rj   c                      s   t   S r6   r  r:   r  r:   r;   rA     rj   c                      s    t  S r6   r  r:   r  r:   r;   rA     rj   c                      s   t   S r6   r  r:   r  r:   r;   rA     rj   c                      s    t  S r6   r  r:   r  r:   r;   rA      rj   c                      s   t   S r6   r  r:   r  r:   r;   rA   ¡  rj   c                      r®   r6   )r   r
   r:   )ÚGr:   r;   rA   ¥  rB   FZgmpyz
ZZ_I(3, 4)rz   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#   rY   r»   ZgensZas_exprZas_AlgebraicFieldr    rÁ   ÚargsÚis_negativeÚis_positiveÚis_nonnegativeÚis_nonpositiver   r   r   r   r   r   Úreprri   rl   ZnumerÚdenom)r   rç   Úbrx   Údr   ÚrrÇ   ZPRZAFZqir   rZ   Úq2r:   )r  r  r;   Útest_gaussian_domains\  sà   ."(*
0...2@  *
(
(
$ &
 *.r!  c                   C   s  t jtju sJ t jtju sJ tdt d¡ksJ tdjtju s%J t dtju s.J dtt	t
t	  t	  tddt
    krQdt	t
t	  t	  ksTJ  J dt t	t
t	  t	  dt	t
t	  t	    krsdt
 ksvJ  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 sJ t  t j¡tju sŠJ ttdd  t  ¡ t ksµJ t  t¡t ksŸJ t t ¡t ksÇJ d S )Nrd   r4   c                   S   s
   t  g ¡S r6   )r   r   r:   r:   r:   r;   rA   ô  rB   ztest_EX_EXRAW.<locals>.<lambda>)r   r   r   rÔ   r   rÕ   r   Ú
ExpressionÚexr   r   r   r   r   r1   r.   rl   r8   r:   r:   r:   r;   Útest_EX_EXRAWã  s   LDr$  c                  C   s<   t dt tt dg} t| t dt dt tgksJ d S )Nrd   r5   )r   r   Úsorted)r   r:   r:   r;   Útest_EX_orderingü  s   &r&  c                  C   s  t ttfD ]} |  | d¡| dksJ |  | d¡| dks!J qttfD ]>} |  t¡}|  | d¡| dks:J |  | d| ¡| ksHJ |  | d ¡| dksVJ |  | d | ¡|ksdJ q&t t } |  | td ¡| dksxJ |  | t d ¡| dksJ tt } |  |  tt ¡¡tddksJ t 	tt
¡} |  t¡}|| | jks±J | j| || j  | ksÀJ d S )Nr4   rd   rz   rb   r   )r   r   r   Zcanonical_unitr!   r"   r   r   r   rL   r   r   )rZ   r   r:   r:   r;   Útest_canonical_unit  s$   
 "
"r'  c                  C   óH   t j} dd d|  dfD \}}t |¡dksJ t |¡dks"J d S )Nc                 S   rý   r:   ©r   r   rþ   r:   r:   r;   r     rÿ   z+test_Domain_is_negative.<locals>.<listcomp>r4   r<   F)r   r  r   r  ©r   rç   r  r:   r:   r;   Útest_Domain_is_negative  ó   r+  c                  C   r(  )Nc                 S   rý   r:   r)  rþ   r:   r:   r;   r   $  rÿ   z+test_Domain_is_positive.<locals>.<listcomp>r4   r<   F)r   r  r   r  r*  r:   r:   r;   Útest_Domain_is_positive"  r,  r-  c                  C   r(  )Nc                 S   rý   r:   r)  rþ   r:   r:   r;   r   +  rÿ   z.test_Domain_is_nonnegative.<locals>.<listcomp>r4   r<   F)r   r  r   r  r*  r:   r:   r;   Útest_Domain_is_nonnegative)  r,  r.  c                  C   r(  )Nc                 S   rý   r:   r)  rþ   r:   r:   r;   r   2  rÿ   z.test_Domain_is_nonpositive.<locals>.<listcomp>r4   r<   F)r   r  r   r  r*  r:   r:   r;   Útest_Domain_is_nonpositive0  r,  r/  c                  C   sJ   t t } |  t¡}|  td¡|d ksJ |  td¡|d ks#J d S )Nr5   )r   r   r   r   r   )rZ   ZeKr:   r:   r;   Útest_exponential_domain7  s   
r0  c                  C   s  t  td¡} | jjd u sJ ttddd}t  |¡} | jjjdks%J t j|dd} | jjjdks5J t  tdtd¡} | jjd u sGJ t  |td¡} | jjd u sWJ t jtdtddd} | jjjdkslJ t  |¡} |  | g d¢¡}|j|ju sJ d S )Nr4   Úalpha)ÚaliasÚthetar5   )rd   r4   r5   )r   rR   r   rÁ   r2  r   ÚnameZ
to_alg_num)Úkr1  Úbetar:   r:   r;   Útest_AlgebraicField_alias>  s    

r7  c                  C   sT  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 s9J t  t d¡t dksFJ t  t d¡du sQJ t  t d¡d u s\J t tdd¡du shJ t tdd¡td	dkswJ 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 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sJ t tdd¡du sJ t tdd¡d u s)J t td¡du s5J t td¡tdksCJ t td¡du sOJ tjt td¡tdddsaJ t td¡du smJ 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 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¡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 sJ t tdd¡tddks J td} |  | d¡du s0J |  | d¡| dks>J |  | d¡du sJJ |  | d¡| dksXJ td}| |d¡du shJ | |d¡|d	ksvJ | |d	¡du sJ | |d	¡d u sJ | |d¡du sJ | |d¡|dksšJ d S )Nr   Tr4   é*   Fr   rb   r  r5   é   r   i÷ÿÿÿr  é   r<   iðÿÿÿg      @g      @gÍ;f ö?rð   )Z	tolerancerd   éýÿÿÿrz   rV   )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   rR   rF   r8   rS   rU   rW   r\   r_   re   rf   rh   rk   rm   rq   ru   rv   ry   r   r   r¢   r£   r§   r©   r«   r­   r±   rœ   rŸ   rÅ   rÉ   rË   rÏ   rÑ   rÒ   rÓ   rÖ   rÛ   ré   rì   ró   rù   rü   r!  r$  r&  r'  r+  r-  r.  r/  r0  r7  r<  r:   r:   r:   r;   Ú<module>   s    ,8zy3 ")?
|	 !