o
    lh-                    @   sJ  d Z ddlZddlZddlmZ ddlmZmZmZmZm	Z	 ddl
mZmZmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS dd	lTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn e>d
d Zoe>dd Zpe>dd Zqe>dd Zr	 e>dd Zse>dd Zte>dd Zue?esZve?erZwe?epZxe?eqZye?eoZze?etZ{e?euZ|dZ}	 i Z~e!dZe!dZdd Zee}ZdkddZdkdd Zd!d" Z	 d#d$ Zd%d& Zefd'd(Zefd)d*Zefd+d,Zefd-d.Z	 i Zd/d0 Zd1Zi Zefd2d3Zedfd4d5Zedd6fd7d8Zefd9d:Zefd;d<ZdZd=d> Zg ag ag ad?d@ ZdAdB ZdCZdDdE ZdFZedGk sJ dHZdIZi Zi ZdJdK eed D ZdLdM ZdNdO ZdPdQ ZdRdS ZdTdU ZdVdW ZdldYdZZdld[d\Zdmd]d^Zdmd_d`ZdmdadbZdmdcddZdmdedfZdmdgdhZefdidjZdS )nao  
-----------------------------------------------------------------------
This module implements gamma- and zeta-related functions:

* Bernoulli numbers
* Factorials
* The gamma function
* Polygamma functions
* Harmonic numbers
* The Riemann zeta function
* Constants related to these functions

-----------------------------------------------------------------------
    N   )xrange)MPZMPZ_ZEROMPZ_ONE	MPZ_THREEgmpy)list_primesifacifac2moebius)-round_floorround_ceiling
round_downround_upround_nearest
round_fastlshift
sqrt_fixed
isqrt_fastfzerofonefnonefhalfftwofinffninffnanfrom_intto_intto_fixedfrom_man_expfrom_rationalmpf_posmpf_negmpf_absmpf_addmpf_submpf_mulmpf_mul_intmpf_divmpf_sqrtmpf_pow_intmpf_rdiv_intmpf_perturbmpf_lempf_ltmpf_gt	mpf_shiftnegative_rndreciprocal_rndbitcountto_float	mpf_floormpf_signComplexResult)constant_memodef_mpf_constantmpf_pipi_fixed	ln2_fixedlog_int_fixedmpf_ln2mpf_expmpf_logmpf_powmpf_coshmpf_cos_sinmpf_cosh_sinhmpf_cos_sin_pi
mpf_cos_pi
mpf_sin_piln_sqrt2pi_fixedmpf_ln_sqrt2pisqrtpi_fixed
mpf_sqrtpicos_sin_fixed	exp_fixed)mpc_zerompc_onempc_halfmpc_twompc_abs	mpc_shiftmpc_posmpc_negmpc_addmpc_submpc_mulmpc_divmpc_add_mpfmpc_mul_mpfmpc_div_mpfmpc_mpf_divmpc_mul_intmpc_pow_intmpc_logmpc_expmpc_pow
mpc_cos_pi
mpc_sin_pimpc_reciprocal
mpc_squarempc_sub_mpfc                 C   s   | d } t | >  }}d\}}}|rW|d|d  d| d  9 }|dd|  d|d   d  }|d|d   d	|d  d
|  d  |d d| d   }||7 }|d7 }|s|d? S )N   )r   r   r             r      (         r   )precaonestn rz   j/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mpmath/libmp/gammazeta.pycatalan_fixedH   s   
 <r|   c                 C   s,  t | | d  d }t}td}t|>  }}t|}tt|||d }}d}		 ttd|	 |}
t|
||}
t	|
||}
t
|
|}
|
| | |	 |? }|dk rQn-||7 }||d|	 d  |d|	   7 }|	d7 }	t|d|	 d|	 d  |}t|||}q(||> t| }tt|| |}t
|| }|S )N      ?      rm   r   d   )intr   r   r   r<   r2   r(   r%   mpf_bernoullir*   r    r)   r>   rA   r!   )rt   wprw   facrx   ONEpipipowtwopi2ry   zeta2ntermKrz   rz   r{   khinchin_fixedm   s2   
 
r   c                 C   s  | d }t d|  d }t|> }t}td|D ]}|t|||d  7 }qt||}||| | 7 }|||d d  7 }|d }d}d}	d}
td}d}	 ||> |	|  | }t|| }td| |}t|||}t	|||}t
||}t|dk r|nA||8 }|	||
  |
 |	 || |
d f\}}	}}
|	||
  |
 |	 || |
d f\}}	}}
|d7 }t|d| d| d  |}qMt|}|d	9 }||> |d |?  }|t|7 }|t
ttd| | ||7 }|d
 }tt|| |}t
