U
    ?h	                     @   s   d Z ddlZddlmZ zddlZW n ek
r8   Y nX dd Zdd Zdd	 Z	d
d Z
dd ZdZdZdd Zedkre  dS )z
Precompute coefficients of Temme's asymptotic expansion for gammainc.

This takes about 8 hours to run on a 2.3 GHz Macbook Pro with 4GB ram.

Sources:
[1] NIST, "Digital Library of Mathematical Functions",
    https://dlmf.nist.gov/

    N)lagrange_inversionc                 C   s   t dd g}td| D ]n}|d | }tdt|D ]"}||| ||   |d  8 }q8||d dt d|d     }|| q|S )za_k from DLMF 5.11.6      r   )mpsqrtrangelenmpfappend)nakZakj r   X/var/www/html/venv/lib/python3.8/site-packages/scipy/special/_precompute/gammainc_asy.py	compute_a   s     "r   c                    s&   t d|    fddt| D }|S )zg_k from DLMF 5.11.3/5.11.5r   c                    s.   g | ]&}t d t d|  d |   qS )r   g      ?)r   r   rf).0r   r   r   r   
<listcomp>#   s     zcompute_g.<locals>.<listcomp>)r   r   )r   gr   r   r   	compute_g    s    r   c                 C   sR   | dkr$t d| t | d   S | dk rJt d| t | d    S dS dS )z6Function from DLMF 8.12.1 shifted to be centered at 0.r   r   r   N)r   r   log)Zlamr   r   r   eta'   s
    r   c                 C   s   t td| d }t|S )zalpha_n from DLMF 8.12.13r   r   )r   Ztaylorr   r   )r   Zcoeffsr   r   r   compute_alpha1   s    r   c           
   	   C   s   |d|   }t d d g}t|d }td|D ]}||d ||d    q4|g}t| }td| D ]f}g }	t|d|  D ]B}|	d| ||  |d |  |d ||d  |d     q||	 qlt| D ]}|| d| ||< q|S )zd_{k, n} from DLMF 8.12.12r   r      r   r   N)r   r
   r   r   r   r   )
KNMZd0alphar   dr   r   Zdkr   r   r   	compute_d7   s    @r"   z/* This file was automatically generated by _precomp/gammainc.py.
 * Do not edit it manually!
 */

#ifndef IGAM_H
#define IGAM_H

#define K {}
#define N {}

static const double d[K][N] =
{{z
#endif
c               	   C   s   t t d} d}td t| |}W 5 Q R X tjtjt	ddd}t
|d d~}|t| | t|D ]R\}}dd	 |D }|d
 |d| || d k r|d qt|d qt|t W 5 Q R X t|d | d S )N   2   z..Zcepheszigam.hz.newwc                 S   s   g | ]}t j|d dddqS )   r   )Z	min_fixedZ	max_fixed)r   Znstr)r   xr   r   r   r   h   s     zmain.<locals>.<listcomp>{z, r   z},
z}};
)print__doc__r   Zworkdpsr"   ospathjoindirname__file__openwriteheaderformat	enumeratefooterrename)r   r   r!   fnfr   rowr   r   r   main^   s"    
r:   __main__)r*   r+   Zscipy.special._precompute.utilsr   Zmpmathr   ImportErrorr   r   r   r   r"   r2   r5   r:   __name__r   r   r   r   <module>   s$   

