a
    <bk                     @   sT  d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZmZ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l/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< dd Z=eefZ>eefZ?dd	 Z@d
d ZAdd ZBdd ZCdd ZDdd ZEdddZFdddZGdd ZHdd ZIdd ZJddd ZKdd!d"ZLd#d$ ZMd%d& ZNdd'd(ZOdd)d*ZPd+d, ZQd-d. ZRd/d0 ZSd1d2 ZTd3d4 ZUd5d6 ZVd7d8 ZWd9d: ZXd;d< ZYd=d> ZZd?d@ Z[dAdB Z\dCdD Z]dEdF Z^dGdH Z_dIdJ Z`dKdL ZadMdN ZbddSdTZcdUdV ZddWdX ZeddYdZZfd[d\ Zgd]d^ Zhd_d` Zidadb Zjdcdd Zkdedf Zldgdh Zmdidj Zndkdl Zodmdn Zpdodp Zqdqdr Zrdsdt Zsdudv Ztdwdx ZuedyZvedzZwevewfZxed{Zyed|Zzd}d~ Z{dddZ|dddZ}dd Z~dd Zdd Zdd Zdd Zdd ZdS )z3
Computational functions for interval arithmetic.

   )xrange)+ComplexResult
round_downround_upround_floorround_ceilinground_nearestprec_to_dpsrepr_dpsdps_to_precbitcount
from_floatfnanfinffninffzerofhalffonefnonempf_signmpf_ltmpf_lempf_gtmpf_gempf_eqmpf_cmpmpf_min_max	mpf_floorfrom_intto_intto_strfrom_strmpf_absmpf_negmpf_posmpf_addmpf_submpf_mulmpf_mul_intmpf_div	mpf_shiftmpf_pow_intfrom_man_expMPZ_ONE)mpf_logmpf_expmpf_sqrtmpf_atan	mpf_atan2mpf_pimod_pi2mpf_cos_sin)	mpf_gamma
mpf_rgammampf_loggammampc_loggammac                 C   s,   | \}}t |d }dt||t||f S )N   z[%s, %s])r	   r    )sprecsasbdps r@   c/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/mpmath/libmp/libmpi.pympi_str   s    rB   c                 C   s   | |kS Nr@   r;   tr@   r@   rA   mpi_eq)   s    rF   c                 C   s   | |kS rC   r@   rD   r@   r@   rA   mpi_ne,   s    rG   c                 C   s0   | \}}|\}}t ||rdS t||r,dS d S NTF)r   r   r;   rE   r=   r>   tatbr@   r@   rA   mpi_lt/   s
    rL   c                 C   s0   | \}}|\}}t ||rdS t||r,dS d S rH   )r   r   rI   r@   r@   rA   mpi_le6   s
    rM   c                 C   s
   t || S rC   )rL   rD   r@   r@   rA   mpi_gt=       rN   c                 C   s
   t || S rC   )rM   rD   r@   r@   rA   mpi_ge>   rO   rP       c           	      C   sL   | \}}|\}}t |||t}t |||t}|tkr8t}|tkrDt}||fS rC   )r%   r   r   r   r   r   	r;   rE   r<   r=   r>   rJ   rK   abr@   r@   rA   mpi_add@   s    rU   c           	      C   sL   | \}}|\}}t |||t}t |||t}|tkr8t}|tkrDt}||fS rC   )r&   r   r   r   r   r   rR   r@   r@   rA   mpi_subI   s    rV   c                 C   s   | \}}t |||tS rC   )r&   r   r;   r<   r=   r>   r@   r@   rA   	mpi_deltaR   s    rX   c                 C   s   | \}}t t|||tdS )N)r*   r%   r   rW   r@   r@   rA   mpi_midV   s    rZ   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r$   r   r   r;   r<   r=   r>   rS   rT   r@   r@   rA   mpi_posZ   s    r\   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r#   r   r   r[   r@   r@   rA   mpi_neg`   s    r]   c           	      C   s   | \}}t |}t |}|dkr:t||t}t||t}nR|dkrtt}t|}t||rft||t}qt||t}nt||t}t||t}||fS NrQ   )r   r$   r   r   r   r#   r   )	r;   r<   r=   r>   sassbsrS   rT   Znegsar@   r@   rA   mpi_absf   s    
