U
    í¾|eÔ) ã                   @   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)ÚNumbaTypeErrorÚ
randomimplé    é@   c                 C   s   t  t| ¡S ©N)r   ÚConstantÚint32_t)Úx© r   úU/var/www/website-v5/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   ÚreadnoneÚ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    r0   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    r1   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    r2   c                 C   s   t  | |dd¡S ©Nr   ©r   Úgep_inbounds©r(   Ú	state_ptrr   r   r   Úget_index_ptrX   s    r8   c                 C   s   t  | |dd¡S ©Nr   é   r4   r6   r   r   r   Úget_array_ptr[   s    r;   c                 C   s   t  | |dd¡S )Nr   é   r4   r6   r   r   r   Úget_has_gauss_ptr^   s    r=   c                 C   s   t  | |dd¡S )Nr   é   r4   r6   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   Ú	nocapture)
r   r    ÚVoidTyper!   r   r"   Úfunctionr#   ÚargsÚadd_attribute)r(   r+   r,   r   r   r   Úget_rnd_shuffled   s    ÿrE   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   r:   é   é   l   €VX: é   l     Œ_ é   )r8   ÚloadÚicmp_unsignedÚN_constr   Úif_unlikelyrE   r&   Ústorer   r;   r5   r%   ÚxorÚlshrÚand_Úshl)	r'   r(   r7   ZidxptrÚidxZneed_reshuffler,   Z	array_ptrÚyr   r   r   Úget_next_int32o   s*    



ÿÿrV   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)
rQ   rV   r   ÚuitofpÚdoubleÚfdivÚfaddÚfmulr   r   )r'   r(   r7   ÚaÚbr   r   r   Úget_next_doubleˆ   s    
þr`   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 r3   )ÚsubrV   ÚtypeÚwidthÚzextÚtruncÚnot_r   r   rQ   rR   )ÚnbitsÚshiftrU   Úmask©r(   Zc32r'   Úis_numpyr7   r   r   Úget_shifted_intœ   s    z%get_next_int.<locals>.get_shifted_intr   ú<=)r   r   rb   r   Úalloca_once_valueÚint64_trL   Úif_elserO   rd   ra   rV   r%   rS   rK   )r'   r(   r7   rg   rk   rl   ÚretZis_32bZifsmallZiflargeÚlowÚhighÚtotalr   rj   r   Úget_next_int—   s,    

ÿþ ru   c                 C   s   t | tjƒrtdƒS d S ©Nr   ©Ú
isinstancer   ÚIntegerÚ
_seed_impl©Úseedr   r   r   Ú	seed_implÈ   s    r}   c                 C   s   t | tjƒrtdƒS d S ©Nr   rw   r{   r   r   r   r}   Î   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    rA   r!   r   r   r"   rB   r#   r&   r-   Úget_constantr   Únone)r'   r(   ÚsigrC   Z
seed_valuer+   r,   ©Ú
state_typer   r   Úcodegen×   s    ÿÿz*_seed_impl.<locals>._impl.<locals>.codegen)r   r   ÚvoidÚuint32)Útypingcontextr|   r„   r‚   r   r   Ú_implÕ   s    z_seed_impl.<locals>._implc                    s   ˆ | ƒS r   r   r{   ©rˆ   r   r   Ú<lambda>à   ó    z_seed_impl.<locals>.<lambda>©r   r‚   r   )rˆ   rƒ   r   rz   Ô   s    
rz   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 rv   ©r-   r`   ©r'   r(   r�   rC   r7   r   r   r   r„   ç   s    z+random_impl.<locals>._impl.<locals>.codegen)r   r   rZ   ©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 r~   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_flatrT   r   r   r   rˆ     s
    
zrandom_impl1.<locals>._impl©r   rx   r   ry   Ú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 rv   ©Ú_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>©rx   r   ÚFloatry   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>©rx   r   r¬   ry   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 r~   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œ   rT   r   r   r   rˆ   Q  s
    
