
    "`k                        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 Z=eefZ>eefZ?d Z@d ZAd	 ZBd
 ZCd ZDd ZEdKdZFdKdZGd ZHd ZId ZJdKdZKdKdZLd ZMd ZNdKdZOdKdZPd ZQd ZRd ZSd ZTd ZUd ZVd ZWd ZXd  ZYd! ZZd" Z[d# Z\d$ Z]d% Z^d& Z_d' Z`d( Zad) ZbdLd*Zcd+ Zdd, ZedKd-Zfd. Zgd/ Zhd0 Zid1 Zjd2 Zkd3 Zld4 Zmd5 Znd6 Zod7 Zpd8 Zqd9 Zrd: Zsd; Ztd< Zu ed=      Zv ed>      ZwevewfZx ed?      Zy ed@      ZzdA Z{dKdBZ|dKdCZ}dD Z~dE ZdF ZdG ZdH ZdI ZyJ)Mz3
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                 b    | \  }}t        |      dz   }dt        ||      dt        ||      dS )N   [z, ])r
   r!   )sprecsasbdpss        5/usr/lib/python3/dist-packages/mpmath/libmp/libmpi.pympi_strrE      s1    FB
d
a
CC&S/::    c                     | |k(  S N r?   ts     rD   mpi_eqrL   )       6MrF   c                     | |k7  S rH   rI   rJ   s     rD   mpi_nerO   ,   rM   rF   c                 L    | \  }}|\  }}t        ||      ryt        ||      ryy NTF)r   r   r?   rK   rA   rB   tatbs         rD   mpi_ltrU   /   -    FBFBb"~db"~erF   c                 L    | \  }}|\  }}t        ||      ryt        ||      ryy rQ   )r   r   rR   s         rD   mpi_lerX   6   rV   rF   c                     t        ||       S rH   )rU   rJ   s     rD   mpi_gtrZ   =       1%rF   c                     t        ||       S rH   )rX   rJ   s     rD   mpi_ger]   >   r[   rF   c                     | \  }}|\  }}t        |||t              }t        |||t              }|t        k(  rt        }|t        k(  rt
        }||fS rH   )r&   r   r   r   r   r   	r?   rK   r@   rA   rB   rS   rT   abs	            rD   mpi_addrb   @   S    FBFBBk*ABm,ADye!Dyd!a4KrF   c                     | \  }}|\  }}t        |||t              }t        |||t              }|t        k(  rt        }|t        k(  rt
        }||fS rH   )r'   r   r   r   r   r   r_   s	            rD   mpi_subre   I   rc   rF   c                 0    | \  }}t        |||t              S rH   )r'   r   r?   r@   rA   rB   s       rD   	mpi_deltarh   R   s    FB2r4**rF   c                 D    | \  }}t        t        |||t              d      S )N)r+   r&   r	   rg   s       rD   mpi_midrk   V   s#    FBWRT=92>>rF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r%   r   r   r?   r@   rA   rB   r`   ra   s         rD   mpi_posrn   Z   0    FBD+&AD-(Aa4KrF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r$   r   r   rm   s         rD   mpi_negrq   `   ro   rF   c                 r   | \  }}t        |      }t        |      }|dk\  r&t        ||t              }t        ||t              }||fS |dk\  rGt        }t        |      }t        ||      rt        ||t              }||fS t        ||t              }||fS t        ||t              }t        ||t              }||fS N    )r   r%   r   r   r   r$   r   )	r?   r@   rA   rB   sassbsr`   ra   negsas	            rD   mpi_absrx   f   s    FB
2,C
2,C
axBk*Bm, a4K 
%D-0A a4K t]3A
 a4K Bk*Bm,a4KrF   c                      t        | ||f|      S rH   )mpi_mulr?   rK   r@   s      rD   mpi_mul_mpfr|   }       1q!fd##rF   c                      t        | ||f|      S rH   )mpi_divr{   s      rD   mpi_div_mpfr      r}   rF   c                    | \  }}|\  }}t        |      }t        |      }t        |      }	t        |      }
