U
    hdD?                     @   s  d Z ddl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 ddlmZmZmZmZ ddlmZm Z  ddl!m"Z" e"dkred	d
 Z#edd Z$edd Z%n$edd
 Z#edd Z$edd Z%e"dkr
edd Z&n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.ed&d' Z/ed(d) Z0ed*d+ Z1ed,d- Z2ed.d/ Z3ed0d1 Z4ed2d3 Z5ed4d5 Z6ed6d7 Z7ed8d9 Z8ed:d; Z9ed<d= Z:ed>d? Z;ed@dA Z<edBdC Z=edDdE Z>edFdG Z?edHdI Z@edJdK ZAedLdM ZBedNdO ZCedPdQ ZDedRdS ZEedTdU ZFedVdW ZGedXdY ZHedZd[ ZIed\d] ZJed^d_ ZKed`da ZLedbdc ZMdS )dzU
Algorithmic implementations for generating different types
of random distributions.
    N)register_jitable)	wi_double	ki_doubleziggurat_nor_r	fi_doublewi_floatki_floatziggurat_nor_inv_r_fziggurat_nor_r_ffi_float	we_double	ke_doubleziggurat_exp_r	fe_doublewe_floatke_floatziggurat_exp_r_ffe_float	INT64_MAXziggurat_nor_inv_r)next_double
next_floatnext_uint32next_uint64)float32int64)numpy_version)      c                 C   s
   t | S N)nplog1px r$   V/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/np/random/distributions.pynp_log1p   s    r&   c                 C   s   t t| S r   )r    r!   r   r"   r$   r$   r%   	np_log1pf    s    r'   c                 C   s   |t dt|   S N       @)r    sqrtrandom_standard_exponentialbitgenmoder$   r$   r%   random_rayleigh$   s    r/   c                 C   s   t d|  S N      ?)r    logr"   r$   r$   r%   r&   (   s    c                 C   s   t d}t |t|  S r0   )r    r   r2   )r#   f32_oner$   r$   r%   r'   ,   s    
c              	   C   s    |t dt dt|    S )Ng       r1   )r    r*   r2   r   r,   r$   r$   r%   r/   1   s    )r      c                 C   s
   t | S r   )r    expm1r"   r$   r$   r%   np_expm16   s    r6   c                 C   s   t | d S r0   )r    expr"   r$   r$   r%   r6   :   s    c                 C   s   t | }|d@ }|dL }|d@ }|d? d@ }|t|  }|d@ rF| }|t| k rV|S |dkrt tt|   }tt|   }|| || kr^|d? d@ rt|  S t| S q^q t|d  t|  t|  t|  t	d| | k r |S q d S )N      r   l    r   g      )
r   r   r   r   r    r!   r   r   r   r7   r-   ridxsignZrabsr#   Zxxyyr$   r$   r%   random_standard_normal?   s2    
r?   c                 C   s  t | }|d@ }|d? d@ }|d? d@ }tt|t|  }|d@ rJ| }|t| k rZ|S |dkrtt tt|   }ttt|   }t|| t|| krb|d? d@ rtt|  S tt| S qbq t|d  t|  t|  t|  tt	
td | | k r |S q d S )Nr8   r9   r   	   i r         ?)r   r   r   r   r	   r'   r   r
   r   r    r7   r:   r$   r$   r%   random_standard_normal_f\   s0    rB   c                 C   s   t | }|dL }|d@ }|dL }|t|  }|t| k r<|S |dkrVttt|   S t|d  t|  t|  t|  t| k r |S q d S )N   r8   r9   r   r   )	r   r   r   r   r&   r   r   r    r7   r-   rir<   r#   r$   r$   r%   r+   x   s    