|| S )N   gQ?   rm   rl   r   r         )r   r   r   ranger?   r   r!   r   r(   r*   r    absr)   r=   euler_fixedrB   rA   )rt   r   Nr   rw   klogNpNru   bjr   DBr   r   Arz   rz   r{   glaisher_fixed   sL   

** 
r   c                 C   s   | d7 } t | > }td| > }d}t}|rF||7 }||d 9 }|d| d d d| d   }d| d|d  d	|  d  | }|d7 }|s|d
? S )Nrj   M   r   
   rm   r   ro         rr   )r   r   r   )rt   dr   ry   rw   rz   rz   r{   apery_fixed   s    $r   c           	      C   s   d}| |7 } t t| d td dd }d| }| t|   }}t| >  }}d}	 ||d  |d  }||d  | | | }||7 }||7 }tt|t|dk rWn|d7 }q-|| | > | S )Nr   r   rm   r   r   )r   mathlogr>   r   maxr   )	rt   extrapry   r   Ur   Vr   rz   rz   r{   r     s"   "r   c                 C   sr   | d }d}t |}	 t||}|tkrnt||}t|t||}t|t||}t||}|d7 }qt	|| S )Nrj   rm   r   )
	mpf_eulermpf_zeta_intr   rB   r)   r   r*   r   r&   r    )rt   r   mrw   rx   rz   rz   r{   mertens_fixed*  s   



	r   c                    s   dd }d|  d  t } fdddD } fdd|D }d}	 t| }td
