U
    hâËdÔ) ã                   @   sà
  d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ edƒZejZe d¡Ze d¡Zdd„ Ze  ¡ Z!dZ"e #ee"¡Z$e %ee &ee"¡ee!eg¡Z'e (e'¡Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0dd „ Z1d!d"„ Z2d#d$„ Z3d%d&„ Z4d'd(„ Z5eej6ƒd)d*„ ƒZ7eejj6ƒd+d*„ ƒZ7d,d-„ Z8eejƒd.d/„ ƒZ9eejjƒeejj:ƒeejj;ƒeejj<ƒd0d1„ ƒƒƒƒZ=eejjƒeejj:ƒeejj;ƒeejj<ƒd2d3„ ƒƒƒƒZ>eej?ƒeej@ƒd4d5„ ƒƒZAeejjBƒeejjCƒd6d7„ ƒƒZDeejjCƒd8d9„ ƒZEeejjCƒd:d;„ ƒZFeejjBƒd<d=„ ƒZGeejjCƒd>d?„ ƒZHd@dA„ ZIdBdC„ ZJdDdE„ ZKeejLƒdFdG„ ƒZMdHdI„ ZNeejOƒdJdK„ ƒZPeejOƒdLdM„ ƒZQdNdO„ ZReejOƒdPdQ„ ƒZSeejTƒdRdS„ ƒZUeejjTƒdTdU„ ƒZVeejjTƒdVdW„ ƒZWeejjTƒdXdY„ ƒZXeejYƒdZd[„ ƒZZeejjYƒd\d]„ ƒZ[eejYƒd^d_„ ƒZ\eejjYƒd`da„ ƒZ]eejYƒdbdc„ ƒZ^eejjYƒddde„ ƒZ_dfdg„ Z`eejjYƒdhdi„ ƒZaeejbƒdjdk„ ƒZceejbƒdldm„ ƒZdeejjbƒdndm„ ƒZdeejjbƒdodp„ ƒZeeejfƒdqdr„ ƒZgeejjhƒeejjiƒdsdr„ ƒƒZgeejjiƒdtdr„ ƒZgdudv„ Zjeejjiƒdwdx„ ƒZkeejjhƒdydz„ ƒZleejmƒd{d|„ ƒZneejjoƒd}d|„ ƒZnd~d„ Zpeejjoƒd€d�„ ƒZqeejrƒd‚dƒ„ ƒZseejjtƒd„d…„ ƒZueejjtƒd†d…„ ƒZueejjvƒeejjtƒd‡d…„ ƒƒZueejjvƒdˆd‰„ ƒZweejjxƒdŠd‹„ ƒZyeejjxƒdŒd�„ ƒZzeejjxƒdŽd�„ ƒZ{eejjxƒd�d‘„ ƒZ|eej}ƒd’d“„ ƒZ~d”d•„ Zeej€ƒd–d—„ ƒZ�eejj‚ƒd˜d™„ ƒZƒeejj‚ƒdšd™„ ƒZƒeej„ƒd›dœ„ ƒZ…eejj†ƒd�dž„ ƒZ‡eejj†ƒdŸd „ ƒZˆeej‰ƒd¡d¢„ ƒZŠeejj‹ƒd£d¢„ ƒZŠd¤d¥„ ZŒeejj‹ƒd¦d§„ ƒZ�eejjŽƒd¨d©„ ƒZ�eejjŽƒdªd©„ ƒZ�eejj�ƒd«d¬„ ƒZ‘eejj�ƒd­d®„ ƒZ’eejj“ƒd¯d°„ ƒZ”eejj“ƒd±d°„ ƒZ”eejj•ƒd²d³„ ƒZ–eejj•ƒd´d³„ ƒZ–eejj—ƒdµd¶„ ƒZ˜eejj—ƒd·d¸„ ƒZ™eejjšƒd¹dº„ ƒZ›eejjšƒd»dº„ ƒZ›eejjœƒd¼d½„ ƒZ�eejjœƒd¾d¿„ ƒZžeejjœƒdÀdÁ„ ƒZŸeejjœƒdÂdÃ„ ƒZ dÄdÅ„ Z¡eejj¢ƒdÆdÇ„ ƒZ£eejj¢ƒdÈdÉ„ ƒZ¤eejj¢ƒdÊdË„ ƒZ¥eejj¢ƒdÌdÍ„ ƒZ¦dÎdÏ„ Z§dÐdÑ„ Z¨eejj©ƒdÒdÓ„ ƒZªeejj©ƒdÔdÓ„ ƒZªeejj«ƒdÕdÖ„ ƒZ¬eejj­ƒd×dØ„ ƒZ®eejj­ƒdÙdÚ„ ƒZ¯eejj­ƒdÛdÜ„ ƒZ°eejj±ƒdÝdÞ„ ƒZ²eejj±ƒdßdÞ„ ƒZ²eejj³ƒdàdá„ ƒZ´eejj³ƒdâdã„ ƒZµdädå„ Z¶eejj³ƒdædç„ ƒZ·eejj¸ƒdèdé„ ƒZ¹eejj¸ƒdêdë„ ƒZºeejj»ƒdìdí„ ƒZ¼eejj»ƒdîdï„ ƒZ½eejj¾ƒdðdñ„ ƒZ¿eejj¾ƒdòdó„ ƒZÀeejjÁƒdôdõ„ ƒZÂeejjÁƒdödõ„ ƒZÂd÷dø„ ZÃeejÄƒdùdú„ ƒZÅeejjÄƒdûdú„ ƒZÅeejjÆƒdüdý„ ƒZÇeejjÈƒdþdÿ„ ƒZÈeejjÉƒ�d �d„ ƒZÉeejjÊƒ�d�d�d„ƒZÊeejjËƒ�d�d�d„ƒZËeejjÌƒ�d�d„ ƒZÌeejjÌƒ�d�d	�d„ƒZÌe�d
�d„ ƒZÍeejjÎƒ�d�d„ ƒZÎeejjÎƒ�d�d�d„ƒZÎe�d�d„ ƒZÏe�d�d„ ƒZÐdS (  z6
Implement the random and np.random module functions.
é    N)Úir)Úis_nonelike)Ú	intrinsicÚoverloadÚregister_jitable)ÚRegistryÚimpl_ret_untrackedÚimpl_ret_new_ref©Ú	signature)ÚtypesÚcgutils)Úarrayobj)ÚNumbaTypeErrorZ
randomimplé    é@   c                 C   s   t  t| ¡S ©N)r   ÚConstantÚint32_t)Úx© r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cpython/randomimpl.pyÚ	const_int   s    r   ip  c                 C   sT   |dkst ‚d| }t td¡}t |j||¡}|j d¡ |j d¡ | 	|d¡S )z½
    Get a pointer to the given thread-local random state
    (depending on *name*: "py" or "np").
    If the state isn't initialized, it is lazily initialized with
    system entropy.
    )ÚpyÚnpÚinternalznumba_get_%s_random_stater   ZreadnoneZnounwind)
ÚAssertionErrorr   ÚFunctionTypeÚrnd_state_ptr_tr   Úget_or_insert_functionÚmoduleÚ
attributesÚaddÚcall)ÚcontextÚbuilderÚnameÚ	func_nameÚfntyÚfnr   r   r   Úget_state_ptr4   s    r*   c                 C   s   t | |dƒS )z@
    Get a pointer to the thread-local Python random state.
    r   ©r*   ©r$   r%   r   r   r   Úget_py_state_ptrE   s    r-   c                 C   s   t | |dƒS )z?
    Get a pointer to the thread-local Numpy random state.
    r   r+   r,   r   r   r   Úget_np_state_ptrK   s    r.   c                 C   s   t | |dƒS )zB
    Get a pointer to the thread-local internal random state.
    r   r+   r,   r   r   r   Úget_internal_state_ptrQ   s    r/   c                 C   s   t  | |dd¡S ©Nr   ©r   Úgep_inbounds©r%   Ú	state_ptrr   r   r   Úget_index_ptrX   s    r5   c                 C   s   t  | |dd¡S ©Nr   é   r1   r3   r   r   r   Úget_array_ptr[   s    r8   c                 C   s   t  | |dd¡S )Nr   é   r1   r3   r   r   r   Úget_has_gauss_ptr^   s    r:   c                 C   s   t  | |dd¡S )Nr   é   r1   r3   r   r   r   Úget_gauss_ptra   s    r<   c                 C   s8   t  t  ¡ tf¡}t | jj|d¡}|jd  	d¡ |S )z<
    Get the internal function to shuffle the MT taste.
    Znumba_rnd_shuffler   Z	nocapture)
r   r   ÚVoidTyper   r   r   Úfunctionr    ÚargsZadd_attribute)r%   r(   r)   r   r   r   Úget_rnd_shuffled   s    ÿr@   c           	   
   C   s"  t ||ƒ}| |¡}| d|t¡}t ||¡�, t|ƒ}| ||f¡ | t	dƒ|¡ W 5 Q R X | |¡}t
||ƒ}| t ||d|¡¡}| |t	dƒ¡}| ||¡ | || |t	dƒ¡¡}| || | |t	dƒ¡t	dƒ¡¡}| || | |t	dƒ¡t	dƒ¡¡}| || |t	d	ƒ¡¡}|S )
zB
    Get the next int32 generated by the PRNG at *state_ptr*.
    ú>=r   r7   é   é   l   €VX: é   l     Œ_ é   )r5   ÚloadÚicmp_unsignedÚN_constr   Úif_unlikelyr@   r#   Ústorer   r8   r2   r"   ÚxorÚlshrÚand_Úshl)	r$   r%   r4   ZidxptrÚidxZneed_reshuffler)   Z	array_ptrÚyr   r   r   Úget_next_int32o   s*    



