a
    
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dd Zqeejrdd Zseejjtdd Zueejjtdd Zueejjveejjtdd Zueejjvdd Zweejjxdd Zyeejjxdd Zzeejjxdd Z{eejjxdd Z|eej}dd Z~dd Zeejdd Zeejjdd Zeejjdd Zeejdd Zeejjdd Zeejjdd Zeejdd Zeejjdd Zdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd ZeejjddÄ Zddń ZeejjddǄ ZeejjddɄ Zeejjdd˄ Zeejjdd̈́ Zddτ Zddф Zeejjddӄ Zeejjddӄ Zeejjddք Zeejjdd؄ Zeejjddڄ Zeejjdd܄ Zeejjddބ Zeejjddބ Zeejjdd Zeejjdd Zdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zeejjdd Zdd Zeejădd Zeejjădd Zeejjƃdd Zeejjȃdd ZeejjɃd d ZeejjʃdddZeejj˃dddZeejj̃dd Zeejj̃dd	dZed
d Zeejj΃dd Zeejj΃dddZedd Zedd Zd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   a/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cpython/randomimpl.py	const_int   s    r   ip  c                 C   sT   |dv sJ 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)	r   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    r4   c                 C   s   t | |ddS Nr      r0   r2   r   r   r   get_array_ptr[   s    r7   c                 C   s   t | |ddS )Nr      r0   r2   r   r   r   get_has_gauss_ptr^   s    r9   c                 C   s   t | |ddS )Nr      r0   r2   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   s6  t ||}||}|d|t}t||6 t|}|||f |t	d| W d   n1 sj0    Y  ||}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   Nr6         l   VX:    l     _    )r4   loadicmp_unsignedN_constr   if_unlikelyr?   r"   storer   r7   r1   r!   xorlshrand_shl)	r#   r$   r3   ZidxptridxZneed_reshuffler(   Z	array_ptryr   r   r   get_next_int32o   s*    

.

rP   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)
rK   rP   r   uitofpdoubleZfdivfaddfmulr   r   )r#   r$   r3   abr   r   r   get_next_double   s    
rY   c                    sP  t |jd fdd}t t td} d|} |\}}	|, ||}
  	|
t| W d   n1 s0    Y  |	| r| 
|}t }
s| 
|}  	|
t  	|tt td} || W d   n1 s0    Y  W d   n1 s<0    Y   |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 r/   )subrP   typewidthzexttruncnot_r   r   rK   rL   )nbitsshiftrO   maskr$   Zc32r#   is_numpyr3   r   r   get_shifted_int   s    z%get_next_int.<locals>.get_shifted_intr   <=N)r   r   r[   r   Zalloca_once_valueint64_trF   if_elserI   r]   rZ   rP   r!   rM   rE   )r#   r$   r3   r`   rd   re   retZis_32bZifsmallZiflargelowhightotalr   rc   r   get_next_int   s,    2

Lrm   c                 C   s   t | tjrtdS d S Nr   
isinstancer   Integer
_seed_implseedr   r   r   	seed_impl   s    ru   c                 C   s   t | tjrtdS d S Nr   ro   rs   r   r   r   ru      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)typingcontextrt   r{   ry   r   r   _impl   s    z_seed_impl.<locals>._implc                    s    | S r   r   rs   r~   r   r   <lambda>       z_seed_impl.<locals>.<lambda>r   ry   r   )r~   rz   r   rr      s    
rr   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 rn   r)   rY   r#   r$   rx   r>   r3   r   r   r   r{      s    z+random_impl.<locals>._impl.<locals>.codegen)r   r   rT   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 rv   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_flatrN   r   r   r   r~     s
    
zrandom_impl1.<locals>._implr   rp   r   rq   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 rn   _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>rp   r   Floatrq   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>rp   r   r   rq   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 rv   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rt |tjtjfrt |tjs~t |tjrt |jtjrd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   rN   r   r   r   r~   Q  s
    
