o
    lh                     @   s  d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
 ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m-Z-m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN dd	l	mOZO dd
lPmQZQmRZRmSZS G dd deTZU	 dd ZVedkrdd ZVefddZWdd ZXefddZYdd ZZdd Z[dd Z\dd Z]edfd d!Z^edfd"d#Z_efd$d%Z`efd&d'Zaedfd(d)ZbdMd*d+ZcdMd,d-Zded.fd/d0Zeefd1d2Zfefd3d4Zgefd5d6Zhefd7d8Ziefd9d:Zjefd;d<Zkefd=d>Zlefd?d@ZmefdAdBZnefdCdDZoefdEdFZpefdGdHZqefdIdJZrefdKdLZsdS )Nz
This module implements computation of hypergeometric and related
functions. In particular, it provides code for generic summation
of hypergeometric series. Optimized versions for various special
cases are also provided.
    N   )MPZ_ZEROMPZ_ONEBACKENDxrangeexec_)gcd)%ComplexResult
round_fastround_nearestnegative_rndbitcountto_fixedfrom_man_expfrom_intto_intfrom_rationalfzerofonefnoneftwofinffninffnanmpf_signmpf_addmpf_absmpf_posmpf_cmpmpf_ltmpf_lempf_gtmpf_min_maxmpf_perturbmpf_neg	mpf_shiftmpf_submpf_mulmpf_div
sqrt_fixedmpf_sqrtmpf_rdiv_intmpf_pow_intto_rational)	mpf_pimpf_expmpf_logpi_fixedmpf_cos_sinmpf_cosmpf_sinr*   	agm_fixed)mpc_onempc_submpc_mul_mpfmpc_mulmpc_negcomplex_int_powmpc_divmpc_add_mpfmpc_sub_mpfmpc_logmpc_addmpc_pos	mpc_shiftmpc_is_infnanmpc_zerompc_sqrtmpc_absmpc_mpf_div
mpc_squarempc_exp)ifac)mpf_gamma_int	mpf_eulereuler_fixedc                   @   s   e Zd ZdS )NoConvergenceN)__name__
__module____qualname__ rR   rR   i/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/libmp/libhyper.pyrN   +   s    rN   c                  C   sx  | \}}}}d |}d|||d| ||d |f }d|v }|dk}|p'|}	g }
|
j}g }g }g }g }g }g }g }g }|d |d |d |d |	rS|d	 |rf|d
 |d |d |d n|d |d |d |d |d |d |d |r|d |d |d |d |d t|D ]\}}ddg||k }|dkr||g||k | |d|||f  q|dkr||g||k | |d|||||f  q|dkr||g||k | |d|  |d |d |d |d||f  |d |d ||f  q|dkrr||g||k | |d!|  |d" |d |d# |d |d |d |d$||f  |d |d%||f  |d |d |d&||f  |d |d'||f  qtt|}t|}t||}||d }||d }|d( |d) |d* |	r|d+ |d, d- d.d/ |D d0d/ |D  d1d/ |D  }d- d2d/ |D d3d/ |D  d4d/ |D  d5g }|r|d6|  |d7|  |d8 |r|d9 |d: |d; |	rt|D ]}|d<|| || f  q |D ]}|d=d>t| q|D ]}|d?d>t| q"t|D ]}|d@|| || f  q4|D ]}|dAd>t| qF|D ]}|dBd>t| qV|r|rw|dC |dD |dE n!|dF |dG n|r|dH |dD |dE n|dI |dJ |D ]}|dKd>t| |dD |dE q|D ]5}|dLd>t| |dMd>t| |dNd>t| |dOd>t| |dPd>t| qn@t|D ]}|d<|| || f  q|D ]}|d=d>t| q|D ]}|d?d>t| q|r%|dQ n|dI |	r=|dR |dS |dT |dU n|dR |dV |dU |dW |dX |D ]}|dYd>t| qS|D ]}|dZd>t| qc|D ]}|d[d>t| qs|D ]}|d\d>t| q|D ]}|d]d>t| q|D ]}|d^d>t| q|D ]}|d_d>t| q|D ]}|d`d>t| q|	r|da |db |dc |dd |de |df |dg |dh |di |d |dj |dk n|da |dc |dl |d |dj |dm dn dodp |
D }
dq| |
 }
i }t	|
t
 | |
|| fS )rz
    Returns a function that sums a generalized hypergeometric series,
    for given parameter types (integer, rational, real, complex).

     zhypsum_%i_%i_%s_%s_%sNCz$MAX = kwargs.get('maxterms', wp*100)zHIGH = MPZ_ONE<<epsshiftzLOW = -HIGHz!SRE = PRE = one = (MPZ_ONE << wp)zSIM = PIM = MPZ_ZEROzxsign, xm, xe, xbc = z[0]zif xsign: xm = -xmzysign, ym, ye, ybc = z[1]zif ysign: ym = -ymzxsign, xm, xe, xbc = zzoffset = xe + wpzif offset >= 0:z    ZRE = xm << offsetzelse:z    ZRE = xm >> (-offset)zoffset = ye + wpz    ZIM = ym << offsetz    ZIM = ym >> (-offset)ABZz%sINT_%i = coeffs[%i]Qz!%sP_%i, %sQ_%i = coeffs[%i]._mpq_Rz%xsign, xm, xe, xbc = coeffs[%i]._mpf_z    %sREAL_%i = xm << offsetz    %sREAL_%i = xm >> (-offset)z__re, __im = coeffs[%i]._mpc_zxsign, xm, xe, xbc = __rezysign, ym, ye, ybc = __imz    %sCRE_%i = xm << offsetz    %sCRE_%i = xm >> (-offset)z    %sCIM_%i = ym << offsetz    %sCIM_%i = ym >> (-offset)zfor n in xrange(1,10**8):z    if n in magnitude_check:z"        p_mag = bitcount(abs(PRE))z.        p_mag = max(p_mag, bitcount(abs(PIM)))z%        magnitude_check[n] = wp-p_magz * c                 S      g | ]
}d  dt|qS )zAINT_##replacestr.0irR   rR   rS   
<listcomp>       z%make_hyp_summator.<locals>.<listcomp>c                 S   r[   )zAP_#r\   r]   r`   rR   rR   rS   rc      rd   c                 S   r[   )zBQ_#r\   r]   r`   rR   rR   rS   rc      rd   c                 S   r[   )zBINT_#r\   r]   r`   rR   rR   rS   rc      rd   c                 S   r[   )zBP_#r\   r]   r`   rR   rR   rS   rc      rd   c                 S   r[   )zAQ_#r\   r]   r`   rR   rR   rS   rc      rd   nz
    mul = z
    div = z    if not div:z        if not mul:z            breakz        raise ZeroDivisionErrorz$    PRE = PRE * AREAL_%i // BREAL_%iz    PRE = (PRE * AREAL_#) >> wpr\   z     PRE = (PRE << wp) // BREAL_#z$    PIM = PIM * AREAL_%i // BREAL_%iz    PIM = (PIM * AREAL_#) >> wpz     PIM = (PIM << wp) // BREAL_#zI    PRE, PIM = (mul*(PRE*ZRE-PIM*ZIM))//div, (mul*(PIM*ZRE+PRE*ZIM))//divz    PRE >>= wpz    PIM >>= wpz*    PRE = ((mul * PRE * ZRE) >> wp) // divz*    PIM = ((mul * PIM * ZRE) >> wp) // divz=    PRE, PIM = (PRE*ZRE-PIM*ZIM)//div, (PIM*ZRE+PRE*ZIM)//divz$    PRE = ((PRE * ZRE) >> wp) // divz$    PIM = ((PIM * ZRE) >> wp) // divz;    PRE, PIM = PRE*ACRE_#-PIM*ACIM_#, PIM*ACRE_#+PRE*ACIM_#z%    mag = BCRE_#*BCRE_#+BCIM_#*BCIM_#z     re = PRE*BCRE_# + PIM*BCIM_#z     im = PIM*BCRE_# - PRE*BCIM_#z    PRE = (re << wp) // magz    PIM = (im << wp) // magz*    PRE = ((PRE * mul * ZRE) >> wp) // divz    SRE += PREz    SIM += PIMz1    if (HIGH > PRE > LOW) and (HIGH > PIM > LOW):z        breakz    if HIGH > PRE > LOW:z    if n > MAX:zc        raise NoConvergence('Hypergeometric series converges too slowly. Try increasing maxterms.')z    AINT_# += 1z    BINT_# += 1z    AP_# += AQ_#z    BP_# += BQ_#z    AREAL_# += onez    BREAL_# += onez    ACRE_# += onez    BCRE_# += onez%a = from_man_exp(SRE, -wp, prec, 'n')z%b = from_man_exp(SIM, -wp, prec, 'n')zif SRE:z    if SIM:z(        magn = max(a[2]+a[3], b[2]+b[3])z	    else:z        magn = a[2]+a[3]z	elif SIM:z    magn = b[2]+b[3]z    magn = -wp+1zreturn (a, b), True, magnz    magn = a[2]+a[3]zreturn a, False, magn
