o
    lhk                     @   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@   g/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/libmp/libmpi.pympi_str   s   rB   c                 C   s   | |kS Nr@   r;   tr@   r@   rA   mpi_eq)      rF   c                 C   s   | |kS rC   r@   rD   r@   r@   rA   mpi_ne,   rG   rH   c                 C   0   | \}}|\}}t ||rdS t||rdS d S NTF)r   r   r;   rE   r=   r>   tatbr@   r@   rA   mpi_lt/   
   rN   c                 C   rI   rJ   )r   r   rK   r@   r@   rA   mpi_le6   rO   rP   c                 C   
   t || S rC   )rN   rD   r@   r@   rA   mpi_gt=      
 rR   c                 C   rQ   rC   )rP   rD   r@   r@   rA   mpi_ge>   rS   rT       c           	      C   sL   | \}}|\}}t |||t}t |||t}|tkrt}|tkr"t}||fS rC   )r%   r   r   r   r   r   	r;   rE   r<   r=   r>   rL   rM   abr@   r@   rA   mpi_add@      rY   c           	      C   sL   | \}}|\}}t |||t}t |||t}|tkrt}|tkr"t}||fS rC   )r&   r   r   r   r   r   rV   r@   r@   rA   mpi_subI   rZ   r[   c                 C   s   | \}}t |||tS rC   )r&   r   r;   r<   r=   r>   r@   r@   rA   	mpi_deltaR   s   r]   c                 C   s   | \}}t t|||tdS )N)r*   r%   r   r\   r@   r@   rA   mpi_midV      r_   c                 C   (   | \}}t ||t}t ||t}||fS rC   )r$   r   r   r;   r<   r=   r>   rW   rX   r@   r@   rA   mpi_posZ      rc   c                 C   s(   | \}}t ||t}t ||t}||fS rC   )r#   r   r   rb   r@   r@   rA   mpi_neg`   rd   re   c           	      C   s   | \}}t |}t |}|dkr t||t}t||t}||fS |dkrCt}t|}t||r9t||t}||fS t||t}||fS t||t}t||t}||fS NrU   )r   r$   r   r   r   r#   r   )	r;   r<   r=   r>   sassbsrW   rX   negsar@   r@   rA   mpi_absf   s$   
rj   c                 C      t | ||f|S rC   )mpi_mulr;   rE   r<   r@   r@   rA   mpi_mul_mpf}      rn   c                 C   rk   rC   )mpi_divrm   r@   r@   rA   mpi_div_mpf   ro   rq   c                 C   s  | \}}|\}}t |}t |}t |}	t |}
||  kr"dkr4n n|tks,|tkr0ttfS ttfS |	|
  kr>dkrPn n|tksH|tkrLttfS ttfS |dkr|	dkrvt|||t}t|||t}|tkrlt}|tkrrt}||fS |
dkrt|||t}t|||t}|tkrt}|tkrt}||fS t|||t}t|||t}|tkrt}|tkrt}||fS |dkr|	dkrt|||t}t|||t}|tkrt}|tkrt}||fS |
dkrt|||t}t|||t}|tkrt}|tkrt}||fS t|||t}t|||t}|tkrt}|tkrt}||fS t||t||t||t||g}t|v r?tt}}||fS t|\}}t	||t}t	||t}||fS rf   )
r   r   r   r   r'   r   r   r   r   r$   )r;   rE   r<   r=   r>   rL   rM   rg   rh   tastbsrW   rX   casesr@   r@   rA   rl      st   +%
$

rl   c                 C   s   | \}}t |trt|||t}t|||t}||fS t|tr2t|||t}t|||t}||fS t|}t||g\}}t}t|||t}||fS rC   )r   r   r'   r   r   r   r#   r   rb   r@   r@   rA   
mpi_square   s   
	
