U
    9%eF«  ã                   @   sè  d 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 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l3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZD e Eeded¡ZFdd ZGdd ZHdd ZIdd  ZJd!d" ZKd#d$ ZLd%d& ZMd'd( ZNd)d* ZOd+d, ZPd-d. ZQd/d0 ZRd1d2 ZSd3d4 ZTd5d6 ZUd7d8 ZVd9d: ZWd;d< ZXd=d> ZYd?d@ ZZdAdB Z[dCdD Z\dEdF Z]dGdH Z^dIdJ Z_dKdL Z`dMdN ZadOdP ZbdQdR ZcdSdT ZddUdV ZedWdX ZfdYdZ Zgd[d\ Zhd]d^ Zid_d` Zjdadb Zkdcdd Zldedf Zmdgdh Zndidj Zodkdl Zpdmdn Zqdodp Zrdqdr ZsdsS )tzPTests for classes defining properties of ground domains, e.g. ZZ, QQ, ZZ[x] ... é    )	ÚAlgebraicNumberÚEÚFloatÚIÚIntegerÚRationalÚooÚpiÚ_illegal)ÚS)Úexp)Úsqrt)Úsin)ÚPoly)ÚxÚyÚz)ÚHAS_GMPY)Ú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)Úcyclotomic_poly)Úfield)ÚFiniteExtension)ÚUnificationFailedÚGeneratorsErrorÚCoercionFailedÚNotInvertibleÚDomainError)Úraises)Úproducté   é   c                 C   s
   |   |¡S ©N)Úunify)ZK0ÚK1© r6   úe/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sympy/polys/domains/tests/test_domains.pyr4   )   s    r4   c                  C   sŽ	  t d} t| | | kstt| ttks,tt| ttks>tt| ttksPtt| ttksbtt| ttksttt| tt tt kstt| t 	t¡t 	t¡ks¬tt| t