c                 s   s    | ]}d | V  qdS )z    NrR   )ra   linerR   rR   rS   	<genexpr>+  s    z$make_hyp_summator.<locals>.<genexpr>zBdef %s(coeffs, z, prec, wp, epsshift, magnitude_check, **kwargs):
)joinappend	enumerate
ValueErrorlenminranger^   r_   r   globals) keypqparam_typesztypepstringfnamehave_complex_paramhave_complex_arghave_complexsourceaddaintaratbintbratarealbrealacomplexbcomplexrb   flagWl_areall_brealcancellable_realnoncancellable_real_numnoncancellable_real_den
multiplierdivisork	namespacerR   rR   rS   make_hyp_summator@   sr  
"



(  (  


(  

        
r   sagec                    s4   ddl m  | \ fdd}d|fS )z
        Returns a function that sums a generalized hypergeometric series,
        for given parameter types (integer, rational, real, complex).
        r   )hypsum_internalc                    s    | ||||||S NrR   )coeffszprecwpepsshiftmagnitude_checkkwargsr   rr   rt   rs   ru   rR   rS   _hypsum?  s   
z"make_hyp_summator.<locals>._hypsumz(none))sage.libs.mpmath.ext_mainr   )rq   r   rR   r   rS   r   8  s   c                 C   sx  | \}}}}|s| t krt S | tkrtS | tkrtS tS || }tj}|dkrDd|d  d ||dkrD|r=ttd||S ttd||S || k r`t	| d} t
t|d |d }	t| |	||S |t| d }
tt| |
}|| |
? }|dd}}}|r|| |
? | }|d| d  }|d@ r||8 }n||7 }|d7 }|s||
d > tt|
|
 }|r| }t||
 ||S )	N      r   gW?r         i90  )r   r   r   r   r   r   mathlogr#   r%   r*   r.   r(   absr   r)   r1   r   )xr   rndsignmanexpbcsizelgcr   tt2stermr   rR   rR   rS   mpf_erfO  s@   "


