o
    *ήcT                     @   s"  d Z ddlmZ ddlm  mZ ddlmZmZmZm	Z	m
Z ddlmZmZmZ ddlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z)m*Z* ddl+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 dd Z4dd Z5dd Z6dd Z7dd Z8dd Z9dd  Z:d!d" Z;e*d#d$ Z<d%d& Z=d'd( Z>d)d* Z?d+d, Z@d-d. ZAd/d0 ZBd1d2 ZCd3d4 ZDd5d6 ZEd7d8 ZFd9d: ZGd;d< ZHd=d> ZId?d@ ZJdAdB ZKdCdD ZLdEdF ZMdGdH ZNdIdJ ZOdKdL ZPe*dMdN ZQdOdP ZRdQdR ZSdS )Sz@Tests for the implementation of RootOf class and related tools.     )PolyN)rootofRootOfCRootOfRootSum_pure_key_dict)MultivariatePolynomialErrorGeneratorsNeededPolynomialError)FunctionLambda)FloatIRational)Eq)S)explog)sqrt)tan)Integral)legendre_poly)solve)raisesslow)	unchanged)abxyzrc                  C   s  t tddks	J t tddksJ t ttjdksJ t td ddks'J t td ddks2J t td ddks=J t td ddksHJ t td dt  d ddttd  ks_J t td dt  d ddttd  ksvJ t td dt  d ddttd  ksJ t td dt  d ddttd  ksJ t td dt  d ddd} t| td	u sJ t td dt  d ddd} t| td	u sJ t td dt  d ddd} t| td	u sJ t td dt  d ddd} t| td	u sJ t td td  ddddksJ t td td  ddddks)J t td td  ddddks;J t td td  ddddksMJ t td td  dd	ddks_J t td td  dd	ddksqJ t td td  dd	ddksJ t td td  dd	ddksJ t td td t d  dt td t d dksJ t td td t d  ddksJ t td td t d  dt td t d dksJ t td td t d  dt td t d dks J t td td t d  dt td t d dksJ t td td t d  dt td t d dks:J t td td t d  d
dksNJ t td td t d  dt td t d dkskJ t td dtd   dd
ks}J t td dtd   ddksJ t td dtd   ddksJ t td dtd   ddksJ tt	dd  tt	dd  tt
dd  tt
dd  tt
dd  tt
dd  ttdd  ttdd  ttdd  ttdd  ttdd  ttdd  ttdd  t ttt tdtksJ t ttd t tdtt ks1J t ttd t tdttksDJ t ttd t tdttdd ksZJ t ttd  tt  dt  tddksqJ ttdd  t td t d djd	u sJ d S )Nr            FradicalsT   c                   S   s
   t ddS Nr   r    r.   r.   I/tmp/pip-target-vg8gfxp4/lib/python/sympy/polys/tests/test_rootoftools.py<lambda>U      
 z&test_CRootOf___new__.<locals>.<lambda>c                   S   s
   t ddS Nr#   r   r-   r.   r.   r.   r/   r0   V   r1   c                   S   s   t tdtdS r,   r   r   r   r.   r.   r.   r/   r0   X       c                   S   s   t tdtdS r2   r3   r.   r.   r.   r/   r0   Y   r4   c                   S   s   t tt dS r,   r   r   r   r.   r.   r.   r/   r0   Z       c                   S   s   t ttdS r,   )r   r   r   r.   r.   r.   r/   r0   \   r6   c                   S   s   t td t td dS Nr%   r$   r   )r   r   r   r.   r.   r.   r/   r0   ^       c                   S   s   t td t t dS )Nr%   r   )r   r   r   r.   r.   r.   r/   r0   _       c                   S      t td d dS )Nr$   r#   r*   r   r   r.   r.   r.   r/   r0   a       c                   S   r:   )Nr$   r#   r)   r;   r.   r.   r.   r/   r0   b   r<   c                   S   s   t td d dS Nr$   r#   r;   r.   r.   r.   r/   r0   c   r<   c                   S   r:   )Nr$   r#   r%   r;   r.   r.   r.   r/   r0   d   r<   c                   S   s   t td d tS r=   r;   r.   r.   r.   r/   r0   e   r<   c                   S   s   t td t dt  tdS r7   r5   r.   r.   r.   r/   r0   o       )r   r   r   Zeror   r   
isinstancer   r   r	   r
   NotImplementedError