ÿÿrQ   c                 C   st   |  t| ||ƒtdƒ¡}|  t| ||ƒtdƒ¡}| |t¡}| |t¡}| | || |t 	td¡¡¡t 	td¡¡S )zC
    Get the next double generated by the PRNG at *state_ptr*.
    é   é   g      �Ag      @C)
rL   rQ   r   ÚuitofpÚdoubleZfdivÚfaddÚfmulr   r   )r$   r%   r4   ÚaÚbr   r   r   Úget_next_doubleˆ   s    
þrZ   c                    s  t  |jd¡‰‡ ‡‡‡‡fdd„}t ˆ t  td¡¡}ˆ  d|ˆ¡}ˆ  |¡�²\}}	|�" ||ƒ}
ˆ  ˆ  	|
t¡|¡ W 5 Q R X |	�r ˆrš|ˆ  
|ˆ¡ƒ}tˆˆ ˆƒ}
ˆsº|ˆ  
|ˆ¡ƒ}ˆ  ˆ  	|
t¡ˆ  ˆ  	|t¡t  td¡¡¡}ˆ  ||¡ W 5 Q R X W 5 Q R X ˆ  |¡S )z2
    Get the next integer with width *nbits*.
    r   c                    s–   ˆ   ˆ| ¡}tˆˆ ˆƒ}| jj|jjk r8ˆ  ||j¡}n| jj|jjkrVˆ  ||j¡}ˆr†ˆ  t |jd¡¡}ˆ  	||¡}ˆ  
||¡S ˆ  	||¡S d S r0   )ÚsubrQ   ÚtypeÚwidthÚzextÚtruncÚnot_r   r   rL   rM   )ÚnbitsÚshiftrP   Úmask©r%   Zc32r$   Úis_numpyr4   r   r   Úget_shifted_intœ   s    z%get_next_int.<locals>.get_shifted_intr   ú<=)r   r   r\   r   Zalloca_once_valueÚint64_trG   Úif_elserJ   r^   r[   rQ   r"   rN   rF   )r$   r%   r4   ra   re   rf   ÚretZis_32bZifsmallZiflargeÚlowÚhighÚtotalr   rd   r   Úget_next_int—   s,    

ÿþ rn   c                 C   s   t | tjƒrtdƒS d S ©Nr   ©Ú
isinstancer   ÚIntegerÚ
_seed_impl©Úseedr   r   r   Ú	seed_implÈ   s    rv   c                 C   s   t | tjƒrtdƒS d S ©Nr   rp   rt   r   r   r   rv   Î   s    c                    s   t ‡fdd„ƒ‰ ‡ fdd„S )Nc                    s   ‡ fdd„}t tjtjƒ|fS )Nc                    sR   |\}t  t  ¡ ttf¡}t |jj|d¡}| 	|t
| |ˆ ƒ|f¡ |  tjd ¡S )NZnumba_rnd_init)r   r   r=   r   r   r   r   r>   r    r#   r*   Zget_constantr   Únone)r$   r%   Úsigr?   Z
seed_valuer(   r)   ©Ú
state_typer   r   Úcodegen×   s    ÿÿz*_seed_impl.<locals>._impl.<locals>.codegen)r   r   ÚvoidZuint32)Útypingcontextru   r|   rz   r   r   Ú_implÕ   s    z_seed_impl.<locals>._implc                    s   ˆ | ƒS r   r   rt   ©r   r   r   Ú<lambda>à   ó    z_seed_impl.<locals>.<lambda>©r   rz   r   )r   r{   r   rs   Ô   s    
rs   c                      s   t dd„ ƒ‰ ‡ fdd„S )Nc                 S   s   dd„ }t tjƒ|fS )Nc                 S   s   t | |dƒ}t| ||ƒS ro   ©r*   rZ   ©r$   r%   ry   r?   r4   r   r   r   r|   ç   s    z+random_impl.<locals>._impl.<locals>.codegen)r   r   rU   ©r~   r|   r   r   r   r   å   s    zrandom_impl.<locals>._implc                      s   ˆ ƒ S r   r   r   r€   r   r   r�   ë   r‚   zrandom_impl.<locals>.<lambda>rƒ   r   r   r€   r   Úrandom_implã   s    
r‡   c                      s   t dd„ ƒ‰ ‡ fdd„S )Nc                 S   s   dd„ }t tjƒ|fS )Nc                 S   s   t | |dƒ}t| ||ƒS rw   r„   r…   r   r   r   r|   õ   s    z,random_impl0.<locals>._impl.<locals>.codegen)r   r   Úfloat64r†   r   r   r   r   ó   s    zrandom_impl0.<locals>._implc                      s   ˆ ƒ S r   r   r   r€   r   r   r�   ù   r‚   zrandom_impl0.<locals>.<lambda>rƒ   r   r   r€   r   Úrandom_impl0î   s    
r‰   c                 C   sF   t | ƒrdd„ S t| tjƒs6t| tjƒrBt| jtjƒrBdd„ }|S d S )Nc                 S   s
   t j ¡ S r   ©r   Úrandom©Úsizer   r   r   r�     r‚   zrandom_impl1.<locals>.<lambda>c                 S   s2   t  | ¡}|j}t|jƒD ]}t j ¡ ||< q|S r   )r   ÚemptyÚflatÚranger�   r‹   ©r�   ÚoutÚout_flatrO   r   r   r   r     s
    
zrandom_impl1.<locals>._impl©r   rq   r   rr   ÚUniTupleÚdtype©r�   r   r   r   r   Úrandom_impl1ü   s    ÿÿr˜   c                    s@   t | tjtjfƒr<t |tjtjfƒr<tdd„ ƒ‰ ‡ fdd„S d S )Nc                 S   s*   t |ƒ}t |ƒ}ttj||ƒtd||ƒfS ro   ©Ú_double_preprocessorr   r   rˆ   Ú_gauss_impl©r~   ÚlocÚscaleÚloc_preprocessorÚscale_preprocessorr   r   r   r     s
    
ÿzgauss_impl.<locals>._implc                    s
   ˆ | |ƒS r   r   ©r�   rž   r€   r   r   r�     r‚   zgauss_impl.<locals>.<lambda>©rq   r   ÚFloatrr   r   r¡   r   r€   r   Ú
gauss_impl  s     
ÿ
r¤   c                   C   s   dd„ S )Nc                   S   s   t j dd¡S ©Nç        ç      ð?©r   r‹   Únormalr   r   r   r   r�      r‚   z np_gauss_impl0.<locals>.<lambda>r   r   r   r   r   Únp_gauss_impl0  s    rª   c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S ©Nr§   r¨   ©r�   r   r   r   r�   &  r‚   z np_gauss_impl1.<locals>.<lambda>©rq   r   r£   rr   r¬   r   r   r   Únp_gauss_impl1#  s    r®   c                    s@   t | tjtjfƒr<t |tjtjfƒr<tdd„ ƒ‰ ‡ fdd„S d S )Nc                 S   s*   t |ƒ}t |ƒ}ttj||ƒtd||ƒfS rw   r™   rœ   r   r   r   r   -  s
    
ÿznp_gauss_impl2.<locals>._implc                    s
   ˆ | |ƒS r   r   r¡   r€   r   r   r�   3  r‚   z np_gauss_impl2.<locals>.<lambda>r¢   r¡   r   r€   r   Únp_gauss_impl2)  s     
ÿ
r¯   c                 C   sF   t | ƒrdd„ S t| tjƒs6t| tjƒrBt| jtjƒrBdd„ }|S d S )Nc                 S   s
   t j ¡ S r   ©r   r‹   Ústandard_normalrŒ   r   r   r   r�   9  r‚   z'standard_normal_impl1.<locals>.<lambda>c                 S   s2   t  | ¡}|j}t|jƒD ]}t j ¡ ||< q|S r   )r   rŽ   r�   r�   r�   r‹   r±   r‘   r   r   r   r   =  s
    
z$standard_normal_impl1.<locals>._implr”   r—   r   r   r   Ústandard_normal_impl16  s    ÿÿr²   c                 C   sŽ   t | tjtjfƒr4t |tjtjfƒr4t|ƒr4dd„ S t | tjtjfƒrŠt |tjtjfƒrŠt |tjƒs~t |tjƒrŠt |jtjƒrŠdd„ }|S d S )Nc                 S   s   t j | |¡S r   r¨   ©r�   rž   r�   r   r   r   r�   K  r‚   z np_gauss_impl3.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r©   ©r�   rž   r�   r’   r“   rO   r   r   r   r   Q  s
    
znp_gauss_impl3.<locals>._impl©rq   r   r£   rr   r   r•   r–   ©r�   rž   r�   r   r   r   r   Únp_gauss_impl3F  s*     
ÿþ 
ÿ
þ
þÿýr·   c                    s   ‡ fdd„}|S )Nc                     sh   dˆ ƒ  d } dˆ ƒ  d }| |  ||  }|dk r |dkr q@q t  dt  |¡ | ¡}||  || fS )zG
        Compute a pair of numbers on the normal distribution.
        ç       @r§   r¦   ç       À)ÚmathÚsqrtÚlog)Úx1Zx2Úr2Úf©Ú_randomr   r   Úcompute_gauss_pair[  s    z,_gauss_pair_impl.<locals>.compute_gauss_pairr   )rÁ   rÂ   r   rÀ   r   Ú_gauss_pair_implZ  s    rÃ   c                    s   ‡ ‡‡fdd„}|S )Nc                    sJ  |j }|  |¡}tjtjjdœˆ }t| |ˆƒ}tj||dd�}t||ƒ}	t||ƒ}
