B
    <ZA                 @   s$  d dl Z ddl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mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m)Z)m+Z+m,Z,m-Z-m.Z.m/Z/ eefZ0ddl1m2Z2 e3j4Z5dd Z6G d	d
 d
e3Z7G dd de3Z8dd Z9e9ee%\e7_:e7_;e8_:e8_;e9ee&\e7_<e7_=e8_<e8_=e9ee'\e7_>e7_?e8_>e8_?e9ee(\e7_@e7_Ae8_@e8_Ae9e!e)\e7_Be7_Ce8_Be8_Ce7j@e7_De7jAe7_Ee8j@e8_De8jAe8_EG dd de7ZFG dd de2ZGy$d dlHZHeHjIJe8 eHjKJe7 W n eLk
r   Y nX dS )    N   )libmp)
basestring),	int_typesMPZ_ONEprec_to_dpsdps_to_precrepr_dpsround_floorround_ceilingfzerofinffninffnanmpf_lempf_negfrom_int
from_floatfrom_strfrom_rationalmpi_mid	mpi_deltampi_strmpi_absmpi_posmpi_negmpi_addmpi_submpi_mulmpi_divmpi_pow_intmpi_powmpi_from_strmpci_posmpci_negmpci_addmpci_submpci_mulmpci_divmpci_powmpci_absr)   mpci_expmpci_logComplexResultmpf_hashmpc_hash)StandardBaseContextc             C   sV   t | dr| jS t| tr&t| ||S t| tr<t| ||S t| trRt| ||S d S )N_mpf_)	hasattrr1   
isinstancer   r   floatr   r   r   )xprecZrounding r7   ,lib/python3.7/site-packages/mpmath/ctx_iv.pyconvert_mpf_   s    
 
 
 
 r9   c               @   s  e Zd ZdZd7ddZdd Zdd Zed	d
 Zedd Z	dd Z
edd Zedd Zedd Zedd Zedd Zdd ZeZeZeZeZdd Zdd Zdd  Zd!d Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd8d5d6Zd4S )9ivmpfzH
    Interval arithmetic class. Precision is controlled by iv.prec.
    r   c             C   s   | j |S )N)ctxconvert)clsr5   r7   r7   r8   __new__)   s    zivmpf.__new__c             C   s(   | j \}}||kr tt|S td S )N)_mpi_intr   Zto_int
ValueError)selfabr7   r7   r8   __int__,   s    
zivmpf.__int__c             C   s(   | j \}}||krt|S t| j S d S )N)r?   r.   hash)rB   rC   rD   r7   r7   r8   __hash__2   s    
zivmpf.__hash__c             C   s   | S )Nr7   )rB   r7   r7   r8   real9   s    z
ivmpf.realc             C   s   | j jS )N)r;   zero)rB   r7   r7   r8   imag<   s    z
ivmpf.imagc             C   s   | S )Nr7   )rB   r7   r7   r8   	conjugate?   s    zivmpf.conjugatec             C   s   | j \}}| j||fS )N)r?   r;   make_mpf)rB   rC   rD   r7   r7   r8   rC   A   s    
zivmpf.ac             C   s   | j \}}| j||fS )N)r?   r;   rL   )rB   rC   rD   r7   r7   r8   rD   F   s    
zivmpf.bc             C   s"   | j }t| j|j}|||fS )N)r;   r   r?   r6   rL   )rB   r;   vr7   r7   r8   midK   s    z	ivmpf.midc             C   s"   | j }t| j|j}|||fS )N)r;   r   r?   r6   rL   )rB   r;   rM   r7   r7   r8   deltaQ   s    zivmpf.deltac             C   s
   | j tfS )N)r?   mpi_zero)rB   r7   r7   r8   _mpci_W   s    zivmpf._mpci_c              G   s   t dd S )Nz-no ordering relation is defined for intervals)	TypeError)argsr7   r7   r8   _compare[   s    zivmpf._comparec             C   s$   | j |}| j|jko"|j| jkS )N)r;   mpfrC   rD   )rB   tr7   r7   r8   __contains__c   s    zivmpf.__contains__c             C   s   t | j| jjS )N)r   r?   r;   r6   )rB   r7   r7   r8   __str__g   s    zivmpf.__str__c             C   sJ   | j jrt| S | j\}}t| j j}t||}t||}d||f S )Nzmpi(%r, %r))r;   prettystrr?   r	   r6   r   Zto_str)rB   rC   rD   nr7   r7   r8   __repr__j   s    