||cxk(  rdk(  r-n n*|t        k(  s	|t        k(  rt        t        fS t        t        fS |	|
cxk(  rdk(  r-n n*|t        k(  s	|t        k(  rt        t        fS t        t        fS |dk\  r|	dk\  rFt	        |||t
              }t	        |||t              }|t        k(  rt        }|t        k(  rt        }||fS |
dk  rFt	        |||t
              }t	        |||t              }|t        k(  rt        }|t        k(  rLt        }||fS t	        |||t
              }t	        |||t              }|t        k(  rt        }|t        k(  rt        }||fS |dk  r|	dk\  rFt	        |||t
              }t	        |||t              }|t        k(  rt        }|t        k(  rt        }||fS |
dk  rFt	        |||t
              }t	        |||t              }|t        k(  rt        }|t        k(  rLt        }||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 rs   )
r   r   r   r   r(   r   r   r   r   r%   )r?   rK   r@   rA   rB   rS   rT   ru   rv   tastbsr`   ra   casess                 rD   rz   rz      s   FBFB
2,C
2,C
2,C
2,C
cQ;"*$;e|
cQ;"*$;e|
ax!8Bk2ABm4ADye!Dyd!V a4KS AXBk2ABm4ADye!Dye!J a4KE Bk2ABm4ADye!Dyd!> a4K= 
!8Bk2ABm4ADye!Dye!0 a4K- AXBk2ABm4ADye!Dyd!$ a4K Bk2ABm4ADye!Dyd! a4K R'"b/72r?GBPROT5=4qA
 a4K u%DAq4-A4/Aa4KrF   c                 Z   | \  }}t        |t              r(t        |||t              }t        |||t              }||fS t        |t              r(t        |||t              }t        |||t              }||fS t        |      }t        ||g      \  }}t        }t        |||t              }||fS rH   )r   r   r(   r   r   r   r$   r   rm   s         rD   
mpi_squarer      s    FBb%BD+.BD-0 a4K 
E	BD+.BD-0 a4K	 R[b"X&BBD-0a4KrF   c                    | \  }}|\  }}t        |      }t        |      }t        |      }	t        |      }
||cxk(  rdk(  r/n n,|	dk  r|
dkD  s
|	dk(  s|
dk(  rt        t        fS t        t        fS |	dk  r|
dkD  rt        t        fS |	dk  rt	        t        |       t        |      |      S |	dk(  re|dk  r|dkD  rt        t        fS |	|
k(  rt        t        fS |dk\  rt        |||t              }t        }|dk  rt        }t        |||t              }fS |dk\  rFt        |||t              }t        |||t              }|t        k(  rt        }|t        k(  rt        }||fS |dk  rFt        |||t              }t        |||t              }|t        k(  rt        }|t        k(  rt        }||fS t        |||t              }t        |||t              }|t        k(  rt        }|t        k(  rt        }||fS rs   )
r   r   r   r   r   rq   r*   r   r   r   )r?   rK   r@   rA   rB   rS   rT   ru   rv   r   r   r`   ra   s                rD   r   r      s   FBFB
2,C
2,C
2,C
2,C
cQ!GaSAX$;e| Qw37d{
Qwwqz71:t44 ax7sQw$;#:$;!8Bk2AA!8ABm4A, a4K# !8Bk2ABm4ADye!Dyd! a4K AXBk2ABm4ADye!Dye! a4K	 Bk2ABm4ADye!Dyd!a4KrF   c                 J    t        | t              }t        | t              }||fS rH   )r4   r   r   )r@   r`   ra   s      rD   mpi_pir     s#    t[!At]#Aa4KrF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r0   r   r   rm   s         rD   mpi_expr     0    FBD+&AD-(Aa4KrF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r/   r   r   rm   s         rD   mpi_logr     r   rF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r1   r   r   rm   s         rD   mpi_sqrtr   $  s0    FBT;'AT=)Aa4KrF   c                 X    | \  }}t        ||t              }t        ||t              }||fS rH   )r2   r   r   rm   s         rD   mpi_atanr   +  s0    FBT;'AT=)Aa4KrF   c           	         | \  }}|dk  r&t        t        t        ft        | | |dz         |      S |dk(  rt        t        fS |dk(  r| S |dk(  rt        | |      S |dz  r(t	        |||t
              }t	        |||t              }||fS t        |      }t        |      }|dk\  r(t	        |||t
              }t	        |||t              }||fS |dk  r(t	        |||t
              }t	        |||t              }||fS t        }t        |      }t        ||      rt	        |||t              }||fS t	        |||t              }||fS Nrt      r      )r   r   mpi_pow_intr   r,   r   r   r   r   r$   r   )	r?   nr@   rA   rB   r`   ra   ru   rv   s	            rD   r   r   1  s`   FB1ud|[QBR%@$GGAvd|AvAv!T""1uAt[1At]3, a4K' rlrl!8B45AB47A a4K AXB45AB47A a4K ABb"~At]; a4K  At];a4KrF   c                    |\  }}||k(  rP|t         t        fvrB|t        t        |            k(  rt	        | t        |      |      S |t
        k(  rt        | |      S t        | |dz         }t        |||dz         }t        ||      S Nr   )