ra   c                 C   s   t | ||f|S rC   )mpi_mulr;   rE   r<   r@   r@   rA   mpi_mul_mpf}   s    rd   c                 C   s   t | ||f|S rC   )mpi_divrc   r@   r@   rA   mpi_div_mpf   s    rf   c                 C   s  | \}}|\}}t |}t |}t |}	t |}
||  krDdkrhn n |tksX|tkr`ttfS ttfS |	|
  kr|dkrn n |tks|tkrttfS ttfS |dkrh|	dkrt|||t}t|||t}|tkrt}|tkrt}n||
dkr,t|||t}t|||t}|tkrt}|tkrdt}n8t|||t}t|||t}|tkrVt}|tkrt}n*|dkr4|	dkrt|||t}t|||t}|tkrt}|tkr2t}n||
dkrt|||t}t|||t}|tkrt}|tkr2t}n8t|||t}t|||t}|tkr$t}|tkrt}n^t||t||t||t||g}t|v rntt }}n$t|\}}t	||t}t	||t}||fS r^   )
r   r   r   r   r'   r   r   r   r   r$   )r;   rE   r<   r=   r>   rJ   rK   r_   r`   tastbsrS   rT   Zcasesr@   r@   rA   rb      sf    




$
rb   c                 C   s   | \}}t |tr0t|||t}t|||t}nRt|trXt|||t}t|||t}n*t|}t||g\}}t}t|||t}||fS rC   )r   r   r'   r   r   r   r#   r   r[   r@   r@   rA   
mpi_square   s    

ri   c                 C   s  | \}}|\}}t |}t |}t |}	t |}
||  krDdkrxn n0|	dk rX|
dksh|	dksh|
dkrpttfS ttfS |	dk r|
dkrttfS |	dk rtt| t||S |	dkr|dk r|dkrttfS |	|
krttfS |dkrt|||t}t}|dkrt}t|||t}n|dkrZt|||t}t|||t}|t	krJt}|t	krt}n||dkrt|||t}t|||t}|t	krt}|t	krt}n8t|||t}t|||t}|t	krt}|t	krt}||fS r^   )
r   r   r   r   re   r]   r)   r   r   r   )r;   rE   r<   r=   r>   rJ   rK   r_   r`   rg   rh   rS   rT   r@   r@   rA   re      sP     



re   c                 C   s   t | t}t | t}||fS rC   )r3   r   r   )r<   rS   rT   r@   r@   rA   mpi_pi  s    

rj   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r/   r   r   r[   r@   r@   rA   mpi_exp  s    rk   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r.   r   r   r[   r@   r@   rA   mpi_log  s    rl   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r0   r   r   r[   r@   r@   rA   mpi_sqrt$  s    rm   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r1   r   r   r[   r@   r@   rA   mpi_atan+  s    rn   c           	      C   s  | \}}|dk r.t ttft| | |d |S |dkr>ttfS |dkrJ| S |dkr\t| |S |d@ rt|||t}t|||t}nt|}t|}|dkrt|||t}t|||t}n\|dkrt|||t}t|||t}n6t}t	|}t
||rt|||t}nt|||t}||fS NrQ      r      )re   r   mpi_pow_intri   r+   r   r   r   r   r#   r   )	r;   nr<   r=   r>   rS   rT   r_   r`   r@   r@   rA   rr   1  s4    
rr   c                 C   sv   |\}}||krN|t tfvrN|tt|kr<t| t||S |tkrNt| |S t| |d }t|||d }t	||S Nrp   )
r   r   r   r   rr   r   rm   rl   rb   rk   )r;   rE   r<   rJ   rK   uvr@   r@   rA   mpi_powV  s    
rw   c                 C   s   t | |r| S |S rC   )r   xyr@   r@   rA   MINa  s    
r{   c                 C   s   t | |r| S |S rC   )r   rx   r@   r@   rA   MAXf  s    
r|   c                 C   sZ   | \}}}}| t krtt dfS t| |\}}t|||| d\}}	}
|rPd|	 }	|||	fS )NrQ      rY   )r   r   r5   r4   )ry   wpsignmanexpbccr;   rE   rs   Zwp_r@   r@   rA   cos_sin_quadrantk  s    
r   c                    s  | \}}||  krt kr0n nttft t ffS t| v s@t| v rPttfttffS d }t||\}}}t||\}}	}
t||g\}}t||	g\}}	||
krn|
| dkrttfttffS |d |
d krt}|d d |
d d krt}|d d |
d d krt}	|d d |
d d kr*t}tt|> td>  | tt|> td>  |   fdd}||t	}||t
}||t	}||	t
}	||f||	ffS )	Nrp      rq   r      
   c                    sT   t | d |tkkr}n }t| ||} | \}}}}|| dkrP|rLtS tS | S )NrQ   r   )boolr   r'   r   r   )rv   roundingpr   r   r   r   Zlessmorer<   r@   rA   finalize  s    zmpi_cos_sin.<locals>.finalize)r   r   r   r   r   r   r   r,   r-   r   r   )ry   r<   rS   rT   r~   car=   nacbr>   nbr   r@   r   rA   mpi_cos_sinv  s<    