znp_gauss_impl3.<locals>._impl©rx   r   r¬   ry   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)Úx1Ú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   r<   r   r:   )Úreturn_typeÚget_data_typer”   r   r-   r   Úalloca_oncer?   r=   Úis_truerK   rp   rO   r   Úcompile_internalrÍ   r   r   rž   Úunpack_tupler\   r]   )r'   r(   r�   rC   ÚtyÚlltyrË   r7   rq   Z	gauss_ptrZhas_gauss_ptrÚ	has_gaussÚthenÚ	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   )Úsitofp©r(   Úv©rÖ   r   r   rŠ   ™  r‹   z&_double_preprocessor.<locals>.<lambda>c                    s   |   |ˆ ¡S r   )rY   rã   rå   r   r   rŠ   ›  r‹   r   c                    s   |   |ˆ ¡S r   )Ú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   Ú
DoubleTyperx   ry   Ú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 )NrF   éA   ú==r   z getrandbits() limited to 64 bitsr   F)
rL   r   r   rN   Úor_Ú	call_convÚreturn_user_excÚOverflowErrorr-   ru   )	r'   r(   r�   rC   rg   Ú	too_largeÚ	too_smallÚmsgr7   r   r   r   r„   ª  s    ÿ
ÿz0getrandbits_impl.<locals>._impl.<locals>.codegen)r   r   Ú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>)rx   r   ry   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   r:   ÚnrÏ   ú<ú>rm   zempty range for randrange()zllvm.ctlz.%sr   Úrc                     s~   ˆ   d¡} ˆ   d¡}ˆ  | ¡ ˆ  | ¡ tˆˆ ˆˆˆdkƒ}ˆ  |ˆ¡}ˆ  d|ˆ¡}ˆ  || |¡ ˆ  |¡ ˆ  |ˆ¡ d S )NÚwhilez	while.endr   rF   )Úappend_basic_blockÚbranchÚposition_at_endru   re   Úicmp_signedÚcbranchrO   )ZbbwhileÚbbendrý   ró   ©r(   r'   rú   rg   Úrptrrá   r7   rÖ   r   r   Úget_numå  s    




z _randrange_impl.<locals>.get_numrî   )r-   r   r   r   rÒ   rO   ra   Úif_thenr  r%   rK   ÚsdivrN   rð   rñ   Ú
ValueErrorr    Útrue_bitrb   r"   rB   r#   re   r&   r   rc   rp   Úmul)r'   r(   ÚstartÚstopÚsteprÖ   ré   rá   ÚzeroÚoneZnptrÚwrõ   r+   r,   Ú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 r9   ©r”   Ú	randrange©r  r   r   r   rŠ     r‹   z"randrange_impl_1.<locals>.<lambda>©rx   r   ry   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 ©Nr:   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   Ú	IRBuilderÚsextrd   )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 rv   )r  ©r'   r(   r�   rC   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>©rx   r   ry   Úmaxré   rê   Ú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 r3   ©r   r”   Úrandint©rs   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 )Nr:   r   )r   r   r  r   )r!  ré   r"  r$  r   r   r„   H  s      ÿz1np_randint_impl_2.<locals>._impl.<locals>.codegenr
   )r‡   rr   rs   r„   )r%  r!  ré   r"  r$  r   r   rˆ   F  s    z np_randint_impl_2.<locals>._implc                    s
   ˆ | |ƒS r   r   ©rr   rs   r‰   r   r   rŠ   Q  r‹   z#np_randint_impl_2.<locals>.<lambda>r&  )rr   rs   rê   r   )rˆ   r%  r!  ré   r"  r$  r   Únp_randint_impl_2;  s    



r1  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,  ©rr   rs   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-  ©rr   rs   r–   r›   rœ   rT   ©Úresult_typer   r   rˆ   `  s
    z np_randint_impl_3.<locals>._impl)
rx   r   ry   r   rž   rŸ   r'  rê   Úgetattrr   )rr   rs   r–   rê   rˆ   r   r6  r   Únp_randint_impl_3T  s"    ÿ
ÿ
ÿÿþr9  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:  ©rr   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    rA  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 rv   ©r£   r   r   r‘   Úuniform_impl©r‡   rr   rs   Zlow_preprocessorZhigh_preprocessorr   r   r   rˆ   ƒ  s      ÿzuniform_impl2.<locals>._implc                    s
   ˆ | |ƒS r   r   r0  r‰   r   r   rŠ   ‰  r‹   zuniform_impl2.<locals>.<lambda>r«   r0  r   r‰   r   Úuniform_impl2  s     
ÿ
rE  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 r~   rB  rD  r   r   r   rˆ   �  s      ÿznp_uniform_impl2.<locals>._implc                    s
   ˆ | |ƒS r   r   r0  r‰   r   r   rŠ   –  r‹   z"np_uniform_impl2.<locals>.<lambda>r«   r0  r   r‰   r   Únp_uniform_impl2Œ  s     
ÿ
rF  c                    s   ‡ ‡‡fdd„}|S )Nc           	         sT   t | |ˆƒ}|\}}ˆ ||ƒ}ˆ||ƒ}| ||¡}t| ||ƒ}| || ||¡¡S r   )r-   Úfsubr`   r\   r]   )	r'   r(   r�   rC   r7   r^   r_   rc   rý   ©Úa_preprocessorÚb_preprocessorrá   r   r   Úimplš  s    

