U
    hâËdD?  ã                   @   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rÎe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r¸t t t| ƒ ¡ }t t| ƒ ¡ }|| || kr^|d? d@ r¬t|  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rÐtt tt| ƒ ƒ ƒ}ttt| ƒ ƒ ƒ}t|| ƒt|| ƒkrb|d? d@ rÀt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 ržt| ƒ}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r¸qØq¸|| | }t| ƒ}|dd||  ||   k �r|| S t |¡d| | |d| t |¡   k r¸|| S q¸d 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 rÒt| ƒ}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rÆt | ƒ}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 rîtd|d ƒD ]}|t |d ¡ }|d }qÎ|S )NgUUUUUUµ?glÁlÁf¿g  J?g8�8�C¿g$ÿ+•K?g<™Ù°j_¿g¤A¤Az?g—SË†Bž¿g…8–þÆ?g5gGö¿r1   r)   rJ   g      @é   r   g´¾dÈñgý?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r¼qLt  |	¡t  |¡ t  ||
|
  | ¡ | ||  t|d ƒ krL|S qLd S )Ng˜nƒÀÊí?g=
×£p=@gh‘í|?5®¿g[¶Ö	m™?g$—ÿ�~ûñ?grŠŽäòò?g333333@grùé·¯í?gB>èÙ¬ú@r{   rA   g…ëQ¸…Û?gìQ¸…ë±?r   g9´Èv¾ŸŠ?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rˆd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














%
)























!


	