D ]}t|tt ||  }t|| ||  ||< q*t|||  }t|| d dt krXnt|| }|d	7 }q!t|td }t|td }t	|| S )Nc                    s$   t  fddtd d D   S )Nc                 3   s(    | ]} | st | | > V  qd S N)r   .0r   ry   rz   r{   	<genexpr>=  s   & z-twinprime_fixed.<locals>.I.<locals>.<genexpr>r   )sumr   r   rz   r   r{   I<  s   $ztwinprime_fixed.<locals>.Irm   r   c                    s   g | ]}t d | qS )r   )r"   r   r   r   rz   r{   
<listcomp>@      z#twinprime_fixed.<locals>.<listcomp>)rm   rl   r      c                    s   g | ]}t || qS rz   )r(   r   r   rz   r{   r   A  r   r   r   r   ry   i'  i 	  )
r   r   r   r(   r'   r,   r#   r   r*   r    )rt   r   resprimesppowersry   ru   irz   r   r{   twinprime_fixed:  s(   

r   i  rl   r   c                 C   s(   t | d}tdd|  | |d   S )z5Accurately estimate the size of B_n (even n > 2 only)rm   gS㥛@r}   gK7A`@)r   r   r   )ry   lgnrz   rz   r{   bernoulli_size  s   r   c                 C   sN  | dk r| dk rt d| dkrtS | dkrttS | d@ r tS |tkr=|t| d d kr=t| \}}t||||p;t	S | t
krGt| ||S |d }|d|d	@  7 }t|}|r|\}}| |v rp|sh||  S t||  ||S |\}	}
}| |	 d
krt| ||S n | d
krt| ||S dti}dtd
tg \}	}
}}||ft|< |	| kr|	d }t|	}d}td|| }|	dk rt}n|}td|	d d D ]b}||	d|    \}}}}}|r| }|t|| || 7 }d| }||	d | |	d |  |	d |  |	d |  |	d |  |	|  9 }|d| d|  d|  d|  d|  d|   }q|dkr:t|	d t|}|dkrGt|	d t|}|dkrUt|	 d t|}t|||}tt|||t|
|}|||	< |	d7 }	|
|	d |	d   |	|	d   }
|	dkr|d|	 d|	   |	d |	d   }|	|
|g|dd< |	| ks||  S )z.Computation of Bernoulli numbers (numerically)rm   r   z)Bernoulli numbers only defined for n >= 0r   g?  r   rk      r   r   r   r   rl   r      	   N)
ValueErrorr   r$   r   r   BERNOULLI_PREC_CUTOFFr   bernfracr"   r   MAX_BERNOULLI_CACHEmpf_bernoulli_hugebernoulli_cachegetr#   r   r   r   r   r   r   r-   f3f6r!   r*   r'   r   )ry   rt   rndr   qr   cachednumbersstater   binbin1caseszbmrw   sexpru   r   usignumanuexpubcuj6r   rz   rz   r{   r     sz   


H6 
$!r   c                 C   s   |d }|t t| d }t| d |}t|t| ||}t|tt||  |}t|d|  }| d@ s9t	|}t
|||p?tS )Nr   rm   r   rl   )r   r   r   mpf_gamma_intr(   r   r,   r<   r2   r$   r#   r   )ry   rt   r   r   piprecvrz   rz   r{   r     s   r   c                 C   s   t | } | dk rg d|  S | d@ rdS d}t| d D ]}| |d  s(||9 }qt| t t|d d }t| |}t|t|}t|t	}||fS )a  
    Returns a tuple of integers `(p, q)` such that `p/q = B_n` exactly,
    where `B_n` denotes the `n`-th Bernoulli number. The fraction is
    always reduced to lowest terms. Note that for `n > 1` and `n` odd,
    `B_n = 0`, and `(0, 1)` is returned.

    **Examples**

    The first few Bernoulli numbers are exactly::

        >>> from mpmath import *
        >>> for n in range(15):
        ...     p, q = bernfrac(n)
        ...     print("%s %s/%s" % (n, p, q))
        ...
        0 1/1
        1 -1/2
        2 1/6
        3 0/1
        4 -1/30
        5 0/1
        6 1/42
        7 0/1
        8 -1/30
        9 0/1
        10 5/66
        11 0/1
        12 -691/2730
        13 0/1
        14 7/6

    This function works for arbitrarily large `n`::

        >>> p, q = bernfrac(10**4)
        >>> print(q)
        2338224387510
        >>> print(len(str(p)))
        27692
        >>> mp.dps = 15
        >>> print(mpf(p) / q)
        -9.04942396360948e+27677
        >>> print(bernoulli(10**4))
        -9.04942396360948e+27677

    .. note ::

        :func:`~mpmath.bernoulli` computes a floating-point approximation
        directly, without computing the exact fraction first.
        This is much faster for large `n`.

    **Algorithm**

    :func:`~mpmath.bernfrac` works by computing the value of `B_n` numerically
    and then using the von Staudt-Clausen theorem [1] to reconstruct
    the exact fraction. For large `n`, this is significantly faster than
    computing `B_1, B_2, \ldots, B_2` recursively with exact arithmetic.
    The implementation has been tested for `n = 10^m` up to `m = 6`.

    In practice, :func:`~mpmath.bernfrac` appears to be about three times
    slower than the specialized program calcbn.exe [2]

    **References**

    1. MathWorld, von Staudt-Clausen Theorem:
       http://mathworld.wolfram.com/vonStaudt-ClausenTheorem.html

    2. The Bernoulli Number Page:
       http://www.bernoulli.org/

    rl   ))r   r   )ro   rm   )r   r   r   )r   r   rm   rj   )
r   r	   r   r   r   r   r(   r   r   r   )ry   r   r   rt   r   r   pintrz   rz   r{   r     s   G

r   c                 C   s@   | t ttfv r	| S ttt| |d |}t|t|d |||S )Nr   )r   r   r   mpf_psi0r&   r   r   )xrt   r   ru   rz   rz   r{   mpf_harmonic  s   r   c                 C   sN   | d t krt| d ||t fS tt| t|d |}t|t|d |||S )Nr   r   r   )r   r   mpc_psi0r\   r   r   )zrt   r   ru   rz   rz   r{   mpc_harmonic  s   r   c                 C   sn  | \}}}}|d }|s| t kr| S | tks| tkrtS | tks&|dkr*|r*td|| dk rGtt| t||||}t|t	t| ||||S |rr|| dkrrt
| |\}	}
tt	|	|
|t||}ttt| ||}t||||S |s|| |krtt| t|||S t| }td| d }t}
t| |} t|> }||k rt||D ]}|
||> |  8 }
| |7 } q| |8 } |
ttt| | |||7 }
|
||> d|   7 }
| |  |? }|}d}d}	 || |? }td| |\}}}}|d|  }|dkr||> |d|   }n|| ? |d|   }|d@ r|
|8 }
n|
|7 }
|dkr(||kr(n|}|d7 }qt|
| ||S )	z_
    Computation of the digamma function (psi function of order 0)
    of a real argument.
    r   r   zpolygamma polerl   )\(?rm   r   )r   r   r   r   r   r   r&   r   r'   r*   rG   r(   r<   rB   r   r   r   r    r   r   r!   r   )r   rt   r   signmanexpbcr   r   crw   r   r   r   ry   rv   r   x2rx   prevbsignbmanbexpbbcoffsetr   rz   rz   r{   r     s^   

 r   c                 C   s  | \}}|t krt|||t fS |d }|\}}}}	|rH||	 dkrHt| |}
t| |}tt|
||t||}ttt	| ||}t||||S |sZ|	| |krZt
t| t	|||S t|}td| d }t}||k rt||D ]}t|t| ||}t| t|} qqt| t	|} t|t
| ||}t|tt| ||}t| |}t	}t}t }d}tt| d }	 t|||}td| |}t|t|d| ||}t|||}t|d}|dkrt||st||r	 |S |}|}|d7 }q)zb
    Computation of the digamma function (psi function of order 0)
    of a complex argument.
    rj   rl   r   rm   r   r   )r   r   re   rf   r]   r[   r<   r   rY   rQ   rb   r   r   rP   r   rg   r\   r   rX   rR   rh   r2   rZ   r   r_   r`   rT   r/   )r   rt   r   reimr   r   r   r   r   r   rw   r   r   wry   r   z2rx   r   szprevepsbernr   sztermrz   rz   r{   r     sT   



r   c                 C   s,   | dkrt ||tdS t| |tf||d S )zm
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a real argument x.
    r   )r   )r   r   mpc_psir   )r   r   rt   r   rz   rz   r{   mpf_psi  s   r  c                 C   s`  | dkr
t |||S |\}}|d }|\}}}	}
|d s'|tttfv r'ttfS |s=|tkr5|tkr5ttfS |tkr=ttfS t|}td| d|   }t}||k rnt||D ]}t	||  d |}t
|||}t|t|}qVt	||  |}t	|d|}t|t| |}t
|||}t
|tt|||t||}| d }d}d}t|d}|d |d	  }tt|| d }	 t|||}td| |}t|||}t|t||}t|||}t
|||}t|d}|dkrt||rn#|| d|  | d|  d  9 }|d| d d| d  9 }|d7 }qt|tt| d |||}| d@ s.t|d t|d f}|S )
zp
    Computation of the polygamma function of arbitrary integer order
    m >= 0, for a complex argument z.
    r   rj   r   g?r   r   rm   r   rl   )r   r   r   r   r   r   r   rP   r   ra   rX   r\   r   r^   r   r]   r[   r   rT   r2   rZ   r   r)   r*   r/   	mpf_gammar$   )r   r   rt   r   r   r   r   r   r   r   r   r   ry   rw   r   rx   zmr   integral_termru   r   magnr   r   scalr   r   r   rz   rz   r{   r   
  sd   

 
r   c                 C   s   | t v rt |  S tg| d  }t}t }|d< td| d D ]&}|d | | d  | | d  }|d| d| d   }||7 }|||< q|t | < |S )Nr   r   r   rm   )borwein_cacher   r   r   )ry   dsr   rw   r   rz   rz   r{   borwein_coefficients{  s    
r	  r   c                 C   s  |d }t | } | tv rt|  d |krtt|  d ||S | dk rA| dkr*td| s0ttS tt|  d |t| d ||S | |krLt	t
d||S | |d kr}d|>  }}|d||  > 7 }||t|   7 }|dtd|| d  > 7 }t|| ||S t|| d  d }|dk rt d| d }|t |d	 d
 d k rt
}t|D ]'}t || t|d  }	|	dk r ntt
tt||  |	|}
t||
|}qtt
||S t |d	 d
 }t|}t}t| } t|D ]}|d| || ||   |> |d |   7 }q||> ||   }||> d|> d|d |  >   }| tv r)t|  d |k s.| tvr:|t|| | ft| < t|| | ||S )z<
    Optimized computation of zeta(s) for an integer s.
    rj   r   r   rm   zzeta(1) poleg/$?r   g       @RQ@r   r   ro   )r   zeta_int_cacher#   r   r$   r   r*   r   r   r.   r   r   r   r!   floatr	   r   r   r'   r,   r(   r	  r   r   r   )rw   rt   r   r   rx   rv   r   needed_termsr   powprecru   ry   r   rz   rz   r{   r     sR   ". &r   c                  C   s  | \}}}}|s| t kr|rtS ttS | tkrtS tS |d }|s5|| t|dd kr5tt|||S |dkrk|rc| tkrDt	||S t
t| |t| }	tttttt| |||}
t|	|
||S t
t| ||S |r|rtttttt| |||}
tt| ||
||S tt| d| }t||}t||}tt| d|}|td||  }t|| }ttt|d| |||}t|t|t||||||S tt| |}t|\}}}}d||  }||kr|rt	||S ttt||}
t|
t|||S |td|7 }t}t|d d	 }t|}t}t| |}t|}t |D ]/}| t!|d || |? }t"|||}|| ||  | }|d@ rJ||8 }q ||7 }q |||   }t#|| |}|rgt$|||S tttttt| |||}
t||
||S )
Nrj   rm   r   r   ro   r   r   r
  r   )%r   r   r$   r   r   r   r   r   r.   r@   r   r   r3   r'   rC   r   r(   mpf_zetar  rI   r2   r   r<   r*   r%   r&   r   r   r   r	  r    r>   r   r?   rO   r!   r#   ) rw   rt   r   altr   r   r   r   r   r   r   yru   r   r   wp2r   r   rasignamanaexpabc	pole_distrx   ry   sfln2r   r   emanr   rz   rz   r{   r    sx   





r  Fc           0      C   s  | \}}|t krt||||t fS |stt| dt|rt|d }tt| |}t|d\}	}
}}d||  }||kr|rlt|}t	|t
||}tt	|||d}t||}t|t||}t|||}t|||S ttt||}t|t
||}t|||S |td|7 }t|t r|rtttttt| |||}tt| ||||S tt| d| }t||}t||}tt| d|}|\}}}}|\}}}}t|| || }|td| }t|| }t|dt f} tt| | |||}!t|t|t||!||||S t|d d }"|"td	tt | 7 }"t!|"}!t"||}#t"||}$t#}%t#}&t$|> }'t$d
| > }(|t%k})t&|}*t'|d } || }t(|"D ]Z}+t)|+d ||*},|)rc|(t*|+d |>  }-n
t+|# |, |? |}-|+d@ r}|-|!|" |!|+  9 }-n
|-|!|+ |!|"  9 }-t,|$ |, |? || \}.}/|%|-|. |? 7 }%|&|-|/ |? 7 }&qK|%|!|"   }%|&|!|"   }&t-|%| |}%t-|&| |}&|rt|%|&f||S tttt|||}t|%|&f|||S )Nr   rj   r   ro   r   r   r
  r   g?rm   ).r   r  r1   rT   r   NotImplementedErrorrY   rQ   r@   r(   r   r2   r'   r]   r$   r\   rV   rW   r[   r   r0   rd   rS   rZ   mpc_zeta	mpc_gammarf   rU   r<   r^   r   r   r   r	  r    r   r   r   r>   r=   r   r?   r   rO   rN   r!   )0rw   rt   r   r  forcer   r   r   r  r  r  r  r  r  r   r  gr   ru   r   r   rsignrmanrexprbcisignimaniexpibcmagr  r   pi2r   ry   refimftretimrv   one_2wpcritical_liner  r   r   r   wrewimrz   rz   r{   r    s   





r  c                 C      t | ||dS Nr   )r  rw   rt   r   rz   rz   r{   mpf_altzetar     r6  c                 C   r3  r4  )r  r5  rz   rz   r{   mpc_altzetau  r7  r8  c                 C   sP   |dkr| S t |> }|r&|d@ r||  |? }|d8 }| |  |? } |d }|s|S )Nr   rm   rs   )r   ry   r   r  rz   rz   r{   	pow_fixed|  s   r9  c                 C   s   | t tk rt}td tt|d  }t}|||fS dg| d  }dg| d  }t| }|D ]}t|| d |D ]}|||< q:q0t|D ]"\}}|dkrhd}|| } | | sd| | } |d7 }| | rX|||< qF|a|a|a|||fS )Nr   r   rm   )	lensieve_cacheprimes_cacheindexr   
mult_cacher	   r   	enumerate)ry   siever   multr   r   r   r   rz   rz   r{   
primesieve  s4   


rB  c                 C   s  |dk rt dt|| \}}}i }	t|> }
td| > }|| }t|}t|d }|D ]~}|d || kr9 nst|||}t| | |? ||\}}| rW|t||>  }n
t| | |? |}|| |? }|| |? }||fg|	|< ||}}t	dt
t|| |d d D ] }|| ||  |? || ||  |? }}|	| ||f qq-t}t}|dkr||
7 }t|d}t||| d D ]}|| }||	v r|| }|	| |d  \}}	 |||  }|dkrn(|| }|| }|	| |d  \}}|| ||  |? || ||  |? }}qn5t|||}t| | |? ||\}}| r3|t||>  }n
t| | |? |}|| |? }|| |? }||7 }||7 }q||fS )Nr   za cannot be less than 1rm   g{Gz?)r   rB  r   r>   r=   r?   rN   r   rO   r   r   r   r   appendr   r   r   )r0  sresimru   ry   r   r@  r   rA  basic_powersrv   r/  r  r  r*  r   r   cossinr   prepimr-  r.  r   xreximaar   rz   rz   r{   zetasum_sieved  sn   
&*

*
rN  r   c           !         s   d t |}|dgk}t|dk}| \}}	|tk}
t|}t|	}	|dkrZ|tkrZ|sZ|sZ|dk s:tjdkrZt|
||	||\}}t|  dt|  dfg}|g fS t	|}|sft
|d }dd |D d	d |D |rd
d |D dd |D ng  t> }td > }t}td } }t||| d D ]}t||}t|	 | ? |\}}|
r|t||>  }n
t| | ? }|| ? }|| ? }|r|||  }|| ? }|| ? }|rx|r4t||}d  || ? 7  < d  || ? 7  < |r3d  || ? 7  < d  || ? 7  < qt> }|D ]<}|  || ? 7  < |  || ? 7  < |ro|  || ? 7  < |  || ? 7  < || ? }q:qd  |7  < d  |7  < |rd  |7  < d  |7  < q|r|r|d rƈd  d< d  d< |rƈd  d< d  d< n'fdd|D fdd|D |rfdd|D fdd|D  fddtD } fddtD } || fS )zI
    Fast version of mp._zetasum, assuming s = complex, a = integer.
    r   r   r   g    Al        ry   c                 S      g | ]}t qS rz   r   r   rz   rz   r{   r         zmpc_zetasum.<locals>.<listcomp>c                 S   rO  rz   rP  r   rz   rz   r{   r      rQ  c                 S   rO  rz   rP  r   rz   rz   r{   r     rQ  c                 S   rO  rz   rP  r   rz   rz   r{   r     rQ  rm   c                       g | ]
}d |  |  qS ro   rz   r   )rK  rz   r{   r   <      c                    rR  rS  rz   r   )rL  rz   r{   r   =  rT  c                    rR  rS  rz   r   )yrerz   r{   r   ?  rT  c                    rR  rS  rz   r   )yimrz   r{   r   @  rT  c                    0   g | ]\}}t |  d t |  d fqS r   r!   )r   xaxbrt   r   rz   r{   r   A      $c                    rW  r   rX  )r   yaybr[  rz   r{   r   C  r\  )listr:  r   r    ZETASUM_SIEVE_CUTOFFsysmaxsizerN  r!   r   r   r   r>   r=   r   r?   rN   r   rO   r9  zip)!rw   ru   ry   derivativesreflectrt   have_derivativeshave_one_derivativerD  rE  r0  r   r   xsmaxdrv   r/  r  r*  r  r   r   rG  rH  r   xterm_rexterm_im
reciprocalyterm_reyterm_imrx   r   ysrz   )rt   r   rL  rK  rV  rU  r{   mpc_zetasum  s   


"
rp  i  i:  g?   c                 C   s   g | ]}t t|qS rz   )r   r
   )r   ry   rz   rz   r{   r   \  s    r   c                    s  d |  t g| d  }t}t> }| d |d< ttd}t| }}g }d}		 d|	  }
|
dk r:n8ttt|t|
|
}t	|t	|||
|
}t
|}t
|}|	| | ? }|||f t	||}|	d7 }	q/td| d dD ]<}t }d}	|D ]-\}}|d dkr||	|  }n|d d }|||  |	|  }|s n	||7 }|	d7 }	qd| ||< qzfd	d
t| d D }tttdd }}t|td}td| d dD ]%}t	|| |}t
|||< t	||}t|t|d |d  }q|> | }td| d dD ]H}|d d }|d| d  d| d  d }td|d D ]}	||d|	  |d| d d|	    ? 8 }q4||  d| | ? 7  < qtd| d dD ]R}|d d }|d| d  d| d  }tdd| d D ]!}	|d|	 d |	 |d|	   |d| d d|	    ? 7 }q||  || ? d|  7  < qf fdd
|D S )a  
    zeta(n) = A * pi**n / n! + B

    where A is a rational number (A = Bernoulli number
    for n even) and B is an infinite sum over powers of exp(2*pi).
    (B = 0 for n even).

    TODO: this is currently only used for gamma, but could
    be very useful elsewhere.
    r   rm   r   r   r   rl   r   r   c                    s   g | ]	}t t| qS rz   )r%   r   )r   r   r   rz   r{   r     s    zzeta_array.<locals>.<listcomp>r   r   ro   c                    s   g | ]}| ? qS rz   rz   r   r   )r   rz   r{   r         )r   r=   r   r2   r<   rA   r*   r   r'   r(   r    rC  r   r,   r   )r   rt   zeta_valuesr   rv   f_2pi	exp_2pi_kexp_2piexps3r   tpq1q2ry   rw   e1e2rx   r   r   pi_powfpir   reciprocal_pirz   )r   r   r{   
zeta_array_  st   


 0 @$r  c           	         s  | dk r| d| d   n| dk r| d| d   n| t v r&t  fS dk r3td d }ntd d }t D ]%  krb fdd	t   | d
 D }| dk r\|t < |f  S q=dkrmtd d }dg| }t|d< t|> |d< t||d< t||}td|D ]3}|d  ||d   |? }td|D ]}|d| ||  |||   |? 7 }q|d|  }|||< qdd	 |D }|d
d
d }|d
d }|t < t| S )z
    Gives the Taylor coefficients of 1/gamma(1+x) as
    a list of fixed-point numbers. Enough coefficients are returned
    to ensure that the series converges to the given precision
    when x is in [0.5, 1.5].
    i  r   r   r   gRQ?rm   gv/?c                    s   g | ]}|  ? qS rz   rz   rr  cprecrt   rz   r{   r     r   z-gamma_taylor_coefficients.<locals>.<listcomp>Ng333333?rj   r   r   rl   ro   c                 S   s   g | ]}|d ? qS )rj   rz   )r   ru   rz   rz   r{   r     rs  )gamma_taylor_cacher   r   r   r   r  r   gamma_taylor_coefficients)	inprecr   coeffsr   r   rt  r   ru   r   rz   r  r{   r    sH   "

&
r  c                 C   sB  ||d ? t  d? }t |> }t|\}}	|dkr||}
t|d D ]}||8 }|
| |? }
q ||8 }t}|D ]
}||| |?  }q5||	| L }|dkrVt|
|> | | ||S |dkrftt||
|> |||S |dkrzttt|
|> | | ||S d S |}
t| D ]}|
| |? }
||7 }qt}|D ]
}||| |?  }q||	| L }|t	t
| dkrt| t| }t||
 | | }
t|
||}
|dkrtt|
||S |dkrt|
||S |dkrtttt|
|||S d S t|| |
 d| }
|dkrtt|
||S |dkrt|
||S |dkrttt|
||S d S )Nr   r   rm   rl   r   )r   r  r   r   r!   r2   r"   rB   r%   r5   r   r&   r   r(   r*   r   r#   r$   )xmpfr   r   rt   r   typenearest_intrv   r  cwpr  r   r   r   r   rz   rz   r{   gamma_fixed_taylor  sV    
"r  c                 C   sT   | t v rt |  S t| \}}|t| | d  9 }||tt|t|ft | < t |  S r4  )gamma_stirling_cacher   r   r5   r   )ry   r   r   rz   rz   r{   stirling_coefficient  s   r  c                 C   s  t || > |  }|| |? }t||  }||d 7 }|| |? }||d 8 }|| |? }||d 7 }|| |? }||d 8 }|| |? }|sH|S ||d 7 }|| |? }|d| d 8 }|| |? }||d 7 }|| |? }|sr|S |d	| d
 8 }|| |? }|d| d 7 }|| |? }|d| d 8 }|| |? }|s|S d}tt|}tt|}d}	 t|\}	}
}}|| | }| }|| }|dkr||k r|	|L }	||8 }|| }|dkr||k r||? }||8 }n|}||	 |
 |? }|s	 |S ||7 }|| |? }||| 8 }|d7 }q)zr
    Sums the rational part of Stirling's expansion,

    log(sqrt(2*pi)) - z + 1/(12*z) - 1/(360*z^3) + ...

    r   h              !    [  ܹ      r   r   rm   )r   rJ   r5   r   r  )r   rt   rx   r   rw   r   usizetsizetexpr   r   pbqbterm_magshiftr   r   r   rz   rz   r{   real_stirling_series"  sT   
r  c                 C   s  | |  ||  |? }| |> | }| |> | }|| ||  |? }|| |d ? }t ||  }| }	||d 7 }|	|d 7 }	|| ||  |? || ||  |? }}||d 8 }|	|d 8 }	|| ||  |? || ||  |? }}||d 7 }|	|d 7 }	|| ||  |? || ||  |? }}||d 8 }|	|d 8 }	|| ||  |? || ||  |? }}t|t| dk r||	fS ||d 7 }|	|d 7 }	|| ||  |? || ||  |? }}|d| d	 8 }|	d| d	 8 }	|| ||  |? || ||  |? }}||d
 7 }|	|d
 7 }	|| ||  |? || ||  |? }}t|t| dk r:||	fS |d| d 8 }|	d| d 8 }	|| ||  |? || ||  |? }}|d| d 7 }|	d| d 7 }	|| ||  |? || ||  |? }}|d| d 8 }|	d| d 8 }	|| ||  |? || ||  |? }}t|t| dk r||	fS d}
ttt|t|}ttt|t|}d}	 t|
\}}}}|| | }| }|| }|dkr||k r||L }||8 }|| }|dkr||k r||? }||? }||8 }n|}|}|| | |? }|| | |? }t|t| dk r9	 ||	fS ||7 }|	|7 }	|| ||  |? || ||  |? }}||| 8 }|
d7 }
q)Nr   r   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r   rm   )rJ   r   r5   r   r  )r   r  rt   _mr-  r.  ureuimrD  rE  r   r  r  r  r   r   r  r  r  r  r   r1  r2  termretermimrz   rz   r{   complex_stirling_seriesW  s|   ***** ** * * *
r  r   c           #      C   s  | \}}}}|s*| t kr|dkrtS |dkrt S td| tkr(|dkr&t S tS tS |dkrH|d }|| |krH|sHtt| t| ||| ||S |dk}	|	r|rZ|dkrVt S td||> }
|
tk r|dkrpt	t
|
d  ||S |dkr|t	t
|
 ||S |dkrttt
|
d  ||S |dkrtt
|
d  ||S nt|| ? }
|| }|
| }|dkr|d }n|t| d }|| k r|dkrttt| |tt| ||S |dkrtt| ||S |dkrt| tt|| ||S |dkrttt| ||S |dkr
tt| t||dS |dkr|	rI|d| k rI|dkr(tt|
d ||S |dkr8ttt|
d ||S |dkrIttt|
d ||S |
d	k sU|d| k r|rt|}|
d rjtd|
 d }n	td|
 d  }|dkrtt||||| |
 d S |dkrtt||||||
 d S |dkrttt|t|||| |
 d ||S nc|
dkr|dkrt||S |dkrttt|||S |dkrtt|||S n8t|}t|td|
 d  | |
 }|dkrt	|||S |dkrtt|||S |dkrtt|||S || }|dkr&||> }n|| ? }|dkr|st|> }t|| }t|d|  }|tt|| }|dkrtt| }tt| }|d |d  }|d |d  }|| k rtt|tt| ||S || k rtttt|t| t||S |t| | 7 }|| }|dkr||> }n|| ? }tt | }|
td	|k r|t!k r|r| }t"| |||||S | }d}|
|k rt|>  }}||
 }t#|D ]}|| |? }||7 }qt||  } }|rt| } nt| }t$||}t%t|||} |t|d >  |  |? } || 7 }t|| }|rtt&||||}!tt'|}"|dksJ|dkrwt|!t(||}!|r_t|"t|| |}"|dkrkt|"|!||S |dkrwt|!|"||S |dkr|rt|"t|| |}"ttt|!|||}!ttt|"||!||S d
S |dkr|rtt(||t|| ||S t(|||S |dkr|rtt|| t(||||S t(t|||S |dkr|rt|tt|| |||S t	|||S d
S )a  
    This function implements multipurpose evaluation of the gamma
    function, G(x), as well as the following versions of the same:

    type = 0 -- G(x)                    [standard gamma function]
    type = 1 -- G(x+1) = x*G(x+1) = x!  [factorial]
    type = 2 -- 1/G(x)                  [reciprocal gamma function]
    type = 3 -- log(|G(x)|)             [log-gamma function, real part]
    r   rm   zgamma function polerl   rj   r   ro   r   r   N))r   r   r   r   r   r'   r(   rB   SMALL_FACTORIAL_CACHE_SIZEr#   small_factorial_cacher*   r   r5   r2   r&   r$   r%   r  r   r
   r"   r   rL   r   r   rM   r!   minr   r   r   GAMMA_STIRLING_BETAMAX_GAMMA_TAYLOR_PRECr  r   r  r    rI   r<   rA   )#r   rt   r   r  r   r   r   r   r   
is_integerry   r)  
gamma_sizer   fr   absxmanrv   one_disttwo_distcancellationxsub1xsub2xsub1magxsub2magn_for_stirlingxorigr  r   r   xabsr  r   r   r   rz   rz   r{   r    sB  

 








 













r  c           F      C   s	  | \}}|\}}}}	|\}
}}}|t kr?|dkr6|r6t|||d}| | ? }tt|d |||}||fS t||||t fS |sC|sG|sK|rKttfS |d }||	 }|| }|r_t||}n|}|dk r|| k rt| tt| | |t	|||}|dkrt
|||S |dkrt| |||S |dkrt|||S |dkrtt
||||S n	|dkr|| 7 }|dkr||kr|r||krtt| t| ||| ||S |dkrtt|t|f||dS tt|}tt|}t||}|| }|dkrn|t|7 }|}| }|rt| } | d  \}}}}	}| d  \}
}}}}d}d}|dk r>|dkrt| t}|d t kr9| }nt|d d |d d  | }||krt|} t|| |}!t|!|!|}!t|!td	|}!t|tt	||}"t|!|"|}|st|||S n	|dkr||7 }t| t}#|#d t kr| }$nt|#d d |#d d  | }$|$|krt|} tt| | td
}%tt|#|#||%|}!t|!td	|}!t|#ttt	||}"t|!|"|}|st|||S n	|$dkr||$7 }|| k r9d|d  }&t|}'tt|| }(t|'|&|d})tt|'|(|&|d}*tt|*|)|&|(|&}+t||+||}"|)|"f}|s8t|||S n|| 7 }||7 }t t!| },||,k }-t"||}.t"||}/d}0|sl| }1||,k rt#||}t d|,d  |d  d | }2t$|>  }3}4t%}5t&|2D ]}6|.|3 |/|5  |? |.|5 |/|3  |? }3}5|.|47 }.qt'|3| t'|5| f}0t'|.| }||f} t(|.|/|\}7}8t| |\}9}:t"|9|}9t"|:|}:|9|. |:|/  |? |9d?  |7 }7|9|/ |:|.  |? |:d?  |8 }8t'|7| t'|8| f}"|0rl|dkrlt|"t|0||}"t)|1d };t)|1d }<t*+|;|<}=t)|"d }>t*,|<|;}?|=dkr6d|< |? }@n|< d|?  |;|?  |<t*-|=  }@t t*.|@|> dt*j/  d }|"d t|"d tt|d| ||f}"|rH|dksy|dkrtt0||||}Att|t f}B|r|dkrt|A||}Ant|A||}An	t|At1|"||}A|0rt|B|0|}B|dkrt|B|A||S |dkrt|A|B||S |dkrF|rt|}Cnt|"}Ct|Ctt|||}Ct2|d }Dt3|d }Et|} t| |D}%t|%|E|}%|Cd t|Cd |%|f}Ct4|Ct5| ||}Ct0t||D|}%t|%|}%t|C|%|}C|Es@t| t2|D|}%|Cd t|Cd |%|f}Ct|C||S d S |dkr`|0rZtt1|"||0||S t1|"||S |dkrz|0rrt|0t1|"|||S t1t|"||S |dkrt|"||S d S )Nrl   r   rj   ir   r   rm   ir   r   )r  r}   g@KWx?)6r   r  r)   r<   r   r   rX   r]   rZ   r   rg   r[   rV   rb   rY   r  r&   r   r   r   r5   rW   ri   r^   r   r$   r   r'   r(   r%   r2   r*   r   r  r    complexr   r   r   r!   r  r6   r   hypotatan2r   floorr   rf   rc   r7   r8   r\   rB   )Fr   rt   r   r  ru   r   r  r  r  r  r   r   r   r   r   ry   r   r   amagbmagr)  r   anbnabsnr  need_reflectionzorigyfinalbalance_preczsub1cancel1r   r   r  zsub2cancel2rx   ppaabsr   x1r   xprimer  need_reductionafixbfixr  zpreredr   rrerv   rimr   rU  rV  lrelimzfazfbzfabsyfbr   gir   r   s1rezfloorimzsignrz   rz   r{   r  m  s^  
 




 


 






 *

  
$ (







r  c                 C   r3  r4  r  r   rt   r   rz   rz   r{   mpf_factorialW  r7  r  c                 C   r3  r4  r  r  rz   rz   r{   mpc_factorialZ  r7  r  c                 C   r3  Nrm   r  r  rz   rz   r{   
mpf_rgamma]  r7  r  c                 C   r3  r  r  r  rz   rz   r{   
mpc_rgamma`  r7  r  c                 C   s"   | \}}}}|r
t t| ||dS )Nrl   )r9   r  )r   rt   r   r   r   r   r   rz   rz   r{   mpf_loggammac  s   r  c                 C   sr   | \}}|\}}}}|\}	}
}}|t kr2|r2t|||d}| | ? }tt|d |||}||fS t| ||dS )Nrl   r   )r   r  r)   r<   r  )r   rt   r   ru   r   r  r  r  r  r   r   r   r   r   ry   r   rz   rz   r{   mpc_loggammai  s   r  c                 C   s,   | t k rtt| d  ||S tt| ||S r4  )r  r#   r  r  r   )ry   rt   r   rz   rz   r{   r   t  s   r   r   )r   r   )r   )__doc__r   ra  backendr   r   r   r   r   r   
libintmathr	   r
   r   r   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/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   	libelefunr:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   libmpcrP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   r|   r   r   r   r   r   r   r   	mpf_aperympf_khinchinmpf_glaishermpf_catalanmpf_mertensmpf_twinprimer   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r	  ZETA_INT_CACHE_MAX_PRECr  r   r  r  r6  r8  mpf_zetasumr9  r;  r<  r>  rB  rN  r`  rp  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rz   rz   rz   r{   <module>   s    `p

$
A
=



	 

K]@;6	E*5WZ:k
Q915
H 
O 
k