zuniform_impl.<locals>.implr   )rá   rI  rJ  rK  r   rH  r   rC  ™  s    rC  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=  r2  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;  r5  r   r   r   rˆ   °  s
    
znp_uniform_impl3.<locals>._implr¾   )rr   rs   r–   rˆ   r   r   r   Únp_uniform_impl3¥  s*     
ÿþ 
ÿ
þ
þÿýrL  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Ä   )rr   rs   ÚuÚcr   r   r   rˆ   »  s    
z triangular_impl_2.<locals>._implr¶   )rr   rs   rˆ   r   r   r   Útriangular_impl_2¹  s     
ÿrQ  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´   rN  )rr   rs   ÚmoderO  rP  r   r   r   rˆ   Í  s    
ú triangular_impl_3.<locals>._implr¶   )rr   rs   rR  rˆ   r   r   r   Útriangular_impl_3È  s     
ÿþrT  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Ä   )rr   rR  rs   rO  rP  r   r   r   rˆ   à  s    

rS  r¶   )rr   rR  rs   rˆ   r   r   r   rT  Û  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)rr   rs   rR  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”   rU  )rr   rs   rR  r–   r›   rœ   rT   r   r   r   rˆ   ö  s
    
ztriangular_impl.<locals>._implr�   )rr   rs   rR  r–   rˆ   r   r   r   Útriangular_implî  s    ÿÿrV  c                 C   s2   t | tjtjfƒr.t |tjtjfƒr.ttjƒS d S r   )rx   r   r¬   ry   Ú_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©rY  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   )rx   r   r¬   ry   rW  r   r”   rX  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)rY  rZ  ÚSG_MAGICCONSTÚainvÚbbbÚcccÚu1Úu2rä   r   Úzrý   rO  r_   ÚprÊ   r   r   rˆ     s@    
"


z!_gammavariate_impl.<locals>._implr   ©rË   rˆ   r   rÊ   r   rW    s    7rW  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\  ©rY  rZ  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]  ©rY  rZ  r–   r›   rœ   rT   r   r   r   rˆ   V  s
    
zgamma_impl.<locals>._implr�   ©rY  rZ  r–   rˆ   r   r   r   Ú
gamma_implO  s    ÿÿrm  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©rY  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”   ro  ©rY  r–   r›   rœ   rT   r   r   r   rˆ   f  s
    
z"standard_gamma_impl.<locals>._implr�   ©rY  r–   rˆ   r   r   r   Ústandard_gamma_impl_  s    ÿÿrs  c                 C   s2   t | tjtjfƒr.t |tjtjfƒr.ttjƒS d S r   )rx   r   r¬   ry   Ú_betavariate_implr”   ÚgammavariaterX  r   r   r   Úbetavariate_implo  s
     
ÿrv  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0ttjjƒS d S r   )rx   r   r¬   ry   rt  r   r”   r]  rX  r   r   r   rv  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   )rY  rZ  rU   ©r]  r   r   rˆ   ~  s    
z _betavariate_impl.<locals>._implr   )r]  rˆ   r   rw  r   rt  }  s    
rt  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”   rZ  rj  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”   rZ  rk  r   r   r   rˆ   ’  s
    
zbeta_impl.<locals>._implr�   rl  r   r   r   Ú	beta_impl‹  s    ÿÿrx  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©rx   r   r¬   )ry  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œ   rT   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”   r€  rš   r   r   r   rˆ   Ó  s
    