znp_gauss_impl3.<locals>._implrp   r   r   rq   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x2Z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                    s  |j }| |}tjtjjd }t| |}tj||dd}t||}	t||}
t	||
|
}||\}}|2 ||
|	| |td|
 W d    n1 s0    Y  |j | |t|tt|dd}t||d\}}|||	 ||| |td|
 W d    n1 s20    Y  W d    n1 sR0    Y  |\}}| ||||||
|S )N)r   r   resultr%   r   r8   r   r6   )return_typeZget_data_typer   r   r)   r   alloca_oncer;   r9   Zis_truerE   rh   rI   r   compile_internalr   r   r   r   Zunpack_tuplerU   rV   )r#   r$   rx   r>   tyZlltyr   r3   ri   Z	gauss_ptrZhas_gauss_ptrZ	has_gaussZthenZ	otherwisepairfirstsecondmusigmar   r   stater   r   r~   m  s@    


.P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   )rS   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   
DoubleTyperp   rq   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 d    n1 sj0    Y  t| |d}t	| |||dS )Nr@   A   ==r   z getrandbits() limited to 64 bitsr   F)
rF   r   r   rH   or_	call_convreturn_user_excOverflowErrorr)   rm   )	r#   r$   rx   r>   r`   	too_largeZ	too_smallmsgr3   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>)rp   r   rq   r   r   r   r   r   getrandbits_impl  s    
r   c              	      s  t  td}td}	tj dd}
  |||
   d||B  	 	 
|
||	} || |
 W d    n1 s0    Y    d||	B   	 
|
||	} || |
 W d    n1 s0    Y   
|
t  d|& d}j t|f W d    n1 sd0    Y  ttjjg}t jj|d	 }d
kr |	n}  ||tjgt ttjtj dd fdd}d
kr  d|	r\}}|  | W d    n1 sX0    Y  | |  W d    n1 s0    Y  W d    n1 s0    Y  n|   	|  
|S )Nr   r6   nr   <>rf   zempty range for randrange()zllvm.ctlz.%sr   rc                     s~     d}   d} |   |  t dk} |} d|} || |  |  | d S )Nwhilez	while.endr   r@   )append_basic_blockbranchposition_at_endrm   r^   icmp_signedZcbranchrI   )Zbbwhilebbendr   r   r$   r#   r   r`   Zrptrr   r3   r   r   r   get_num  s    




z _randrange_impl.<locals>.get_numr   )r)   r   r   r   r   rI   rZ   if_thenr   r!   rE   ZsdivrH   r   r   
ValueErrorr   Ztrue_bitr[   r   r=   r   r^   r"   r   r\   rh   mul)r#   r$   startstopstepr   r   r   ZzeroZoneZnptrwr   r'   r(   Znm1r   Zis_oneZ
is_not_oner   r   r   _randrange_impl  sD    *,
2

,Hr   c                 C   s   t | tjrdd S d S )Nc                 S   s   t d| dS r5   r   	randranger   r   r   r   r     r   z"randrange_impl_1.<locals>.<lambda>rp   r   rq   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 Nr6   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rt |tjrt |tjrt| 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 rn   )r   r#   r$   rx   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>rp   r   rq   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 r/   r   r   randintrk   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rt |tjrt| 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 )Nr6   r   )r   r   r   r   )r  r   r  r  r   r   r{   H  s    z1np_randint_impl_2.<locals>._impl.<locals>.codegenr
   )r}   rj   rk   r{   )r  r  r   r  r  r   r   r~   F  s    z np_randint_impl_2.<locals>._implc                    s
    | |S r   r   rj   rk   r   r   r   r   Q  r   z#np_randint_impl_2.<locals>.<lambda>r  )rj   rk   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rt |tjrt |tjsft |tjrt |jtjrt| j|j}tt	d|   fdd}|S d S )Nc                 S   s   t j| |S r   r  rj   rk   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  rj   rk   r   r   r   rN   Zresult_typer   r   r~   `  s
    z np_randint_impl_3.<locals>._impl)