zivmpf.__repr__c             C   s4   t |ds&y| j|}W n
   tS || j|jS )Nr?   )r2   r;   r<   NotImplementedr?   )srV   Zcmpfunr7   r7   r8   rT   s   s    
c             C   s   |  |tjS )N)rT   r   Zmpi_eq)r^   rV   r7   r7   r8   __eq__{   s    zivmpf.__eq__c             C   s   |  |tjS )N)rT   r   Zmpi_ne)r^   rV   r7   r7   r8   __ne__|   s    zivmpf.__ne__c             C   s   |  |tjS )N)rT   r   Zmpi_lt)r^   rV   r7   r7   r8   __lt__}   s    zivmpf.__lt__c             C   s   |  |tjS )N)rT   r   Zmpi_le)r^   rV   r7   r7   r8   __le__~   s    zivmpf.__le__c             C   s   |  |tjS )N)rT   r   Zmpi_gt)r^   rV   r7   r7   r8   __gt__   s    zivmpf.__gt__c             C   s   |  |tjS )N)rT   r   Zmpi_ge)r^   rV   r7   r7   r8   __ge__   s    zivmpf.__ge__c             C   s   | j t| j| j jS )N)r;   rL   r   r?   r6   )rB   r7   r7   r8   __abs__   s    zivmpf.__abs__c             C   s   | j t| j| j jS )N)r;   rL   r   r?   r6   )rB   r7   r7   r8   __pos__   s    zivmpf.__pos__c             C   s   | j t| j| j jS )N)r;   rL   r   r?   r6   )rB   r7   r7   r8   __neg__   s    zivmpf.__neg__Nc             C   s   | j | |||S )N)r;   almosteq)r^   rV   rel_epsabs_epsr7   r7   r8   ae   s    zivmpf.ae)r   )NN)__name__
__module____qualname____doc__r>   rE   rG   propertyrH   rJ   rK   rC   rD   rN   rO   rQ   rT   rc   rb   rd   rW   rX   r\   r_   r`   ra   re   rf   rg   rk   r7   r7   r7   r8   r:   $   s>   
	r:   c               @   s   e Zd Zd.ddZdd Zdd Zdd	 Zed
d Zedd Z	edd Z
edd Zedd Zedd Zdd Zdd Zdd Zd/ddZdd  Zd!d" Zd#d$ Ze Z ZZd%d& Zd'd( Zd)d* Zd0d,d-Zd+S )1ivmpcr   c             C   s2   | j |}| j |}t| }|j|jf|_|S )N)r;   r<   newr?   rQ   )r=   reimyr7   r7   r8   r>      s
    zivmpc.__new__c             C   s<   | j \\}}\}}||kr.||kr.t||fS t| j S d S )N)rQ   r/   rF   )rB   rC   rD   cdr7   r7   r8   rG      s    zivmpc.__hash__c             C   s(   | j jrt| S dt| jt| jf S )Nziv.mpc(%s, %s))r;   rY   rZ   reprrH   rJ   )r^   r7   r7   r8   r\      s    zivmpc.__repr__c             C   s   dt | jt | jf S )Nz(%s + %s*j))rZ   rH   rJ   )r^   r7   r7   r8   rX      s    zivmpc.__str__c             C   s"   | j \\}}\}}| j||fS )N)rQ   r;   rL   )rB   rC   rD   rv   rw   r7   r7   r8   rC      s    zivmpc.ac             C   s"   | j \\}}\}}| j||fS )N)rQ   r;   rL   )rB   rC   rD   rv   rw   r7   r7   r8   rD      s    zivmpc.bc             C   s"   | j \\}}\}}| j||fS )N)rQ   r;   rL   )rB   rC   rD   rv   rw   r7   r7   r8   rv      s    zivmpc.cc             C   s"   | j \\}}\}}| j||fS )N)rQ   r;   rL   )rB   rC   rD   rv   rw   r7   r7   r8   rw      s    zivmpc.dc             C   s   | j | jd S )Nr   )r;   rL   rQ   )r^   r7   r7   r8   rH      s    z
ivmpc.realc             C   s   | j | jd S )Nr   )r;   rL   rQ   )r^   r7   r7   r8   rJ      s    z
ivmpc.imagc             C   s   | j \}}| j|t|fS )N)rQ   r;   make_mpcr   )r^   rC   rD   r7   r7   r8   rK      s    
zivmpc.conjugatec             C   s  | j |}| j|j  ko$| jkn  p| j|j  koB| jkn  p|j| j  ko`|jkn  p|j| j  ko~|jkn  }| j|j  ko| jkn  p| j|j  ko| jkn  p|j| j  ko|jkn  p|j| j  ko|jkn  }|o|S )N)r;   r<   rC   rD   rv   rw   )r^   rV   Zreal_overlapZimag_overlapr7   r7   r8   overlap   s    xxzivmpc.overlapc             C   s$   | j |}|j| jko"|j| jkS )N)r;   r<   rH   rJ   )r^   rV   r7   r7   r8   rW      s    zivmpc.__contains__Fc             C   sh   t || jjs*y| j|}W n
   tS t|dr@|jtf}nt|drP|j}|r^| j|kS | j|kS )Nr?   rQ   )	r3   r;   _typesr<   r]   r2   r?   rP   rQ   )r^   rV   netvalr7   r7   r8   rT      s    


