U
    ZÊ¹j;C  ã                   @   s0  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/ ddl0m1Z1 eefZ2ddl3m4Z4 e5j6Z7dd	„ Z8G d
d„ de5ƒZ9G dd„ de5ƒZ:dd„ Z;e;ee%ƒ\e9_<e9_=e:_<e:_=e;ee&ƒ\e9_>e9_?e:_>e:_?e;ee'ƒ\e9_@e9_Ae:_@e:_Ae;ee(ƒ\e9_Be9_Ce:_Be:_Ce;e!e)ƒ\e9_De9_Ee:_De:_Ee9jBe9_Fe9jCe9_Ge:jBe:_Fe:jCe:_GG dd„ de9ƒZHG dd„ de4ƒZIz$d dlJZJeJjK Le:¡ eJjM Le9¡ W n eNk
�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)Ú_matrix)ÚStandardBaseContextc                 C   sZ   t | dƒr| jS t| tƒr&t| ||ƒS t| tƒr<t| ||ƒS t| tƒrRt| ||ƒS t	‚d S )NÚ_mpf_)
Úhasattrr2   Ú
isinstancer   r   Úfloatr   r   r   ÚNotImplementedError)ÚxÚprecÚrounding© r:   úL/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mpmath/ctx_iv.pyÚconvert_mpf_   s    
 
 
 
 r<   c                   @   s(  e Zd ZdZd=dd„Zdd„ Zdd„ Zd	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d0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd>d;d<„Z d:S )?ÚivmpfzH
    Interval arithmetic class. Precision is controlled by iv.prec.
    r   c                 C   s   | j  |¡S ©N)ÚctxÚconvert)Úclsr7   r:   r:   r;   Ú__new__+   s    zivmpf.__new__c                 C   s&   | j \}}||kr|||ƒƒS t‚d S r>   )Ú_mpi_Ú
ValueError)ÚselfrA   Z	f_convertÚaÚbr:   r:   r;   Úcast.   s    
z
ivmpf.castc                 C   s   |   ttj¡S r>   )rH   Úintr   Zto_int©rE   r:   r:   r;   Ú__int__4   s    zivmpf.__int__c                 C   s   |   ttj¡S r>   )rH   r5   r   Úto_floatrJ   r:   r:   r;   Ú	__float__7   s    zivmpf.__float__c                 C   s   |   ttj¡S r>   )rH   Úcomplexr   rL   rJ   r:   r:   r;   Ú__complex__:   s    zivmpf.__complex__c                 C   s(   | j \}}||krt|ƒS t| j ƒS d S r>   )rC   r.   Úhash©rE   rF   rG   r:   r:   r;   Ú__hash__=   s    
zivmpf.__hash__c                 C   s   | S r>   r:   rJ   r:   r:   r;   ÚrealD   s    z
ivmpf.realc                 C   s   | j jS r>   )r?   ÚzerorJ   r:   r:   r;   ÚimagG   s    z
ivmpf.imagc                 C   s   | S r>   r:   rJ   r:   r:   r;   Ú	conjugateJ   ó    zivmpf.conjugatec                 C   s   | j \}}| j ||f¡S r>   ©rC   r?   Úmake_mpfrQ   r:   r:   r;   rF   L   s    
zivmpf.ac                 C   s   | j \}}| j ||f¡S r>   rX   rQ   r:   r:   r;   rG   Q   s    
zivmpf.bc                 C   s"   | j }t| j|jƒ}| ||f¡S r>   )r?   r   rC   r8   rY   ©rE   r?   Úvr:   r:   r;   ÚmidV   s    z	ivmpf.midc                 C   s"   | j }t| j|jƒ}| ||f¡S r>   )r?   r   rC   r8   rY   rZ   r:   r:   r;   Údelta\   s    zivmpf.deltac                 C   s
   | j tfS r>   )rC   Úmpi_zerorJ   r:   r:   r;   Ú_mpci_b   s    zivmpf._mpci_c                  G   s   t dƒ‚d S )Nz-no ordering relation is defined for intervals©Ú	TypeError)Úargsr:   r:   r;   Ú_comparef   s    zivmpf._comparec                 C   s$   | j  |¡}| j|jko"|j| jkS r>   )r?   ÚmpfrF   rG   )rE   Útr:   r:   r;   Ú__contains__n   s    zivmpf.__contains__c                 C   s   t | j| jjƒS r>   )r   rC   r?   r8   rJ   r:   r:   r;   Ú__str__r   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ÚstrrC   r	   r8   r   Zto_str)rE   rF   rG   Únr:   r:   r;   Ú__repr__u   s    