r   c                 C   s    t | }|d d |krdS dS )Nr   
ףp=
?TF)r   )r   r   re   rR   rR   rS   erfc_check_series|  s   r   c                 C   s  | \}}}}|s| t krtS | tkrt S | tkrtS tS |d }|| }|tdd| 7 }|p2|dk }	|	s:t| |se|	rKttt	| |d t
| ||S t| d }
ttt	| |t|
d d  d ||S t|>  }}d}dt| |d  |? }d}	 |d| d  |> | }|dkr||ks|sn|d@ r||8 }n||7 }|}|d7 }q{||> tt|| }t|| |}ttt| | |||}tt|||| ||}|S )Nr   r   r   
   r   r      )r   r   r   r   r   r   maxr   r&   r   r   r   intr   r   r)   r1   r   r/   r$   r'   r(   )r   r   r   r   r   r   r   r   magregular_erfre   r   r   	term_prevr   r   r   yrR   rR   rS   mpf_erfc  sD   (
r   c                 C   s<   |  }}d}|r||  |? | }||| 7 }|d7 }|s|S Nr   r   rR   )r   r   r   r   r   rR   rR   rS   	ei_taylor  s   r   c           	      C   s   t }|  }}| }}d}|||| dkrI||  ||  | |? || ||   | |? }}||| 7 }||| 7 }|d7 }|||| dks||fS )Nr      r   )r   )	zrezimr   _abssretresimtimr   rR   rR   rS   complex_ei_taylor  s   2r   c                 C   sP   t |> }||> |   } }||  }d}|r&|| |  |? }||7 }|d7 }|s|S r   )r   )r   r   oner   r   r   rR   rR   rS   ei_asymptotic  s   r   c                 C   s   t }t|> }|| | |   |? }| |> |  }}| |> |  }}	|| }
|}d}||||	 dkrh|| |	|  | |? || |	|  | |? }}	|
|7 }
||	7 }|d7 }||kr^t||||	 dks3|
|fS )Nr   i  r   )r   r   rN   )r   r   r   r   r   Mxrer   ximr   r   r   r   rR   rR   rS   complex_ei_asymptotic  s"   2r   Fc                 C   sp  |rt | } | \}}}}|r|s| tkrtS td|rd|||f}|| }	|d }
|	|
k}|sH|dkr9||> }n|| ? }|t|
d d k}|rn|	|
krQt}nttt| |
|
|
 }t	|t