r   r   r   r    r   r   r   r   rz   r   )r?   rK   r@   rS   rT   uvs          rD   mpi_powr   V  s    FB	RxBtUm+&*%%q&*d33;At$$4"9A1dRi A1drF   c                 "    t        | |      r| S |S rH   )r   xys     rD   MINr   a      a|HrF   c                 "    t        | |      r| S |S rH   )r   r   s     rD   MAXr   f  r   rF   c                     | \  }}}}| t         k(  rt        t         dfS t        | |      \  }}t        ||||z   d      \  }}	}
|rd|	z
  }	|||	fS )Nrt      rj   )r   r   r6   r5   )r   wpsignmanexpbccr?   rK   r   wp_s              rD   cos_sin_quadrantr   k  sd    D#sBEzUA~q"DAqS#b&"-IAq#qDa7NrF   c                 6   | \  }}||cx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z   }t        ||      \  }}}t        ||      \  }}	}
t        ||g      \  }}t        ||	g      \  }}	||
k(  rnv|
|z
  dk\  rt        t        ft        t        ffS |dz  |
dz  k7  rt        }|dz
  dz  |
dz
  dz  k7  rt        }|dz
  dz  |
dz
  dz  k7  rt        }	|dz
  dz  |
dz
  dz  k7  rt        }t        t        |z  t        dz  z   |       t        t        |z  t        dz  z
  |       fd} ||t              } ||t              } ||t              } ||	t              }	||f||	ffS )Nr      r   r      
   c                     t        | d         |t        k(  k(  r}n}t        | |	|      } | \  }}}}||z   dk\  r|rt        S t        S | S )Nrt   r   )boolr   r(   r   r   )