zivmpf.__repr__c                 C   s:   t |dƒs,z| j |¡}W n   t Y S X || j|jƒS )NrC   )r3   r?   r@   ÚNotImplementedrC   )Úsre   Zcmpfunr:   r:   r;   rc   ~   s    

c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_eq©rm   re   r:   r:   r;   Ú__eq__†   rW   zivmpf.__eq__c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_nern   r:   r:   r;   Ú__ne__‡   rW   zivmpf.__ne__c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_ltrn   r:   r:   r;   Ú__lt__ˆ   rW   zivmpf.__lt__c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_lern   r:   r:   r;   Ú__le__‰   rW   zivmpf.__le__c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_gtrn   r:   r:   r;   Ú__gt__Š   rW   zivmpf.__gt__c                 C   s   |   |tj¡S r>   )rc   r   Zmpi_gern   r:   r:   r;   Ú__ge__‹   rW   zivmpf.__ge__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   rY   r   rC   r8   rJ   r:   r:   r;   Ú__abs__�   s    zivmpf.__abs__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   rY   r   rC   r8   rJ   r:   r:   r;   Ú__pos__�   s    zivmpf.__pos__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   rY   r   rC   r8   rJ   r:   r:   r;   Ú__neg__‘   s    zivmpf.__neg__Nc                 C   s   | j  | |||¡S r>   ©r?   Zalmosteq©rm   re   Zrel_epsZabs_epsr:   r:   r;   Úae”   s    zivmpf.ae)r   )NN)!Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   rH   rK   rM   rO   rR   ÚpropertyrS   rU   rV   rF   rG   r\   r]   r_   rc   rs   rr   rt   rf   rg   rk   ro   rp   rq   ru   rv   rw   rz   r:   r:   r:   r;   r=   &   sR   







	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 r>   )r?   r@   ÚnewrC   r_   )rA   ÚreÚimÚyr:   r:   r;   rB   ™   s
    zivmpc.__new__c                 C   s<   | j \\}}\}}||kr.||kr.t||fƒS t| j ƒS d S r>   )r_   r/   rP   ©rE   rF   rG   ÚcÚdr:   r:   r;   rR       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?   rh   ri   ÚreprrS   rU   ©rm   r:   r:   r;   rk   §   s    zivmpc.__repr__c                 C   s   dt | jƒt | jƒf S )Nú(%s + %s*j))ri   rS   rU   r‰   r:   r:   r;   rg   ¬   s    zivmpc.__str__c                 C   s"   | j \\}}\}}| j ||f¡S r>   ©r_   r?   rY   r…   r:   r:   r;   rF   ¯   s    zivmpc.ac                 C   s"   | j \\}}\}}| j ||f¡S r>   r‹   r…   r:   r:   r;   rG   ´   s    zivmpc.bc                 C   s"   | j \\}}\}}| j ||f¡S r>   r‹   r…   r:   r:   r;   r†   ¹   s    zivmpc.cc                 C   s"   | j \\}}\}}| j ||f¡S r>   r‹   r…   r:   r:   r;   r‡   ¾   s    zivmpc.dc                 C   s   | j  | jd ¡S ©Nr   ©r?   rY   r_   r‰   r:   r:   r;   rS   Ã   s    z