| |
|
}t|| ||}nB|
dtt| 7 }
t| |
}t||
t|
 }t||
 }t||
}t||||}n| tkrt}n| tkrt}n	| tkrt}nt}|rt |}|S )NzE1(x) for x < 0r   r   V-?r   r   )r$   r   r   r	   r   r   r   r   r   r'   r/   r(   r   r   rM   r0   r   r   r   )r   r   r   e1r   r   r   r   xabsxmagr   can_use_asympxabsintvut1r   rR   rR   rS   mpf_ei  sH   



r   c                 C   s  |rt | } | \}}|\}}}}	|\}
}}}|tkr?|r7tt|||}|s1tt||}||fS t}||fS t|||tfS |tkrK|rG|sKttfS |d }||	 }|| }t||}||k}|sxtt|tt| }|t	|d d k}zo|r||krt
tf}nt||}t||}t|||\}}t|| t|| f}t|t| ||}t|| |}|rt |||}|W S |\}}|
rt|||t|t|||f}|W S t|||t|t|||f}|W S W n	 ty   Y nw |dt	tt| d 7 }t||}t||}t|||\}}|t|7 }t|| t|| f}|r-tt | |}nt| |}t||||}|r@t |}|S )N(   r   r   r   r   )r:   r   r$   r   r.   r   r   r   r   r   r   r   r   r   r9   rI   r<   r   r&   r   rN   rF   r   rM   r?   r@   )r   r   r   r   abasignamanaexpabcbsignbmanbexpbbcr   r   r   amagbmagzmagr   zabsintr   r   r   vrevimr   rR   rR   rS   mpc_ei  sz   






r   c                 C      t | ||dS NT)r   r   r   r   rR   rR   rS   mpf_e1O     r   c                 C   r   r   )r   r   rR   rR   rS   mpc_e1R  r   r   c                  C   s  |\}}}}|sM|r*|t kr| dkrtdfS t| ||dfS |tkr&t dfS ttfS |t krA| dkr=td| d ||dfS tdfS |tkrIt dfS ttfS | }	|rUd|  } |d }
|| }|dk rcttt| }| dkon|}t|}| dksd| | |
 k r|rt	||
}t
|t||	d |
||}nrt	||
}t||||}ndd|
 |   k odkn  }|stt|}ttd||  d|
 }|  | ||  tt||    ||  d| d	  }|
 d
 }||k }|rFt |
|
 > t||
 }| }|| }t|
> }|r|r||7 }|d7 }|| | |
? }|r|s	t	||
}|r4t
|t||	d |
|
}nt|||
}t
|t||
 ||}n| dkrTtt|||}n| dkr| d|
 k rtt||
}|rt|	d@ rst|}nt
|t|| d |
|
}t||
 }}dg| d  }td| d D ]}||d  | ||< q|ddd }|d |
> }td| d D ]}|d@ r||| | 8 }n||| | 7 }|| |
? }qt||
 |
}t
|t	||
}|rt
|t||	|
|
}t||}t|tt| d ||}nt|rDtt| d  }|r-tt|
|||}|	d@ r)t|}||fS tt
t|
t||	d |
|
|||}||fS |dfS )z
    E_n(x), n an integer, x real

    With gamma=True, computes Gamma(n,x)   (upper incomplete gamma function)

    Returns (real, None) if real, otherwise (real, imag)
    The imaginary part is an optional branch cut term

    r   Nr   r   ir      d   r   r   )r   r   rK   r   r   NotImplementedErrorr   r   r$   r/   r'   r,   r(   r   rn   r   r   r   r   r   ro   r   r   rJ   r.   ) re   r   r   r   gammar   r   r   r   n_origr   r   nmag	have_imagnegxr   recan_use_asymptotic_seriesximsiztolrr   r   T1facsr   T2rZ   r   imrR   rR   rS   
mpf_expintU  s   


6