zivmpc._comparec             C   s
   |  |S )N)rT   )r^   rV   r7   r7   r8   r_      s    zivmpc.__eq__c             C   s   |  |dS )NT)rT   )r^   rV   r7   r7   r8   r`      s    zivmpc.__ne__c             C   s   t dd S )Nz#complex intervals cannot be ordered)rR   )r^   rV   r7   r7   r8   ra      s    zivmpc.__lt__c             C   s   | j t| j| j jS )N)r;   ry   r$   rQ   r6   )r^   r7   r7   r8   rg      s    zivmpc.__neg__c             C   s   | j t| j| j jS )N)r;   ry   r#   rQ   r6   )r^   r7   r7   r8   rf      s    zivmpc.__pos__c             C   s   | j t| j| j jS )N)r;   rL   r*   rQ   r6   )r^   r7   r7   r8   re      s    zivmpc.__abs__Nc             C   s   | j | |||S )N)r;   rh   )r^   rV   ri   rj   r7   r7   r8   rk      s    zivmpc.ae)r   r   )F)NN)rl   rm   rn   r>   rG   r\   rX   rp   rC   rD   rv   rw   rH   rJ   rK   rz   rW   rT   r_   r`   ra   rb   rc   rd   rg   rf   re   rk   r7   r7   r7   r8   rq      s,   

rq   c                sZ    fddfddfdd}fdd}fd	d
}fdd}||||fS )Nc                s   |   ||| jS )N)ry   r6   )r;   svalr}   )	f_complexr7   r8   	g_complex   s    z_binary_op.<locals>.g_complexc                sF   y|   ||| jS  tk
r@   |tf}|tf}| ||S X d S )N)rL   r6   r-   rP   )r;   r~   r}   )f_realr   r7   r8   g_real   s    z_binary_op.<locals>.g_realc                sX   | j }t||js||}t|dr6|| j|jS t|drT || jtf|jS tS )Nr?   rQ   )	r;   r3   r{   r<   r2   r?   rP   rQ   r]   )r^   rV   r;   )r   r   r7   r8   lop_real   s     

 
 z_binary_op.<locals>.lop_realc                sX   | j }t||js||}t|dr6||j| jS t|drT ||j| jtfS tS )Nr?   rQ   )	r;   r3   r{   r<   r2   r?   rQ   rP   r]   )r^   rV   r;   )r   r   r7   r8   rop_real   s     

 
 z_binary_op.<locals>.rop_realc          	      sN   | j }t|| j js>y| j |}W n ttfk
r<   tS X  || j|jS )N)r;   r3   r{   r<   rA   rR   r]   rQ   )r^   rV   r;   )r   r7   r8   lop_complex   s    z_binary_op.<locals>.lop_complexc                s0   | j }t|| j js | j |} ||j| jS )N)r;   r3   r{   r<   rQ   )r^   rV   r;   )r   r7   r8   rop_complex  s    z_binary_op.<locals>.rop_complexr7   )r   r   r   r   r   r   r7   )r   r   r   r   r8   
_binary_op   s    r   c               @   s$   e Zd Zdd Zdd ZeeZdS )ivmpf_constantc             C   s   t | }||_|S )N)rr   _f)r=   frB   r7   r7   r8   r>     s    zivmpf_constant.__new__c             C   s,   | j jd }| |t}| |t}||fS )Nr   )r;   _precr   r
   r   )rB   r6   rC   rD   r7   r7   r8   	_get_mpi_  s    zivmpf_constant._get_mpi_N)rl   rm   rn   r>   r   rp   r?   r7   r7   r7   r8   r     s   r   c               @   s   e Zd Zdd Zd7ddZdd Zd8dd	Zed