IndexError
ValueErrorr   r   r   is_commutativer!   r.   r.   r/   test_CRootOf___new__    sv   ....$$$$$$$$:(::::(:$$$$(&,.&rF   c                  C   sB   t td t d d} | jsJ | jt ksJ ttdd  d S )Nr%   r   c                   S   s    t ttd tt  d tdS Nr%   r#   r   )r   r   r   r   r.   r.   r.   r/   r0   |   s     z)test_CRootOf_attributes.<locals>.<lambda>)r   r   	is_numberfree_symbolssetr   rA   rE   r.   r.   r/   test_CRootOf_attributest   s   
rK   c                   C   s  t td t d dt td t d dkdu sJ t td t d dt td t d dkdu s4J t td t d dt td t d dkdu sNJ t td t d dt td t d dkdu shJ t td t d dt td t d dkdu sJ t td t d dt td t d dkdu sJ t td t d dt td t d dkdu sJ t td t d dt td t d dkdu sJ t td t d dt td t d dkdu sJ t td t d dt td t d dkdu sJ d S Nr%   r   Tr#   Fr$   r5   r.   r.   r.   r/   test_CRootOf___eq__   s   444444444:rM   c                     sp  t d} td t d  t d}t d}t||tju s J t||tju s*J tt|ts2J t|dtju s<J t|tjtju sGJ t|t	tju sQJ tt|| ds[J t
 D ]}|jrpt||tju spJ qat d}D ]}|jrt||tju sJ qxtd t d  t
  fddtdD ddksJ tt ddtj d	ksJ d S )
Nfr%   r$   r#   r   c                    s&   g | ]}D ]
}t t ||qqS r.   )r   r   ).0ijeqsolr.   r/   
<listcomp>      & z,test_CRootOf___eval_Eq__.<locals>.<listcomp>TF)r   r   r   r   r   falsetruer   Infinityr   r   is_realrangecountImaginaryUnit)rN   r!   r1sr.   rR   r/   test_CRootOf___eval_Eq__   s6   


"r`   c                   C   sd   t td t d djdu sJ t td t d djdu s J t td t d djdu s0J d S rL   )r   r   rZ   r.   r.   r.   r/   test_CRootOf_is_real   s     $ra   c                   C   s$   t td t d djdu sJ d S )Nr%   r   T)r   r   
is_complexr.   r.   r.   r/   test_CRootOf_is_complex   s   $rc   c                   C   s<   t td t d dttt td t d dksJ d S rG   )r   r   subsr   r.   r.   r.   r/   test_CRootOf_subs   s   <re   c                   C   sL   t td t d dtdksJ t td t d dtdks$J d S rG   )r   r   diffr   r.   r.   r.   r/   test_CRootOf_diff   s   $(rg   c                  C   s  t td t d djdd} | tdsJ t td t d djdd \}}|tds4J |td s>J t td t d d	jdd \}}|tdsZJ |tdscJ td
tdd}dd | D }|g dks{J t td dt  d djdd}|tdsJ t td dt  d djdd \}}|tdsJ |tdsJ t td dt  d d	jdd \}}|tdsJ |tdsJ t td dt  d djdd \}}|tdsJ |tdsJ t td dt  d d
jdd \}}|tds+J |tds5J tt td d	td
   td  d d	ddksRJ dtd  dtd   dtd    d!td"   d#td$   d%td&   d'td   d(td
   d)td   d*td	   d+t  d, }t |d	d	 \}}t |d		d	 \}}	||ksJ ||	k sJ ||	 ksJ t td-td$}
|
	d	|
	d.	d	ksJ t td	 d dd/d0}t td	 d dd/d0}|	d
d1t
 ksJ |	d
d2t
 ksJ tt d
td  d3td   dtd	   d$ d	dd4ks)J td5td&  d6td
   d7td	   d d}|d	sHJ tttd3 d8td9   d:td   d;td   d<td"   d=td&   d>td
   d?td	   d@ d	d	dAksJ tttd
 dtd	   d d	d	dBk sJ dCd tdD }
|
d   |
D ]-}| }|	d	 || ksJ |  || ksJ ||j|j ksJ qd S )DNr%   r      nz-1.2134116627622296341r#   z0.60670583138111481707z1.45061224918844152650r$   r+   Tpolysc                 S      g | ]	}t |d qS    strrj   rO   r!   r.   r.   r/   rU      r8   z&test_CRootOf_evalf.<locals>.<listcomp>z-0.86113631159405258z-0.33998104358485626z0.33998104358485626z0.86113631159405258      z-1.84208596619025438271z-0.351854240827371999559z-1.709561043370328882010z+1.709561043370328882010z+1.272897223922499190910z-0.719798681483861386681z+0.719798681483861386681l       @ z147.i    i: 
   i 	   izg   i`jH   il   i i@B i < i  i - i   @   d   Fr'   g      g      ?   z-0.976i`b i  T          i  i@  iV  i  i\ i ie z-3.4*Ig?c                 S   s"   g | ]}t td  t d  |qS )r%   )r   r   rO   rP   r.   r.   r/   rU        " )r   r   evalf
