U
    ZÊ¹jæk  ã                   @   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„ ZEd�dd„ZFd‘dd„ZGdd„ ZHdd„ ZIdd„ ZJd’dd „ZKd“d!d"„ZLd#d$„ ZMd%d&„ ZNd”d'd(„ZOd•d)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„ Zbd–dSdT„ZcdUdV„ ZddWdX„ Zed—dYdZ„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{d˜dd€„Z|d™d�d‚„Z}dƒd„„ Z~d…d†„ Zd‡dˆ„ Z€d‰dŠ„ Z�d‹dŒ„ Z‚d�dŽ„ Zƒd�S )š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@   úR/var/www/html/bwave/python/venv/lib/python3.8/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ƒ}qŒt||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r n n |tks�|tkr˜ttfS ttfS |dk�rh|	dkrèt|||tƒ}t|||tƒ}|tkrÚt}|tkræt}n||
dk�r,t|||tƒ}t|||tƒ}|tk�rt}|tk�rdt}n8t|||tƒ}t|||tƒ}|tk�rVt}|tk�r’t}�n*|dk�r4|	dk�r¶t|||tƒ}t|||tƒ}|tk�r¦t}|tk�r2t}n||
dk�rút|||tƒ}t|||tƒ}|tk�rêt}|tk�r2t}n8t|||tƒ}t|||tƒ}|tk�r$t}|tk�r’t}n^t||ƒt||ƒt||ƒt||ƒg}t|k�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   ƒ   s~    
  

 
 
 
 


 
 

 
 
 
 $
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r�ttfS |	dk r¬tt| ƒt|ƒ|ƒS |	dk�r|dk rÎ|dkrÎttfS |	|
krÞttfS |dkrøt|||tƒ}t}|dk�rÖt}t|||tƒ}nÀ|dk�rZt|||tƒ}t|||tƒ}|t	k�rJt}|t	k�rÖt}n||dk�ržt|||tƒ}t|||tƒ}|t	k�rŽt}|t	k�rÖt}n8t|||tƒ}t|||tƒ}|t	k�rÈt}|t	k�rÖt}||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   Ö   s\     



 
 

 
 
 
 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@ r‚t|||tƒ}t|||tƒ}n’t|ƒ}t|ƒ}|dkr¸t|||tƒ}t|||tƒ}n\|dkrÞt|||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k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| ks@t| krPttfttffS ˆd }t||ƒ\}}}t||ƒ\}}	}
t||gƒ\}}t||	gƒ\}}	||
kr¢nˆ|
| dkr¾ttfttffS |d |
d krÒt}|d d |
d d krît}|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‚   ©Ú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:t‚|rlttt|ƒt|ƒƒ||tƒ}t	|t
dƒ|tƒ}t|||tƒ}t|||tƒ}||fS )Nrp   éd   )r!   r   r   r   r   ÚAssertionErrorr'   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| krD|  d¡\}}t||d|ƒS d| kr¸| d dks`d	| krd|‚|  d	d¡} d}d
| krœ| d d
krŒ|‚d}|  d
d¡} |  d¡\}}t||||ƒS d| k�r¢d| ksÒd| krÖ|‚| d dk�r*|  dd¡} |  dd¡} |  d¡\}}t||tƒ}t||tƒ}||fS |  d¡\}}| d¡\}}	d| k�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|Ž}t|
|f|Ž}t||f|Ž}d}|rbd}|\}}|dkržtt|dƒ|f|Ž}|| d | | }�n|dkrö|tkr´t}n$t|tdƒƒ}t|t|td	ƒƒ|ƒ}|| d
 t||ƒ d }�nÄ|dk�r|| d | | | }�nž|dk�r®||k�rTt|	|d f|Ž}t|
|d f|Ž}| 	d¡}	t
|	ƒdk�rv|	 d¡ | 	d¡}
t
|
ƒdk�r˜|
 d¡ |	d |
d k�rˆ|	d |
d k�rXt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   Ú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Ä   Úr1Ú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 ƒršt|t ƒrbt|||tƒ}nt|||tƒ}t|t ƒrŠt|||tƒ}nt|||tƒ}nšt|t ƒrÜt|||tƒ}t|t ƒrÌt|||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@ rŠt|| |ƒ}|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#+VcØb÷?gÛVcØb÷?gš™™™™™ñ¿gš™™™™™ñ?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ršt	||tƒ}t	||tƒ}nüt|t
ƒ�rt|tƒ�r|dkrÖt||tƒ}t||tƒ}nD|dkrøt||tƒ}t||tƒ}n"|dk�r˜t	||tƒ}t	||tƒ}n|t| t|ƒ}|dk�rJtt ||d dƒ| |ƒS |dk�rltt ||d dƒ| |ƒS |dk�r˜t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rŽt||	ƒ}
n|	}
tt|ƒƒ}tt|ƒƒ}t||ƒ}td||
 ƒ}|t|ƒ7 }|dkrþt||ft	|ƒ\}}||f||ff} d}t
|tƒ�r¦t||fttfƒ�r¦t||ft	|ƒ||ff}|dk�rXtt||d dƒ| |ƒS |dk�rztt||d dƒ| |ƒS |dk�r¦tt||d dƒt| |d ƒ|ƒS t|t ƒ�rôt||f|tƒ}t||f|tƒ}t||f|tƒ}t||f|tƒ}n°t|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�rêt|d |ƒt|d |ƒfS |dk�rüt|ƒ}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bmagÚmagZanZbnZabsnZ
gamma_sizeró   ZminreZmaxreZminimZmaximÚwr@   r@   rA   rø   W  sd    *
 
 
 
 " 

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