t 	|| 
|
¡¡}| |¡�¦\}}|�( | | 
|	¡|¡ | tdƒ|
¡ W 5 Q R X |�` |  |t|ƒtt |d¡ƒd¡}t ||d¡\}}| ||	¡ | ||¡ | tdƒ|
¡ W 5 Q R X W 5 Q R X |\}}| ˆ ||ƒ| ˆ||ƒ| 
|¡¡¡S )N)r   r   Úresult©r&   r   r9   r   r7   )Úreturn_typeZget_data_typer‹   r   r*   r   Úalloca_oncer<   r:   Zis_truerF   ri   rJ   r   Úcompile_internalrÃ   r   r   r•   Zunpack_tuplerV   rW   )r$   r%   ry   r?   ÚtyZlltyrÁ   r4   rj   Z	gauss_ptrZhas_gauss_ptrZ	has_gaussZthenZ	otherwiseÚpairÚfirstÚsecondÚmuÚsigma©rŸ   r    Ústater   r   r   m  s@    
ÿÿ

ý$ÿÿz_gauss_impl.<locals>._implr   )rÐ   rŸ   r    r   r   rÏ   r   r›   l  s    $r›   c                    sr   t j ¡ ‰ t| tjƒr6| jr(‡ fdd„S ‡ fdd„S n8t| tjƒrb| jdkrX‡ fdd„S dd„ S ntd|  ƒ‚d S )Nc                    s   |   |ˆ ¡S r   )Zsitofp©r%   Úv©rÉ   r   r   r�   ™  r‚   z&_double_preprocessor.<locals>.<lambda>c                    s   |   |ˆ ¡S r   )rT   rÑ   rÓ   r   r   r�   ›  r‚   r   c                    s   |   |ˆ ¡S r   )ZfpextrÑ   rÓ   r   r   r�   ž  r‚   c                 S   s   |S r   r   )Ú_builderrÒ   r   r   r   r�      r‚   z(Cannot convert {} to floating point type)	r   r   Ú
DoubleTyperq   rr   Úsignedr£   ÚbitwidthÚ	TypeError)Úvaluer   rÓ   r   rš   ”  s    


rš   c                    s(   t | tjƒr$tdd„ ƒ‰ ‡ fdd„S d S )Nc                 S   s   dd„ }t tj|ƒ|fS )Nc           	   	   S   s|   |\}|  d|tdƒ¡}|  d|tdƒ¡}t || ||¡¡� d}| j |t|f¡ W 5 Q R X t| |dƒ}t	| |||dƒS )NrA   éA   ú==r   z getrandbits() limited to 64 bitsr   F)
rG   r   r   rI   Úor_Ú	call_convÚreturn_user_excÚOverflowErrorr*   rn   )	r$   r%   ry   r?   ra   Ú	too_largeZ	too_smallÚmsgr4   r   r   r   r|   ª  s    ÿ
ÿz0getrandbits_impl.<locals>._impl.<locals>.codegen)r   r   Zuint64)r~   Úkr|   r   r   r   r   ¨  s    zgetrandbits_impl.<locals>._implc                    s   ˆ | ƒS r   r   ©râ   r€   r   r   r�   ·  r‚   z"getrandbits_impl.<locals>.<lambda>)rq   r   rr   r   rã   r   r€   r   Úgetrandbits_impl¥  s    
rä   c              
      sN  t ˆˆ ˆƒ‰t ˆd¡}t ˆd¡}	tjˆ ˆdd�}
ˆ  ˆ  ||¡|
¡ ˆ  ˆ  d||¡¡�8 ˆ  	ˆ  	ˆ  
|
¡|¡|	¡}ˆ  ||¡‰ˆ  ˆ|
¡ W 5 Q R X ˆ  ˆ  d||	¡¡�8 ˆ  ˆ  	ˆ  
|
¡|¡|	¡}ˆ  ||¡‰ˆ  ˆ|
¡ W 5 Q R X ˆ  
|
¡‰t ˆ ˆ  dˆ|¡¡� d}ˆj ˆ t|f¡ W 5 Q R X t ˆˆtjjg¡}t ˆ jj|d	ˆ ¡}ˆd
k�rnˆ  ˆ|	¡nˆ}ˆ  ˆ  ||tjg¡t¡‰ˆ  t tˆj¡ˆ¡‰tjˆ ˆdd�‰‡ ‡‡‡‡‡‡‡fdd„}ˆd
k�r.ˆ  ˆ  dˆ|	¡¡�<\}}|� ˆ  |ˆ¡ W 5 Q R X |� |ƒ  W 5 Q R X W 5 Q R X n|ƒ  ˆ  	|ˆ  ˆ  
ˆ¡|¡¡S )Nr   r7   ÚnrÅ   ú<ú>rg   zempty range for randrange()zllvm.ctlz.%sr   Úrc                     s~   ˆ   d¡} ˆ   d¡}ˆ  | ¡ ˆ  | ¡ tˆˆ ˆˆˆdkƒ}ˆ  |ˆ¡}ˆ  d|ˆ¡}ˆ  || |¡ ˆ  |¡ ˆ  |ˆ¡ d S )NÚwhilez	while.endr   rA   )Úappend_basic_blockÚbranchÚposition_at_endrn   r_   Úicmp_signedZcbranchrJ   )ZbbwhileÚbbendrè   rà   ©r%   r$   rå   ra   ZrptrrÐ   r4   rÉ   r   r   Úget_numå  s    




z _randrange_impl.<locals>.get_numrÛ   )r*   r   r   r   rÇ   rJ   r[   Úif_thenrí   r"   rF   ZsdivrI   rÝ   rÞ   Ú
ValueErrorr   Ztrue_bitr\   r   r>   r    r_   r#   r   r]   ri   Úmul)r$   r%   ÚstartÚstopÚsteprÉ   rÖ   rÐ   ÚzeroÚoneZnptrÚwrá   r(   r)   Znm1rð   Zis_oneZ
is_not_oner   rï   r   Ú_randrange_implº  sD    
ÿ

rú   c                 C   s   t | tjƒrdd„ S d S )Nc                 S   s   t  d| d¡S r6   ©r‹   Ú	randrange©rõ   r   r   r   r�     r‚   z"randrange_impl_1.<locals>.<lambda>©rq   r   rr   rý   r   r   r   Úrandrange_impl_1   s    rÿ   c                 C   s$   t | tjƒr t |tjƒr dd„ S d S )Nc                 S   s   t  | |d¡S ©Nr7   rû   ©rô   rõ   r   r   r   r�   	  r‚   z"randrange_impl_2.<locals>.<lambda>rþ   r  r   r   r   Úrandrange_impl_2  s    r  c                 C   s,   |j | kr |jrtjjS tjjS dd„ S d S )Nc                 S   s   |S r   r   )rÔ   rÒ   Z_tyr   r   r   r�     r‚   z)_randrange_preprocessor.<locals>.<lambda>)r×   rÖ   r   Z	IRBuilderZsextr^   )r×   rÉ   r   r   r   Ú_randrange_preprocessor  s
    
ÿr  c                    s¨   t | tjƒr¤t |tjƒr¤t |tjƒr¤t| j|j|jƒ‰t| j|j|jƒ}tj |ˆ¡‰t |¡‰t	|| ƒ‰t	||ƒ‰t	||ƒ‰t
‡‡‡‡‡‡fdd„ƒ‰ ‡ fdd„S d S )Nc                    s&   ‡‡‡‡‡fdd„}t ˆ |||ƒ|fS )Nc              	      sD   |\}}}ˆ||ˆ ƒ}ˆ||ˆ ƒ}ˆ||ˆ ƒ}t | ||||ˆ ˆdƒS ro   )rú   ©r$   r%   ry   r?   rô   rõ   rö   )Ú	llvm_typerÖ   Ústart_preprocessorÚstep_preprocessorÚstop_preprocessorr   r   r|   #  s    
  ÿz0randrange_impl_3.<locals>._impl.<locals>.codegenr
   )r~   rô   rõ   rö   r|   )Úint_tyr  rÖ   r  r  r  r   r   r   !  s    zrandrange_impl_3.<locals>._implc                    s   ˆ | ||ƒS r   r   )rô   rõ   rö   r€   r   r   r�   ,  r‚   z"randrange_impl_3.<locals>.<lambda>©rq   r   rr   ÚmaxrÖ   r×   Zfrom_bitwidthr   ÚIntTyper  r   )rô   rõ   rö   r×   r   )r   r	  r  rÖ   r  r  r  r   Úrandrange_impl_3  s    
ÿ




r  c                 C   s$   t | tjƒr t |tjƒr dd„ S d S )Nc                 S   s   t  | |d d¡S r   rû   r  r   r   r   r�   2  r‚   z randint_impl_1.<locals>.<lambda>rþ   r  r   r   r   Úrandint_impl_1/  s    r  c                 C   s   t | tjƒrdd„ S d S )Nc                 S   s   t j d| ¡S r0   ©r   r‹   Úrandint©rl   r   r   r   r�   8  r‚   z#np_randint_impl_1.<locals>.<lambda>rþ   r  r   r   r   Únp_randint_impl_15  s    r  c                    sˆ   t | tjƒr„t |tjƒr„t| j|jƒ‰t| j|jƒ}tj |ˆ¡‰t |¡‰t	|| ƒ‰t	||ƒ‰t
‡‡‡‡‡fdd„ƒ‰ ‡ fdd„S d S )Nc                    s"   ‡‡‡‡fdd„}t ˆ ||ƒ|fS )Nc              	      sB   |\}}ˆ||ˆ ƒ}ˆ||ˆ ƒ}t  ˆ d¡}t| ||||ˆ ˆdƒS )Nr7   r   )r   r   rú   r  )r  rÖ   r  r  r   r   r|   H  s      ÿz1np_randint_impl_2.<locals>._impl.<locals>.codegenr
   )r~   rk   rl   r|   )r	  r  rÖ   r  r  r   r   r   F  s    z np_randint_impl_2.<locals>._implc                    s
   ˆ | |ƒS r   r   ©rk   rl   r€   r   r   r�   Q  r‚   z#np_randint_impl_2.<locals>.<lambda>r
  )rk   rl   r×   r   )r   r	  r  rÖ   r  r  r   Únp_randint_impl_2;  s    



r  c                    s˜   t | tjƒr(t |tjƒr(t|ƒr(dd„ S t | tjƒr”t |tjƒr”t |tjƒsft |tjƒr”t |jtjƒr”t| j|jƒ}tt	d|› �ƒ‰ ‡ fdd„}|S d S )Nc                 S   s   t j | |¡S r   r  ©rk   rl   r�   r   r   r   r�   X  r‚   z#np_randint_impl_3.<locals>.<lambda>Úintc                    s:   t j|ˆ d�}|j}t|jƒD ]}t j | |¡||< q|S ©N)r–   )r   rŽ   r�   r�   r�   r‹   r  ©rk   rl   r�   r’   r“   rO   ©Zresult_typer   r   r   `  s
    z np_randint_impl_3.<locals>._impl)