t
ksŸttt| tksÐtttttksâtttttksôtttttkstttttkstttttks0ttttt tt ksLtttt 	t¡t 	t¡ksltttt
t
ksttt| tkstttttksštttttksŒtttttksÐtttttksätttttksøttttt tt kstttt 	t¡t 	t¡ks4tttt
t
ksHttt| tks\tttttksptttttkstttttksttttt ttdtd¡ksŸtttttksÒtttttksættttt tt ksttttt tt kstttt 	t¡t 	t¡ks>tttt 	t¡t 	t¡ks^tttt
t
ksrttt| tkstttttkstttttks®tttttksÂttttt ttdtd¡ksètttttksütttttksttttt tt ks,ttttt tt ksHttttt tt ksdttttt tt kstttt 	t¡t 	t¡ks tttt 	t¡t 	t¡ksÀtttt 	t¡t 	t¡ksàtttt 	t¡t 	t¡ks tttt
t
ksttt| tks(tttttks<tttttksPtttttksdtttttksxtttttksttttt tt ksštttt 	t¡t 	t¡ksÈtttt
t
ksÜttt  t 	t¡¡t 	tt¡ksttt| tkstttttks*tttttks>tttttksRtttttksftttttkszttttt tt kstttt 	t¡t 	t¡ks¶tttt
t
ksÊtttt | tt ksætttt ttt kstttt ttt kstttt ttt ks:tttt ttt ksVtttt ttt ksrtttt tt tt kstttt t 	t¡t 	t¡ks¶tttt t
t
ksÎttt 	t¡| t 	t¡ksîttt 	t¡tt 	t¡ksttt 	t¡tt 	t¡ks.ttt 	t¡tt 	t¡ksNttt 	t¡tt 	t¡ksnttt 	t¡tt 	t¡ksttt 	t¡tt t 	t¡ks²ttt 	t¡t 	t¡t 	t¡ksØttt 	t¡t
t
ksòttt
| t
k	sttt
tt
k	sttt
tt
k	s.ttt
tt
k	sBttt
tt
k	sVttt
tt
k	sjttt
tt t
k	sttt
t 	t¡t
k	sttt
t
t
k	s°td S )Nr2   r1   )r   r4   ÚAssertionErrorr   r   ÚALGr   r   r   Ú
frac_fieldr   r!   r"   Úalgebraic_fieldr   r   r   )ÚF3r6   r6   r7   Útest_Domain_unify,   sÌ      &  &     &  $      $&r=   c                   C   sŽ  t t t¡tt t¡kstt t t¡tt t¡ks<tt t t¡tt t¡ksZtt t t¡tt t¡ksxtt tt t¡t t¡kstt tt t¡t t¡ksŽtt tt t¡t t¡ksÒtt tt t¡t t¡ksðtt t tt¡tt tt¡kstt t tt¡tt tt¡ks8tt t tt¡tt tt¡ks\tt t tt¡tt tt¡kstt tt tt¡t tt¡ks€tt tt tt¡t tt¡ksÈtt tt tt¡t tt¡ksìtt tt tt¡t tt¡kstt t t¡tt t¡ks0tt t t¡tt t¡ksPtt t t¡tt t¡ksptt t t¡tt t¡kstt tt t¡t t¡ks°tt tt t¡t t¡ksÐtt tt t¡t t¡ksðtt tt t¡t t¡kstt t tt¡tt tt¡ks4tt t tt¡tt tt¡ksXtt t tt¡tt tt¡ks|tt t tt¡tt tt¡ks tt tt tt¡t tt¡ksÄtt tt tt¡t tt¡ksètt tt tt¡t tt¡kstt tt tt¡t tt¡ks0tt t t¡t t¡t t¡ksVtt t t¡t t¡t t¡ks|tt t t¡t t¡t t¡ks¢tt t t¡t t¡t t¡ksÈtt t tt¡t t¡t tt¡ksòtt t tt¡t t¡t tt¡kstt t tt¡t t¡t tt¡ksFtt t tt¡t t¡t tt¡ksptt t t¡t tt¡t tt¡kstt t t¡t tt¡t tt¡ksÄtt t t¡t tt¡t tt¡ksîtt t t¡t tt¡t tt¡kstt t tt¡t tt¡t ttt¡ksFtt t tt¡t tt¡t ttt¡ksttt t tt¡t tt¡t ttt¡ks¢tt t tt¡t tt¡t ttt¡ksÐtt t t¡t t¡t t¡ksött t t¡t t¡t t¡kstt t t¡t t¡t t¡ksBtt t t¡t t¡t t¡kshtt t tt¡t t¡t tt¡kstt t tt¡t t¡t tt¡ksŒtt t tt¡t t¡t tt¡ksætt t tt¡t t¡t tt¡kstt t t¡t tt¡t tt¡ks:tt t t¡t tt¡t tt¡ksdtt t t¡t tt¡t tt¡kstt t t¡t tt¡t tt¡ksžtt t tt¡t tt¡t ttt¡ksætt t tt¡t tt¡t ttt¡k	stt t tt¡t tt¡t ttt¡k	sBtt t tt¡t tt¡t ttt¡k	sptt t t¡t t¡t t¡k	stt t t¡t t¡t t¡k	sŒtt t t¡t t¡t t¡k	sâtt t t¡t t¡t t¡k
stt t tt¡t t¡t tt¡k
s2tt t tt¡t t¡t tt¡k
s\tt t tt¡t t¡t tt¡k
stt t tt¡t t¡t tt¡k
s°tt t t¡t tt¡t tt¡k
sÚtt t t¡t tt¡t tt¡kstt t t¡t tt¡t tt¡ks.tt t t¡t tt¡t tt¡ksXtt t tt¡t tt¡t ttt¡kstt t tt¡t tt¡t ttt¡ksŽtt t tt¡t tt¡t ttt¡ksâtt t tt¡t tt¡t ttt¡kstt t t¡t t¡t t¡ks6tt t t¡t t¡t t¡ks\tt t t¡t t¡t t¡kstt t t¡t t¡t t¡ksštt t tt¡t t¡t tt¡ksÒtt t tt¡t t¡t tt¡ksütt t tt¡t t¡t tt¡ks&tt t tt¡t t¡t tt¡ksPtt t t¡t tt¡t tt¡ksztt t t¡t tt¡t tt¡ks€tt t t¡t tt¡t tt¡ksÎtt t t¡t tt¡t tt¡ksøtt t tt¡t tt¡t ttt¡ks&tt t tt¡t tt¡t ttt¡ksTtt t tt¡t tt¡t ttt¡kstt t tt¡t tt¡t ttt¡ks°td S r3   )	r4   r   Ú	poly_ringr   r8   r   r   r:   r   r6   r6   r6   r7   Útest_Domain_unify_composite   sÀ    $$$$$$$$        $$$$$$$$&&&&********....&&&&********....&&&&********....&&&&********...r?   c                  C   s\  t  td¡} t  td¡}t  tdtd¡}|  |¡|ksBt|  | ttf ¡| ttf ksdt| ttf  | ¡| ttf kst|  |  tt¡¡|  tt¡ksšt|  tt¡ | ¡|  tt¡ksÊt|  |ttf ¡|ttf ksìt| ttf  |¡|ttf kst|  | tt¡¡| tt¡ks4t|  tt¡ |¡| tt¡ksXtd S )Né   é   )r   r;   r   r4   r8   r   r   r:   )Zsqrt5Zsqrt7Zsqrt57r6   r6   r7   Útest_Domain_unify_algebraic  s    """""$$rB   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t| |¡|kst| |¡|ksŠt| |¡|ksžt|  t¡| ksÊt|  t¡|ksÜt| t¡|ksît| t¡|kst|  tt ¡|kst|  tt ¡|ks2t| tt ¡|ksJt| tt ¡|ksbt| t¡|ksvt| t¡|kst| t¡|kst| t¡|ks²t| tt ¡|ksÊt| tt ¡|ksât| tt ¡|ksút| tt ¡|kstt ttd d ttt d}| t¡|ksDt| tt ¡|ks\t| tt ¡|kstt| tttf ¡|kstt ttd d ttttf d}| tt ¡|ksÊt| tttf ¡|ksæt| tttf ¡|kst| ttttf ¡|ks t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t| |¡|kst| |¡|ksªt| |¡|ksŸtd S )Nr1   ©Údomain)	r)   r   r   r   r   r   r4   r8   r   )	ZKxZZZKxQQZKxZZyZKxQQyÚKZKzZKxÚKyZKxyr6   r6   r7   Ú!test_Domain_unify_FiniteExtension*  sR    "rG   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 r3   )r   r   r   Úunify_with_symbolsr   r6   r6   r6   r7   Ú<lambda>^  ó    z0test_Domain_unify_with_symbols.<locals>.<lambda>c                   S   s   t  t ttf ttf¡S r3   )r   rH   r   r   r   r6   r6   r6   r7   rI   _  rJ   )r/   r*   r6   r6   r6   r7   Útest_Domain_unify_with_symbols]  s    rK   c                   C   s   dt kdkstdtkdks tdtkdks0tdtkdks@tdtkdksPtdtkdks`tdtttf kdksxtdtttf kdkstdtttf kdksštdt kdksžtdtkdksÈtdtkdksØtdtkdksètdtkdksøtdtkdks
tdtttf kdks$tdtttf kdks>tdtttf kdksXtdt kdksjtdtkdks|tdtkdkstdtkdks tdtkdks²tdtkdksÄtdtttf kdksÞtdtttf kdksøtdtttf kdkstt	ddt kdks*tt	ddtkdksBtt	ddtkdksZtt	ddtkdksrtt	ddtkdkstt	ddtkdks¢tt	ddtttf kdksÂtt	ddtttf kdksâtt	ddtttf kdkstt	dd	t kdkstt	dd	tkdks2tt	dd	tkdksJtt	dd	tkdksbtt	dd	tkdksztt	dd	tkdkstt	dd	tttf kdks²tt	dd	tttf kdksÒtt	dd	tttf kdksòtd
t kdkstd
tkdkstd
tkdks(td
tkdks:td
tkdksLtd
tkdks^td
tttf kdksxtd
tttf kdkstd
tttf kdks¬tdt kdksŸtdtkdksÐtdtkdksâtdtkdksôtdtkdkstdtkdkstdtttf kdks2tdtttf kdksLtdtttf kdksftt
tkdksxtt
tttf kdkstt
tttf kdks¬tt
 tkdksÀtt
 tkdksÔtt
 tkdksètt
 tttf kdkstt
 tttf kdks ttdt kdks6ttdtkdksLttdtkdksbttdtkdksxttdtkdksttdtkdks€ttdtttf kdksÂttdtttf kdksàttdtttf kdksþtdtd d t kdkstdtd d tkdks:tdtd d tkdksXtdtd d tkdksvtdtd d tkdkstdtd d tkdks²tdtd d tttf kdksØtdtd d tttf kdksþtdtd d tttf kdks$ttdt kdks:ttdtkdksPttdtkdksfttdtkdks|ttdtkdksttdtkdksšttdtttf kdksÆttdtttf kdksättdtttf kdk	sttd d t kdk	sttd d tkdk	s6ttd d tkdk	sPttd d tkdk	sjttd d tkdk	sttd d tkdk	sttd d tt kdk	sŒttd d tt kdk	sÚttd d tt kdk	søttd d tttf kdk
sttd d tttf kdk
s<ttd d tttf kdk
s^ttd td  t kdk
s|ttd td  tkdk
sttd td  tkdk
sžttd td  tkdk
sÖttd td  tkdk
sôttd td  tkdksttd td  tt kdks4ttd td  tt kdksVttd td  tt kdksxttd td  tttf kdksttd td  tttf kdksÄttd td  tttf kdksêtt	ddt td  t ttttf kdkstd S )Nr   Téùÿÿÿé   éÿÿÿÿrA   Fr2   r@   g      @çëQž	@r1   é   )r   r8   r   r   r   r   r9   r   r   r   r   r   r   r   r6   r6   r6   r7   Útest_Domain__contains__a  sö          &&&""""""&&&rQ   c                   C   s®   t ddt t dt ¡kdks$tdt t t¡kdks>ttd td  t dt dt ¡kdksjttt t dt t¡kdksttt t tdt ¡kdksªtd S )Nr1   r2   rP   T)r   r   r   r:   r8   r   r6   r6   r6   r7   Útest_issue_14433í  s
    $, rR   c                   C   s6  t jdksttjdkstt t jdks.ttt jdks@tt ttf jdksVttttf jdksltt  t¡jdkstt t¡jdkstt  tt¡jdksªtt tt¡jdksÀttjdksÎttjdksÜtt	jdksêtt  
¡ t ksútt 
¡ t kstt t  
¡ t t ks&ttt  
¡ tt ks@tt ttf  
¡ t ttf ksbttttf  
¡ tttf kstt  t¡ 
¡ t t ks tt t¡ 
¡ tt ksŒtt  tt¡ 
¡ t ttf ksÞtt tt¡ 
¡ tttf ks tt 
¡ tkstt 
¡ tks$tttdd  d S )NTFc                   S   s   t  ¡ S r3   )r9   Úget_ringr6   r6   r6   r7   rI     rJ   z&test_Domain_get_ring.<locals>.<lambda>)r   Zhas_assoc_Ringr8   r   r   r   r:   r   r   r9   rS   r/   r.   r6   r6   r6   r7   Útest_Domain_get_ringõ  s4    """"rT   c                   C   sf  t jdksttjdksttjdks*ttjdks8ttjdksFttt jdksXttt jdksjttttf jdksttttf jdkstt  	¡ t ksŠtt 	¡ tks¶tt 	¡ tksÆtt 	¡ tksÖtt 	¡ tksættt  	¡ t 
t¡ksttt  	¡ t 
t¡ksttttf  	¡ t 
tt¡ks@ttttf  	¡ t 
tt¡ksbtd S )NT)r   Zhas_assoc_Fieldr8   r   r   r   r9   r   r   Ú	get_fieldr:   r6   r6   r6   r7   Útest_Domain_get_field  s$    "rV   c                   C   s@  t  ¡ t kstt ¡ tks tt ¡ tks0tt ¡ tks@tt ¡ tksPttt  ¡ tt kshttt  ¡ tt ksttttf  ¡ tttf ks ttttf  ¡ tttf ksÀtt 	t¡ ¡ t 	t¡ksÜtt 	t¡ ¡ t 	t¡ksøtt 	tt¡ ¡ t 	tt¡kstt 	tt¡ ¡ t 	tt¡ks<td S r3   )
r   Z	get_exactr8   r   r   r   r9   r   r   r:   r6   r6   r6   r7   Útest_Domain_get_exact-  s      "rW   c                     s
  dddddg} dddddg}dddddg}t t tt t t¡   dd	 | D |ks^td