epsilon_eqr   as_real_imagr   
real_rootsrq   rj   r   r   _eval_evalfr   absr[   _reset_get_intervalfuncargs)realreimprootsrS   r   r   cdr!   r0r^   rirP   r.   r.   r/   test_CRootOf_evalf   s   &&"****:.





 B..




2
r   c                  C   sd   t td dt  d d} |   |  }t td dt  d d} |   |  }||ks0J d S )Nrt   ru   r#   )r   r   rj   r   )r!   r   r   r.   r.   r/   test_CRootOf_evalf_caching_bug  s   r   c                  C   s   t td t d  ttd td  d dgksJ t td t d jddttd td  d dgks:J t dtd	  d
td   dtd   dt  d tdd} t| tdtdtdtdd gksnJ d S )Nrt   r#   r%   r$   r   Fr'   r)   r+   rw   ru   r{   ZZ)domainr"   )r   r   r   r   r   r   r   r.   r.   r/   test_CRootOf_real_roots"  s   8:2r   c                	   C   s8  t td t d  ttd td  d dtddtdt d  tddtdt d  ttd td  d dttd td  d dgksLJ t td t d jddttd td  d dttd t d dddttd t d dddttd td  d dttd td  d dgksJ d S )	Nrt   r#   r%   r$   r   r"   Fr'   )r   r   	all_rootsr   r   r   r   r.   r.   r.   r/   test_CRootOf_all_roots,  s   
r   c                  C   sZ   t dtdd} dd |  D }|D ]	}t|tsJ qdd |D }|g dks+J d S )Nr+   Trk   c                 S      g | ]}|j d dqS )   ri   eval_rationalrr   r.   r.   r/   rU   @      z.test_CRootOf_eval_rational.<locals>.<listcomp>c                 S   rm   rn   rp   )rO   rootr.   r.   r/   rU   C  r8   rs   )r   r   r   r@   r   )r   r   r   r.   r.   r/   test_CRootOf_eval_rational>  s   r   c                  C   sP  t td dt  d } t  t| d}|jtjvsJ |jtjvs%J |  |jtjv s1J |jtjvs9J t  t| d}|jtjvsJJ |jtjvsRJ |  |jtjv s^J |jtjv sfJ t td d td d  } t  t| d}|jtjv sJ |jtjvsJ t  t| d}|jtjv sJ |jtjv sJ d S )Nr%   r$   r   r#   )	r   r   r   clear_cachepolyrootoftools_reals_cache_complexes_cacher   )rN   r!   r.   r.   r/   test_CRootOf_lazyL  s0   



r   c                  C   s  t d t  d } ttttt  }t| |}t|tdu sJ t| d |dt| | ks/J tt d | d  |tdt  dt| |  ksIJ ttt d | d  |ttdt  dt| |  ksgJ ttdd  tt	dd  t| t
t| tt t
t ksJ t| tt| tt tt ksJ tt| dd	tdu sJ t| d
ksJ t| tt t d
ksJ t| tt t d dksJ t| tt ddksJ t| tt ddksJ t| dd	jdu sJ t| tt dt t d   tddksJ t| tt tt t d   tddt ksJ tt d d tt dt d  t dks,J tt d t tt dt d  t dt ksDJ tt d d tt tt d  t dt ks\J tt d t tt tt d  t dt t ksvJ tt d d tt t
t ddt
dt
d ksJ tt d tt   td  tt tt d t  d tt ttt  ksJ ttd t d  tt   d tt tt d t  d tt tt t ksJ d S )Nr%   Tr$   rz   c                   S   s   t td t t S Nr%   )r   r   r   r.   r.   r.   r/   r0         z&test_RootSum___new__.<locals>.<lambda>c                   S   s   t td d dd S )Nr$   r%   c                 S   s   | S Nr.   )r   r.   r.   r/   r0     s    z8test_RootSum___new__.<locals>.<lambda>.<locals>.<lambda>)r   r   r.   r.   r.   r/   r0     r9   F)autor   r&   r#   r{   rv   )	quadraticr"   )r   r   r!   r   r   r@   hashr   r   rC   r   rD   r   r   r    r   r   )rN   gr_   r.   r.   r/   test_RootSum___new__x  sF   
 4<""*0,004