rq   r   rr   r   r•   r–   r  r×   Úgetattrr   )rk   rl   r�   r×   r   r   r  r   Únp_randint_impl_3T  s"    ÿ
ÿ
ÿÿþr  c                   C   s   dd„ S )Nc                   S   s   t  dd¡S r¥   ©r‹   Úuniformr   r   r   r   r�   k  r‚   zuniform_impl0.<locals>.<lambda>r   r   r   r   r   Úuniform_impl0i  s    r  c                   C   s   dd„ S )Nc                   S   s   t j dd¡S r¥   ©r   r‹   r  r   r   r   r   r�   p  r‚   z"np_uniform_impl0.<locals>.<lambda>r   r   r   r   r   Únp_uniform_impl0n  s    r   c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t  | d¡S r«   r  ©rk   r   r   r   r�   v  r‚   zuniform_impl1.<locals>.<lambda>r­   r!  r   r   r   Úuniform_impl1s  s    r"  c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S r«   r  r!  r   r   r   r�   |  r‚   z"np_uniform_impl1.<locals>.<lambda>r­   r!  r   r   r   Únp_uniform_impl1y  s    r#  c                    s@   t | tjtjfƒr<t |tjtjfƒr<tdd„ ƒ‰ ‡ fdd„S d S )Nc                 S   s*   t |ƒ}t |ƒ}ttj||ƒtd||ƒfS ro   ©rš   r   r   rˆ   Úuniform_impl©r~   rk   rl   Zlow_preprocessorZhigh_preprocessorr   r   r   r   ƒ  s      ÿzuniform_impl2.<locals>._implc                    s
   ˆ | |ƒS r   r   r  r€   r   r   r�   ‰  r‚   zuniform_impl2.<locals>.<lambda>r¢   r  r   r€   r   Úuniform_impl2  s     
ÿ
r'  c                    s@   t | tjtjfƒr<t |tjtjfƒr<tdd„ ƒ‰ ‡ fdd„S d S )Nc                 S   s*   t |ƒ}t |ƒ}ttj||ƒtd||ƒfS rw   r$  r&  r   r   r   r   �  s      ÿznp_uniform_impl2.<locals>._implc                    s
   ˆ | |ƒS r   r   r  r€   r   r   r�   –  r‚   z"np_uniform_impl2.<locals>.<lambda>r¢   r  r   r€   r   Únp_uniform_impl2Œ  s     
ÿ
r(  c                    s   ‡ ‡‡fdd„}|S )Nc           	         sT   t | |ˆƒ}|\}}ˆ ||ƒ}ˆ||ƒ}| ||¡}t| ||ƒ}| || ||¡¡S r   )r*   ZfsubrZ   rV   rW   )	r$   r%   ry   r?   r4   rX   rY   r]   rè   ©Úa_preprocessorÚb_preprocessorrÐ   r   r   Úimplš  s    

zuniform_impl.<locals>.implr   )rÐ   r*  r+  r,  r   r)  r   r%  ™  s    r%  c                 C   sŽ   t | tjtjfƒr4t |tjtjfƒr4t|ƒr4dd„ S t | tjtjfƒrŠt |tjtjfƒrŠt |tjƒs~t |tjƒrŠt |jtjƒrŠdd„ }|S d S )Nc                 S   s   t j | |¡S r   r  r  r   r   r   r�   ª  r‚   z"np_uniform_impl3.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r  r  r   r   r   r   °  s
    
znp_uniform_impl3.<locals>._implrµ   )rk   rl   r�   r   r   r   r   Únp_uniform_impl3¥  s*     
ÿþ 
ÿ
þ
þÿýr-  c                 C   s4   dd„ }t | tjtjfƒr0t |tjtjfƒr0|S d S )Nc                 S   s@   t   ¡ }d}||kr&d| }||  } }| ||  t || ¡  S )Nç      à?r§   ©r‹   rº   r»   )rk   rl   ÚuÚcr   r   r   r   »  s    
z triangular_impl_2.<locals>._implr­   )rk   rl   r   r   r   r   Útriangular_impl_2¹  s     
ÿr2  c                 C   sF   t | tjtjfƒrBt |tjtjfƒrBt |tjtjfƒrBdd„ }|S d S )Nc                 S   s`   || kr| S t   ¡ }||  ||   }||krFd| }d| }||  } }| ||  t || ¡  S r«   r/  )rk   rl   Úmoder0  r1  r   r   r   r   Í  s    
ú triangular_impl_3.<locals>._implr­   )rk   rl   r3  r   r   r   r   Útriangular_impl_3È  s     
ÿþr5  c                 C   sF   t | tjtjfƒrBt |tjtjfƒrBt |tjtjfƒrBdd„ }|S d S )Nc                 S   sb   || kr| S t j ¡ }||  ||   }||krHd| }d| }||  } }| ||  t || ¡  S r«   )r   r‹   rº   r»   )rk   r3  rl   r0  r1  r   r   r   r   à  s    

r4  r­   )rk   r3  rl   r   r   r   r   r5  Û  s     
ÿþc                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ||¡S r   )r   r‹   Ú
triangular)rk   rl   r3  r�   r   r   r   r�   ñ  s   
ÿz!triangular_impl.<locals>.<lambda>c                 S   s8   t  |¡}|j}t|jƒD ]}t j | ||¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r6  )rk   rl   r3  r�   r’   r“   rO   r   r   r   r   ö  s
    
ztriangular_impl.<locals>._implr”   )rk   rl   r3  r�   r   r   r   r   Útriangular_implî  s    ÿÿr7  c                 C   s2   t | tjtjfƒr.t |tjtjfƒr.ttjƒS d S r   )rq   r   r£   rr   Ú_gammavariate_implr‹   ©ÚalphaÚbetar   r   r   Úgammavariate_implÿ  s
     
ÿr<  c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S r«   ©r   r‹   Úgamma©r:  r   r   r   r�   
  r‚   z#gammavariate_impl.<locals>.<lambda>r­   r?  r   r   r   r<    s    c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0ttjjƒS d S r   )rq   r   r£   rr   r8  r   r‹   r9  r   r   r   r<    s
     
ÿc                    s   ‡ fdd„}|S )Nc                    s¤  dt  d¡ }| dks|dkr&tdƒ‚| dkrìt  d|  d ¡}| t  d¡ }| | }ˆ ƒ }d|  k rpdk stqV qVdˆ ƒ  }t  |d|  ¡| }| t  |¡ }	|| | }
|||  |	 }|| d|
  dksà|t  |
¡krV|	| S qVn´| dk�rt  dˆ ƒ  ¡ | S ˆ ƒ }t j|  t j }|| }|dk�rB|d|   }	nt  || |  ¡ }	ˆ ƒ }|dk�r~||	| d  k�r”�q˜n|t  |	 ¡k�r�q˜�q|	| S d	S )
z1Gamma distribution.  Taken from CPython.
        r§   g      @r¦   z*gammavariate: alpha and beta must be > 0.0r¸   g      @gH¯¼šò×z>gËPÊÿÿï?N)rº   r¼   rò   r»   ÚexpÚe)r:  r;  ÚSG_MAGICCONSTÚainvÚbbbÚcccÚu1Úu2rÒ   r   Úzrè   r0  rY   ÚprÀ   r   r   r     s@    
"


z!_gammavariate_impl.<locals>._implr   ©rÁ   r   r   rÀ   r   r8    s    7r8  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   r=  ©r:  r;  r�   r   r   r   r�   R  r‚   zgamma_impl.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r>  ©r:  r;  r�   r’   r“   rO   r   r   r   r   V  s
    
zgamma_impl.<locals>._implr”   ©r:  r;  r�   r   r   r   r   Ú
gamma_implO  s    ÿÿrN  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   ©r   r‹   Ústandard_gamma©r:  r�   r   r   r   r�   b  r‚   z%standard_gamma_impl.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rP  ©r:  r�   r’   r“   rO   r   r   r   r   f  s
    
z"standard_gamma_impl.<locals>._implr”   ©r:  r�   r   r   r   r   Ústandard_gamma_impl_  s    ÿÿrT  c                 C   s2   t | tjtjfƒr.t |tjtjfƒr.ttjƒS d S r   )rq   r   r£   rr   Ú_betavariate_implr‹   Úgammavariater9  r   r   r   Úbetavariate_implo  s
     
ÿrW  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0ttjjƒS d S r   )rq   r   r£   rr   rU  r   r‹   r>  r9  r   r   r   rW  v  s
     
ÿc                    s   ‡ fdd„}|S )Nc                    s,   ˆ | dƒ}|dkrdS ||ˆ |dƒ  S dS )z0Beta distribution.  Taken from CPython.
        r§   r¦   Nr   )r:  r;  rP   ©r>  r   r   r   ~  s    
z _betavariate_impl.<locals>._implr   )r>  r   r   rX  r   rU  }  s    
rU  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   r;  rK  r   r   r   r�   Ž  r‚   zbeta_impl.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r;  rL  r   r   r   r   ’  s
    
zbeta_impl.<locals>._implr”   rM  r   r   r   Ú	beta_impl‹  s    ÿÿrY  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   t  dt ¡  ¡ |  S )z;Exponential distribution.  Taken from CPython.
            r§   )rº   r¼   r‹   )Úlambdr   r   r   r   ž  s    zexpovariate_impl.<locals>._impl©rq   r   r£   )rZ  r   r   r   r   Úexpovariate_impl›  s    
r\  c                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s   t  dtj ¡  ¡ |  S r«   ©rº   r¼   r   r‹   )rž   r   r   r   r   ®  s    úexponential_impl.<locals>._implr­   )rž   r   r   r   r   Úexponential_impl«  s    r_  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Úexponential)rž   r�   r   r   r   r�   ¶  r‚   z"exponential_impl.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r`  )rž   r�   r’   r“   rO   r   r   r   r   º  s
    