d	 | D |ksttfdd	| D |kst fdd	| D |ksštfdd	| D |ksÂt t¡dksØt   t¡dksît t¡dkstd S )NéþÿÿÿrN   r   rP   r1   FTc                 S   s   g | ]}t  t |¡qS r6   )r   Úis_unit©Ú.0Únr6   r6   r7   Ú
<listcomp>B  s     z'test_Domain_is_unit.<locals>.<listcomp>c                 S   s   g | ]}t  t |¡qS r6   )r   rY   rZ   r6   r6   r7   r]   C  s     c                    s   g | ]}    |¡qS r6   ©rY   rZ   )ÚZZxr6   r7   r]   D  s     c                    s   g | ]}    |¡qS r6   r^   rZ   )ÚQQxr6   r7   r]   E  s     c                    s   g | ]}    |¡qS r6   r^   rZ   )ÚQQxfr6   r7   r]   F  s     )r   r   r   r:   r8   rY   )ÚnumsZinvringZinvfieldr6   )r`   ra   r_   r7   Útest_Domain_is_unit=  s    rc   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®t
tdt\}
}t 	|| ¡dksÒt
t 	|| |
 ¡ ¡dksît
t 	tdd¡tddkst
t 	tdd¡tddks.t
t  t¡}t t¡}t t }tt }	||||	g}t||D ],\}}| | t¡|¡| t¡ksht
qh| t ddt ¡|t ddksŒt
d S )Nc                 S   sH   t | t |ks&td| ||||f | |ksDtd| ||||f d S )Nz%s, %s: %s %s -> %s)Útyper8   )Úe1Úe2r5   ÚK2ÚK3r6   r6   r7   Úcheck_elementN  s    &z*test_Domain_convert.<locals>.check_elementc                    s~   |   |¡} | | j| ¡|j| ||  | |j|¡|j| ||  | | j| ¡|j| ||  | |j|¡|j| || d S r3   )r4   Úconvert_fromÚoneÚzero)r5   rg   rh   ©ri   r6   r7   Úcheck_domainsR  s
    