"
""r   c                   C   s   t td t d ttttjt ksJ t td t d ttttt jthks.J t td t t ttttt tjtthksHJ d S r   )	r   r   r   r!   r   rI   rJ   r   r   r.   r.   r.   r/   test_RootSum_free_symbols  s   ,0 r   c                  C   s   t ttt} ttd t d | ttd t d | kdu s!J ttd t d | ttd t d | kdu s;J ttd t d | ttd t d | kdu sUJ ttd t d | ttd t d | kdu soJ d S )Nr%   r#   Tr$   F)r   r   r   r   r   rN   r.   r.   r/   test_RootSum___eq__  s
   4448r   c                  C   s   t td d t} t| t du sJ |  tt tt ks!J t td t tt} t| t du s4J |  ttt  ttt  ksIJ d S )Nr$   r#   T)r   r   r   r@   doitr   r   r   rsr.   r.   r/   test_RootSum_doit  s   .r   c                  C   sr   t td d t} | jdddtdsJ | jdddtds%J t td t tt} |  | ks7J d S )	Nr$   r#   rh   T)rj   chopz1.0806046117362794348   z1.08060461173628)r   r   r   r   r   r   r   r   r.   r.   r/   test_RootSum_evalf  s
   r   c                  C   sZ   t d t  d } ttttt  }tttttt   }t| |t t| |ks+J d S r   )r   r   r!   r   r   rf   )rN   r   hr.   r.   r/   test_RootSum_diff  s   "r   c                  C   s   t d t  d } ttttt  }td t d }ttttt }t| |tdt| |ks2J t| |t tt||ksBJ d S )Nr%   r#   )r   r   r!   r   r   r   rd   )rN   r   FGr.   r.   r/   test_RootSum_subs  s    $r   c               	   C   s"  t td t d ttttt  dt d td t d  ks"J dtd  dtd   dt  d } ttttd	td  d d