&r  c                 C   s   t | |} | |   |? }|dkrdt|> d}}}n| | d}}}|r=|| ||d   |? }||| 7 }|d7 }|s%t|| S )z2
    0 - Ci(x) - (euler+log(x))
    1 - Si(x)
    r   r   r   r   )r   r   r   )r   r   whichx2r   r   r   rR   rR   rS   mpf_ci_si_taylor  s   
r	  c                 C   s  | d r| d | d  }n|d r|d |d  }|d r(t ||d |d  }|dks1|| k r3t|d| 7 }t| |}t||}|| ||  |? }d| | |? }|}	|}
t|> }|dkrpddt|> ddf\}}}	}
}n||||df\}}}	}
}t t|	t|
dkr||d  }|	| |
|  | |? |	| |
|  | |? }	}
||	| 7 }||
| 7 }|d7 }t t|	t|
dkst|| t|| fS )Nr   r   r   r   )r   r   r   r   r   r   )r   r  r   r  r   r   r   z2rez2imr   r   r   r   r   r   frR   rR   rS   mpc_ci_si_taylor  s6   

2r  r   c                 C   s  |d }| \}}}}d\}	}
|sF| t krtt fS | tkr | | fS t }	|dkrB| tkr2tt||d}
| tkrBttt|t| d}
|	|
fS || }|| k rv|dkr\t| d| ||}
|dkrrt	|}t
| }t|t||||}	|	|
fS ||kr|dkr|rtt|t| }
nt||}
t|
d}
|dkrtt| || ||}	|	|
fS |t|7 }|d t|dk}|s|dkrtt| |d||}
|dkrt| |d}	t|	t	||}	t|	tt
| |||}	|	|
fS t
| } t| |}td| > | }t|> }|}|}d}|r,| }|| | |? }|d7 }||7 }|| | |? }|d7 }||7 }|st|| }t|| }t|| |}t|| |}t| |\}}|dkrttt||t|||}
ttt|d|
|}
|rnt|
}
t|
||}
|dkrtt||t||||}	|	|
fS )z
    Calculation of Ci(x), Si(x) for real x.

    which = 0 -- returns (Ci(x), -)
    which = 1 -- returns (Si(x), -)
    which = 2 -- returns (Ci(x), Si(x))

    Note: if x < 0, Ci(x) needs an additional imaginary term, pi*i.
    r   )NNr   r   r   r   )r   r   r   r   r%   r.   r$   r   r#   rL   r   r   r0   r(   r4   r   r   r   r   r	  r   r   r   r2   r'   r&   )r   r   r   r  r   r   r   r   r   cisir   r   r   
asymptoticxfxrs1s2r   r   cossinrR   rR   rS   	mpf_ci_si  s   