d Zdd Z	dd Z
edd e	Zedd e
Zdd Zdd Zdd Zdd Zd9ddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd:d5d6ZdS );MPIntervalContextc             C   s   t dtfi | _t dtfi | _| j| jf| _t dtfi | _dg| _| 	d | jt
| jg | j_ | j_| j_|  | j_ | j_| j_d| _t|  |   d S )Nr:   rq   r   5   F)typer:   rU   rq   mpcr{   r   	_constantr   	_set_precrr   Z_ctxdatar;   rY   r0   __init___init_builtins)r;   r7   r7   r8   r   %  s    
"
zMPIntervalContext.__init__Nc             C   s    |d kr|  |S |  ||fS )N)rU   )r;   rC   rD   r7   r7   r8   _mpi2  s    
zMPIntervalContext._mpic             C   s  |  d| _|  d| _|  d| _| j | _|  d| _| dd| _| t	j
t	j| _| t	j| _| t	jt	j| _| t	jt	j| _| t	jt	j| _| t	j| _| t	jt	j| _| t	jt	j| _| t	j t	j!| _"| t	j#t	j$| _%| j%| _&| 'dd | _(| 't	j)| _*| 't	j+| _,| 't	j-| _.| 't	j/| _0| 't	j1| _2| 't	j3| _4| 't	j5| _6| 't	j7| _8| 't	j9| _:| 't	j;| _<d S )Nr   r   infnanc             S   s   dt d|  dfS )Nr   r   )r   )r6   Zrndr7   r7   r8   <lambda>J  s    z2MPIntervalContext._init_builtins.<locals>.<lambda>)=rU   onerI   r   ninfr   r   j_wrap_mpi_functionr   Zmpi_expr+   expZmpi_sqrtZsqrtZmpi_logr,   ZlnZmpi_cosZmpci_cosZcosZmpi_sinZmpci_sinZsinZmpi_tanZtanZ	mpi_gammaZ
mpci_gammaZgammaZmpi_loggammaZmpci_loggammaZloggammaZ
mpi_rgammaZmpci_rgammaZrgammaZmpi_factorialZmpci_factorialZ	factorialZfacr   ZepsZmpf_piZpiZmpf_eeZmpf_ln2Zln2Zmpf_ln10Zln10Zmpf_phiZphiZ	mpf_eulerZeulerZmpf_catalanZcatalanZmpf_glaisherZglaisherZmpf_khinchinZkhinchinZmpf_twinprimeZ	twinprime)r;   r7   r7   r8   r   7  s8    
z MPIntervalContext._init_builtinsc                s    fdd}|S )Nc                sl   |r| d jd }n
 jd } | } t| drH | j|S t| drd | j|S td S )Nr6   r   r?   rQ   )	getr   r<   r2   rL   r?   ry   rQ   rA   )r5   kwargsr6   )r;   r   r   r7   r8   gW  s    



z/MPIntervalContext._wrap_mpi_function.<locals>.gr7   )r;   r   r   r   r7   )r;   r   r   r8   r   V  s    z$MPIntervalContext._wrap_mpi_functionc                s&   |r fdd}n }t | || d S )Nc                sP   | j   fdd|D }| j}z"|  jd7  _| f||}W d || _X |
 S )Nc                s   g | ]} |qS r7   r7   ).0rC   )r<   r7   r8   
<listcomp>i  s    zFMPIntervalContext._wrap_specfun.<locals>.f_wrapped.<locals>.<listcomp>
   )r<   r6   )r;   rS   r   r6   Zretval)r   )r<   r8   	f_wrappedg  s    z2MPIntervalContext._wrap_specfun.<locals>.f_wrapped)setattr)r=   namer   Zwrapr   r7   )r   r8   _wrap_specfund  s    zMPIntervalContext._wrap_specfunc             C   s"   t dt|| jd< t|| _d S )Nr   r   )maxr@   r   r   _dps)r;   r[   r7   r7   r8   r   u  s    zMPIntervalContext._set_precc             C   s"   t || jd< tdt|| _d S )Nr   r   )r   r   r   r@   r   )r;   r[   r7   r7   r8   _set_dpsy  s    zMPIntervalContext._set_dpsc             C   s
   | j d S )Nr   )r   )r;   r7   r7   r8   r   }  s    zMPIntervalContext.<lambda>c             C   s   | j S )N)r   )r;   r7   r7   r8   r   ~  s    c             C   s   t | j}||_|S )N)rr   rU   r?   )r;   rM   rC   r7   r7   r8   rL     s    