z(standard_exponential_impl.<locals>._implr�   r    r   r   r   Ústandard_exponential_implË  s    
ÿÿÿr�  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    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_log_normal_impl1.<locals>.<lambda>r¶   r…  r   r   r   Únp_log_normal_impl1á  s    r†  c                 C   s4   t | tjtjfƒr0t |tjtjfƒr0ttjjƒS d S r   )rx   r   r¬   ry   Ú_lognormvariate_implr   r”   r²   ©rÞ   rß   r   r   r   Únp_log_normal_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   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”   rƒ  )rÞ   rß   r–   r›   rœ   rT   r   r   r   rˆ   õ  s
    
zlognormal_impl.<locals>._implr�   )rÞ   rß   r–   rˆ   r   r   r   Úlognormal_implî  s    ÿÿrŠ  c                 C   s&   t | tjƒr"t |tjƒr"ttjƒS d S r   )rx   r   r¬   r‡  r”   Úgaussrˆ  r   r   r   Úlognormvariate_implþ  s    rŒ  c                    s   ‡ fdd„S )Nc                    s   t  ˆ | |ƒ¡S r   )rÃ   r_  rˆ  ©Z_gaussr   r   rŠ     r‹   z&_lognormvariate_impl.<locals>.<lambda>r   r�  r   r�  r   r‡    s    r‡  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”   ©rY  rO  r   r   r   rˆ     s    z!paretovariate_impl.<locals>._implrz  ©rY  rˆ   r   r   r   Úparetovariate_impl  s    r�  c                 C   s   t | tjƒrdd„ }|S d S )Nc                 S   s"   dt j ¡  }d|d|    d S )Nr°   r:   r“   rŽ  r   r   r   rˆ     s    úpareto_impl.<locals>._implrz  r�  r   r   r   Úpareto_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”   Úparetorp  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”   r“  rq  r   r   r   rˆ   &  s
    
r‘  r�   rr  r   r   r   r’    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Å   )rY  rZ  rO  r   r   r   rˆ   3  s    z"weibullvariate_impl.<locals>._implr¶   )rY  rZ  rˆ   r   r   r   Úweibullvariate_impl/  s     
ÿr”  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Å   )rZ  rO  r   r   r   rˆ   ?  s    zweibull_impl.<locals>._implr¶   )rZ  rˆ   r   r   r   Úweibull_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”   Úweibull)rZ  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”   r—  )rZ  r–   r›   rœ   rT   r   r   r   rˆ   N  s
    
zweibull_impl2.<locals>._implr�   )rZ  r–   rˆ   r   r   r   Úweibull_impl2G  s    ÿÿr˜  c                 C   s&   t | tjƒr"t |tjƒr"ttjƒS d S r   )rx   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   )rx   r   r¬   r™  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Á   rM  r°   )rÃ   ÚpirÄ   Úcosr_  Úacos)rÞ   r›  Úsrý   re  rg  Údrf  ÚqrÉ   Úu3ÚthetarÊ   r   r   rˆ   d  s"    &z$_vonmisesvariate_impl.<locals>._implr   ri  r   rÊ   r   r™  c  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”   Ú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œ   rT   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]rM  r:   gÒèxÖ0 r<   ç      $@)r
  r   ÚminrÃ   rÄ   r   r”   )rú   rh  Zflippedr¢  ZnitersÚqnZnp_prodÚboundrt   ÚXÚUÚpxr   r   r   rˆ   £  sF     


 úbinomial_impl.<locals>._impl©rx   r   ry   r¬   ©rú   rh  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ú   rh  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 r4  )r   r—   Úintpr˜   r™   r–   r”   r²  )rú   rh  r–   r›   rœ   rT   r   r   r   rˆ   Þ  s
    r®  r�   )rú   rh  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Á   rn  )Ú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©rh  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¹  ©rh  r–   r›   rœ   rT   r   r   r   rˆ   ÷  s
    
zchisquare_impl2.<locals>._implr�   ©rh  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œ   rT   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Õ?r:   )r
  r3  r   r”   rÃ   ÚceilrÅ   )rh  r¢  r«  ÚsumÚprodr¬  r   r   r   rˆ      s    