ivmpc.realc                 C   s   | j  | jd ¡S ©Nr   r�   r‰   r:   r:   r;   rU   Ç   s    z
ivmpc.imagc                 C   s   | j \}}| j |t|ƒf¡S r>   )r_   r?   Úmake_mpcr   )rm   rF   rG   r:   r:   r;   rV   Ë   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 r>   )r?   r@   rF   rG   r†   r‡   )rm   re   Zreal_overlapZimag_overlapr:   r:   r;   ÚoverlapÏ   s    xxzivmpc.overlapc                 C   s$   | j  |¡}|j| jko"|j| jkS r>   )r?   r@   rS   rU   rn   r:   r:   r;   rf   Õ   s    zivmpc.__contains__Fc                 C   sn   t || jjƒs0z| j |¡}W n   t Y S X t|dƒrF|jtf}nt|dƒrV|j}|rd| j|kS | j|kS ©NrC   r_   )	r4   r?   Ú_typesr@   rl   r3   rC   r^   r_   )rm   re   ÚneÚtvalr:   r:   r;   rc   Ù   s    



zivmpc._comparec                 C   s
   |   |¡S r>   ©rc   rn   r:   r:   r;   ro   ç   rW   zivmpc.__eq__c                 C   s   |   |d¡S )NTr•   rn   r:   r:   r;   rp   è   rW   zivmpc.__ne__c                 C   s   t dƒ‚d S )Nz#complex intervals cannot be orderedr`   rn   r:   r:   r;   rq   ê   rW   zivmpc.__lt__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   r�   r$   r_   r8   r‰   r:   r:   r;   rw   í   rW   zivmpc.__neg__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   r�   r#   r_   r8   r‰   r:   r:   r;   rv   î   rW   zivmpc.__pos__c                 C   s   | j  t| j| j jƒ¡S r>   )r?   rY   r*   r_   r8   r‰   r:   r:   r;   ru   ï   rW   zivmpc.__abs__Nc                 C   s   | j  | |||¡S r>   rx   ry   r:   r:   r;   rz   ñ   s    zivmpc.ae)r   r   )F)NN)r{   r|   r}   rB   rR   rk   rg   r   rF   rG   r†   r‡   rS   rU   rV   r�   rf   rc   ro   rp   rq   rr   rs   rt   rw   rv   ru   rz   r:   r:   r:   r;   r€   —   s8   