r   c                 C   s   t | |d S r^   r   ry   r<   r@   r@   rA   mpi_cos  s    r   c                 C   s   t | |d S Nr   r   r   r@   r@   rA   mpi_sin  s    r   c                 C   s   t | |d \}}t|||S rt   r   re   ry   r<   cossinr@   r@   rA   mpi_tan  s    r   c                 C   s   t | |d \}}t|||S rt   r   r   r@   r@   rA   mpi_cot  s    r   c           	      C   s   |d }t | |t}t | |t}t ||t}t|ts:J |rlttt|t|||t}t|t	d|t}t
|||t}t|||t}||fS )Nrp   d   )r!   r   r   r   r   r'   r|   r"   r)   r   r&   r%   )	ry   rz   percentr<   r~   xaxbrS   rT   r@   r@   rA   mpi_from_str_a_b  s    r   c           
      C   s  t d|  }| dd} |d }d| v rD| d\}}t||d|S d| v r| d dks`d	| vrd|| d	d} d}d
| v r| d d
kr|d}| d
d} | d\}}t||||S d| v rd| vsd| vr|| d dkr*| dd} | dd} | d\}}t||t}t||t}||fS | d\}}|d\}}	d| v r`|	d\}	}n|	dd }	}t|| | |t}t||	 | |t}||fS n t| |t}t| |t}||fS dS )a  
    Parse an interval number given as a string.

    Allowed forms are

    "-1.23e-27"
        Any single decimal floating-point literal.
    "a +- b"  or  "a (b)"
        a is the midpoint of the interval and b is the half-width
    "a +- b%"  or  "a (b%)"
        a is the midpoint of the interval and the half-width
        is b percent of a (`a 	imes b / 100`).
    "[a, b]"
        The interval indicated directly.
    "x[y,z]e"
        x are shared digits, y and z are unequal digits, e is the exponent.

    z&Improperly formed interval number '%s'  rp   +-F(rQ   )%rY   T,[]eN)
ValueErrorreplacesplitr   r!   r   r   rstrip)
r;   r<   r   r~   ry   rz   r   rS   rT   zr@   r@   rA   mpi_from_str  sN    


r   T[]bracketsr   c                 K   s  t |}|d }| \}	}
t| |}t| |}t|	|fi |}t|
|fi |}t||fi |}d}|rnd}|\}}|dkrtt|d|fi |}|| d | | }n&|dkr|tkrt}n$t|td}t|t|td	|}|| d
 t|| d }n|dkr.|| d | | | }n|dkr||krnt|	|d fi |}t|
|d fi |}|	d}	t
|	dkr|	d |	d}
t
|
dkr|
d |	d |
d kr|	d |
d krrtt
|	d d D ]&}|	d | |
d | kr qq|	d d| | |	d |d  d | |
d |d  | dtt
|	d d  |	d  }n.|	d | | dtt
|	d d  |	d  }n$|d|	 d | d|
 | }ntd| |S )a  
    Convert a mpi interval to a string.

    **Arguments**

    *dps*
        decimal places to use for printing
    *use_spaces*
        use spaces for more readable output, defaults to true
    *brackets*
        pair of strings (or two-character string) giving left and right brackets
    *mode*
        mode of display: 'plusminus', 'percent', 'brackets' (default) or 'diff'
    *error_dps*
        limit the error to *error_dps* digits (mode 'plusminus and 'percent')

    Additional keyword arguments are forwarded to the mpf-to-string conversion
    for the components of the output.

    **Examples**

        >>> from mpmath import mpi, mp
        >>> mp.dps = 30
        >>> x = mpi(1, 2)._mpi_
        >>> mpi_to_str(x, 2, mode='plusminus')
        '1.5 +- 0.5'
        >>> mpi_to_str(x, 2, mode='percent')
        '1.5 (33.33%)'
        >>> mpi_to_str(x, 2, mode='brackets')
        '[1.0, 2.0]'
        >>> mpi_to_str(x, 2, mode='brackets' , brackets=('<', '>'))
        '<1.0, 2.0>'
        >>> x = mpi('5.2582327113062393041', '5.2582327113062749951')._mpi_
        >>> mpi_to_str(x, 15, mode='diff')
        '5.2582327113062[4, 7]'
        >>> mpi_to_str(mpi(0)._mpi_, 2, mode='percent')
        '0.0 (0.0%)'

    rp   r   r   Z	plusminusrY   r   r   r   rq   r   z%)r   r   diffr   r   r   rQ   Nz%'%s' is unknown mode for printing mpi)r   rZ   rX   r    r*   r   r'   r   r)   r   lenappendr   minjoinr   )ry   r?   Z