z*test_Domain_convert.<locals>.check_domainsc              
   S   s:   | | t  | t | t tf |  t ¡|  t¡|  t t¡g}|S r3   )r   r   r:   )rE   Údomainsr6   r6   r7   Úcomposite_domainsY  s      
  
ýz.test_Domain_convert.<locals>.composite_domainsr1   r2   gLoûñW5l   Ó$7ûq/ l                                r   r   rP   )r   r;   r   r   r"   r!   r   r   Ú	enumerateÚconvertr8   r&   Ú	to_domainr:   r   r0   rj   Ú
from_sympy)rn   rp   ZQQ2ZQQ3ZdomsÚir5   rg   rh   ZK4ÚRZxrZKsZKaZKbr6   rm   r7   Útest_Domain_convertL  s2    
  

&rw   c                  C   sŸ   t  t¡} t t }|  t¡|  | t¡|¡ks2t| t¡| |  t¡| ¡ksRtt  tt¡} t t }|  t¡|  | t¡|¡kstt tt¡} t t }|  t¡|  | t¡|¡ksºtd S r3   )r   Zold_poly_ringr   rr   r8   r   r   )r5   rg   r6   r6   r7   Ú!test_GlobalPolynomialRing_convert  s    
   rx   c                  C   s$   t dt\} t ¡ |  ¡ ks td S ©NÚ )r&   r   r>   rs   r8   )rv   r6   r6   r7   Útest_PolynomialRing__init  s    r{   c                  C   s$   t dt\} t ¡ |  ¡ ks td S ry   )r(   r   r:   rs   r8   )ÚFr6   r6   r7   Útest_FractionField__init  s    r}   c                  C   s`   t  t¡} |  t ddt ¡|  tdd¡ks0tt  t¡} |  tdt¡|  td¡ks\td S )Nr1   r2   )	r   r:   r   rr   rt   r   r8   r   r   ©rE   r6   r6   r7   Útest_FractionField_convert  s    
&
r   c                   C   sx   t  ttt¡t tttf ks tt t  tt¡t tttf ksBtt  t¡ tt¡t  ttt¡ksftttdd  d S )Nc                   S   s   t t  t¡S r3   )r   r   Úinjectr6   r6   r6   r7   rI   §  rJ   ztest_inject.<locals>.<lambda>)	r   r   r   r   r   r8   r:   r/   r+   r6   r6   r6   r7   Útest_inject£  s     "$r   c                     s^  t  t¡t kstt t  t¡t ks(tt ttf  t¡t t ksFtt  t¡ t¡t ks^tt  tt¡ t¡t  t¡ks~tt t t  t¡t t kstt t t  t¡t t ksºtt  t¡t  t¡t t ksÚtt  t¡t  t¡t  t¡ksüttttd d tt t d tttd d tt d}   t¡| ksHttt	 fdd d S )Nr1   rP   rC   c                      s
      t¡S r3   )Údropr   r6   ©rF   r6   r7   rI   ·  rJ   ztest_drop.<locals>.<lambda>)
r   r   r   r8   r   r:   r)   r   r/   r+   r~   r6   r   r7   Ú	test_dropª  s      "r   c                  C   sf   t  ddddg¡} tdd | D s(tt  ddddgg¡} tdd | d D r^t| dksbtd S )	NrP   r1   r2   é   c                 s   s   | ]}t  |¡V  qd S r3   ©r   Úof_type©r[   Úeltr6   r6   r7   Ú	<genexpr>œ  s     z"test_Domain_map.<locals>.<genexpr>c                 s   s   | ]}t  |¡V  qd S r3   r   r   r6   r6   r7   r   Á  s     r   )r   ÚmapÚallr8   Úlen)Úseqr6   r6   r7   Útest_Domain_mapº  s    r   c                   C   s  t ttf t ttf kdks ttttf tttf kdks@tt ttf tttf kdks`ttttf t ttf kdkstt  tt¡t  tt¡kdks tt tt¡t tt¡kdksÀtt  tt¡t tt¡kdksàtt tt¡t  tt¡kdkstt t tt kstd S )NTF)r   r   r   r8   r   r:   r$   r   r6   r6   r6   r7   Útest_Domain___eq__Ä  s           "r   c                  C   sž   t  td¡} | jjttd d ks*t| jt	ks8tt	 td¡} | jjttd d ksbt| jt	kspt|  td¡} | jjttd dtd   d ksŠt| jt	ksŽtd S ©Nr1   r2   r   é
   rP   )