ru   c                 C   s  | \}}|\}}t |}t |}t |}	t |}
||  kr"dkr<n n|	dk r,|
dks4|	dks4|
dkr8ttfS ttfS |	dk rH|
dkrHttfS |	dk rVtt| t||S |	dkr|dk rf|dkrfttfS |	|
krnttfS |dkr{t|||t}t}|dkrt}t|||t}||fS |dkrt|||t}t|||t}|t	krt}|t	krt}||fS |dkrt|||t}t|||t}|t	krt}|t	krt}||fS t|||t}t|||t}|t	krt}|t	krt}||fS rf   )
r   r   r   r   rp   re   r)   r   r   r   )r;   rE   r<   r=   r>   rL   rM   rg   rh   rr   rs   rW   rX   r@   r@   rA   rp      sV    rp   c                 C   s   t | t}t | t}||fS rC   )r3   r   r   )r<   rW   rX   r@   r@   rA   mpi_pi  s   

rv   c                 C   ra   rC   )r/   r   r   rb   r@   r@   rA   mpi_exp     rw   c                 C   ra   rC   )r.   r   r   rb   r@   r@   rA   mpi_log  rx   ry   c                 C   ra   rC   )r0   r   r   rb   r@   r@   rA   mpi_sqrt$  rx   rz   c                 C   ra   rC   )r1   r   r   rb   r@   r@   rA   mpi_atan+  rd   r{   c           	      C   s2  | \}}|dk rt ttft| | |d |S |dkrttfS |dkr%| S |dkr.t| |S |d@ rDt|||t}t|||t}||fS t|}t|}|dkrbt|||t}t|||t}||fS |dkrxt|||t}t|||t}||fS t}t	|}t
||rt|||t}||fS t|||t}||fS NrU      r      )rp   r   mpi_pow_intru   r+   r   r   r   r   r#   r   )	r;   nr<   r=   r>   rW   rX   rg   rh   r@   r@   rA   r   1  s<   


r   c                 C   sv   |\}}||kr'|t tfvr'|tt|krt| t||S |tkr't| |S t| |d }t|||d }t	||S Nr}   )
r   r   r   r   r   r   rz   ry   rl   rw   )r;   rE   r<   rL   rM   uvr@   r@   rA   mpi_powV  s   

r   c                 C      t | |r| S |S rC   )r   xyr@   r@   rA   MINa     
r   c                 C   r   rC   )r   r   r@   r@   rA   MAXf  r   r   c                 C   sZ   | \}}}}| t krtt dfS t| |\}}t|||| d\}}	}
|r(d|	 }	|||	fS )NrU      r^   )r   r   r5   r4   )r   wpsignmanexpbccr;   rE   r   wp_r@   r@   rA   cos_sin_quadrantk  s   

r   c                    s  | \}}||  krt krn nttft t ffS t| v s t| v r(ttfttffS d }t||\}}}t||\}}	}
t||g\}}t||	g\}}	||
krQnB|
| dkr_ttfttffS |d |
d krit}|d d |
d d krwt}|d d |
d d krt}	|d d |
d d krt}tt|> td>  | tt|> td>  |   fdd}||t	}||t
}||t	}||	t
}	||f||	ffS )	Nr}      r~   r      
   c                    sT   t | d |tkkr}n }t| ||} | \}}}}|| dkr(|r&tS tS | S )NrU   r   )boolr   r'   r   r   )r   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   )r   r<   rW   rX   r   car=   nacbr>   nbr   r@   r   rA   mpi_cos_sinv  s<   



r   c                 C      t | |d S rf   r   r   r<   r@   r@   rA   mpi_cos     r   c                 C   r   Nr   r   r   r@   r@   rA   mpi_sin  r   r   c                 C   s   t | |d \}}t|||S r   r   rp   r   r<   cossinr@   r@   rA   mpi_tan     r   c                 C   s   t | |d \}}t|||S r   r   r   r@   r@   rA   mpi_cot  r   r   c           	      C   s   |d }t | |t}t | |t}t ||t}t|tsJ |r6ttt|t|||t}t|t	d|t}t
|||t}t|||t}||fS )Nr}   d   )r!   r   r   r   r   r'   r   r"   r)   r   r&   r%   )	r   r   percentr<   r   xaxbrW   rX   r@   r@   rA   mpi_from_str_a_b  s   r   c           
      C   s  t d|  }| dd} |d }d| v r"| d\}}t||d|S d| v r\| d dks0d	| vr2|| d	d} d}d