r^  r”   )rž   r�   r   r   r   r   r_  ³  s    ÿÿc                  C   s   dd„ } | S )Nc                   S   s   t  dtj ¡  ¡ S r«   r]  r   r   r   r   r   Æ  s    r^  r   r€   r   r   r   r_  Ã  s    c                 C   sF   t | ƒrdd„ S t| tjƒs6t| tjƒrBt| jtjƒrBdd„ }|S d S )Nc                 S   s
   t j ¡ S r   )r   r‹   Ústandard_exponentialrŒ   r   r   r   r�   Î  r‚   z+standard_exponential_impl.<locals>.<lambda>c                 S   s2   t  | ¡}|j}t|jƒD ]}t j ¡ ||< q|S r   )r   rŽ   r�   r�   r�   r‹   ra  r‘   r   r   r   r   Ó  s
    
z(standard_exponential_impl.<locals>._implr”   r—   r   r   r   Ústandard_exponential_implË  s    
ÿÿÿrb  c                   C   s   dd„ S )Nc                   S   s   t j dd¡S r¥   ©r   r‹   Ú	lognormalr   r   r   r   r�   Þ  r‚   z$np_lognormal_impl0.<locals>.<lambda>r   r   r   r   r   Únp_lognormal_impl0Ü  s    re  c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S r«   rc  ©rÍ   r   r   r   r�   ä  r‚   z%np_log_normal_impl1.<locals>.<lambda>r­   rf  r   r   r   Únp_log_normal_impl1á  s    rg  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0ttjjƒS d S r   )rq   r   r£   rr   Ú_lognormvariate_implr   r‹   r©   ©rÍ   rÎ   r   r   r   Únp_log_normal_impl2ç  s
     
ÿrj  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   rc  )rÍ   rÎ   r�   r   r   r   r�   ñ  r‚   z lognormal_impl.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rd  )rÍ   rÎ   r�   r’   r“   rO   r   r   r   r   õ  s
    
zlognormal_impl.<locals>._implr”   )rÍ   rÎ   r�   r   r   r   r   Úlognormal_implî  s    ÿÿrk  c                 C   s&   t | tjƒr"t |tjƒr"ttjƒS d S r   )rq   r   r£   rh  r‹   Úgaussri  r   r   r   Úlognormvariate_implþ  s    rm  c                    s   ‡ fdd„S )Nc                    s   t  ˆ | |ƒ¡S r   )rº   r@  ri  ©Z_gaussr   r   r�     r‚   z&_lognormvariate_impl.<locals>.<lambda>r   rn  r   rn  r   rh    s    rh  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s   dt   ¡  }d|d|    S )z)Pareto distribution.  Taken from CPython.r§   )r‹   ©r:  r0  r   r   r   r     s    z!paretovariate_impl.<locals>._implr[  ©r:  r   r   r   r   Úparetovariate_impl  s    rq  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s"   dt j ¡  }d|d|    d S )Nr§   r7   rŠ   ro  r   r   r   r     s    úpareto_impl.<locals>._implr[  rp  r   r   r   Úpareto_impl  s    rs  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   ÚparetorQ  r   r   r   r�   "  r‚   zpareto_impl.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rt  rR  r   r   r   r   &  s
    
rr  r”   rS  r   r   r   rs    s    ÿÿc                 C   s4   t | tjtjfƒr0t |tjtjfƒr0dd„ }|S d S )Nc                 S   s$   dt   ¡  }| t |¡ d|   S )z*Weibull distribution.  Taken from CPython.r§   )r‹   rº   r¼   )r:  r;  r0  r   r   r   r   3  s    z"weibullvariate_impl.<locals>._implr­   )r:  r;  r   r   r   r   Úweibullvariate_impl/  s     
ÿru  c                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s"   dt j ¡  }t |¡ d|   S r«   ©r   r‹   rº   r¼   )r;  r0  r   r   r   r   ?  s    zweibull_impl.<locals>._implr­   )r;  r   r   r   r   Úweibull_impl<  s    rw  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Úweibull)r;  r�   r   r   r   r�   J  r‚   zweibull_impl2.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rx  )r;  r�   r’   r“   rO   r   r   r   r   N  s
    
zweibull_impl2.<locals>._implr”   )r;  r�   r   r   r   r   Úweibull_impl2G  s    ÿÿry  c                 C   s&   t | tjƒr"t |tjƒr"ttjƒS d S r   )rq   r   r£   Ú_vonmisesvariate_implr‹   ©rÍ   Úkappar   r   r   Úvonmisesvariate_implW  s    r}  c                 C   s(   t | tjƒr$t |tjƒr$ttjjƒS d S r   )rq   r   r£   rz  r   r‹   r{  r   r   r   r}  ]  s    c                    s   ‡ fdd„}|S )Nc                    sè   |dkrdt j ˆ ƒ  S d| }|t  d||  ¡ }ˆ ƒ }t  t j| ¡}|||  }ˆ ƒ }|d||  k sˆ|d| t  |¡ kr6qˆq6d| }|| d||   }	ˆ ƒ }
|
dkrÌ| t  |	¡ dt j  }n| t  |	¡ dt j  }|S )z¤Circular data distribution.  Taken from CPython.
        Note the algorithm in Python 2.6 and Numpy is different:
        http://bugs.python.org/issue17141
        g�íµ ÷Æ°>r¸   r.  r§   )rº   Úpir»   Úcosr@  Úacos)rÍ   r|  Úsrè   rF  rH  ÚdrG  Úqr¿   Úu3ÚthetarÀ   r   r   r   d  s"    &z$_vonmisesvariate_impl.<locals>._implr   rJ  r   rÀ   r   rz  c  s    (rz  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   Úvonmises)rÍ   r|  r�   r   r   r   r�   ’  r‚   zvonmises_impl.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r†  )rÍ   r|  r�   r’   r“   rO   r   r   r   r   –  s
    
zvonmises_impl.<locals>._implr”   )rÍ   r|  r�   r   r   r   r   Úvonmises_impl�  s    ÿÿr‡  c                 C   s.   t | tjƒr*t |tjtjfƒr*dd„ }|S d S )Nc                 S   sJ  | dk rt dƒ‚d|  kr$dks.n t dƒ‚|dkr:dS |dkrF| S |dk}|rZd| }d| }d}||  }|dkrœ|d	K }| d	L } ||  }| dksnt‚qn| | }t| |d
t || d ¡  ƒ}d}|dk�rFd}	tj ¡ }
|}|	|krÈ|
|k�r||�r| |	 n|	7 }|d8 }qÈ|
|8 }
|	d7 }	| |	 d | | |	|  }qäqÈ|S )z 
            Binomial distribution.  Numpy's variant of the BINV algorithm
            is used.
            (Numpy uses BTPE for n*p >= 30, though)
            r   zbinomial(): n <= 0r¦   r§   zbinomial(): p outside of [0, 1]r.  r7   gÒèxÖ0 r9   ç      $@)rò   r   Úminrº   r»   r   r‹   )rå   rI  Zflippedrƒ  ZnitersÚqnZnp_prodÚboundrm   ÚXÚUZpxr   r   r   r   £  sF     


 úbinomial_impl.<locals>._impl©rq   r   rr   r£   ©rå   rI  r   r   r   r   Úbinomial_implŸ  s     
ÿ1r‘  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   Úbinomial)rå   rI  r�   r   r   r   r�   Ú  r‚   zbinomial_impl.<locals>.<lambda>c                 S   s<   t j|t jd�}|j}t|jƒD ]}t j | |¡||< q |S r  )r   rŽ   Úintpr�   r�   r�   r‹   r’  )rå   rI  r�   r’   r“   rO   r   r   r   r   Þ  s
    rŽ  r”   )rå   rI  r�   r   r   r   r   r‘  ×  s    ÿÿc                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s   dt j | d ¡ S ©Nr¸   rO  )Údfr   r   r   r   ê  s    zchisquare_impl.<locals>._implr­   ©r•  r   r   r   r   Úchisquare_implç  s    r—  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   ©r   r‹   Ú	chisquare©rI  r�   r   r   r   r�   ó  r‚   z!chisquare_impl2.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r™  ©rI  r�   r’   r“   rO   r   r   r   r   ÷  s
    