r   r;   r   ÚextÚminpolyr   r   r8   Údomr   )Úalgr6   r6   r7   Útest_Domain__algebraic_fieldÔ  s    (r   c                  C   sž   t td d } t td d }t td dtd   d }t | ¡}|jj| ksVt|jtksdtt | ¡}|jj| ks~t|jtkst| |¡}|jj|ksŠt|jtksŽtd S r   )	r   r   r   Zalg_field_from_polyr   r   r8   r   r   )ÚfÚgÚhr   r6   r6   r7   Útest_Domain_alg_field_from_polyâ  s    


r   c                  C   s   t  d¡} | jjttdks"t| jtks0tt d¡}|jjttdksRt|jtks`t| d¡}t	|j| jd k	st|jtkstd S )Né   r2   r   )
r   Zcyclotomic_fieldr   r   r   r'   r8   r   r   r%   )rE   r|   r   r6   r6   r7   Útest_Domain_cyclotomic_fieldô  s    


r   c            	      C   sª  t dt\} }}tdt\}}}|d |d  |d  }|d |d  d }|d |d  }| ¡  ||  ¡ ¡d ksxt| ¡  ||  ¡ ¡|d d |d d  ksšt| ¡  ||  ¡ ¡|d |d  ksÐtt dt\} }}tdt\}}}|d |d  |d  }|d |d  d }|d |d  }| ¡  ||  ¡ ¡d ksJt| ¡  ||  ¡ ¡|d d |d d  ks|t| ¡  ||  ¡ ¡|d |d  ksŠtd S )Núx,yr1   rP   r   )r(   r   r&   rs   Zfrom_FractionFieldr8   r   )	r|   r   r   rv   ÚXÚYr   r   r   r6   r6   r7   Ú&test_PolynomialRing_from_FractionField  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t| ¡  ||  ¡ ¡d|d  d|d   d ksŽtd S )Nr   r2   r1   r@   é   )r&   r   r(   r   rs   Zfrom_PolynomialRingr8   )rv   r   r   r|   r   r    r   r   r6   r6   r7   Ú&test_FractionField_from_PolynomialRing  s    0r£   c                   C   s^   t d t dd¡dkstt d t dd¡dks<tt d t dd¡dksZtd S )Nr2   rP   Tr@   rA   F)r   r   r8   r6   r6   r6   r7   Útest_FF_of_type#  s    r€   c                   C   s0   t t tt krtt  t¡t t¡kr,td S r3   )r   r   r   r8   r:   r6   r6   r6   r7   Útest___eq__)  s    r¥   c                   C   s   t  tj¡t  d¡kstt  td¡t  d¡ks6tt  tj¡t  d¡ksPtt  td¡t  d¡ksltt  td¡t  td ¡ ¡kstd S )Nr   g        rP   g      ð?)	r   rr   r   ÚZeroÚdtyper8   ÚOner   Zevalfr6   r6   r6   r7   Ú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: ksdt ft	t
 fdd q:q2d S )Nc                 S   s   g | ]}t |qS r6   )Úfloat)r[   ru   r6   r6   r7   r]   7  s    z*test_not_in_any_domain.<locals>.<listcomp>r2   c                      s
      ¡S r3   )rr   r6   ©r   ru   r6   r7   rI   >  rJ   z(test_not_in_any_domain.<locals>.<lambda>)Úlistr
   r   r   r   r   r   r   r8   r/   r,   )Úcheckr6   r«   r7   Útest_not_in_any_domain6  s    