| v rN| d d
krF|d}| d
d} | d\}}t||||S d| v rd| vshd| vrj|| 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 t| |t}t| |t}||f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'  r}   +-F(rU   )%r^   T,[]e)
ValueErrorreplacesplitr   r!   r   r   rstrip)
r;   r<   r   r   r   r   r   rW   rX   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}|r7d}|\}}|dkrWtt|d|fi |}|| d | | }|S |dkr|tkrbt}nt|td}t|t|td	|}|| d
 t|| d }|S |dkr|| d | | | }|S |dkr`||krt|	|d fi |}t|
|d fi |}|	d}	t
|	dkr|	d |	d}
t
|
dkr|
d |	d |
d krL|	d |
d kr3tt
|	d d D ]}|	d | |
d | kr nq|	d d| | |	d |d  d | |
d |d  | dtt
|	d d  |	d  }|S |	d | | dtt
|	d d  |	d  }|S |d|	 d | d|
 | }|S td| )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%)'

    r}   r   r   	plusminusr^   r   r   r   r~   r   z%)r   r   diffr   r   r   rU   Nz%'%s' is unknown mode for printing mpi)r   r_   r]   r    r*   r   r'   r   r)   r   lenappendr   minjoinr   )r   r?   
use_spacesr   mode	error_dpskwargsr<   r   rW   rX   middeltaa_strb_strmid_strspbr1br2	delta_strr;   r   ir@   r@   rA   
mpi_to_str  sj   (

$




>.$r   c                 C   (   | \}}|\}}t |||t |||fS rC   )rY   r   r   r<   rW   rX   r   dr@   r@   rA   mpci_addd     r   c                 C   r   rC   )r[   r   r@   r@   rA   mpci_subi  r   r   c                 C      | \}}t ||t ||fS rC   )re   r   r<   rW   rX   r@   r@   rA   mpci_negn  r`   r   c                 C   r   rC   )rc   r   r@   r@   rA   mpci_posr  r`   r   c                 C   sX   | \}}|\}}t ||}t ||}t|||}	t ||}
t ||}t|
||}|	|fS rC   )rl   r[   rY   )r   r   r<   rW   rX   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 r   )ru   rY   rl   r[   rp   )r   r   r<   rW   rX   r   r   r   m1m2mr   r   r@   r@   rA   mpci_div  s   r   c                 C   sH   | \}}|d }t ||}t||\}}t|||}t|||}||fS r   )rw   r   rl   )r   r<   rW   rX   r   rr   r;   r@   r@   rA   mpci_exp  s   
r   c                 C   r   rC   )r*   )r   r   rW   rX   r@   r@   rA   	mpi_shift  r`   r   c                 C   sR   |d }t | |}tt||}t|||}t|||}t|d}t|d}||fS )Nr}   r^   )rw   rp   mpi_onerY   r[   r   )r   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   rl   re   r   r<   rW   rX   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   rl   r   r@   r@   rA   mpci_sin  rZ   r   c                 C   sR   | \}}|t krt|S |t krt|S t|}t|}t|||d }t||S r   )mpi_zerorj   ru   rY   rz   )r   r<   rW   rX   rE   r@   r@   rA   mpci_abs  s   
r  c           	      C   s\  | \}}|\}}||  krt krn nt|t rtS t|S t|t rSt|t r1t|||t}nt|||t}t|t rHt|||t}||fS t|||t}||fS t|t rzt|||t}t|t rot|||t}||fS t|||t}||fS t|t rt|||t}t|t rt|||t}||fS t|||t}||fS t|t}t	|}||fS rC   )
r   r   r   rv   r2   r   r   r   r3   r#   )	r   r   r<   yaybr   r   rW   rX   r@   r@   rA   	mpi_atan2  s@   