r  c                 C   s"   t | dk rtt| ||dd S )Nr   )r   r	   r  r   rR   rR   rS   mpf_ciX  s   r  c                 C   s   t | ||dd S )Nr   )r  r   rR   rR   rS   mpf_si]  s   r  c           	      C   s   | \}}|t kr"t|||dd }t|dk r|t||fS |t fS |d }t|||d\}}t|t||}t||ft| |||}|S )Nr   r   )	r   r  r   r.   r  r   rL   r@   r?   )	r   r   r   r   r  r  r   crecimrR   rR   rS   mpc_ci`  s   r  c                 C   sH   | \}}|t krt|||dd t fS |d }t|||d} t| ||S )Nr   r   )r   r  r  rA   )r   r   r   r   r  r   rR   rR   rS   mpc_sim  s   r  c                 C   s   |d7 }| dk o| d@ }|d |d  }t | } |d | t|   }|dk r,|| | 8 }t||}|d |? }| s@t|>  }}	n||  t|  | d | |  ?  }}	d}
|	rn|	| d|
 |
|    |? }	||	7 }|
d7 }
|	sV|rs| }t|| ||S )N2   r   r   r   r   r   )r   r   r   r   rJ   r   )re   r   r   roundingnegater   r   r  r   r   r   rR   rR   rS   mpf_besseljn  s*   
$r#  c                 C   s  | dk o| d@ }t | } |}|\}}t|d |d  |d |d  }|d| t|   t | 7 }|dk r;|| | 8 }t||}t||}|d |d  |? }	|| |d ? }
| sdt|>  }}t }}n(t||| \}}|t|  | d | |  ?  }}|t|  | d | |  ?  }}d}t |t | dkrd| ||   }||	 ||
  ||	 ||
  }}|| |? }|| |? }||7 }||7 }|d7 }t |t | dks|r| }| }t|| ||}t|| ||}||fS )Nr   r   r   r   r   r   )	r   r   r   r   r   r   r;   rJ   r   )re   r   r   r!  r"  origprecr   r   r   r  r  r   r   r   r   r   r  r   rr   rR   rR   rS   mpc_besseljn  sD   "


  "r%  c                 C   s  | \}}}}|\}}	}
}|s|rt d|r|	s<| tks |tkr"tS | tkr.|tkr,tS tS |tkr:| tkr8tS tS tS |d }|| }|
| }|| }t|}|dkr|dkrstt| ||dtt| |||} }|d }|dksX| \}}}}|\}}	}
}|| }|
| }|| }t	||}t
||}d}|dk r| }n|dkr| }|rt| |} t||}t| |}t||}t|||}t|| | ||S )z^
    Computes the arithmetic-geometric mean agm(a,b) for
    nonnegative mpf values a, b.
    zagm of a negative numberr   r   r   r   r   i)r	   r   r   r   r   r%   r   r*   r'   rn   r   r   r5   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	mag_deltaabs_mag_deltamin_magmax_magre   afbfgrR   rR   rS   mpf_agm  s^   





r-  c                 C      t t| ||S )z\
    Computes the arithmetic-geometric mean agm(1,a) for a nonnegative
    mpf value a.
    )r-  r   r   r   r   rR   rR   rS   mpf_agm1  s   r0  c           
      C   s   t | st |rttfS t| |fv rttfS t| |kr ttfS |d }tt| d }	 tt| ||d}t	t
| |||}||} }tt| dt|dgd }tt| |dd}	|tksgt|	t||ri| S q-)z
    Complex AGM.

    TODO:
    * check that convergence works as intended
    * optimize
    * select a nonarbitrary branch
    r   r   r   r   )rC   r   rD   r   r:   r%   r   rB   r@   rE   r9   r"   rF   r7   r   r'   )
r   r   r   r   r   epsa1b1r   errrR   rR   rS   mpc_agm  s"   	
r5  c                 C   r.  r   )r5  r6   r/  rR   rR   rS   mpc_agm1,  r   r6  c                 C   s   | d s| t krtt||dS | tkrt S | tkr| S | tkr"tS |d }ttt| ||}t	||}t
t||||}t|dS )Nr   r      )r   r%   r.   r   r   r   r   r*   r&   r0  r(   )r   r   r   r   r   r   r  rR   rR   rS   
mpf_ellipk/  s   

r8  c           	      C   sv   | \}}|t kr|tkrtS t|trt|||t fS |d }ttt| ||}t	||}t
t||||}t|dS )Nr7  r   )r   r   rD   r    r   r8  rE   r7   r6   r6  rG   r.   rB   )	r   r   r   r   r  r   r   r   r  rR   rR   rS   
mpc_ellipkC  s   


r9  c                 C   s   | \}}}}|s&| t krtt||dS | tkrtS | tkr | S | tkr&t| tkr,tS |d }|| }|| k rAtt||dS t|d| }	tt|	}
t	| d| }t	t
| |
d| }tt
|||	 }t
t| }t|t| d|}t|t||||S )Nr   r   r   r   r   )r   r%   r.   r   r   r   r	   r   r   r8  r&   r'   r   )r   r   r   r   r   r   r   r   r   rr   hKKhKdiffr   r   rR   rR   rS   
mpf_ellipeP  s0   


r>  c                 C   s   | \}}|t kr|tkrt tfS t|trt|||t fS |d }t| d}t|d |d  d| }tt|}t| d| }	tt	| |d| d| }
t
t|
|	|| }tt| |}t|t
| d|}t|t|	||||S )Nr7  r   r   r   r   )r   r   r    r   r>  rF   r   r%   r9  r=   rB   r7   r6   r9   r@   )r   r   r   r   r  r   r   rr   r:  r;  r<  r=  r   r   rR   rR   rS   
mpc_ellipen  s    


r?  )r   )t__doc__operatorr   backendr   r   r   r   r   
libintmathr   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-   	libelefunr.   r/   r0   r1   r2   r3   r4   r5   libmpcr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   	gammazetarK   rL   rM   	ExceptionrN   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r  r  r#  r%  r-  r0  r5  r6  r8  r9  r>  r?  rR   rR   rR   rS   <module>   sZ    ,X
 w-.	*A
v
]($;