r+   c                 C   s   t | }|dL }|d@ }|dL }tt|t|  }|t| k rD|S |dkrfttttt|   S t|d  t|  t|  t|  tt	t| k r |S q d S )Nr   r8   r9   r   )
r   r   r   r   r   r'   r   r   r    r7   rD   r$   r$   r%   random_standard_exponential_f   s"    rF   c                 C   s   t t|   S r   )r&   r   r-   r$   r$   r%   random_standard_exponential_inv   s    rH   c                 C   s   t tdt|   S r0   )r    r2   r   r   rG   r$   r$   r%   !random_standard_exponential_inv_f   s    rI   c                 C   sL  |dkrt | S |dkrdS |dk rt| }t | }|d| kr\t|d| }||kr|S q$td| |  }td| ||  d| }||| kr$|S q$n|d }dtd|  }t| }d||  }|dkrqq|| | }t| }|dd||  ||   k r|| S t|d| | |d| t|   k r|| S qd S )Nr1           r   UUUUUU?r@   m{?rA   )r+   r   powr    r2   r*   r?   )r-   shapeUVXYbcr$   r$   r%   random_standard_gamma   s6    ,rU   c           	      C   s  t d}t |}||kr t| S |t dkr4t dS ||k rt| }t| }||| kr|t t|t || }||kr|S q<t tt || |  }t t|| t ||  t || }||| kr<|S q<n||t d  }t |t tt d|  }t t| }t |||  }|t dkr q2q t || | }t| }||t d||  ||   k rxt || S t|t d| | ||| t|   k r t || S q d S )Nr1   rJ   g      @g      "@rL   rA   )r   rF   r   rM   r    r2   r*   rB   )	r-   rN   r3   rO   rP   rQ   rR   rS   rT   r$   r$   r%   random_standard_gamma_f   sB    
"
rV   c                 C   s   |t |  }|| S r   r?   r-   locscaleZscaled_normalr$   r$   r%   random_normal   s    r[   c                 C   s   t |t|  }t || S r   )r   rB   rX   r$   r$   r%   random_normal_f   s    r\   c                 C   s   |t |  S r   )r+   )r-   rZ   r$   r$   r%   random_exponential  s    r]   c                 C   s   |t |  }|| S r   r   )r-   lowerrangeZscaled_uniformr$   r$   r%   random_uniform  s    ra   c                 C   s   |t | | S r   rU   r-   rN   rZ   r$   r$   r%   random_gamma  s    rd   c                 C   s   t |t| | S r   )r   rV   rc   r$   r$   r%   random_gamma_f  s    re   c              	   C   s   |dkr|dkrt | }t | }t|d| }t|d| }|| }|dkr|dkr|| dkrh|| S t|| }t|| }	t||	}
||
8 }|	|
8 }	t|tt|t|	  S qn t| |}t| |}|||  S d S )Nr1   rJ   r   )r   rM   r    r2   minr7   rU   )r-   arS   rO   rP   rQ   rR   ZXpYZlogXZlogYZlogMZGaZGbr$   r$   r%   random_beta  s$    
(

rh   c                 C   s   dt | |d  S r(   rb   )r-   dfr$   r$   r%   random_chisquare2  s    rj   c                 C   s   t | || t | ||  S r   )rj   )r-   dfnumdfdenr$   r$   r%   random_f7  s    rm   c                 C   s   t | t |  S r   rW   rG   r$   r$   r%   random_standard_cauchy=  s    rn   c                 C   s   t t| | S r   )r6   r+   r-   rg   r$   r$   r%   random_paretoB  s    rp   c                 C   s   |dkrdS t t| d| S NrJ   r1   )rM   r+   ro   r$   r$   r%   random_weibullG  s    rr   c                 C   s   t tt|   d| S r0   )rM   r6   r+   ro   r$   r$   r%   random_powerN  s    rs   c                 C   s`   t | }|dkrt | }q|dkr>||td| |   }n|dkr\||t||   }|S )Nr   rA   r)   rJ   r   r    r2   r-   rY   rZ   rO   r$   r$   r%   random_laplaceS  s    
rv   c                 C   s4   t | }|dkrt | }q||t|d|    S rq   rt   ru   r$   r$   r%   random_logistic_  s    
rw   c                 C   s   t t| ||S r   )r    r7   r[   )r-   meansigmar$   r$   r%   random_lognormalg  s    rz   c                 C   s2   t | }t| |d }t|d | t| S )N   )r?   rU   r    r*   )r-   ri   numdenomr$   r$   r%   random_standard_tl  s    r~   c                 C   sr   |d|  }t | }|| | }|||td| | ||     }t| }||||  krb|S || | S d S )Nr{      )r?   r    r*   r   )r-   rx   rZ   Zmu_2lrR   rQ   rO   r$   r$   r%   random_walds  s    &r   c                 C   sB   d}| }}d| }t | }||kr>||9 }||7 }|d }q|S )Nr   r1   r^   )r-   prQ   sumprodqrO   r$   r$   r%   random_geometric_search  s    
r   c                 C   s   t t|  t |  S r   )r    ceilr+   r!   r-   r   r$   r$   r%   random_geometric_inversion  s    r   c                 C   s    |dkrt | |S t| |S d S )NrK   )r   r   r   r$   r$   r%   random_geometric  s    
r   c                 C   s   |d }t d|}dt|  }t| }tt |d| }|tks|dk rLqt dd|  |}|| |d  |d  || kr|S qd S )Nr1   r)   g      )rM   r   r    floorr   )r-   rg   Zam1rS   rO   rP   rQ   Tr$   r$   r%   random_zipf  s    
 r   c           
      C   sh   || }|| }|| }|| }|| | }t | }	|	|krN|t|	|  S |td|	 |  S d S r0   )r   r    r*   )
r-   leftr.   rightbaseZleftbaseratioZleftprodZ	rightprodrO   r$   r$   r%   random_triangular  s    r   c           	   
   C   s   ddddddddd	d
g
}| dks(| dkr,dS | dk rBt d|  }nd}| | }d| d|  }d}|d }tddD ]}||9 }||d|  7 }qt|| d|  |d t|  | }| dk rtd|d D ]}|t|d  }|d }q|S )NgUUUUUU?gllfgJ?g88Cg$+K?g<ٰj_gAAz?gSˆBg8?g5gGr1   r)   rJ   g      @   r   gdg?r@   r9   rA   r   )intr`   r    r2   )	r#   rg   nZx0Zx2Zlg2piZgl0kglr$   r$   r%   random_loggam  s8        &
r   c                 C   s@   t | }d}d}t| }||9 }||kr6|d7 }q|S qd S )Nr   r1   r   )r    r7   r   )r-   lamZenlamrQ   r   rO   r$   r$   r%   random_poisson_mult  s    
r   c                 C   s
  t |}t |}dd|  }dd|  }dd|d   }dd	|d
   }t| d }t| }	dt | }