zchisquare_impl2.<locals>._implr”   ©rI  r�   r   r   r   r   Úchisquare_impl2ð  s    ÿÿr�  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0dd„ }|S d S )Nc                 S   s    t j | ¡| t j |¡|   S r   r˜  )ÚnumÚdenomr   r   r   r     s    ÿúf_impl.<locals>._implr­   )rž  rŸ  r   r   r   r   Úf_impl   s     
ÿr¡  c                 C   sj   t | tjtjfƒr4t |tjtjfƒr4t|ƒr4dd„ S t |tjƒsZt |tjƒrft |jtjƒrfdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   r¿   )rž  rŸ  r�   r   r   r   r�     r‚   zf_impl.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r¿   )rž  rŸ  r�   r’   r“   rO   r   r   r   r     s
    
r   rµ   )rž  rŸ  r�   r   r   r   r   r¡    s     
ÿþÿÿc                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s�   | dks| dkrt dƒ‚d|  }| dkrhtdƒ}|  }}tj ¡ }||krd||9 }||7 }|d7 }qB|S t t dtj ¡  ¡t |¡ ¡S d S )Nr¦   r§   z geometric(): p outside of (0, 1]gUUUUUUÕ?r7   )rò   r  r   r‹   rº   Úceilr¼   )rI  rƒ  rŒ  ÚsumÚprodr�  r   r   r   r      s    

ÿúgeometric_impl.<locals>._implr­   )rI  r   r   r   r   Úgeometric_impl  s    r¦  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Ú	geometricrš  r   r   r   r�   8  r‚   z geometric_impl.<locals>.<lambda>c                 S   s:   t j|t jd�}|j}t|jƒD ]}t j | ¡||< q |S r  )r   rŽ   Úint64r�   r�   r�   r‹   r§  r›  r   r   r   r   <  s
    r¥  r”   rœ  r   r   r   r¦  5  s    ÿÿc                 C   s4   t | tjtjfƒr0t |tjtjfƒr0dd„ }|S d S )Nc                 S   s(   dt j ¡  }| |t t |¡ ¡  S r«   rv  ©r�   rž   r�  r   r   r   r   I  s    zgumbel_impl.<locals>._implr­   )r�   rž   r   r   r   r   Úgumbel_implE  s     
ÿrª  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   Úgumbelr³   r   r   r   r�   S  r‚   zgumbel_impl3.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r«  r´   r   r   r   r   W  s
    
zgumbel_impl3.<locals>._implr”   r¶   r   r   r   Úgumbel_impl3P  s    ÿÿr¬  c                 C   sF   t | tjtjfƒrBt |tjtjfƒrBt |tjtjfƒrBdd„ }|S d S )Nc                 S   s”   t |ƒt | ƒ t |ƒ }tt|| ƒƒ}|}t |ƒ}|dkrl|dkrl|t tj ¡ |||   ¡8 }|d8 }q2t || ƒ}| |krŒt |ƒ| S |S dS )z'Numpy's algorithm for hypergeometric().r¦   r   r7   N)r  Úfloatr‰  rº   Úfloorr   r‹   )ÚngoodÚnbadÚnsamplesZd1Zd2ÚYÚKÚZr   r   r   r   e  s     
ú"hypergeometric_impl.<locals>._implr­   )r¯  r°  r±  r   r   r   r   Úhypergeometric_impl`  s     
ÿþr¶  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ||¡S r   )r   r‹   Úhypergeometric)r¯  r°  r±  r�   r   r   r   r�   {  s    z%hypergeometric_impl.<locals>.<lambda>c                 S   s>   t j|t jd�}|j}t|jƒD ]}t j | ||¡||< q |S r  )r   rŽ   r“  r�   r�   r�   r‹   r·  )r¯  r°  r±  r�   r’   r“   rO   r   r   r   r   €  s
    rµ  r”   )r¯  r°  r±  r�   r   r   r   r   r¶  x  s    ÿÿc                   C   s   dd„ S )Nc                   S   s   t j dd¡S r¥   ©r   r‹   Úlaplacer   r   r   r   r�   ‹  r‚   zlaplace_impl0.<locals>.<lambda>r   r   r   r   r   Úlaplace_impl0‰  s    rº  c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S r«   r¸  r¬   r   r   r   r�   ‘  r‚   zlaplace_impl1.<locals>.<lambda>r­   r¬   r   r   r   Úlaplace_impl1Ž  s    r»  c                 C   s,   t | tjtjfƒr(t |tjtjfƒr(tS d S r   )rq   r   r£   rr   Úlaplace_implr¡   r   r   r   Úlaplace_impl2”  s
     
ÿr½  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   r¸  r³   r   r   r   r�   ž  r‚   zlaplace_impl3.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   r¹  r´   r   r   r   r   ¢  s
    
zlaplace_impl3.<locals>._implr”   r¶   r   r   r   Úlaplace_impl3›  s    ÿÿr¾  c                 C   sF   t j ¡ }|dk r(| |t || ¡  S | |t d| | ¡  S d S )Nr.  r¸   rv  r©  r   r   r   r¼  «  s    
r¼  c                   C   s   dd„ S )Nc                   S   s   t j dd¡S r¥   ©r   r‹   Úlogisticr   r   r   r   r�   µ  r‚   z logistic_impl0.<locals>.<lambda>r   r   r   r   r   Úlogistic_impl0³  s    rÁ  c                 C   s   t | tjtjfƒrdd„ S d S )Nc                 S   s   t j | d¡S r«   r¿  r¬   r   r   r   r�   »  r‚   z logistic_impl1.<locals>.<lambda>r­   r¬   r   r   r   Úlogistic_impl1¸  s    rÂ  c                 C   s,   t | tjtjfƒr(t |tjtjfƒr(tS d S r   )rq   r   r£   rr   Úlogistic_implr¡   r   r   r   Úlogistic_impl2¾  s
     
ÿrÄ  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   r¿  r³   r   r   r   r�   È  r‚   z logistic_impl3.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rÀ  r´   r   r   r   r   Ì  s
    
zlogistic_impl3.<locals>._implr”   r¶   r   r   r   Úlogistic_impl3Å  s    ÿÿrÅ  c                 C   s$   t j ¡ }| |t |d|  ¡  S r«   rv  r©  r   r   r   rÃ  Õ  s    
rÃ  c                 C   s˜   | dks| dkrt dƒ‚t d|  ¡}tj ¡ }|| kr<dS tj ¡ }dt || ¡ }||| kr‚t dt |¡t |¡  ¡S ||krŽdS dS q&dS )z"Numpy's algorithm for logseries().r¦   r§   z logseries(): p outside of (0, 1]r7   r9   N)rò   rº   r¼   r   r‹   r@  r¨  )rI  rè   ÚVr�  rƒ  r   r   r   Ú_logseries_implÚ  s    

rÇ  c                 C   s   t | tjtjfƒrtS d S r   )rq   r   r£   rr   rÇ  )rI  r   r   r   Úlogseries_implï  s    rÈ  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Ú	logseriesrš  r   r   r   r�   ø  r‚   z logseries_impl.<locals>.<lambda>c                 S   s:   t j|t jd�}|j}t|jƒD ]}t j | ¡||< q |S r  )r   rŽ   r¨  r�   r�   r�   r‹   rÉ  r›  r   r   r   r   ü  s
    zlogseries_impl.<locals>._implr”   rœ  r   r   r   rÈ  õ  s    ÿÿc                 C   s.   t | tjƒr*t |tjtjfƒr*dd„ }|S d S )Nc                 S   sJ   | dkrt dƒ‚|dk s |dkr(t dƒ‚tj | d| | ¡}tj |¡S )Nr   znegative_binomial(): n <= 0r¦   r§   z(negative_binomial(): p outside of [0, 1])rò   r   r‹   r>  Úpoisson)rå   rI  r²  r   r   r   r   	  s    z%negative_binomial_impl.<locals>._implr�  r�  r   r   r   Únegative_binomial_impl  s     
ÿrË  c                   C   s   dd„ S )Nc                   S   s   t j d¡S r«   ©r   r‹   rÊ  r   r   r   r   r�     r‚   zpoisson_impl0.<locals>.<lambda>r   r   r   r   r   Úpoisson_impl0  s    rÍ  c                    s.   t | tjtjfƒr*tdd„ ƒ‰ ‡ fdd„S d S )Nc                    s$   t |ƒ‰ ‡ fdd„}ttj|ƒ|fS )Nc              	      s  t | |ƒ}tj|tdd�}| d¡}| d¡}|\}ˆ||ƒ}| d|t td¡¡}	| 	|	¡�N t 
tttf¡}
t |jj|
d¡}| |||f¡}| ||¡ | |¡ W 5 Q R X | |¡ | |¡ tjj‰tj‰ ‡ ‡fdd	„}|  ||||¡}| ||¡ | |¡ | |¡ | |¡S )
Nrj   rÅ   Úbbcontrî   rA   rˆ  Znumba_poisson_ptrsc                    sV   | dk rt dƒ‚| dkrdS ˆ |  ƒ}d}d}ˆƒ }||9 }||krH|S |d7 }q.dS )ag  Numpy's algorithm for poisson() on small *lam*.

                    This method is invoked only if the parameter lambda of the
                    distribution is small ( < 10 ). The algorithm used is
                    described in "Knuth, D. 1969. 'Seminumerical Algorithms.
                    The Art of Computer Programming' vol 2.
                    r¦   zpoisson(): lambda < 0r   r§   r7   N©rò   )ÚlamZenlamrŒ  r¤  r�  ©Ú_exprÁ   r   r   Úpoisson_impl<  s    
zCpoisson_impl1.<locals>._impl.<locals>.codegen.<locals>.poisson_impl)r.   r   rÇ   rh   rê   Zfcmp_orderedr   r   rU   rñ   r   r   r   r>   r    r#   rJ   rë   rì   r   r‹   rº   r@  rÈ   rF   )r$   r%   ry   r?   r4   ZretptrrÎ  rî   rÐ  Zbig_lamr(   r)   rj   rÓ  ©Zlam_preprocessorrÑ  r   r|      s8    