r€   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 r>   )r�   r8   ©r?   Zsvalr”   )Ú	f_complexr:   r;   Ú	g_complexõ   s    z_binary_op.<locals>.g_complexc                    sL   z|   ˆ ||| jƒ¡W S  tk
rF   |tf}|tf}ˆ| ||ƒ Y S X d S r>   )rY   r8   r-   r^   r–   )Úf_realr˜   r:   r;   Úg_real÷   s    z_binary_op.<locals>.g_realc                    sf   t |tƒrtS | j}t ||jƒs*| |¡}t|dƒrDˆ|| j|jƒS t|dƒrbˆ || jtf|j	ƒS tS r‘   )
r4   r0   rl   r?   r’   r@   r3   rC   r^   r_   ©rm   re   r?   ©r˜   rš   r:   r;   Ú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 r‘   )	r?   r4   r’   r@   r3   rC   r_   r^   rl   r›   rœ   r:   r;   Úrop_real  s     

 
 z_binary_op.<locals>.rop_realc              	      s`   t |tƒrtS | j}t || jjƒsPz| j |¡}W n ttfk
rN   t Y S X ˆ || j|jƒS r>   )	r4   r0   rl   r?   r’   r@   rD   ra   r_   r›   ©r˜   r:   r;   Úlop_complex  s    
 
z_binary_op.<locals>.lop_complexc                    s0   | j }t|| j jƒs | j  |¡}ˆ ||j| jƒS r>   )r?   r4   r’   r@   r_   r›   rŸ   r:   r;   Úrop_complex  s    z_binary_op.<locals>.rop_complexr:   )r™   r—   r�   rž   r    r¡   r:   )r—   r™   r˜   rš   r;   Ú
_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 r>   )r�   Ú_f)rA   ÚfrE   r:   r:   r;   rB   %  s    zivmpf_constant.__new__c                 C   s,   | j jd }|  |t¡}|  |t¡}||fS rŒ   )r?   Ú_precr¤   r
   r   )rE   r8   rF   rG   r:   r:   r;   Ú	_get_mpi_)  s    zivmpf_constant._get_mpi_N)r{   r|   r}   rB   r§   r   rC   r:   r:   r:   r;   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=   r€   r£   é5   F)Útyper=   rd   r€   Úmpcr’   r£   Ú	_constantr¦   Ú	_set_precr�   Z_ctxdatar?   rh   r1   Ú__init__Ú_init_builtins©r?   r:   r:   r;   r®   2  s    
"
zMPIntervalContext.__init__Nc                 C   s    |d kr|   |¡S |   ||f¡S r>   )rd   )r?   rF   rG   r:   r:   r;   Ú_mpi?  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   )r8   Zrndr:   r:   r;   Ú<lambda>W  rW   z2MPIntervalContext._init_builtins.<locals>.<lambda>)=rd   ÚonerT   r²   Úninfr³   r«   ÚjÚ_wrap_mpi_functionr   Zmpi_expr+   ÚexpZmpi_sqrtÚsqrtZmpi_logr,   ÚlnZmpi_cosZmpci_cosÚcosZmpi_sinZmpci_sinÚsinZmpi_tanÚtanZ	mpi_gammaZ
mpci_gammaÚgammaZmpi_loggammaZmpci_loggammaZloggammaZ
mpi_rgammaZmpci_rgammaZrgammaZmpi_factorialZmpci_factorialÚ	factorialZfacr¬   ÚepsZmpf_piÚpiZmpf_eÚeZmpf_ln2Zln2Zmpf_ln10Zln10Zmpf_phiÚphiZ	mpf_eulerZeulerZmpf_catalanÚcatalanZmpf_glaisherZglaisherZmpf_khinchinZkhinchinZmpf_twinprimeZ	twinprimer°   r:   r:   r;   r¯   D  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 )Nr8   r   rC   r_   )	Úgetr¦   r@   r3   rY   rC   r�   r_   rD   )r7   Úkwargsr8   ©r?   r—   r™   r:   r;   Úgd  s    



z/MPIntervalContext._wrap_mpi_function.<locals>.gr:   )r?   r™   r—   rÊ   r:   rÉ   r;   r¹   c  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 5 || _X |
 S )Nc                    s   g | ]}ˆ |ƒ‘qS r:   r:   )Ú.0rF   ©r@   r:   r;   Ú
<listcomp>v  s     zFMPIntervalContext._wrap_specfun.<locals>.f_wrapped.<locals>.<listcomp>é
   )r@   r8   )r?   rb   rÈ   r8   Úretval©r¥   rÌ   r;   Ú	f_wrappedt  s    z2MPIntervalContext._wrap_specfun.<locals>.f_wrapped)Úsetattr)rA   Únamer¥   ÚwraprÑ   r:   rÐ   r;   Ú_wrap_specfunq  s    zMPIntervalContext._wrap_specfunc                 C   s"   t dt|ƒƒ| jd< t|ƒ| _d S )Nr   r   )ÚmaxrI   r¦   r   Ú_dps©r?   rj   r:   r:   r;   r­   ‚  s    zMPIntervalContext._set_precc                 C   s"   t |ƒ| jd< tdt|ƒƒ| _d S r´   )r   r¦   rÖ   rI   r×   rØ   r:   r:   r;   Ú_set_dps†  s    zMPIntervalContext._set_dpsc                 C   s
   | j d S rŒ   )r¦   r°   r:   r:   r;   rµ   Š  rW   zMPIntervalContext.<lambda>c                 C   s   | j S r>   )r×   r°   r:   r:   r;   rµ   ‹  rW   c                 C   s   t | jƒ}||_|S r>   )r�   rd   rC   ©r?   r[   rF   r:   r:   r;   rY   �  s    
zMPIntervalContext.make_mpfc                 C   s   t | jƒ}||_|S r>   )r�   r«   r_   rÚ   r:   r:   r;   r�   ’  s    
zMPIntervalContext.make_mpcc                 C   s:   |\}}t  ||| jt¡}t  ||| jt¡}|  ||f¡S r>   )r   r   r8   r
   r   rY   )r?   ZpqÚpÚqrF   rG   r:   r:   r;   Ú_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	ƒr€t
|| jƒ}|  |¡S t|dƒr–|j\}}nvz|\}}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_rC   r   r   z"endpoints must be properly ordered)r4   rd   r«   r¬   rN   r3   r@   rS   rU   r   r"   r8   rY   rC   ra   rD   r<   r
   r   r   r   r   r   ÚAssertionError)r?   r7   r‚   rƒ   r[   rF   rG   r:   r:   r;   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 )NrC   r_   r   r   rŠ   )r@   r3   r   Z
mpi_to_strrC   r_   )r?   r7   rj   rÈ   r‚   rƒ   r:   r:   r;   Ú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 rŽ   )r@   r4   r«   rÖ   ÚmagrS   rU   r   r   rC   r   r·   r   r³   r²   ©r?   r7   rF   rG   ÚsignÚmanrº   Úbcr:   r:   r;   rá   Ç  s    
zMPIntervalContext.magc                 C   s   dS )NFr:   ©r?   r7   r:   r:   r;   ÚisnanÕ  s    zMPIntervalContext.isnanc                 C   s
   || j kS r>   )r²   ræ   r:   r:   r;   ÚisinfØ  s    zMPIntervalContext.isinfc                 C   s@   |   |¡}|j\}}||kr<|\}}}}|r4|dkS |tkS d S rŒ   )r@   rC   r   râ   r:   r:   r;   ÚisintÛ  s    

zMPIntervalContext.isintc                 C   s6   |   |¡j\}}t ||¡}t ||¡}|  ||f¡S r>   )r@   rC   r   Z	mpf_shiftrY   )r?   r7   rj   rF   rG   r:   r:   r;   Úldexpå  s    zMPIntervalContext.ldexpc                 C   s   t |  |¡ƒjS r>   )Úabsr@   rF   ræ   r:   r:   r;   Úabsminë  s    zMPIntervalContext.absminc                 C   s   t |  |¡ƒjS r>   )rë   r@   rG   ræ   r:   r:   r;   Úabsmaxî  s    zMPIntervalContext.absmaxc                 C   s.   |   |¡j}|   |¡j}|  t ||| j¡¡S r>   )r@   rC   rY   r   Z	mpi_atan2r8   )r?   r„   r7   r:   r:   r;   Ú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)r4   r   r   Útuplerd   r@   r«   rD   )r?   r7   rÛ   rÜ   r:   r:   r;   Ú_convert_paramö  s    

z MPIntervalContext._convert_paramc                 C   s   t || jƒpt |tƒS r>   )r4   rd   r   ©r?   Úzr:   r:   r;   Ú_is_real_type  s    zMPIntervalContext._is_real_typec                 C   s   t || jƒS r>   )r4   r«   rô   r:   r:   r;   Ú_is_complex_type  s    z"MPIntervalContext._is_complex_typeép  c                 K   s    t |ƒ}t|ƒ}t||| ƒ}	| j }
}d}|D ]}||| | 9 }q0|	D ]}||| |  }qJ|d7 }|| }||9 }|
|7 }
|dkrŒ|
S ||kr,| j‚q,d S r´   )ÚlistÚranger¶   ZNoConvergence)r?   rÛ   rÜ   ÚtypesZcoeffsrõ   ZmaxtermsrÈ   ÚnumZdenrm   re   ÚkÚir:   r:   r;   Úhypsum	  s"    
     zMPIntervalContext.hypsum)N)N)rß   )rø   )r{   r|   r}   r®   r±   r¯   r¹   ÚclassmethodrÕ   r­   rÙ   r   r8   ZdpsrY   r�   rÝ   r@   rà   rá   rç   rè   ré   rê   rì   rí   rî   ró   rö   r÷   rÿ   r:   r:   r:   r;   r¨   0  s6   


!
	
r¨   )OÚ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/   Zmatrices.matricesr0   r^   Zctx_baser1   ÚobjectrB   r�   r<   r=   r€   r¢   Ú__add__Ú__radd__Ú__sub__Ú__rsub__Ú__mul__Ú__rmul__Z__div__Z__rdiv__Ú__pow__Ú__rpow__Ú__truediv__Ú__rtruediv__r£   r¨   ÚnumbersÚComplexÚregisterÚRealÚImportErrorr:   r:   r:   r;   Ú<module>   s:   ¸q]'   s