ÿúgeometric_impl.<locals>._implr¶   )rh  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 r4  )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´   r•  ©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   r:   N)r3  Úfloatr¨  rÃ   Úfloorr   r”   )ÚngoodÚnbadÚnsamplesÚd1Ú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 r4  )r   r—   r³  r˜   r™   r–   r”   rÙ  )rÏ  rÐ  rÑ  r–   r›   rœ   rT   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   )rx   r   r¬   ry   Ú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 )NrM  rÁ   r•  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   )rx   r   r¬   ry   Ú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´   r•  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]r:   r<   N)r
  rÃ   rÅ   r   r”   r_  rÈ  )rh  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   )rx   r   r¬   ry   ré  )rh  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 r4  )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ú   rh  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 )
Nrq   rÏ   Úbbcontr  rF   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°   r:   N©r
  )ÚlamZenlamr«  rÄ  r¬  ©Ú_exprË   r   r   Úpoisson_impl<  s    
zCpoisson_impl1.<locals>._impl.<locals>.codegen.<locals>.poisson_impl)r1   r   rÒ   ro   rÿ   Úfcmp_orderedr   r   rZ   r  r    r!   r"   rB   r#   r&   rO   r   r  r   r”   rÃ   r_  rÔ   rK   )r'   r(   r�   rC   r7   Úretptrrð  r  rò  Zbig_lamr+   r,   rq   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 r4  )r   r—   r³  r˜   r™   r–   r”   rì  )rò  r–   r›   rœ   rT   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 <= 0r:   r°   )r
  rÃ   Úpowr_  r   r”   r€  ©r^   r   r   r   rˆ   p  s
    ÿúpower_impl.<locals>._implr¶   ©r^   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©r^   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  ©r^   r–   r›   rœ   rT   r   r   r   rˆ   €  s
    
rþ  r�   ©r^   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   )rx   r   r¬   ry   Úrayleigh_impl©rR  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  )rR  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  )rR  r–   r›   rœ   rT   r   r   r   rˆ   ¡  s
    
zrayleigh_impl2.<locals>._implr�   )rR  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º   ro  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œ   rT   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>._implrz  )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œ   rT   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      ð¿r:   )r
  r   r”   r3  rÃ   rÎ  )r^   Zam1r_   r¬  rè  r«  ÚTr   r   r   rˆ     s    
(úzipf_impl.<locals>._implrz  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 r4  )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   r:   c                    sJ   | j d d }|dkrFˆ |d ƒ}| | | |  | |< | |< |d8 }qd S r9   )Úshape©ÚarrÚiÚj©Úrandr   r   rK  0  s
    zdo_shuffle_impl.<locals>.implc                    sV   | j d d }|dkrRˆ |d ƒ}t | | ¡t | | ¡ | |< | |< |d8 }qd S r9   )r  r   Úcopyr  r"  r   r   rK  7  s
    &)	rx   r   ÚBufferrë   r   r”   r-  r  Úndim)r  ÚrngrK  r   r"  r   Údo_shuffle_impl%  s    

r(  c                 C   s
   t | dƒS rv   ©r(  ©r  r   r   r   Úshuffle_implA  s    r+  c                 C   s
   t | dƒS r~   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   rU   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    )rx   r   ry   Ú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   r0  h  s    ©Úlen)r–   r0  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   r3  w  s    r1  )r–   r3  r   r   r   Úrandnn  s    
r4  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 )Nr:   c                 S   s   t | ƒS r   r1  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   ©r^   Za_ir   r   r   Úgetitem�  s    zchoice.<locals>.getitemc                 S   s   | S r   r   rý  r   r   r   r5  ˜  s    c                 S   s
   t  | ¡S r   )r   r,  rý  r   r   r   r6  œ  s    c                 S   s   |S r   r   r7  r   r   r   r8     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,  )r^   r–   Úreplacerú   r   )r5  r8  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™   r2  r”   r-  r–   r
  Úpermutation)	r^   r–   r9  rú   r›   Úflr   r!  Z
permuted_a©rŸ   r5  r8  r   r   r:  ³  s     
)NT)NT)rx   r   r/  r&  r   rŸ   r   ry   r   r³  rë   r€   )r^   r–   r9  r6  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°   r:   )r˜   r–   r2  r™   r   r”   r²  )rú   Úpvalsr›   r<  ÚszÚplenr   Úp_sumZn_experimentsr!  Zp_jÚ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   Úzerosr2  ©rú   r?  r–   r›   ©rŸ   rD  r   r   Úmultinomial_impl  s    z%multinomial.<locals>.multinomial_implc                    s$   t  |t|ƒfˆ ¡}ˆ| ||ƒ |S )z4
            multinomial(..., size=int)
            rE  rG  rH  r   r   rI    s    c                    s&   t  |t|ƒf ˆ ¡}ˆ| ||ƒ |S )z6
            multinomial(..., size=tuple)
            rE  rG  rH  r   r   rI    s    zDnp.random.multinomial(): size should be int or tuple or None, got %s)N)N)N)r   r³  r   rx   r   ry   rë   ÚSequencer/  r€   Ú	BaseTuple)rú   r?  r–   rI  r   rH  r   Úmultinomial×  s*    