rp   r   rq   r   r   r   r  r   getattrr   )rj   rk   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  rj   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 rn   r   r   r   r   uniform_implr}   rj   rk   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 rv   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fsubrY   rU   rV   )	r#   r$   rx   r>   r3   rW   rX   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rt |tjtjfrt |tjs~t |tjrt |jtjrd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   )rj   rk   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   )rj   rk   ucr   r   r   r~     s    
z triangular_impl_2.<locals>._implr   )rj   rk   r~   r   r   r   triangular_impl_2  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`   || kr| S t   }||  ||   }||krFd| }d| }||  } }| ||  t||   S r   r+  )rj   rk   moder,  r-  r   r   r   r~     s    
 triangular_impl_3.<locals>._implr   )rj   rk   r/  r~   r   r   r   triangular_impl_3  s    r1  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   )rj   r/  rk   r,  r-  r   r   r   r~     s    

r0  r   )rj   r/  rk   r~   r   r   r   r1    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)rj   rk   r/  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   r2  )rj   rk   r/  r   r   r   rN   r   r   r   r~     s
    
ztriangular_impl.<locals>._implr   )rj   rk   r/  r   r~   r   r   r   triangular_impl  s    r3  c                 C   s2   t | tjtjfr.t |tjtjfr.ttjS d S r   )rp   r   r   rq   _gammavariate_implr   alphabetar   r   r   gammavariate_impl  s    r8  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r6  r   r   r   r   
  r   z#gammavariate_impl.<locals>.<lambda>r   r;  r   r   r   r8    s    c                 C   s4   t | tjtjfr0t |tjtjfr0ttjjS d S r   )rp   r   r   rq   r4  r   r   r5  r   r   r   r8    s    c                    s    fdd}|S )Nc                    s  dt d }| dks|dkr&td| dkrt 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qn|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      @gHz>gP?N)r   r   r   r   expe)r6  r7  SG_MAGICCONSTainvbbbcccu1u2r   r   zr   r,  rX   pr   r   r   r~     s@    
"


z!_gammavariate_impl.<locals>._implr   r   r~   r   r   r   r4    s    7r4  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   r9  r6  r7  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:  r6  r7  r   r   r   rN   r   r   r   r~   V  s
    
zgamma_impl.<locals>._implr   r6  r7  r   r~   r   r   r   
gamma_implO  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   r   r   standard_gammar6  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   rL  r6  r   r   r   rN   r   r   r   r~   f  s
    
z"standard_gamma_impl.<locals>._implr   r6  r   r~   r   r   r   standard_gamma_impl_  s    rP  c                 C   s2   t | tjtjfr.t |tjtjfr.ttjS d S r   )rp   r   r   rq   _betavariate_implr   gammavariater5  r   r   r   betavariate_implo  s    rS  c                 C   s4   t | tjtjfr0t |tjtjfr0ttjjS d S r   )rp   r   r   rq   rQ  r   r   r:  r5  r   r   r   rS  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   )r6  r7  rO   r:  r   r   r~   ~  s    
z _betavariate_impl.<locals>._implr   )r:  r~   r   rT  r   rQ  }  s    
rQ  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   r7  rG  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   r7  rH  r   r   r   r~     s
    
zbeta_impl.<locals>._implr   rI  r   r   r   	beta_impl  s    rU  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rp   r   r   )rV  r~   r   r   r   expovariate_impl  s    
rX  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   rN   r   r   r   r~     s
    
rZ  r   )r   r   r~   r   r   r   r[    s    c                  C   s   dd } | S )Nc                   S   s   t dtj   S r   rY  r   r   r   r   r~     s    rZ  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    ra  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   rb  r   r   r   np_log_normal_impl1  s    rc  c                 C   s4   t | tjtjfr0t |tjtjfr0ttjjS d S r   )rp   r   r   rq   _lognormvariate_implr   r   r   r   r   r   r   r   np_log_normal_impl2  s    rf  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   rN   r   r   r   r~     s
    
zlognormal_impl.<locals>._implr   )r   r   r   r~   r   r   r   lognormal_impl  s    rg  c                 C   s&   t | tjr"t |tjr"ttjS d S r   )rp   r   r   rd  r   gaussre  r   r   r   lognormvariate_impl  s    ri  c                    s    fddS )Nc                    s   t  | |S r   )r   r<  re  Z_gaussr   r   r     r   z&_lognormvariate_impl.<locals>.<lambda>r   rj  r   rj  r   rd    s    rd  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   r6  r,  r   r   r   r~     s    z!paretovariate_impl.<locals>._implrW  r6  r~   r   r   r   paretovariate_impl  s    rm  c                 C   s   t | tjrdd }|S d S )Nc                 S   s"   dt j  }d|d|    d S )Nr   r6   r   rk  r   r   r   r~     s    pareto_impl.<locals>._implrW  rl  r   r   r   pareto_impl  s    ro  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   paretorM  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   rp  rN  r   r   r   r~   &  s
    
rn  r   rO  r   r   r   ro    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   )r6  r7  r,  r   r   r   r~   3  s    z"weibullvariate_impl.<locals>._implr   )r6  r7  r~   r   r   r   weibullvariate_impl/  s
    rq  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   )r7  r,  r   r   r   r~   ?  s    zweibull_impl.<locals>._implr   )r7  r~   r   r   r   weibull_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   weibull)r7  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   rt  )r7  r   r   r   rN   r   r   r   r~   N  s
    
zweibull_impl2.<locals>._implr   )r7  r   r~   r   r   r   weibull_impl2G  s    ru  c                 C   s&   t | tjr"t |tjr"ttjS d S r   )rp   r   r   _vonmisesvariate_implr   r   kappar   r   r   vonmisesvariate_implW  s    ry  c                 C   s(   t | tjr$t |tjr$ttjjS d S r   )rp   r   r   rv  r   r   rw  r   r   r   ry  ]  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r6qq6d| }|| d||   }	  }
|
dkr| t |	 dt j  }n| t |	 dt j  }|S )zCircular 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   rx  sr   rB  rD  drC  qr   u3thetar   r   r   r~   d  s"    &z$_vonmisesvariate_impl.<locals>._implr   rF  r   r   r   rv  c  s    (rv  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   rx  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   rx  r   r   r   rN   r   r   r   r~     s
    
zvonmises_impl.<locals>._implr   )r   rx  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snJ 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 | | |	|  }qq|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*  r6   gx0 r8         $@)r   minr   r   r   r   )r   rE  Zflippedr  ZnitersqnZnp_prodboundrl   XUZpxr   r   r   r~     sF     


 binomial_impl.<locals>._implrp   r   rq   r   r   rE  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   rE  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   rE  r   r   r   rN   r   r   r   r~     s
    r  r   )r   rE  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   rK  )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rE  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  rE  r   r   r   rN   r   r   r   r~     s
    
zchisquare_impl2.<locals>._implr   rE  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   rN   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?r6   )r   r  r   r   r   ceilr   )rE  r  r  sumprodr  r   r   r   r~      s    

geometric_impl.<locals>._implr   )rE  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   rr  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rt || S |S dS )z'Numpy's algorithm for hypergeometric().r   r   r6   N)r  floatr  r   floorr   r   )ngoodnbadnsamples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   rN   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   )rp   r   r   rq   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   rr  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   )rp   r   r   rq   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   rr  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rtdt|t|  S ||krdS dS q&dS )z"Numpy's algorithm for logseries().r   r   z logseries(): p outside of (0, 1]r6   r8   N)r   r   r   r   r   r<  r  )rE  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   )rp   r   r   rq   r  )rE  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   rE  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                    s0  t | |}tj|tdd}|d}|d}|\}||}|d|ttd}	|	|	X t
tttf}
t|jj|
d}||||f}||| || W d    n1 s0    Y  || || tjjtj  fdd	}| ||||}||| || || ||S )
Nri   r   bbcontr   r@   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   r6   Nr   )lamZenlamr  r  r  _expr   r   r   poisson_impl<  s    
zCpoisson_impl1.<locals>._impl.<locals>.codegen.<locals>.poisson_impl)r-   r   r   rg   r   Zfcmp_orderedr   r   rT   r   r   r   r   r=   r   r"   rI   r   r   r   r   r   r<  r   rE   )r#   r$   rx   r>   r3   Zretptrr  r   r  Zbig_lamr'   r(   ri   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   rN   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 <= 0r6   r   )r   r   powr<  r   r   r]  rW   r   r   r   r~   p  s
    power_impl.<locals>._implr   rW   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rW   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  rW   r   r   r   rN   r   r   r   r~     s
    
r  r   rW   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   )rp   r   r   rq   rayleigh_implr/  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  )r/  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  )r/  r   r   r   rN   r   r   r   r~     s
    
zrayleigh_impl2.<locals>._implr   )r/  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   rL  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   rN   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>._implrW  )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   rN   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      r6   )r   r   r   r  r   r  )rW   Zam1rX   r  r  r  Tr   r   r   r~     s    
(zipf_impl.<locals>._implrW  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   r6   c                    sJ   | j d d }|dkrF |d }| | | |  | |< | |< |d8 }qd S r5   )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 r5   )r  r   copyr  r  r   r   r(  7  s
    &)	rp   r   ZBufferr   r   r   r  r   ndim)r  rngr(  r   r  r   do_shuffle_impl%  s    

r   c                 C   s
   t | dS rn   r   r  r   r   r   shuffle_implA  s    r  c                 C   s
   t | dS rv   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   rO   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    )rp   r   rq   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J | 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v rdfdd	}nd fdd	}|S )Nr6   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   rW   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  )rW   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)	rW   r   r  r   r   flr  r  Z
permuted_ar   r  r  r   r   r    s     
)NT)NT)rp   r   r  r  r   r   rq   r   r  r   rw   )rW   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v rld
 fdd	}nJt|tjrd fdd	}n,t|tj
rd 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   r6   )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   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   rp   r   rq   r   Sequencer  rw   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)r6  r   r   r   r   dirichlet_impl+  s    
!dirichlet.<locals>.dirichlet_impl)rp   r   r   r  )r6  r$  r   r   r   	dirichlet(  s    r&  c                 C   s   t | tjtjfs td| f |d tjfv 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"  r6  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)	rp   r   r   r  r   rw   rq   r   r   )r6  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 ]\}}	|||   |  < qq>d S )Nr   zdirichlet: alpha must be > 0.0r6   )iterr   r
  r   r   r   	enumerater   r   r:  item)
r6  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  r/  r0  r   r   r   noncentral_chisquarex  s
    r2  c                 C   s`   |d t jfv 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  r/  r   r   r   r   r0    s    
r1  c                 S   s<   t | | t|}|j}t|jD ]}t| |||< q$|S r   )r,  r   r   r   r   r   r-  )r  r/  r   r   r   rN   r   r   r   r0    s    

zUnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got %s)N)N)r   rw   rp   rq   r   r   r   )r  r/  r   r0  r   r   r   r2    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 )Nr6   r   r8   )r   isnannanr   r  r   r   r  )r  r/  Zchi2r   r  r   r   r   r-    s    
r-  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   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   rg   r   r   rT   r  r   rG   ZLiteralStructType	ArrayTypeZrnd_state_tZPointerTyper   r)   r,   r-   r.   r4   r7   r9   r;   r?   rP   rY   rm   rt   ru   rr   r   Zrandom_samplesampleZranfr   r   rh  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)  r2  r.  r1  r3  rR  r8  rL  r:  r4  rJ  rP  betavariaterS  r7  rQ  rU  expovariaterX  r\  r[  r]  r^  r`  ra  rc  rf  rg  lognormvariateri  rd  paretovariaterm  rp  ro  weibullvariaterq  rt  rs  ru  vonmisesvariatery  r  rv  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#  r2  r-  r,  r   r   r   r   <module>   s:  



1










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








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











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