ÿ
þ



z-poisson_impl1.<locals>._impl.<locals>.codegen)rš   r   r   r¨  )r~   rÐ  r|   r   rÔ  r   r     s    7zpoisson_impl1.<locals>._implc                    s   ˆ | ƒS r   r   ©rÐ  r€   r   r   r�   X  r‚   zpoisson_impl1.<locals>.<lambda>r¢   rÕ  r   r€   r   Úpoisson_impl1  s    
;rÖ  c                 C   sj   t | tjtjfƒr"t|ƒr"dd„ S t | tjtjfƒrft |tjƒsZt |tjƒrft |jtjƒrfdd„ }|S d S )Nc                 S   s   t j | ¡S r   rÌ  )rÐ  r�   r   r   r   r�   ^  r‚   zpoisson_impl2.<locals>.<lambda>c                 S   s:   t j|t jd�}|j}t|jƒD ]}t j | ¡||< q |S r  )r   rŽ   r“  r�   r�   r�   r‹   rÊ  )rÐ  r�   r’   r“   rO   r   r   r   r   d  s
    zpoisson_impl2.<locals>._implrµ   )rÐ  r�   r   r   r   r   Úpoisson_impl2[  s    
ÿ
þÿþr×  c                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s2   | dkrt dƒ‚t dt tj ¡  ¡ d|  ¡S )Nr¦   zpower(): a <= 0r7   r§   )rò   rº   Úpowr@  r   r‹   ra  ©rX   r   r   r   r   p  s
    ÿúpower_impl.<locals>._implr­   ©rX   r   r   r   r   Ú
power_implm  s    rÜ  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Úpower©rX   r�   r   r   r   r�   |  r‚   zpower_impl.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rÝ  ©rX   r�   r’   r“   rO   r   r   r   r   €  s
    
rÚ  r”   ©rX   r�   r   r   r   r   rÜ  y  s    ÿÿc                   C   s   dd„ S )Nc                   S   s   t j d¡S r«   ©r   r‹   Úrayleighr   r   r   r   r�   ‹  r‚   z rayleigh_impl0.<locals>.<lambda>r   r   r   r   r   Úrayleigh_impl0‰  s    rã  c                 C   s   t | tjtjfƒrtS d S r   )rq   r   r£   rr   Úrayleigh_impl©r3  r   r   r   Úrayleigh_impl1Ž  s    ræ  c              	   C   s2   | dkrt dƒ‚| t dt dtj ¡  ¡ ¡ S )Nr¦   zrayleigh(): mode <= 0r¹   r§   )rò   rº   r»   r¼   r   r‹   rå  r   r   r   rä  ”  s    rä  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   rá  )r3  r�   r   r   r   r�   �  r‚   z rayleigh_impl2.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   râ  )r3  r�   r’   r“   rO   r   r   r   r   ¡  s
    
zrayleigh_impl2.<locals>._implr”   )r3  r�   r   r   r   r   Úrayleigh_impl2š  s    ÿÿrç  c                  C   s   dd„ } | S )Nc                   S   s   t j ¡ t j ¡  S r   r°   r   r   r   r   r   ¬  s    zcauchy_impl.<locals>._implr   r€   r   r   r   Úcauchy_implª  s    rè  c                 C   sF   t | ƒrdd„ S t| tjƒs6t| tjƒrBt| jtjƒrBdd„ }|S d S )Nc                 S   s
   t j ¡ S r   )r   r‹   Ústandard_cauchyrŒ   r   r   r   r�   µ  r‚   z&standard_cauchy_impl.<locals>.<lambda>c                 S   s2   t  | ¡}|j}t|jƒD ]}t j ¡ ||< q|S r   )r   rŽ   r�   r�   r�   r‹   ré  r‘   r   r   r   r   ¹  s
    
z#standard_cauchy_impl.<locals>._implr”   r—   r   r   r   Ústandard_cauchy_impl²  s    ÿÿrê  c                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s:   t j ¡ }t j | d ¡}t | d ¡| t |¡ }|S r”  )r   r‹   r±   rP  rº   r»   )r•  ÚNÚGrŒ  r   r   r   r   Å  s    
zstandard_t_impl.<locals>._implr­   r–  r   r   r   Ústandard_t_implÂ  s    rí  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   Ú
standard_trš  r   r   r   r�   Ñ  r‚   z"standard_t_impl2.<locals>.<lambda>c                 S   s4   t  |¡}|j}t|jƒD ]}t j | ¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   rî  )r•  r�   r’   r“   rO   r   r   r   r   Õ  s
    
zstandard_t_impl2.<locals>._implr”   )r•  r�   r   r   r   r   Ústandard_t_impl2Î  s    ÿÿrï  c                 C   s(   t | tjƒr$t |tjƒr$dd„ }|S d S )Nc                 S   s–   | dkrt dƒ‚|dkr t dƒ‚| d|  }tj ¡ }| | | }| ||t d| | ||  ¡   }tj ¡ }|| | |  kr†|S | |  | S d S )Nr¦   zwald(): mean <= 0zwald(): scale <= 0r¸   é   )rò   r   r‹   r±   rº   r»   )Úmeanrž   Zmu_2lr²  rŒ  r�  r   r   r   r   á  s    
&
zwald_impl.<locals>._implr[  )rñ  rž   r   r   r   r   Ú	wald_implÞ  s    rò  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | |¡S r   )r   r‹   Úwald)rñ  rž   r�   r   r   r   r�   ö  r‚   zwald_impl2.<locals>.<lambda>c                 S   s6   t  |¡}|j}t|jƒD ]}t j | |¡||< q|S r   )r   rŽ   r�   r�   r�   r‹   ró  )rñ  rž   r�   r’   r“   rO   r   r   r   r   ú  s
    
zwald_impl2.<locals>._implr”   )rñ  rž   r�   r   r   r   r   Ú
wald_impl2ó  s    ÿÿrô  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s�   | dkrt dƒ‚| d }d| }dtj ¡  }tj ¡ }tt |d|  ¡ƒ}dd|  | }|dkr || |d  |d  || kr |S q d S )Nr§   zzipf(): a <= 1r¸   g      ð¿r7   )rò   r   r‹   r  rº   r®  )rX   Zam1rY   r�  rÆ  rŒ  ÚTr   r   r   r     s    
(úzipf_impl.<locals>._implr[  rÛ  r   r   r   Ú	zipf_impl  s    r÷  c                 C   sF   t |ƒrdd„ S t|tjƒs6t|tjƒrBt|jtjƒrBdd„ }|S d S )Nc                 S   s   t j | ¡S r   )r   r‹   ÚzipfrÞ  r   r   r   r�     r‚   zzipf_impl.<locals>.<lambda>c                 S   s:   t j|t jd�}|j}t|jƒD ]}t j | ¡||< q |S r  )r   rŽ   r“  r�   r�   r�   r‹   rø  rß  r   r   r   r     s
    rö  r”   rà  r   r   r   r÷    s    ÿÿc                    s\   t | tjƒstdƒ‚|dkr&tjj‰ n|dkr4tj‰ | jdkrL‡ fdd„}n‡ fdd„}|S )Nz1The argument to shuffle() should be a buffer typer   r   r7   c                    sJ   | j d d }|dkrFˆ |d ƒ}| | | |  | |< | |< |d8 }qd S r6   )Úshape©ÚarrÚiÚj©Úrandr   r   r,  0  s
    zdo_shuffle_impl.<locals>.implc                    sV   | j d d }|dkrRˆ |d ƒ}t | | ¡t | | ¡ | |< | |< |d8 }qd S r6   )rù  r   Úcopyrú  rþ  r   r   r,  7  s
    &)	rq   r   ÚBufferrØ   r   r‹   r  rü   Úndim)rû  Úrngr,  r   rþ  r   Údo_shuffle_impl%  s    

r  c                 C   s
   t | dƒS ro   ©r  ©rû  r   r   r   Úshuffle_implA  s    r  c                 C   s
   t | dƒS rw   r  r  r   r   r   r  F  s    c                 C   s4   t | tjƒrdd„ }nt | tjƒr,dd„ }nd }|S )Nc                 S   s   t  | ¡}t j |¡ |S r   )r   Úaranger‹   Úshuffle)r   rP   r   r   r   Úpermutation_implN  s    
z*permutation_impl.<locals>.permutation_implc                 S   s   |   ¡ }tj |¡ |S r   )r   r   r‹   r	  )r   Zarr_copyr   r   r   r
  S  s    )rq   r   rr   ÚArray)r   r
  r   r   r   r
  K  s    

r
  c                  G   s"   t | ƒdkrdd„ }ndd„ }|S )Nr   c                  W   s
   t j ¡ S r   rŠ   rŒ   r   r   r   Ú	rand_implc  s    zrand.<locals>.rand_implc                  W   s   t j | ¡S r   rŠ   rŒ   r   r   r   r  h  s    ©Úlen)r�   r  r   r   r   rÿ  _  s    
rÿ  c                  G   s"   t | ƒdkrdd„ }ndd„ }|S )Nr   c                  W   s
   t j ¡ S r   r°   rŒ   r   r   r   Ú