ÿÿ	ÿrL  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—   r2  Údirichlet_arr)rY  r›   r   r   r   Údirichlet_impl+  s    
ú!dirichlet.<locals>.dirichlet_impl)rx   r   rJ  r/  )rY  rO  r   r   r   Ú	dirichlet(  s    rQ  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   rM  ©rY  r–   r›   r   r   r   rO  <  s    
rP  c                 S   s    t  |t| ƒf¡}t| |ƒ |S )z2
            dirichlet(..., size=int)
            rM  rR  r   r   r   rO  C  s    
c                 S   s"   t  |t| ƒf ¡}t| |ƒ |S )z4
            dirichlet(..., size=tuple)
            rM  rR  r   r   r   rO  M  s    
zJnp.random.dirichlet(): size should be int or tuple of ints or None, got %s)N)N)N)	rx   r   rJ  r/  r   r€   ry   rž   rŸ   )rY  r–   rO  r   r   r   rQ  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.0r:   )Úiterr
  r2  r–   r˜   r™   Ú	enumerater   r”   r]  Úitem)
rY  r›   Za_valÚa_lenr–   r˜   r   Únormr÷   r  r   r   r   rN  ^  s    
rN  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µ  r\  r]  r   r   r   Únoncentral_chisquarex  s     
ÿr_  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   rX  )rµ  r\  r–   r   r   r   r]  †  s    
r^  c                 S   s<   t | |ƒ t |¡}|j}t|jƒD ]}t| |ƒ||< q$|S r   )rY  r   r—   r˜   r™   r–   rZ  )rµ  r\  r–   r›   rœ   rT   r   r   r   r]  Ž  s    

zUnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got %s)N)N)r   r€   rx   ry   rž   rŸ   r   )rµ  r\  r–   r]  r   r   r   r_  ƒ  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 )Nr:   rÁ   r<   )r   ÚisnanÚnanr”   r¹  rº   rÄ   rì  )rµ  r\  Úchi2rú   r   r   r   r   rZ  �  s    
rZ  c                 C   s$   | dkrt dƒ‚|dk r t dƒ‚d S )Nr   zdf <= 0znonc < 0rñ  r[  r   r   r   rY  ¯  s    rY  )NT)N)N)N)ÑÚ__doc__rÃ   r”   Únumpyr   Úllvmliter   Únumba.core.cgutilsr   Únumba.core.extendingr   r   r   Únumba.core.imputilsr   r   r	   Únumba.core.typingr   Ú
numba.corer   r   Únumba.npr   Únumba.core.errorsr   ÚregistryÚlowerr)  r   ro   r   rè   rZ   r  r   rM   ÚLiteralStructTypeÚ	ArrayTypeZrnd_state_tÚPointerTyper!   r-   r0   r1   r2   r8   r;   r=   r?   rE   rV   r`   ru   r|   r}   rz   r�   Úrandom_sampleÚsampleÚranfr’   r¡   r‹  Únormalvariater­   rº   r²   r³   r·   r¸   r»   rÀ   rÍ   r¤   r£   Úgetrandbitsrù   r  r  r  r  r  r*  r-  r+  r/  r1  r9  r;  r<  r>  r@  rA  rE  rF  rC  rL  rU  rQ  rT  rV  ru  r[  ro  r]  rW  rm  rs  Úbetavariaterv  rZ  rt  rx  Úexpovariater{  r  r~  r€  r�  rƒ  r„  r†  r‰  rŠ  ÚlognormvariaterŒ  r‡  Úparetovariater�  r“  r’  Úweibullvariater”  r—  r–  r˜  Úvonmisesvariaterœ  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ê  Ú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#  r4  r>  rL  rQ  rN  r_  rZ  rY  r   r   r   r   Ú<module>   s:  


ö
1










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








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











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