zMPIntervalContext.make_mpfc             C   s   t | j}||_|S )N)rr   r   rQ   )r;   rM   rC   r7   r7   r8   ry     s    
zMPIntervalContext.make_mpcc             C   s:   |\}}t ||| jt}t ||| jt}| ||fS )N)r   r   r6   r
   r   rL   )r;   ZpqpqrC   rD   r7   r7   r8   _mpq  s    zMPIntervalContext._mpqc          	   C   sJ  t || j| jfr|S t || jr(|
 S t |ts<t|dr`| |j}| |j}| ||S t |t	rt
|| j}| |S t|dr|j\}}nvy|\}}W n  ttfk
r   | }}Y nX t|dr|jd }nt|| jt}t|dr|jd }nt|| jt}|tks |tkr(t}t}t||s<td| ||fS )NZ_mpc_r?   r   r   z"endpoints must be properly ordered)r3   rU   r   r   complexr2   r<   rH   rJ   r   r"   r6   rL   r?   rR   rA   r9   r
   r   r   r   r   r   AssertionError)r;   r5   rs   rt   rM   rC   rD   r7   r7   r8   r<     s8    




zMPIntervalContext.convert   c             K   sl   |  |}t|dr&tj|j|f|S t|drhtj|jd |f|}tj|jd |f|}d||f S d S )Nr?   rQ   r   r   z(%s + %s*j))r<   r2   r   Z
mpi_to_strr?   rQ   )r;   r5   r[   r   rs   rt   r7   r7   r8   nstr  s    


zMPIntervalContext.nstrc             C   s~   |  |}t|| jr4t| |j| |jd S t|j	\}}|\}}}}|r\|| S |t
krj| jS |tkrx| jS | jS )Nr   )r<   r3   r   r   magrH   rJ   r   r   r?   r   r   r   r   r   )r;   r5   rC   rD   signmanr   bcr7   r7   r8   r     s    
zMPIntervalContext.magc             C   s   dS )NFr7   )r;   r5   r7   r7   r8   isnan  s    zMPIntervalContext.isnanc             C   s
   || j kS )N)r   )r;   r5   r7   r7   r8   isinf  s    zMPIntervalContext.isinfc             C   s@   |  |}|j\}}||kr<|\}}}}|r4|dkS |tkS d S )Nr   )r<   r?   r   )r;   r5   rC   rD   r   r   r   r   r7   r7   r8   isint  s    

zMPIntervalContext.isintc             C   s6   |  |j\}}t||}t||}| ||fS )N)r<   r?   r   Z	mpf_shiftrL   )r;   r5   r[   rC   rD   r7   r7   r8   ldexp  s    zMPIntervalContext.ldexpc             C   s   t | |jS )N)absr<   rC   )r;   r5   r7   r7   r8   absmin  s    zMPIntervalContext.absminc             C   s   t | |jS )N)r   r<   rD   )r;   r5   r7   r7   r8   absmax  s    zMPIntervalContext.absmaxc             C   s.   |  |j}|  |j}| t||| jS )N)r<   r?   rL   r   Z	mpi_atan2r6   )r;   ru   r5   r7   r7   r8   atan2  s    zMPIntervalContext.atan2c             C   sx   t |tjr|dfS t |tr>|\}}| || | dfS | |}t || jr\|dfS t || jrp|dfS td S )NZRC)r3   r   r   tuplerU   r<   r   rA   )r;   r5   r   r   r7   r7   r8   _convert_param  s    

z MPIntervalContext._convert_paramc             C   s   t || jpt |tS )N)r3   rU   r   )r;   zr7   r7   r8   _is_real_type  s    zMPIntervalContext._is_real_typec             C   s   t || jS )N)r3   r   )r;   r   r7   r7   r8   _is_complex_type  s    z"MPIntervalContext._is_complex_typep  c             K   s   t |}t|}t||| }	| j }
}d}xzx|D ]}||| | 9 }q4W x|	D ]}||| |  }qRW |d7 }|| }||9 }|
|7 }
|dkr|
S ||kr.| jq.W d S )Nr   r   )listranger   ZNoConvergence)r;   r   r   typesZcoeffsr   Zmaxtermsr   ZnumZdenr^   rV   kir7   r7   r8   hypsum  s$    

 
    zMPIntervalContext.hypsum)N)N)r   )r   )rl   rm   rn   r   r   r   r   classmethodr   r   r   rp   r6   ZdpsrL   ry   r   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r7   r7   r7   r8   r   #  s4   

!
	
r   )Moperator r   Zlibmp.backendr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   rP   Zctx_baser0   objectr>   rr   r9   r:   rq   r   __add____radd____sub____rsub____mul____rmul__Z__div__Z__rdiv____pow____rpow____truediv____rtruediv__r   r   ZnumbersZComplexregisterZRealImportErrorr7   r7   r7   r8   <module>   s8   h]%   s