U
    ¿|eD?  ã                   @   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$   úZ/var/www/website-v5/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#   Ú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    ÿÿÿrC   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   rE   r$   r$   r%   Úrandom_standard_exponential_fŠ   s"    ÿÿÿrG   c                 C   s   t t| ƒ ƒ S r   )r&   r   ©r-   r$   r$   r%   Úrandom_standard_exponential_inv�   s    rI   c                 C   s   t  tdƒt| ƒ ¡ S r0   )r    r2   r   r   rH   r$   r$   r%   Ú!random_standard_exponential_inv_f¢   s    rJ   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Õ?rA   çmÅþ²{ò ?rB   )r+   r   Úpowr    r2   r*   r@   )r-   ÚshapeÚUÚVÚXÚYÚbÚcr$   r$   r%   Úrandom_standard_gamma§   s6    ,rV   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   rK   g      @g      "@rM   rB   )r   rG   r   rN   r    r2   r*   rC   )	r-   rO   r3   rP   rQ   rR   rS   rT   rU   r$   r$   r%   Úrandom_standard_gamma_fÍ   sB    
ÿ"ÿ
rW   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   rC   rY   r$   r$   r%   Úrandom_normal_fý   s    r]   c                 C   s   |t | ƒ S r   )r+   )r-   r[   r$   r$   r%   Úrandom_exponential  s    r^   c                 C   s   |t | ƒ }|| S r   ©r   )r-   ÚlowerÚrangeZscaled_uniformr$   r$   r%   Úrandom_uniform  s    rb   c                 C   s   |t | |ƒ S r   ©rV   ©r-   rO   r[   r$   r$   r%   Úrandom_gamma  s    re   c                 C   s   t |t| |ƒ ƒS r   )r   rW   rd   r$   r$   r%   Úrandom_gamma_f  s    rf   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   rK   r   )r   rN   r    r2   Úminr7   rV   )r-   ÚarT   rP   rQ   rR   rS   ZXpYZlogXZlogYZlogMZGaÚGbr$   r$   r%   Úrandom_beta  s$    
(

rj   c                 C   s   dt | |d ƒ S r(   rc   )r-   Údfr$   r$   r%   Úrandom_chisquare2  s    rl   c                 C   s   t | |ƒ| t | |ƒ|  S r   )rl   )r-   ÚdfnumÚdfdenr$   r$   r%   Úrandom_f7  s    ÿro   c                 C   s   t | ƒt | ƒ S r   rX   rH   r$   r$   r%   Úrandom_standard_cauchy=  s    rp   c                 C   s   t t| ƒ| ƒS r   )r6   r+   ©r-   rh   r$   r$   r%   Úrandom_paretoB  s    rr   c                 C   s   |dkrdS t t| ƒd| ƒS ©NrK   r1   )rN   r+   rq   r$   r$   r%   Úrandom_weibullG  s    rt   c                 C   s   t tt| ƒ ƒ d| ƒS r0   )rN   r6   r+   rq   r$   r$   r%   Úrandom_powerN  s    ru   c                 C   s`   t | ƒ}|dkrt | ƒ}q|dkr>||t d| | ¡  }n|dkr\||t || ¡  }|S )Nr   rB   r)   rK   ©r   r    r2   ©r-   rZ   r[   rP   r$   r$   r%   Úrandom_laplaceS  s    
rx   c                 C   s4   t | ƒ}|dkrt | ƒ}q||t |d|  ¡  S rs   rv   rw   r$   r$   r%   Úrandom_logistic_  s    
ry   c                 C   s   t  t| ||ƒ¡S r   )r    r7   r\   )r-   ÚmeanÚsigmar$   r$   r%   Úrandom_lognormalg  s    r|   c                 C   s2   t | ƒ}t| |d ƒ}t |d ¡| t |¡ S )Né   )r@   rV   r    r*   )r-   rk   Ú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-   rz   r[   Úmu_2lrS   rR   rP   r$   r$   r%   Úrandom_walds  s    &rƒ   c                 C   sB   d}| }}d| }t | ƒ}||kr>||9 }||7 }|d }q|S )Nr   r1   r_   )r-   ÚprR   ÚsumÚprodÚqrP   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 )NrL   )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      ð¿)rN   r   r    Úfloorr   )r-   rh   Úam1rT   rP   rQ   rR   Ú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	rightprodrP   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)   rK   g      @é   r   g´¾dÈñgý?rA   r9   rB   r   )Úintra   r    r2   )	r#   rh   ÚnÚx0Ú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-   ÚlamÚenlamrR   r†   rP   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}   rB   g…ëQ¸…Û?gìQ¸…ë±?r   g9´Èv¾ŸŠ?r   )r    r*   r2   r   Úfabsr—   r�   )r-   rž   ZslamZloglamrT   rh   ZinvalphaÚvrrP   rQ   Ú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   )re   r¦   )r-   r˜   r„   rS   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Únanrl   r@   r*   r¦   )r-   rk   ÚnoncZChi2r˜   Úir$   r$   r%   Úrandom_noncentral_chisquare  s    

r¬   c                 C   s"   t | ||ƒ| }|t| |ƒ|  S r   )r¬   rl   )r-   rm   rn   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   rK   r}   )r&   r   r    r5   r   r�   r2   )r-   r„   r;   rQ   rP   r‡   Úresultr$   r$   r%   Úrandom_logseries-  s    
"r°   )NÚ__doc__Únumpyr    Ú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   Únumba.np.random.generator_corer   r   r   r   Únumbar   r   Únumba.np.numpy_supportr   r&   r'   r/   r6   r@   rC   r+   rG   rI   rJ   rV   rW   r\   r]   r^   rb   re   rf   rj   rl   ro   rp   rr   rt   ru   rx   ry   r|   r€   rƒ   rˆ   r‹   rŒ   r�   r•   r�   r    r¤   r¦   r§   r¬   r®   r°   r$   r$   r$   r%   Ú<module>   sÌ   T














%
)























!


	