ÿr®   c                     s
  t d} | d}t|| jr$|dks(t| d}t|| jrD|dksHt| d}t|| jrd|dksht| d}t|| jr|dkst| d}t|| jr€|dksšt| | d}t|| jrÈ|dksÌt| | d}t|| jrì|dksðt| | d}t|| jr|dkst| | d}t|| jr<|dks@t| | d}t|| jrd|dksht| d }t|| jr|dkst| d }t|| jr°|dksŽtd| d }t|| jrØ|dksÜt| dd }t|| jr |dkst| d| d }t|| jr,|dks0t| d| d }t|| jrX|dks\td| d }t|| jr|dkst| dd }t|| jrš|dks¬t| d| d }t|| jrÔ|dksØt| d| d }t|| jr |dkstd| d }t|| jr(|dks,t| dd }t|| jrP|dksTt| d| d }t|| jr||dkst| d| d }t|| jrš|dks¬td| d }t|| jrÐ|dksÔt| dd }t|| jrø|dksüt| d| d }t|| jr$|dks(t| d| d }t|| jrP|dksTtd| d }t|| jrx|dks|t| dd }t|| jr |dks€t| d| d }t|| jrÌ|dksÐt| d| d }t|| jrø|dksüt| dd }t|| jr |dks$t| dd }t|| jrH|dksLt| dd }t|| jrp|dksttt d}|dd }t||jr |dks€t|dd }t||jrÈ|dksÌt|dtd }t||jrô|dksøtt| dd	kstt| dd
ks$tt d  dd }t| jrP|dksTt dd }t| jrx|dks|t dd }t| jr |dks€t dd }t| jrÈ|dksÌt d dk d
ksæt d dkd
ks t d dkd	kst d dkd	ks4t d dk d	ksNt d dkd	ksht d dkd
kst d dkd
kst d dk d
ks¶t d dkd
ksÐt d dkd	ksêt d dkd	kst d dk d	kst d dkd	ks8t d dkd
ksRt d dkd
kslt ddk d
kst ddkd
kst ddkd	ks®t ddkd	ksÄt ddk d	ksÚt ddkd	ksðt ddkd
k	st ddkd
k	st ddk d
k	s2t ddkd
k	sHt ddkd	k	s^t ddkd	k	stt ddk d	k	st ddkd	k	s t ddkd
k	s¶t ddkd
k	sÌttt fdd tt fdd ttdd  ttdd  d S )Nr2   r   rP   r1   r   rA   l    hí] lýÿÿÿ hí] FTr@   rN   c                      s    dd S )Nr   rN   r6   r6   ©ZF5r6   r7   rI   Ò  rJ   z%test_ModularInteger.<locals>.<lambda>c                      s    dd S )Nr@   rN   r6   r6   r¯   r6   r7   rI   Ó  rJ   c                   S   s   t dS ©Nr   ©r   r6   r6   r6   r7   rI   Õ  rJ   c                   S   s   t dS )NgÍÌÌÌÌÌ @r±   r6   r6   r6   r7   rI   Ö  rJ   )	r   Ú
isinstancer§   r8   r   Úboolr/   r-   Ú
ValueError)r<   ÚaZF7r6   r¯   r7   Útest_ModularIntegerA  sú    