r   roundingpr   r   r   r   lessmorer@   s
          rD   finalizezmpi_cos_sin.<locals>.finalize  s]    !:(k12AAAq$)c3r6Q;KrF   )r   r   r   r   r   r   r   r-   r.   r   r   )r   r@   r`   ra   r   carA   nacbrB   nbr   r   r   s    `          @@rD   mpi_cos_sinr   v  s   DAqAd|eU^++	uzt}udm++	B!!R(JBB!!R(JBB"b"FB"b"FB	Rx	bAt}udm++ q5BE>BqD19A	!BqD19A	!BqD19A	!B""5s;D""5s;D 
"k	"B	"m	$B	"k	"B	"m	$Br7RGrF   c                      t        | |      d   S rs   r   r   r@   s     rD   mpi_cosr         q$""rF   c                      t        | |      d   S Nr   r   r   s     rD   mpi_sinr     r   rF   c                 @    t        | |dz         \  }}t        |||      S r   r   r   r   r@   cossins       rD   mpi_tanr     %    1d2g&HC3T""rF   c                 @    t        | |dz         \  }}t        |||      S r   r   r   s       rD   mpi_cotr     r   rF   c                 |   |dz   }t        | |t              }t        | |t              }t        ||t              }t        |t              sJ |rIt        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xbr`   ra   s	            rD   mpi_from_str_a_br     s    	B	!R	%B	!R	'BB&A!UCWR[11b-HAx}b-8At[)AAt]+Aa4KrF   c                    t        d| z        }| j                  dd      } |dz   }d| v r"| j                  d      \  }}t        ||d|      S d| v rf| d   dk(  sd	| vr|| j                  d	d      } d}d
| v r| d   d
k7  r|d}| j                  d
d      } | j                  d      \  }}t        ||||      S d| v rd| vsd| vr|| d   dk(  r^| j                  dd      } | j                  dd      } | j                  d      \  }}t	        ||t
              }t	        ||t              }||fS | j                  d      \  }}|j                  d      \  }}	d| v r|	j                  d      \  }	}n|	j                  d      d}}	t	        ||z   |z   |t
              }t	        ||	z   |z   |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(rt   )%rj   T,r=   r>   e)
ValueErrorreplacesplitr   r"   r   r   rstrip)
r?   r@   r   r   r   r   r   r`   ra   zs
             rD   mpi_from_strr     s   & 	;a?@A			#rA	Bqywwt}11eT22	Q43;#Q,GIIc2!8u|G		#r"Awws|11gt44	qLclGQ43;		#r"A		#r"A773<DAqD+.AD-0Aa4K 773<DAq773<DAqaxwws|1xx}b11Qk2A1Qm4Aa4KQk*Qm,!trF   c           	      &   t        |      }|dz   }| \  }	}
t        | |      }t        | |      }t        |	|fi |}t        |
|fi |}t        ||fi |}d}|rd}|\  }}|dk(  r't        t	        |d      |fi |}||z   dz   |z   |z   }|S |dk(  r_|t
        k(  rt
        }n5t        |t        d            }t        |t        |t        d	            |      }||z   d
z   t        ||      z   dz   }|S |dk(  r||z   dz   |z   |z   |z   }|S |dk(  rw||k(  r t        |	|dz   fi |}t        |
|dz   fi |}|j                  d      }	t        |	      dk(  r|	j                  d       |j                  d      }
t        |
      dk(  r|
j                  d       |	d   |
d   k(  r|	d   |
d   k7  r|t        t        |	d         dz         D ]  }|	d   |   |
d   |   k7  s n |	d   d |z   |	d   |d z   dz   |z   |
d   |d z   |z   dt        t        |	d         d      z  z   |	d   z   }|S |	d   |z   |z   dt        t        |	d         d      z  z   |	d   z   }|S |dj                  |	      z   dz   |z   dj                  |
      z   |z   }|S t        d|z        )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   	plusminusrj   r   r   r   r   r   z%)bracketsr   diffr   r   r   rt   Nz%'%s' is unknown mode for printing mpi)r   rk   rh   r!   r+   r   r(   r   r*   r   lenappendr   minjoinr   )r   rC   
