B
    \S                 @   s   d dl mZ ddlmZmZ edddZedd Zed	d
 Zedd Zedd Z	edd Z
edd Zedd Zedd Zedd ZdS )   )xrange   )defundefun_wrappedFc                s   fdd|D } fdd|D }g }g }g }g }x$|D ]}||g  | | q:W x$|D ]}||g  | | q`W t|t|k r jS t|t|kr|r fdd|D } fdd|D }  || ||  j S  jS  j}	 j}
z|
d  _xH|rT|	 }|	 }|	d||   
d|   
d|  9 }	qW x|D ]}|	 
|9 }	q\W x|D ]}|	 
| }	qzW W d |
 _X |	
 S )	Nc                s   g | ]}  |qS  )convert).0x)ctxr   :lib/python3.7/site-packages/mpmath/functions/factorials.py
<listcomp>   s    zgammaprod.<locals>.<listcomp>c                s   g | ]}  |qS r   )r   )r   r	   )r
   r   r   r      s    c                s(   g | ] }|r|d  j   p"| j  qS )r   )eps)r   r	   )r
   r   r   r      s    c                s(   g | ] }|r|d  j   p"| j  qS )r   )r   )r   r	   )r
   r   r   r      s       r   )Zisnpintappendlenzerosign	gammaprodinfZoneprecpopgamma)r
   abZ_infsignZ	poles_numZ	poles_denZregular_numZregular_denr	   pZorigijr   )r
   r   r      s@    
 
   
2
 
 r   c             C   s   |  |}|  |}| |r(|| }}| |r|| jkr| |s|| jkrV| jS |dkrd| jS | |rt| jS |dk r| | 	|| j S | jS | j
||d| j d}| ||g|gS )N    r   )r   )r   isinfr   _imZninfnanr   isintr   r   faddr   r   )r
   r	   yZxyr   r   r   beta)   s"    






r%   c             C   sT   | j |dd| j d}| j |dd| j d}| j||d| j d}| |g||gS )Nr   r   )r   )r#   r   fsubr   )r
   nkZn1Zk1Znk1r   r   r   binomial=   s    r)   c             C   s&   | j ||d| j d}| |g|gS )Nr   )r   )r#   r   r   )r
   r	   r'   Zxnr   r   r   rfD   s    r*   c             C   sN   | j |dd| j d}| j | j||d| j ddd| j d}| |g|gS )Nr   r   )r   )r#   r   r&   r   )r
   r	   r'   Zx1Zxn1r   r   r   ffI   s    (r+   c             C   sX   |  |r|| jkr|S | jS d|d  | jd | |d d   | |d d  S )Nr   r      )r   r   r!   piZcospir   )r
   r	   r   r   r   fac2O   s
    

r.   c             C   s  |  |r|| jkr|S | jS | |r,|S | |s\| |dkr\| | |r\|d S t|dkr|  jd| 	t|d 7  _| 
|| j k rDd| }d| j }| d| }| j| j d | j| j |d  d  || d|   | j| d| |  }| d| | | ||  }| |r@| |}|S | jd d }d}x:t||k sv| 
|dk r|| | }|d7 }qXW |d8 }| dd }|| 	| j8 }||| 	d| j  d 7 }||d d | dd  | 	| 7 }|d|d  d 8 }|d  }	}
x`td|d D ]N}| d| d d| |d  |	  }t|| jk rhP |	|
9 }	||7 }q,W || | S )Nr      r   r         r,   )r   r   r!   Zisnanr    _rer"   absZdpslogrer-   Zexpjpir   lnZpolylogbarnesgexpZ_is_real_typer   ZmpfZglaisherr   Z	bernoullir   )r
   zwZpi2uvNGsZz2kZz2r(   tr   r   r   r7   W   sN    


(
8 
 (&r7   c             C   s   |  |d S )Nr   )r7   )r
   r9   r   r   r   superfac   s    rA   c             C   s   || j kr|S t|dkr4dt| t|d }nd}|  j|7  _| |s| |dk r| | |rt| |}| 	| d }|d d d@ r| }| 
|r|d S |S |d }| || | }|  j|8  _|| | S )Nr/   r,   r   r   r   y                )r   r3   intr4   r   r    r2   r"   r5   hyperfacZ_is_complex_typer8   Zloggammar7   )r
   r9   Zextrar'   hZzp1r<   r   r   r   rC      s$    
(
rC   c             C   s   |  |}| |}|s0|dkr0| | |S | |}| | |}|r| |d  ||  || t|  }| || | d| j  d d| j  }||| j  S |dk rt	| |}|||d  | j | j 7 }|S )Nr   r   g      ?)
r2   r    r6   Z	gamma_oldargr3   Zfloorr-   r   rB   )r
   r9   r   r   r;   r:   Zgir'   r   r   r   loggamma_old   s    


(,rF   N)F)Zlibmp.backendr   Z	functionsr   r   r   r%   r)   r*   r+   r.   r7   rA   rC   rF   r   r   r   r   <module>   s   $1%