U
    h                     @   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dS )   )xrange   )defundefun_wrappedFc                    s   fdd|D } fdd|D }g }g }g }g }|D ]}||g  | | q8|D ]}||g  | | qZt|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  _|rJ|	 }|	 }|	d||   
d|   
d|  9 }	q|D ]}|	 
|9 }	qN|D ]}|	 
| }	qhW 5 |
 _X |	
 S )	Nc                    s   g | ]}  |qS  convert.0xctxr   ?/tmp/pip-unpacked-wheel-6nj_bg8u/mpmath/functions/factorials.py
<listcomp>   s     zgammaprod.<locals>.<listcomp>c                    s   g | ]}  |qS r   r   r	   r   r   r   r      s     c                    s(   g | ] }|r|d  j   p"| j  qS r   epsr	   r   r   r   r      s     c                    s(   g | ] }|r|d  j   p"| j  qS 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   porigijr   r   r   r      s@        
0  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   Zfsubr   )r   nkZn1Zk1Znk1r   r   r   binomial=   s    r1   c                 C   s&   | j ||d| j d}| |g|gS )Nr   r%   )r*   r   r   )r   r   r/   Zxnr   r   r   rfD   s    r2   c                 C   sN   | j |dd| j d}| j | j||d| j ddd| j d}| |g|gS r-   r.   )r   r   r/   x1Zxn1r   r   r   ffI   s    (r4   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
    

r7   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}t||k st| 
|dk r|| | }|d7 }qV|d8 }| dd }|| 	| j8 }||| 	d| j  d 7 }||d d | dd  | 	| 7 }|d|d  d 8 }|d  }	}
td|d D ]R}| d| d d| |d  |	  }t|| jk rf qz|	|
9 }	||7 }q&|| | S )Nr$      r   r         r5   )r&   r   r(   isnanr'   _rer)   absZdpslogrer6   Zexpjpir#   lnZpolylogbarnesgexpZ_is_real_typer   ZmpfZglaisherr   Z	bernoullir   )r   zwZpi2uvNGsZz2kZz2r0   tr   r   r   rA   W   sP    


(
8 
(&rA   c                 C   s   |  |d S )Nr   )rA   )r   rC   r   r   r   superfac   s    rK   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 )Nr8   r5   r   r$   r   y                )r   r=   intr>   r   r'   r<   r)   r?   hyperfacZ_is_complex_typerB   ZloggammarA   )r   rC   extrar/   hZzp1rF   r   r   r   rM      s$    
(
rM   N)F)Zlibmp.backendr   Z	functionsr   r   r   r,   r1   r2   r4   r7   rA   rK   rM   r   r   r   r   <module>   s(   $





0