r¶   c                   C   s<   t tdd dd dkstt tdd ddks8td S )Nr1   iÐ  r2   iâ  ió éd   l   UUª*UUª*UUª*U)Úintr   r8   r6   r6   r6   r7   Útest_QQ_intØ  s    r¹   c                   C   sd   t ddkstt ddks tt ddks0tt ddks@tt ddksPtt ddks`td S )NrO   çžÔJzî5çvIhÂ%<=ç+¡=çVç¯Ò<ç#B¡Ç;çWw'&l¡7)r   r8   r6   r6   r6   r7   Útest_RR_doubleÜ  s    rÀ   c                  C   s   t d} t d}| jdkst|jdks,tt| d dks@tt|d dk sTtt|jd}|| d dkstt||d dkstd S )Nz1.01z1.0000000000000000000001é5   éP   rP   rº   )Úprec)r   Z_precr8   r   r$   )Úf1Úf2ZRR2r6   r6   r7   Útest_RR_Floatä  s    rÆ   c                   C   sÜ   t djdkstt djdks$tt djdks6tt djdksHtt djdksZtt djdksltt djdks~tt d	jdkstt d
jdks¢tt djdksŽtt djdksÆtt djdksØtd S )NrO   rº   r»   rŒ   rœ   rŸ   r¿   y        ëQž	@y        vIhÂ%<=y        +¡=y        Vç¯Ò<y        #B¡Ç;y        Ww'&l¡7)r   Úrealr8   Úimagr6   r6   r6   r7   Útest_CC_doubleñ  s    rÉ   c                     sÜ	  t j} dd dd|  d|  dd|   fD \}}}}t ||¡|ksHtt ||¡|ks\tt ||¡|ksptt ||¡|ksttddtddksttdddks®ttt dd dt dd ksÐttdd ¡ dksættdd ¡ dksütt t	dd¡tt	ddt	dks&tt t	ddt	¡tt	ddt	dksRtttfD ]z  ddt
d	ks|t ¡  kst t¡d
ks¢t d¡dks¶t d|  ¡dksÎtttdksät dd ddksþt dd ddkst dd dks0t  ddksHt  ddks`td  d   kr ddksn td d   krŽ ddksºn t  ddksÒtd d   krø ddksþn td  ddkstd ks(td    krN ddksTn td     kr~ ddksn td d   krŒtt dd t d d ksÂn td tddksÚtd tt dd dksútd tdt dd kstd tt dd t d d ksDttd\}}d| | kshttd\}}| |  ddkst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Ÿt   dd¡t dksÜttt fd)d   t¡}t|tst|j kstt|jdkr<|jd  ¡ tks@t tkr  ¡ }t|tsbt|jt	ksrt|j j!d | kst dd dd dd ddfD ]V}	  "|	¡d*ksÄt  #|	¡d*ksØt  $|	¡d*ksìt  %|	¡d*ks¬tq¬t& t' tt	| g}
t(r.|
t) t* g7 }
|
D ]D}  |d¡ ddksTt  |d|¡ ddks2tq2ttfD ]H}  |dd¡ ddks€t  |dd|¡ ddkstq tkrt+d+ksætd  ddksþtd  dd,kstd  ddks.td  ddksFt| ddksZt| ddksnt  ,¡  kst  -¡ tk	sÔtqZt+d-ksšt  ,¡ tksºt  -¡  ksÌtd  dt dd ksìtd  t d.d t d/ d k	std  ddk	s.td  ddk	sFt| t dd t d d k	stt |f| ddk	st t dd t dd }  .|¡tdd0k	sŒt  /|¡tdksZtqZd S )1Nc                 S   s   g | ]}t  |¡qS r6   )r!   rr   ©r[   r   r6   r6   r7   r]     s     z)test_gaussian_domains.<locals>.<listcomp>r@   r1   r2   r   r   rN   z3 + 4*I)NN)r1   r   )r   r1   )r2   r   rP   é   é   éüÿÿÿrL   é   é	   r   iÿÿÿé,   é   c                      s    d S r°   r6   r6   ©Úqr6   r7   rI   3  rJ   z'test_gaussian_domains.<locals>.<lambda>c                      s    d S r°   r6   r6   rÒ   r6   r7   rI   4  rJ   c                      s    d S r°   r6   r6   rÒ   r6   r7   rI   5  rJ   c                      s
   t  dS r°   ©Údivmodr6   rÒ   r6   r7   rI   6  rJ   c                      s
   t  dS r°   rÔ   r6   rÒ   r6   r7   rI   7  rJ   c                      s    t  S r3   ©r   r6   rÒ   r6   r7   rI   8  rJ   c                      s    t  S r3   rÖ   r6   rÒ   r6   r7   rI   9  rJ   c                      s   t   S r3   rÖ   r6   rÒ   r6   r7   rI   :  rJ   c                      s   t   S r3   rÖ   r6   rÒ   r6   r7   rI   ;  rJ   c                      s    t  S r3   rÖ   r6   rÒ   r6   r7   rI   <  rJ   c                      s   t   S r3   rÖ   r6   rÒ   r6   r7   rI   =  rJ   c                      s    t  S r3   rÖ   r6   rÒ   r6   r7   rI   >  rJ   c                      s   t   S r3   rÖ   r6   rÒ   r6   r7   rI   ?  rJ   c                      s    t  S r3   rÖ   r6   rÒ   r6   r7   rI   @  rJ   c                      s   t   S r3   rÖ   r6   rÒ   r6   r7   rI   A  rJ   c                      s
      t¡S r3   )rt   r	   r6   )ÚGr6   r7   rI   E  rJ   Fz
ZZ_I(3, 4)rX   z
QQ_I(3, 4)é$   é0   r   )0r   ÚImaginaryUnitr!   Úgcdr8   Zlcmr"   Zquadrantrr   r   ÚstrÚparentZ_get_xyr	   ÚhashrÕ   r/   ÚZeroDivisionErrorÚ	TypeErrorrt   Úto_sympyr,   r   r   r²   r#   rD   r   ZgensZas_exprZas_AlgebraicFieldr    r   ÚargsÚis_negativeÚis_positiveÚis_nonnegativeÚis_nonpositiver   r   r   r   r   ÚreprrS   rU   ZnumerÚdenom)r   rµ   ÚbÚcÚdru   ÚrZPRZAFZqiro   rE   Úq2r6   )r×   rÓ   r7   Útest_gaussian_domains  sÔ    ."*,
.,,,0>  *
(
($ &
 *.rî   c                   C   s  t jtjkstt jtjks ttdt d¡ks6ttdj	tjksJtt dtjks\tdtt
tt
  t
  tddt    kr dt
tt
  t
  ksŠn tdt t
tt
  t
  dt
tt
  t
    krâdt ksèn tt  tdt¡t jkstt t dt ¡tjks tt  tj¡tjks8tt  t j¡tjksPtttdd  t  ¡ t ksptt  t¡t kstt t ¡t kstd S )NrP   r1   c                   S   s
   t  g ¡S r3   )r   rt   r6   r6   r6   r7   rI     rJ   ztest_EX_EXRAW.<locals>.<lambda>)r   rl   r   rŠ   r8   rk   rš   r   Ú