r  c                 C   s   | \}}t |||S rC   )r  )r   r<   r   r   r@   r@   rA   mpci_arg  s   r  c                 C   s.   | \}}t t| |d |}t| |}||fS r   )ry   r  r  )r   r<   r   r   r   r   r@   r@   rA   mpci_log  s   
r  c                 C   s   |\}}|t kr4|\}}||kr4|\}}}	}
|r*|	dkr*t| d| t||	>  |S |tkr4t| d|S |d }tt|t| |||S )NrU   r^   r}   )r   mpci_pow_intintr   r   r   r  )r   r   r<   yre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   )r[   ru   rl   r   )r   r<   rW   rX   r   r   r@   r@   rA   mpci_square  s
   
r  c                 C   s   |dk rt ttft| | |d |S |dkrttfS |dkr$t| |S |dkr-t| |S |d }ttf}|rP|d@ rEt|| |}|d8 }t| |} |dL }|s7t||S r|   )r   r   r   r  r   r  r   )r   r   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   )r   r   rW   rX   r   r   r@   r@   rA   mpi_overlap&  rO   r  c           	      C   s  | \}}|d }|dkrt t| t||dS t|trW|dkr/t||t}t||t}||fS |dkrCt||t}t||t}||fS |dkrSt	||t}t	||t}||fS t|t
rt|tr|dkrut||t}t||t}||fS |dkrt||t}t||t}||fS |dkrt	||t}t	||t}||fS t| t|}|dkrtt ||d d| |S |dkrtt ||d d| |S |dkrtt ||d dt| |d |S ||fS )Nr}   r   rU   r~   r   )	mpi_gammarY   r   r   gamma_min_br6   r   r   r7   r8   r   r   gamma_min_arp   rl   r[   ry   )	r   r<   typerW   rX   r   r   r   znewr@   r@   rA   r  2  sF   

  *r  c                 C   s  | \\}}\}}||  krt kr%n n|dkst|t r%t| ||tfS |d }|dkrg|d |d  }|d |d  }	|t krGt||	}
n|	}
tt|}tt|}t||}td||
 }|t|7 }|dkrt||ft	|\}}||f||ff} d}t
|trt||fttfrt||ft	|||ff}|dkrtt||d d| |S |dkrt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}nXt|t rt||f|t}t||f|t}t||f|t}t||f|t}n1t|t f|t}tt||r4t||f|t}nt||f|t}t||f|t}t||f|t}|d |d f|d |d ff}|dkrot|d |t|d |fS |dkrxt|}t||S )Nr   r}   r~   rU   r   )r   r   r  r   maxabsr   r   rY   r   r   r  r  gamma_mono_imag_agamma_mono_imag_br   
mpci_gammar   r   r  r   r9   r   r   r   r#   rc   r   r   )r   r<   r  a1a2b1b2r   amagbmagmaganbnabsn
gamma_sizer  minremaxreminimmaximwr@   r@   rA   r  W  s\   *
$
  *
 


r  c                 C      t | |ddS Nr   r  r  r   r<   r@   r@   rA   mpi_loggamma      r.  c                 C   r)  r*  r  r-  r@   r@   rA   mpci_loggamma  r/  r1  c                 C   r)  Nr~   r+  r,  r-  r@   r@   rA   
mpi_rgamma  r/  r3  c                 C   r)  r2  r0  r-  r@   r@   rA   mpci_rgamma  r/  r4  c                 C   r)  Nr   r+  r,  r-  r@   r@   rA   mpi_factorial  r/  r6  c                 C   r)  r5  r0  r-  r@   r@   rA   mpci_factorial  r/  r7  N)rU   )Tr   r   r   )__doc__backendr   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-   	libelefunr.   r/   r0   r1   r2   r3   r4   r5   	gammazetar6   r7   r8   r9   rB   r   r   rF   rH   rN   rP   rR   rT   rY   r[   r]   r_   rc   re   rj   rn   rq   rl   ru   rp   rv   rw   ry   rz   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  	gamma_minr  r  r  r  r  r.  r1  r3  r4  r6  r7  r@   r@   r@   rA   <module>   s    (	

		



D;%4
B\
			&

%I