td
| |
 | | | d }|
dkr|	|kr|S |dk sL|
dk r|	|
krqLt |	t | t ||
|
  |  | ||  t|d  krL|S qLd S )Ngn?g=
ףp=@gh|?5g[	m?g$~?gr?g333333@gr鷯?gB>٬@r{   rA   gQ?gQ?r   g9v?r   )r    r*   r2   r   fabsr   r   )r-   r   ZslamZloglamrS   rg   ZinvalphaZvrrO   rP   usr   r$   r$   r%   random_poisson_ptrs  s$    

 (r   c                 C   s,   |dkrt | |S |dkrdS t| |S d S )N
   r   )r   r   )r-   r   r$   r$   r%   random_poisson  s
    
r   c                 C   s   t | |d| | }t| |S )Nr   )rd   r   )r-   r   r   rR   r$   r$   r%   random_negative_binomial  s    r   c                 C   sz   t |rt jS |dkr"t| |S d|k rVt| |d }t| t | }|||  S t| |d }t| |d|  S d S )Nr   r   r)   r{   )r    isnannanrj   r?   r*   r   )r-   ri   noncZChi2r   ir$   r$   r%   random_noncentral_chisquare  s    

r   c                 C   s"   t | ||| }|t| ||  S r   )r   rj   )r-   rk   rl   r   tr$   r$   r%   random_noncentral_f'  s    r   c                 C   s   t | }t| }||krdS t| }t||  }||| kr|ttdt|t|  }|dk s
|dkrxq
n|S ||krdS dS q
d S )Nr   rJ   r{   )r&   r   r    r5   r   r   r2   )r-   r   r;   rP   rO   r   resultr$   r$   r%   random_logseries-  s    
"r   )N__doc__numpyr    Znumba.core.extendingr   Znumba.np.random._constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Znumba.np.random.generator_corer   r   r   r   Znumbar   r   Znumba.np.numpy_supportr   r&   r'   r/   r6   r?   rB   r+   rF   rH   rI   rU   rV   r[   r\   r]   ra   rd   re   rh   rj   rm   rn   rp   rr   rs   rv   rw   rz   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s   T














%
)























!


	