use_spacesr   modeZ	error_dpskwargsr<   r~   rS   rT   ZmiddeltaZa_strZb_strZmid_strspZbr1Zbr2Z	delta_strr;   r   ir@   r@   rA   
mpi_to_str  s^    (










>0&r   c                 C   s(   | \}}|\}}t |||t |||fS rC   )rU   ry   rz   r<   rS   rT   r   dr@   r@   rA   mpci_addd  s    r   c                 C   s(   | \}}|\}}t |||t |||fS rC   )rV   r   r@   r@   rA   mpci_subi  s    r   c                 C   s   | \}}t ||t ||fS rC   )r]   ry   r<   rS   rT   r@   r@   rA   mpci_negn  s    r   c                 C   s   | \}}t ||t ||fS rC   )r\   r   r@   r@   rA   mpci_posr  s    r   c                 C   sX   | \}}|\}}t ||}t ||}t|||}	t ||}
t ||}t|
||}|	|fS rC   )rb   rV   rU   )ry   rz   r<   rS   rT   r   r   Zr1Zr2rei1i2imr@   r@   rA   mpci_mulv  s    



r   c                 C   s   | \}}|\}}|d }t |}t |}	t||	|}
tt||t|||}tt||t|||}t||
|}t||
|}||fS rt   )ri   rU   rb   rV   re   )ry   rz   r<   rS   rT   r   r   r~   m1m2mr   r   r@   r@   rA   mpci_div  s    r   c                 C   sH   | \}}|d }t ||}t||\}}t|||}t|||}||fS rt   )rk   r   rb   )ry   r<   rS   rT   r~   rr   r;   r@   r@   rA   mpci_exp  s    
r   c                 C   s   | \}}t ||t ||fS rC   )r*   )ry   rs   rS   rT   r@   r@   rA   	mpi_shift  s    r   c                 C   sR   |d }t | |}tt||}t|||}t|||}t|d}t|d}||fS )Nrp   rY   )rk   re   mpi_onerU   rV   r   )ry   r<   r~   e1e2r   r;   r@   r@   rA   mpi_cosh_sinh  s    


r   c                 C   sP   | \}}|d }t ||\}}t||\}}t|||}	t|||}
|	t|
fS Nr   )r   r   rb   r]   ry   r<   rS   rT   r~   r   r;   chshr   r   r@   r@   rA   mpci_cos  s    r   c                 C   sL   | \}}|d }t ||\}}t||\}}t|||}	t|||}
|	|
fS r   )r   r   rb   r   r@   r@   rA   mpci_sin  s    r   c                 C   sR   | \}}|t krt|S |t kr(t|S t|}t|}t|||d }t||S rt   )mpi_zerora   ri   rU   rm   )ry   r<   rS   rT   rE   r@   r@   rA   mpci_abs  s    r   c           	      C   s<  | \}}|\}}||  kr$t kr>n nt|t r6tS t|S t|t rt|t rbt|||t}nt|||t}t|t rt|||t}nt|||t}nt|t rt|||t}t|t rt|||t}nt|||t}nXt|t r"t|||t}t|t rt|||t}nt|||t}nt|t}t	|}||fS rC   )
r   r   r   rj   r2   r   r   r   r3   r#   )	rz   ry   r<   yaybr   r   rS   rT   r@   r@   rA   	mpi_atan2  s4    