td  d  dtd  d  ttdd  d tt  }t | |tdtdt  dtt  d tt tdt tdt  d   d ksJ d S )Nrt   r#   r+      r%   s   r$      ii5  iq  }   r{   rz   )r   r    r   r   r   r   r   rf   )rN   r   r.   r.   r/   test_RootSum_rational  s   $HBr   c                  C   s   t d t d t d t d  } tt dtt  d }tt tt }tt d t |t }tt d t |t }t| |t  d| d| dgksIJ d S )	Nr%   r$   r+   rt   rz   rw   r   ~   )r   r   r   r   r   r   as_ordered_terms)rN   r   r   r   r^   r.   r.   r/   test_RootSum_independent  s    *r   c                  C   sD   t td t d t } dd tdD }t| t|ks J d S )Nr{   r#   c                 S   s"   g | ]}t td  t d |qS )r{   r#   r;   r   r.   r.   r/   rU     r   z#test_issue_7876.<locals>.<listcomp>)r   r   r   r[   	frozenset)l1l2r.   r.   r/   test_issue_7876  s   r   c                  C   sT   t dtd  d } t|  dksJ t dtd  d } t|  dks(J d S )Nrz   ry   rx   rw   )r   r   lenr   r   r.   r.   r/   test_issue_8316  s   r   c                     s  ddl m   fdd} | ttd dtd   d dks J | ttd dks,J | tdgd	 d
g tdks=J | ttd	 d dksKJ | ttd d dksYJ | ttd d dksgJ | ttd d dksuJ | ttd d dksJ | tg dtdksJ | ttd	 t d dksJ | ttd t d dksJ dd }| |d
dddksJ | |d
dddksJ | |ddddksJ | |ddddksJ | |d
dddksJ | |d
dddksJ d S )Nr   _imag_count_of_factorc                    s   t  fdd|  d D S )Nc                    s   g | ]
\}} || qS r.   r.   )rO   rN   mr   r.   r/   rU     r>   z8test__imag_count.<locals>.imag_count.<locals>.<listcomp>r#   )sumfactor_listr   r   r.   r/   
imag_count  s   
z$test__imag_count.<locals>.imag_countr{   rw   r$   r#   r%   r"   r+   )r#   r$   r%   c                 S   s"   t t|  t|  tt| tS r   )r   r   rd   )r^   r2r   r.   r.   r/   q  s   "ztest__imag_count.<locals>.qr&   )sympy.polys.rootoftoolsr   r   r   )r   r   r.   r   r/   test__imag_count
  s(   ("  r   c                  C   sD   t td dtd   d d} |  }| jr|j|j dks J d S )Nr+   r$   r#   r   )r   r   r   is_imaginaryaxbx)r!   rP   r.   r.   r/   test_RootOf_is_imaginary$  s   r   c                  C   sP   t d dt   d } t| d }t| d }||sJ ||s&J d S )Nr%   rt   r#   r   )r   r   r   is_disjoint)rS   iriir.   r.   r/   test_is_disjoint*  s
   r   c                      s   t  tv du sJ dv du sJ dt< tv sJ tv s#J t dks+J ttfdd fdd tt fdd d S )NFr#   c                      s    d S Nr#   r.   r.   r   r.   r/   r0   :      z$test_pure_key_dict.<locals>.<lambda>c                    s   d | < d S )Nr$   r.   )kr   r.   r/   dont;  s   z test_pure_key_dict.<locals>.dontc                      s    dS r   r.   r.   )r   r.   r/   r0   =  r   )Dr   r   r   KeyErrorrC   r.   r.   )r   r   r/   test_pure_key_dict2  s   r   c                      s  t   dd tdD dd D tddtddtd	 d  tddtd	 d  gks0J d
   dd D tddtddtd d  tddtd d  gksYJ td
  jdk sfJ td  jdk ssJ td  j	dk sJ td  jdk sJ td  j	dk sJ d
   dd D tddtddtd d  tddtd d  gksJ td
  jdk sJ td  jdk sJ td  j	dk sJ td  jdk sJ td  j	dk sJ d
   dd D tddtddtd d  tddtd d  gks/J t
td
  jd
  dk sCJ t
td  jd   dk sYJ t
td  j	d   dk soJ t
td  jd   dk sJ t
td  j	d   dk sJ d
   dd D tddtd d!td" d!  td d!td" d!  gksJ t
td
  jd
  d#k sJ t
td  jd   d#k sJ t
td  j	d   d#k sJ t
td  jd   d#k sJ t
td  j	d   d#k s1J d
   d$d D  d%d  D g d&ksLJ t fd'd(tt D s_J d S ))Nc                 S   s&   g | ]}t td  dt  d |qS )r%   rw   r#   )r   r   r   r.   r.   r/   rU   C  rV   z-test_eval_approx_relative.<locals>.<listcomp>r%   c                 S      g | ]}| d qS )皙?r   r   r.   r.   r/   rU   D  r9   i   r      i%  r   c                 S   s   g | ]}| d dqS )r   -C6?r   r   r.   r.   r/   rU   H  r   i  i   iS i   r   r#   r   r$   c                 S   s   g | ]}| d d qS )r   r   r   r.   r.   r/   rU   Q  r   i/i4N  i  c                 S   r   )r$   ri   r   r   r.   r.   r/   rU   \  r   i'iV i3 i    i;e {Gz?c                 S   r   )r%   ri   r   r   r.   r.   r/   rU   e  r   i i   i'SgMbP?c                 S   r   )r$   )eval_approxr   r.   r.   r/   rU   o  r9   c                 S   s   g | ]}t |qS r.   )rq   r   r.   r.   r/   rU   p  r   )z-0.10z0.05 - 3.2*Iz0.05 + 3.2*Ic                 3   s4    | ]}t  | |  |   d k V  qdS )r   N)r   rj   r   r   tr.   r/   	<genexpr>r  s   2 z,test_eval_approx_relative.<locals>.<genexpr>)r   r   r[   r   r   r   r   r   dxdyr   rj   allr   r.   r.   r   r/   test_eval_approx_relative@  sd   


(,,,,(,,,,*r   c                  C   s:   t td t d d} tttdtf}tt| |sJ d S )Nrt   r#   r   )r   r   r   r   r   r   )r!   r   r.   r.   r/   test_issue_15920u  s   r   c                  C   st   t d t  d } tt|  dksJ tt| t tt  dks&J tt| t tt dks8J d S )Nr%   r#   z[CRootOf(x**3 - x + 1, 0)])r   rq   r   r   rd   r   r   )rS   r.   r.   r/   test_issue_19113{  s   r   )T__doc__sympy.polys.polytoolsr   r   rl   r   r   r   r   r   r   r   sympy.polys.polyerrorsr   r	   r
   sympy.core.functionr   r   sympy.core.numbersr   r   r   sympy.core.relationalr   sympy.core.singletonr   &sympy.functions.elementary.exponentialr   r   (sympy.functions.elementary.miscellaneousr   (sympy.functions.elementary.trigonometricr   sympy.integrals.integralsr   sympy.polys.orthopolysr   sympy.solvers.solversr   sympy.testing.pytestr   r   sympy.core.exprr   	sympy.abcr   r   r   r   r    r!   rF   rK   rM   r`   ra   rc   re   rg   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>   sh     T
[

,1
	
4