randn_implr  s    zrandn.<locals>.randn_implc                  W   s   t j | ¡S r   r°   rŒ   r   r   r   r  w  s    r  )r�   r  r   r   r   Úrandnn  s    
r  Tc                    sÂ   t | tjƒrF| jdkst‚| j‰ tdd„ ƒ‰tdd„ ƒ}tdd„ ƒ‰nFt | tjƒr~tj	‰ tdd„ ƒ‰td	d„ ƒ}td
d„ ƒ‰nt
d| f ƒ‚|d tjfkr¬d‡‡fdd„	}nd‡ ‡‡fdd„	}|S )Nr7   c                 S   s   t | ƒS r   r  rÙ  r   r   r   Úget_source_sizeˆ  s    zchoice.<locals>.get_source_sizec                 S   s   |   ¡ S r   )r   rÙ  r   r   r   Úcopy_sourceŒ  s    zchoice.<locals>.copy_sourcec                 S   s   | | S r   r   ©rX   Za_ir   r   r   Úgetitem�  s    zchoice.<locals>.getitemc                 S   s   | S r   r   rÙ  r   r   r   r  ˜  s    c                 S   s
   t  | ¡S r   )r   r  rÙ  r   r   r   r  œ  s    c                 S   s   |S r   r   r  r   r   r   r     s    z@np.random.choice() first argument should be int or array, got %sTc                    s    ˆ | ƒ}t j d|¡}ˆ| |ƒS )zs
            choice() implementation returning a single sample
            (note *replace* is ignored)
            r   r  )rX   r�   Úreplacerå   rü  )r  r  r   r   Úchoice_impl©  s    zchoice.<locals>.choice_implc           	         s¦   ˆ| ƒ}|rPt  |ˆ ¡}|j}tt|ƒƒD ] }t j d|¡}ˆ| |ƒ||< q*|S t  |ˆ ¡}|j|krntdƒ‚t j 	| ¡}|j}tt|ƒƒD ]}|| ||< qŒ|S dS )zO
            choice() implementation returning an array of samples
            r   z@Cannot take a larger sample than population when 'replace=False'N)
r   rŽ   r�   r�   r  r‹   r  r�   rò   Úpermutation)	rX   r�   r  rå   r’   Úflrü  rý  Z
permuted_a©r–   r  r  r   r   r  ³  s     
)NT)NT)rq   r   r  r  r   r–   r   rr   r   r“  rØ   rx   )rX   r�   r  r  r  r   r  r   Úchoice€  s0    



ÿ
r  c                    sº   t j‰ tdd„ ƒ‰t| tjƒs,td| f ƒ‚t|tjtjfƒsLtd|f ƒ‚|d tj	fkrld
‡ ‡fdd„	}nJt|tjƒrŠd‡ ‡fdd„	}n,t|tj
ƒr¨d‡ ‡fdd„	}ntd	|f ƒ‚|S )Nc                 S   s    |j }|j}t|ƒ}td||ƒD ]z}d}| }td|d ƒD ]F}	||	 }
tj ||
| ¡ }|||	 < ||8 }|dkrx q‚||
8 }q:|dkr |||| d < q d S )Nr   r§   r7   )r�   r�   r  r�   r   r‹   r’  )rå   Úpvalsr’   r  ÚszÚplenrü  Zp_sumZn_experimentsrý  Zp_jZn_jr   r   r   Úmultinomial_innerÜ  s    
z&multinomial.<locals>.multinomial_innerz7np.random.multinomial(): n should be an integer, got %szEnp.random.multinomial(): pvals should be an array or sequence, got %sc                    s    t  t|ƒˆ ¡}ˆ| ||ƒ |S )z5
            multinomial(..., size=None)
            ©r   Zzerosr  ©rå   r  r�   r’   ©r–   r  r   r   Úmultinomial_impl  s    z%multinomial.<locals>.multinomial_implc                    s$   t  |t|ƒfˆ ¡}ˆ| ||ƒ |S )z4
            multinomial(..., size=int)
            r  r   r!  r   r   r"    s    c                    s&   t  |t|ƒf ˆ ¡}ˆ| ||ƒ |S )z6
            multinomial(..., size=tuple)
            r  r   r!  r   r   r"    s    zDnp.random.multinomial(): size should be int or tuple or None, got %s)N)N)N)r   r“  r   rq   r   rr   rØ   ÚSequencer  rx   Z	BaseTuple)rå   r  r�   r"  r   r!  r   Úmultinomial×  s*    
ÿÿ	ÿr$  c                 C   s"   t | tjtjfƒrdd„ }|S d S )Nc                 S   s   t  t| ƒ¡}t| |ƒ |S r   ©r   rŽ   r  Údirichlet_arr)r:  r’   r   r   r   Údirichlet_impl+  s    
ú!dirichlet.<locals>.dirichlet_impl)rq   r   r#  r  )r:  r'  r   r   r   Ú	dirichlet(  s    r)  c                 C   sˆ   t | tjtjfƒs td| f ƒ‚|d tjfkr:ddd„}nJt |tjƒrRddd„}n2t |tjƒrxt |jtjƒrxd	dd„}ntd| ƒ‚|S )
NzCnp.random.dirichlet(): alpha should be an array or sequence, got %sc                 S   s   t  t| ƒ¡}t| |ƒ |S r   r%  ©r:  r�   r’   r   r   r   r'  <  s    
r(  c                 S   s    t  |t| ƒf¡}t| |ƒ |S )z2
            dirichlet(..., size=int)
            r%  r*  r   r   r   r'  C  s    
c                 S   s"   t  |t| ƒf ¡}t| |ƒ |S )z4
            dirichlet(..., size=tuple)
            r%  r*  r   r   r   r'  M  s    
zJnp.random.dirichlet(): size should be int or tuple of ints or None, got %s)N)N)N)	rq   r   r#  r  r   rx   rr   r•   r–   )r:  r�   r'  r   r   r   r)  2  s(    ÿÿÿ	ÿÿc           
      C   s®   t | ƒD ]}|dkrtdƒ‚qt| ƒ}|j}|j}td||ƒD ]j}d}t| ƒD ]2\}}	tj 	|	d¡||| < ||||   
¡ 7 }qNt| ƒD ]\}}	|||   |  < qŠq>d S )Nr   zdirichlet: alpha must be > 0.0r7   )Úiterrò   r  r�   r�   r�   Ú	enumerater   r‹   r>  Úitem)
r:  r’   Za_valZa_lenr�   r�   rü  Znormrâ   rù   r   r   r   r&  ^  s    
r&  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0dd„ }|S d S )Nc                 S   s   t | |ƒ t| |ƒS r   ©Ú#validate_noncentral_chisquare_inputÚnoncentral_chisquare_single©r•  Únoncr   r   r   Únoncentral_chisquare_impl|  s    
ú7noncentral_chisquare.<locals>.noncentral_chisquare_implr­   )r•  r2  r3  r   r   r   Únoncentral_chisquarex  s     
ÿr5  c                 C   s`   |d t jfkrddd„}|S t|t jƒsBt|t jƒrPt|jt jƒrPddd„}|S td| ƒ‚d S )Nc                 S   s   t | |ƒ t| |ƒS r   r.  )r•  r2  r�   r   r   r   r3  †  s    
r4  c                 S   s<   t | |ƒ t |¡}|j}t|jƒD ]}t| |ƒ||< q$|S r   )r/  r   rŽ   r�   r�   r�   r0  )r•  r2  r�   r’   r“   rO   r   r   r   r3  Ž  s    

zUnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got %s)N)N)r   rx   rq   rr   r•   r–   r   )r•  r2  r�   r3  r   r   r   r5  ƒ  s    
ÿÿ
ÿÿc                 C   sp   t  |¡rt jS d| k rHt j | d ¡}t j ¡ t  |¡ }|||  S t j |d ¡}t j | d|  ¡S d S )Nr7   r¸   r9   )r   ÚisnanÚnanr‹   r™  r±   r»   rÊ  )r•  r2  Zchi2rå   rü  r   r   r   r0  �  s    
r0  c                 C   s$   | dkrt dƒ‚|dk r t dƒ‚d S )Nr   zdf <= 0znonc < 0rÏ  r1  r   r   r   r/  ¯  s    r/  )NT)N)N)N)ÑÚ__doc__rº   r‹   Únumpyr   Zllvmliter   Znumba.core.cgutilsr   Znumba.core.extendingr   r   r   Znumba.core.imputilsr   r   r	   Znumba.core.typingr   Z
numba.corer   r   Znumba.npr   Znumba.core.errorsr   ÚregistryÚlowerr  r   rh   r   rÕ   rU   rë  r   rH   ZLiteralStructTypeÚ	ArrayTypeZrnd_state_tZPointerTyper   r*   r-   r.   r/   r5   r8   r:   r<   r@   rQ   rZ   rn   ru   rv   rs   r‡   Zrandom_sampleÚsampleZranfr‰   r˜   rl  Únormalvariater¤   r±   r©   rª   r®   r¯   r²   r·   rÃ   r›   rš   Úgetrandbitsrä   rú   rü   rÿ   r  r  r  r  r  r  r  r  r  r  r   r"  r#  r'  r(  r%  r-  r6  r2  r5  r7  rV  r<  rP  r>  r8  rN  rT  ÚbetavariaterW  r;  rU  rY  Úexpovariater\  r`  r_  ra  rb  rd  re  rg  rj  rk  Úlognormvariaterm  rh  Úparetovariaterq  rt  rs  Úweibullvariateru  rx  rw  ry  Úvonmisesvariater}  r†  rz  r‡  r’  r‘  r™  r—  r�  r¿   r¡  r§  r¦  r«  rª  r¬  r·  r¶  r¹  rº  r»  r½  r¾  r¼  rÀ  rÁ  rÂ  rÄ  rÅ  rÃ  rÇ  rÉ  rÈ  Znegative_binomialrË  rÊ  rÍ  rÖ  r×  rÝ  rÜ  râ  rã  ræ  rä  rç  ré  rè  rê  rî  rí  rï  ró  rò  rô  rø  r÷  r  r	  r  r  r
  rÿ  r  r  r$  r)  r&  r5  r0  r/  r   r   r   r   Ú<module>   s:  


ö
1























(
F































;









































,



7

















































A




































V
P
	
+