ExpressionÚexr   r   rj   rt   rá   r/   r,   rU   r4   r6   r6   r6   r7   Útest_EX_EXRAW}  s    JBrñ   c                  C   s  t ttfD ]8} |  | d¡| dks(t|  | d¡| dks
tq
ttfD ]|} |  t¡}|  | d¡| dkstt|  | d| ¡| kst|  | d ¡| dks¬t|  | d | ¡|ksLtqLt t	 } |  | t	d ¡| dksðt|  | t	 d ¡| dksttt	 } |  |  tt	 ¡¡tddks>tt 
t	t¡} |  t¡}|| | jksht| j| || j  | kstd S )Nr1   rP   rX   rN   r   )r   r   r   Zcanonical_unitr8   r!   r"   rt   r   r   r:   r   rk   )rE   ru   r6   r6   r7   Útest_canonical_unit  s$    
"$
rò   c                   C   s4   t td ¡ dkstt td ¡ dks0td S )Nr1   r   r   )rÜ   r   rÝ   r8   r   r6   r6   r6   r7   Útest_issue_18278°  s    ró   c                  C   sH   t j} dd d|  dfD \}}t |¡dks2tt |¡dksDtd S )Nc                 S   s   g | ]}t  |¡qS r6   ©r   rr   rÊ   r6   r6   r7   r]   ·  s     z+test_Domain_is_negative.<locals>.<listcomp>r1   r@   F)r   rÚ   r   rã   r8   ©r   rµ   ré   r6   r6   r7   Útest_Domain_is_negativeµ  s    rö   c                  C   sH   t j} dd d|  dfD \}}t |¡dks2tt |¡dksDtd S )Nc                 S   s   g | ]}t  |¡qS r6   rô   rÊ   r6   r6   r7   r]   Ÿ  s     z+test_Domain_is_positive.<locals>.<listcomp>r1   r@   F)r   rÚ   r   rä   r8   rõ   r6   r6   r7   Útest_Domain_is_positiveŒ  s    r÷   c                  C   sH   t j} dd d|  dfD \}}t |¡dks2tt |¡dksDtd S )Nc                 S   s   g | ]}t  |¡qS r6   rô   rÊ   r6   r6   r7   r]   Å  s     z.test_Domain_is_nonnegative.<locals>.<listcomp>r1   r@   F)r   rÚ   r   rå   r8   rõ   r6   r6   r7   Útest_Domain_is_nonnegativeÃ  s    rø   c                  C   sH   t j} dd d|  dfD \}}t |¡dks2tt |¡dksDtd S )Nc                 S   s   g | ]}t  |¡qS r6   rô   rÊ   r6   r6   r7   r]   Ì  s     z.test_Domain_is_nonpositive.<locals>.<listcomp>r1   r@   F)r   rÚ   r   ræ   r8   rõ   r6   r6   r7   Útest_Domain_is_nonpositiveÊ  s    rù   c                  C   sJ   t t } |  t¡}|  td¡|d ks,t|  td¡|d ksFtd S )Nr2   )r   r   rt   r   r8   rr   )rE   ZeKr6   r6   r7   Útest_exponential_domainÑ  s    
rú   c                  C   s  t  td¡} | jjd kstttddd}t  |¡} | jjjdksJtt j|dd} | jjjdksjtt  tdtd¡} | jjd kstt  |td¡} | jjd ks®tt jtdtddd} | jjjdksØtt  |¡} |  | dddg¡}|j|jkstd S )Nr1   Úalpha)ÚaliasÚthetar2   rP   )	r   r;   r   r   rü   r8   r   ÚnameZ
to_alg_num)Úkrû   Úbetar6   r6   r7   Útest_AlgebraicField_aliasØ  s     

r  N)tÚ__doc__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.external.gmpyr   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&   Zsympy.polys.specialpolysr'   Zsympy.polys.fieldsr(   Zsympy.polys.agca.extensionsr)   Zsympy.polys.polyerrorsr*   r+   r,   r-   r.   Zsympy.testing.pytestr/   Ú	itertoolsr0   r;   r9   r4   r=   r?   rB   rG   rK   rQ   rR   rT   rV   rW   rc   rw   rx   r{   r}   r   r   r   r   r   r   r   r   r¡   r£   r€   r¥   r©   r®   r¶   r¹   rÀ   rÆ   rÉ   rî   rñ   rò   ró   rö   r÷   rø   rù   rú   r  r6   r6   r6   r7   Ú<module>   s   ,8ry3 "5

 |