use_spacesr   mode	error_dpskwargsr@   r   r`   ra   middeltaa_strb_strmid_strspbr1br2	delta_strr?   r   is                          rD   
mpi_to_strr     s+   P sD	BDAq
!T
CaE1c$V$E1c$V$ES#((G	BHC{9U2.>v>	bL4"$y0H HG 
	%<A x}-A734b9AbL39!55<8 H7 
	%K#"U*S04 H3 
E>1c!e.v.E1c!e.v.EKKq6Q;HHRLKKq6Q;HHRLQ41Q4<tqt|AaD	A. AtAw!A$q') qT"1X^ad12h.4r9AaDHDsJ3s1Q4y!,,-/0t4 H aD3J$s3s1Q4y!+<'<<qtC
 H chhqk!C'",sxx{:S@A H @4GHHrF   c                 J    | \  }}|\  }}t        |||      t        |||      fS rH   )rb   r   r   r@   r`   ra   r   ds          rD   mpci_addr   d  1    DAqDAq1a1d 333rF   c                 J    | \  }}|\  }}t        |||      t        |||      fS rH   )re   r   s          rD   mpci_subr  i  r  rF   c                 <    | \  }}t        ||      t        ||      fS rH   )rq   r   r@   r`   ra   s       rD   mpci_negr  n  $    DAq1dWQ---rF   c                 <    | \  }}t        ||      t        ||      fS rH   )rn   r  s       rD   mpci_posr	  r  r  rF   c                     | \  }}|\  }}t        ||      }t        ||      }t        |||      }	t        ||      }
t        ||      }t        |
||      }|	|fS rH   )rz   re   rb   )r   r   r@   r`   ra   r   r   r1r2rei1i2ims                rD   mpci_mulr  v  se    DAqDAq	1B	1B	Bt	B	1B	1B	Bt	Br6MrF   c                 &   | \  }}|\  }}|dz   }t        |      }t        |      }	t        ||	|      }
t        t        ||      t        ||      |      }t        t        ||      t        ||      |      }t	        ||
|      }t	        ||
|      }||fS r   )r   rb   rz   re   r   )r   r   r@   r`   ra   r   r   r   m1m2mr  r  s                rD   mpci_divr    s    DAqDAq	bB	AB	AB2bA	1wq|R	0B	1wq|R	0B	Q	B	Q	Br6MrF   c                     | \  }}|dz   }t        ||      }t        ||      \  }}t        |||      }t        |||      }||fS r   )r   r   rz   )r   r@   r`   ra   r   rr   r?   s           rD   mpci_expr    sT    DAq	bB2Aq"DAq1dA1dAa4KrF   c                 <    | \  }}t        ||      t        ||      fS rH   )r+   )r   r   r`   ra   s       rD   	mpi_shiftr    s"    DAqQq>9Qq>))rF   c                     |dz   }t        | |      }t        t        ||      }t        |||      }t	        |||      }t        |d      }t        |d      }||fS )Nr   rj   )r   r   mpi_onerb   re   r  )r   r@   r   e1e2r   r?   s          rD   mpi_cosh_sinhr     sa    	bB	BB	"b	!BBABA!RA!RAa4KrF   c                     | \  }}|dz   }t        ||      \  }}t        ||      \  }}t        |||      }	t        |||      }
|	t        |
      fS Nr   )r   r   rz   rq   r   r@   r`   ra   r   r   r?   chshr  r  s              rD   mpci_cosr&    s^    DAq	bBq"DAq1b!FB	B	B	B	Bwr{?rF   c                     | \  }}|dz   }t        ||      \  }}t        ||      \  }}t        |||      }	t        |||      }
|	|
fS r"  )r   r   rz   r#  s              rD   mpci_sinr(    sY    DAq	bBq"DAq1b!FB	B	B	B	Br6MrF   c                     | \  }}|t         k(  rt        |      S |t         k(  rt        |      S t        |      }t        |      }t        |||dz         }t	        ||      S r   )mpi_zerorx   r   rb   r   )r   r@   r`   ra   rK   s        rD   mpci_absr+    s^    DAqH}qzH}qz1A1A1d2gAAtrF   c                 4   | \  }}|\  }}||cxk(  r	t         k(  r$n n!t        |t               rt        S t        |      S t        |t               rqt        |t               rt	        |||t
              }nt	        |||t
              }t        |t               rt	        |||t              }||fS t	        |||t              }||fS t        |t               rNt	        |||t              }t        |t               rt	        |||t
              }||fS t	        |||t
              }||fS t        |t               rNt	        |||t
              }t        |t               rt	        |||t              }||fS t	        |||t              }||fS t        |t              }t        |      }||fS rH   )