r   c                 C   s   | \}}t |||S rC   )r   )r   r<   ry   rz   r@   r@   rA   mpci_arg  s    r   c                 C   s.   | \}}t t| |d |}t| |}||fS rt   )rl   r   r   )r   r<   ry   rz   r   r   r@   r@   rA   mpci_log  s    
r   c                 C   s   |\}}|t krh|\}}||krh|\}}}	}
|rT|	dkrTt| d| t||	>  |S |tkrht| d|S |d }tt|t| |||S )NrQ   rY   rp   )r   mpci_pow_intintr   r   r   r   )ry   rz   r<   ZyreZyimr   r   r   r   r   r   r~   r@   r@   rA   mpci_pow  s    r   c                 C   s:   | \}}t t|t||}t|||}t|d}||fS r   )rV   ri   rb   r   )ry   r<   rS   rT   r   r   r@   r@   rA   mpci_square  s
    
r   c                 C   s   |dk r&t ttft| | |d |S |dkr6ttfS |dkrHt| |S |dkrZt| |S |d }ttf}|r|d@ rt|| |}|d8 }t| |} |dL }qjt||S ro   )r   r   r   r   r   r   r   )ry   rs   r<   r~   resultr@   r@   rA   r     s"    



r   g#+Vcb?gVcb?gg?c                 C   s0   | \}}|\}}t ||rdS t||r,dS dS )NFT)r   r   )ry   rz   rS   rT   r   r   r@   r@   rA   mpi_overlap&  s
    r   c           	      C   s  | \}}|d }|dkr,t t| t||dS t|tr|dkrXt||t}t||t}nB|dkrzt||t}t||t}n |dkrt	||t}t	||t}nt|t
rt|tr|dkrt||t}t||t}nD|dkrt||t}t||t}n"|dkrt	||t}t	||t}n|t| t|}|dkrJtt ||d d| |S |dkrltt ||d d| |S |dkrtt ||d dt| |d |S ||fS )Nrp   r   rQ   rq   r   )	mpi_gammarU   r   r   gamma_min_br6   r   r   r7   r8   r   r   gamma_min_are   rb   rV   rl   )	r   r<   typerS   rT   r~   r   r   znewr@   r@   rA   r   2  s:    

"",r   c                 C   s  | \\}}\}}||  kr$t krJn n"|dks:t|t rJt| ||tfS |d }|dkr|d |d  }|d |d  }	|t krt||	}
n|	}
tt|}tt|}t||}td||
 }|t|7 }|dkrt||ft	|\}}||f||ff} d}t
|trt||fttfrt||ft	|||ff}|dkrXtt||d d| |S |dkrztt||d d| |S |dkrtt||d dt| |d |S t|t rt||f|t}t||f|t}t||f|t}t||f|t}nt|t rBt||f|t}t||f|t}t||f|t}t||f|t}nbt|t f|t}tt||rtt||f|t}nt||f|t}t||f|t}t||f|t}|d |d f|d |d ff}|dkrt|d |t|d |fS |dkrt|}t||S )Nr   rp   rq   rQ   r   )r   r   r   r   maxabsr   r   rU   r   r   r   r   gamma_mono_imag_agamma_mono_imag_br   
mpci_gammar   r   r   r   r9   r   r   r   r#   r\   r   r   )r   r<   r   Za1Za2b1b2r~   ZamagZbmagZmagZanZbnZabsnZ
gamma_sizer   ZminreZmaxreZminimZmaximwr@   r@   rA   r   W  s\    *
$"", 

r   c                 C   s   t | |ddS Nr   r   r   r   r<   r@   r@   rA   mpi_loggamma  rO   r   c                 C   s   t | |ddS r   r   r   r@   r@   rA   mpci_loggamma  rO   r   c                 C   s   t | |ddS Nrq   r   r   r   r@   r@   rA   
mpi_rgamma  rO   r   c                 C   s   t | |ddS r   r   r   r@   r@   rA   mpci_rgamma  rO   r   c                 C   s   t | |ddS Nr   r   r   r   r@   r@   rA   mpi_factorial  rO   r  c                 C   s   t | |ddS r  r   r   r@   r@   rA   mpci_factorial  rO   r  N)rQ   )rQ   )rQ   )rQ   )rQ   )rQ   )Tr   r   r   )rQ   )rQ   )rQ   )__doc__backendr   Zlibmpfr   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	libelefunr.   r/   r0   r1   r2   r3   r4   r5   Z	gammazetar6   r7   r8   r9   rB   r   r   rF   rG   rL   rM   rN   rP   rU   rV   rX   rZ   r\   r]   ra   rd   rf   rb   ri   re   rj   rk   rl   rm   rn   rr   rw   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	gamma_minr   r   r   r   r   r   r   r   r   r  r  r@   r@   r@   rA   <module>   s   (	
	
	


D
;%4B
\
			&
%
I