r   r   r*  r   r3   r   r   r   r4   r$   )	r   r   r@   yaybr   r   r`   ra   s	            rD   	mpi_atan2r/    s   FBFB	R5"eOd|b%"e"b$4A"b$4A"e"b$6A* a4K' "b$6A& a4K# 
E	b"dM2"e"b$4A a4K "b$4A a4K 
E	b"dK0"e"b$6A a4K "b$6A
 a4K 4'AJa4KrF   c                 &    | \  }}t        |||      S rH   )r/  )r   r@   r   r   s       rD   mpci_argr1    s    DAqQ4  rF   c                 ^    | \  }}t        t        | |dz         |      }t        | |      }||fS r   )r   r+  r1  )r   r@   r   r   r  r  s         rD   mpci_logr3    s7    DAq	!T"W%t	,B	!T	Br6MrF   c           	         |\  }}|t         k(  rM|\  }}||k(  rC|\  }}}	}
|r$|	dk\  rt        | d|z  t        ||	z        z  |      S |t        k(  rt        | d|      S |dz   }t	        t        |t        | |      |      |      S )Nrt   rj   r   )r*  mpci_pow_intintr   r  r  r3  )r   r   r@   yreyimr-  r.  r   r   r   r   r   s               rD   mpci_powr9    s    HC
hB8!#D#sBsax#ATzCSM'A4HHU{#Aq$//	bBHQB4d;;rF   c                     | \  }}t        t        |      t        |      |      }t        |||      }t        |d      }||fS r   )re   r   rz   r  )r   r@   r`   ra   r  r  s         rD   mpci_squarer;    sD    DAq	A
1t	4B	At	B	2q	Br6MrF   c           	      R   |dk  r&t        t        t        ft        | | |dz         |      S |dk(  rt        t        fS |dk(  rt	        | |      S |dk(  rt        | |      S |dz   }t        t        f}|r+|dz  rt        || |      }|dz  }t        | |      } |dz  }|r+t	        ||      S r   )r  r  r*  r5  r	  r;  r  )r   r   r@   r   results        rD   r5  r5    s    1u*LQBR,H$OOAv  Av4  Av1d##	Bx F
q5fa,FFA2	a  FD!!rF   g#+Vcb?gVcb?gg?c                 L    | \  }}|\  }}t        ||      ryt        ||      ryy)NFT)r   r   )r   r   r`   ra   r   r   s         rD   mpi_overlapr?  &  s-    DAqDAqa|Ea|ErF   c                    | \  }}|dz   }|dk(  rt        t        | t        |      |d      S t        |t              r|dk(  r&t        ||t              }t        ||t              }||fS |dk(  r&t        ||t              }t        ||t              }||fS |dk(  r"t        ||t              }t        ||t              }fS t        |t              rt        |t              r|dk(  r&t        ||t              }t        ||t              }||fS |dk(  r&t        ||t              }t        ||t              }||fS |dk(  r"t        ||t              }t        ||t              }fS t        | t        |      }|dk(  rt        t        ||dz   d      | |      S |dk(  rt        t        ||dz   d      | |      S |dk(  r(t        t        ||dz   d      t!        | |dz         |      S fS )Nr   r   rt   r   r   )	mpi_gammarb   r  r   gamma_min_br7   r   r   r8   r9   r   r   gamma_min_ar   rz   re   r   )	r   r@   typer`   ra   r   r   r   znews	            rD   rA  rA  2  s   DAq	bBqyGR0$:: a19!T;/A!T=1A0 a4K/ QY1dK0A1dM2A* a4K) QYQk2AQm4A$ a4K! 
5	fQ419!T;/A!T=1A a4K QY1dK0A1dM2A a4K QYQk2AQm4A a4K	 q'2&19WYtT!VQ%?DII19WYtT!VQ%?DII19WYtT!VQ%?DQRFASUYZZa4KrF   c                 L   | \  \  }}\  }}||cxk(  r	t         k(  r+n n(|dk7  st        |t               rt        | ||      t        fS |dz   }|dk7  r|d   |d   z   }|d   |d   z   }	|t         k7  rt	        ||	      }
n|	}
t        t        |            }t        t        |            }t	        ||      }t	        d||
z        }|t        |      z  }|dk(  r t        ||ft        |      \  }}||f||ff} d}t        |t              rt        ||ft        t        f      rt        ||ft        |      ||ff}|dk(  rt        t!        ||dz   d      | |      S |dk(  rt#        t!        ||dz   d      | |      S |dk(  r(t%        t!        ||dz   d      t'        | |dz         |      S t)        |t               rMt+        ||f|t,              }t+        ||f|t.              }t+        ||f|t,              }t+        ||f|t.              }nt1        |t               rMt+        ||f|t,              }t+        ||f|t.              }t+        ||f|t,              }t+        ||f|t.              }nyt+        |t         f|t.              }t        t3        |      |      rt+        ||f|t.              }nt+        ||f|t.              }t+        ||f|t,              }t+        ||f|t,              }|d   |d   f|d   |d   ff}|dk(  rt5        |d   |      t5        |d   |      fS |dk(  rt7        |      }t9        ||      S )Nr   r   r   rt   r   )r   r   rA  r*  maxabsr    r   rb   r  r   rB  r?  gamma_mono_imag_agamma_mono_imag_br  
mpci_gammar  r  r3  r   r:   r   r   r   r$   rn   r  r  )r   r@   rD  a1a2b1b2r   amagbmagmaganbnabsn
gamma_sizerE  minremaxreminimmaximws                        rD   rK  rK  W  s6   GRWb 
R5dai6"U+;D$'11 
bBqy!uRU{!uRU{;dD/CC__2r{48_

hz"" qy2b'7B/BbWr"g5E b+2w!24E FG Br7GR02b'9Dqy*T461*Eq$!OOqy*T461*Eq$!OOqy*T461*ExPQRVWXRXGY[_!``
 b%bWb+6bWb-8bWb+6bWb-8	E	bWb+6bWb-8bWb+6bWb-8 bZ];'"+r" "R"m<E "R"m<EbWb+6bWb+6	q58uQxq22AqyqtT"GAaD$$777qyQKAtrF   c                     t        | |d      S Nr   rD  rA  r   r@   s     rD   mpi_loggammara    s    )At!"<<rF   c                     t        | |d      S r]  rK  r`  s     rD   mpci_loggammard    s    :aA#>>rF   c                     t        | |d      S Nr   r^  r_  r`  s     rD   
mpi_rgammarg    s    	!T ::rF   c                     t        | |d      S rf  rc  r`  s     rD   mpci_rgammari    s    At!!<<rF   c                     t        | |d      S Nr   r^  r_  r`  s     rD   mpi_factorialrl    s    9Q1#==rF   c                     t        | |d      S rk  rc  r`  s     rD   mpci_factorialrn    s    Jq$Q$??rF   N)rt   )Tz[]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/   r0   r1   r2   r3   r4   r5   r6   	gammazetar7   r8   r9   r:   rE   r*  r  rL   rO   rU   rX   rZ   r]   rb   re   rh   rk   rn   rq   rx   r|   r   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/  r1  r3  r9  r;  r5  rC  rB  	gamma_minrI  rJ  r?  rA  rK  ra  rd  rg  ri  rl  rn  rI   rF   rD   <module>ru     s  
              
 I H; 5>, & %+?.$$BH9v
#J	

	2h####@DZx4
4
..
*	
$L!<"& ''+&	t$ sO #JGR = > : < = ?rF   