o
    0 i>                    @   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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 Z0dd Z1dd  Z2d!d" Z3d#d$ Z4d%d& Z5d'd( Z6eej7d)d* Z8eejj7d+d* Z8d,d- Z9eejd.d/ Z:e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=dd2d3Z?eej@eejAd4d5 ZBeejjCeejjDd6d7 ZEeejjDd8d9 ZFeejjDd:d; ZGeejjCd<d= ZHeejjDd>d? ZId@dA ZJdBdC ZKdDdE ZLeejMdFdG ZNdHdI ZOeejPdJdK ZQeejPdLdM ZRdNdO ZSeejPdPdQ ZTeejUdRdS ZVeejjUdTdU ZWeejjUdVdW ZXeejjUdXdY ZYeejjZdZd[ Z[eejZd\d] Z\eejjZd^d_ Z]d`da Z^eejjZdbdc Z_eej`ddde Zaeej`dfdg Zbeejj`dhdg Zbeejj`ddidjZceejddkdl Zeeejjfeejjgdmdn Zheejjgdodp Zidqdr Zjeejjgdsdt Zkeejjfdudv Zleejmdwdx Zneejjodydz Zpd{d| Zqeejjod}d~ Zreejsdd Zteejjudd Zveejjudd Zveejjweejjudd Zveejjwdd Zxeejjydd Zzeejjydd Z{eejjydd Z|eejjydd Z}eej~dd Zdd Ze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 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Ƀdd Zeejjʃddd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is_empty_tuple)	intrinsicoverloadregister_jitable)Registryimpl_ret_untrackedimpl_ret_new_ref	signature)typescgutils)NumbaTypeError)LONG_MAXZ
randomimpl    @   c                 C   s   t t| S N)r   Constantint32_tx r   d/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/numba/cpython/randomimpl.py	const_int      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_ptr3   s   r,   c                 C      t | |dS )z@
    Get a pointer to the thread-local Python random state.
    r   r,   r&   r'   r   r   r   get_py_state_ptrD      r0   c                 C   r-   )z?
    Get a pointer to the thread-local Numpy random state.
    r   r.   r/   r   r   r   get_np_state_ptrJ   r1   r2   c                 C   r-   )zB
    Get a pointer to the thread-local internal random state.
    r   r.   r/   r   r   r   get_internal_state_ptrP   r1   r3   c                 C   s   t | |ddS Nr   r   gep_inboundsr'   	state_ptrr   r   r   get_index_ptrW      r9   c                 C      t | |ddS Nr      r5   r7   r   r   r   get_array_ptrZ   r:   r>   c                 C   r;   )Nr      r5   r7   r   r   r   get_has_gauss_ptr]   r:   r@   c                 C   r;   )Nr      r5   r7   r   r   r   get_gauss_ptr`   r:   rB   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_shufflec   s   rF   c           	   
   C   s6  t ||}||}|d|t}t|| t|}|||f |t	d| W d   n1 s5w   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   Nr=         l   VX:    l     _    )r9   loadicmp_unsignedN_constr   if_unlikelyrF   r%   storer   r>   r6   r$   xorlshrand_shl)	r&   r'   r8   ZidxptridxZneed_reshuffler+   Z	array_ptryr   r   r   get_next_int32n   s,   



rW   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)
rR   rW   r   uitofpdoubleZfdivfaddfmulr   r   )r&   r'   r8   abr   r   r   get_next_double   s   
r`   c                    sL  t |jd fdd}t t td} d|} |r\}}	| ||}
  	|
t| W d   n1 sEw   Y  |	> rW| 
|}t }
sg| 
|}  	|
t  	|tt td} || W d   n1 sw   Y  W d   n1 sw   Y   |S )z2
    Get the next integer with width *nbits*.
    r   c                    s     | }t }| jj|jjk r ||j}n| jj|jjkr+ ||j}rC t|jd} 	||} 
||S  	||S r4   )subrW   typewidthzexttruncnot_r   r   rR   rS   )nbitsshiftrV   maskr'   Zc32r&   is_numpyr8   r   r   get_shifted_int   s   z%get_next_int.<locals>.get_shifted_intr   <=N)r   r   rb   r   Zalloca_once_valueint64_trM   if_elserP   rd   ra   rW   r$   rT   rL   )r&   r'   r8   rg   rk   rl   retZis_32bZifsmallZiflargelowhightotalr   rj   r   get_next_int   s4   


rt   c                    s,   t | tjrttd  fdd}|S d S )Nr   c                        | S r   r   r^   r+   r   r   impl   s   zseed_impl.<locals>.impl)
isinstancer   Integerr   
_seed_impl)r^   rx   r   rw   r   	seed_impl   s
   r|   c                 C   s   t | tjr
tdS d S Nr   )ry   r   rz   r{   seedr   r   r   r|         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   rC   r    r   r   r!   rD   r"   r%   r,   Zget_constantr   none)r&   r'   sigrE   Z
seed_valuer*   r+   
state_typer   r   codegen   s   z*_seed_impl.<locals>._impl.<locals>.codegen)r   r   voidZuint32)typingcontextr   r   r   r   r   _impl   s   z_seed_impl.<locals>._implc                    ru   r   r   r~   r   r   r   <lambda>       z_seed_impl.<locals>.<lambda>r   r   r   )r   r   r   r{      s   
r{   c                         t dd   fddS )Nc                 S      dd }t tj|fS )Nc                 S      t | |d}t| ||S Nr   r,   r`   r&   r'   r   rE   r8   r   r   r   r         z+random_impl.<locals>._impl.<locals>.codegen)r   r   r[   r   r   r   r   r   r         zrandom_impl.<locals>._implc                           S r   r   r   r   r   r   r          zrandom_impl.<locals>.<lambda>r   r   r   r   r   random_impl   s   
r   c                      r   )Nc                 S   r   )Nc                 S   r   r}   r   r   r   r   r   r      r   z,random_impl0.<locals>._impl.<locals>.codegen)r   r   float64r   r   r   r   r      r   zrandom_impl0.<locals>._implc                      r   r   r   r   r   r   r   r      r   zrandom_impl0.<locals>.<lambda>r   r   r   r   r   random_impl0   s   
r   c                 C   s`   t | r	dddS t| rdddS t| tjs%t| tjr,t| jtjr.ddd}|S d S d S )Nc                 S   
   t j S r   r   randomsizer   r   r   r        
 zrandom_impl1.<locals>.<lambda>c                 S   s   t t j S r   )r   arrayr   r   r   r   r   r         c                 S   s2   t | }|j}t|jD ]	}t j ||< q|S r   )r   emptyflatranger   r   r   outout_flatrU   r   r   r   r     
   
zrandom_impl1.<locals>._implr   r   r   ry   r   rz   UniTupledtyper   r   r   r   r   random_impl1   s   


r   c                    D   t | tjtjfrt |tjtjfr tdd   fddS d S d S )Nc                 S   *   t |}t |}ttj||td||fS r   _double_preprocessorr   r   r   _gauss_impl)r   musigmaloc_preprocessorscale_preprocessorr   r   r   r     
   
zgauss_impl.<locals>._implc                    
    | |S r   r   r   r   r   r   r   r     r   zgauss_impl.<locals>.<lambda>ry   r   Floatrz   r   r   r   r   r   
gauss_impl  s   
r   c                   C      dd S )Nc                   S      t jddS N              ?r   r   normalr   r   r   r   r   %      z np_gauss_impl0.<locals>.<lambda>r   r   r   r   r   np_gauss_impl0"  s   r   c                 C      t | tjtjfrdd S d S )Nc                 S      t j| dS Nr   r   locr   r   r   r   +  r   z np_gauss_impl1.<locals>.<lambda>ry   r   r   rz   r   r   r   r   np_gauss_impl1(     r   c                    r   )Nc                 S   r   r}   r   )r   r   scaler   r   r   r   r   r   2  r   znp_gauss_impl2.<locals>._implc                    r   r   r   r   r   r   r   r   r   8  r   z np_gauss_impl2.<locals>.<lambda>r   r   r   r   r   np_gauss_impl2.     
r   c                 C   Z   t | rdd S t| rdd S t| tjs#t| tjr)t| jtjr+dd }|S d S d S )Nc                 S   
   t j S r   r   r   standard_normalr   r   r   r   r   >  r   z'standard_normal_impl1.<locals>.<lambda>c                 S      t t j S r   )r   r   r   r   r   r   r   r   r   A  r   c                 S   2   t | }|j}t|jD ]	}t j ||< q|S r   )r   r   r   r   r   r   r   r   r   r   r   r   E  r   z$standard_normal_impl1.<locals>._implr   r   r   r   r   standard_normal_impl1;     r   c                 C      t | tjtjfrt |tjtjfrt|rdd 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rat |tjsYt |tjrct |jtjredd }|S d S d S d S d S )Nc                 S      t j| |S r   r   r   r   r   r   r   r   r   S  r   z np_gauss_impl3.<locals>.<lambda>c                 S      t t j| |S r   )r   r   r   r   r   r   r   r   r   X      c                 S   6   t |}|j}t|jD ]}t j| |||< q|S r   )r   r   r   r   r   r   r   r   r   r   r   r   rU   r   r   r   r   ^  
   
znp_gauss_impl3.<locals>._implry   r   r   rz   r   r   r   r   r   r   r   r   r   r   r   np_gauss_impl3N  s4   

r   c                        fdd}|S )Nc                     sj   	 d   d } d   d }| |  ||  }|dk r |dkr nqt dt | | }||  || fS )zG
        Compute a pair of numbers on the normal distribution.
        T       @r   r          )mathsqrtlog)x1Zx2r2f_randomr   r   compute_gauss_pairh  s   z,_gauss_pair_impl.<locals>.compute_gauss_pairr   )r   r   r   r   r   _gauss_pair_implg  s   r   c                        fdd}|S )Nc                    s  |j }| |}tjtjjd }t| |}tj||dd}t||}	t||}
t	||
|
}||l\}}| ||
|	| |td|
 W d    n1 sYw   Y  |5 | |t|tt|dd}t||d\}}|||	 ||| |td|
 W d    n1 sw   Y  W d    n1 sw   Y  |\}}| ||||||
|S )N)r   r   resultr(   r   r?   r   r=   )return_typeZget_data_typer   r   r,   r   alloca_oncerB   r@   Zis_truerL   ro   rP   r   compile_internalr   r   r   r   Zunpack_tupler\   r]   )r&   r'   r   rE   tyZlltyr   r8   rp   Z	gauss_ptrZhas_gauss_ptrZ	has_gaussZthenZ	otherwisepairfirstsecondr   r   r   r   stater   r   r   z  sH   


z_gauss_impl.<locals>._implr   )r   r   r   r   r   r   r   r   y  s   $r   c                    sj   t j  t| tjr| jr fddS  fddS t| tjr/| jdkr+ fddS dd S td|  )Nc                       |  | S r   )Zsitofpr'   vr   r   r   r         z&_double_preprocessor.<locals>.<lambda>c                    r   r   )rZ   r   r  r   r   r     r  r   c                    r   r   )Zfpextr   r  r   r   r     r  c                 S      |S r   r   )_builderr  r   r   r   r         z(Cannot convert {} to floating point type)	r   r   
DoubleTypery   rz   signedr   bitwidthr   )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 s5w   Y  t| |d}t	| |||dS )NrG   A   ==r   z getrandbits() limited to 64 bitsr   F)
rM   r   r   rO   or_	call_convreturn_user_excOverflowErrorr,   rt   )	r&   r'   r   rE   rg   	too_largeZ	too_smallmsgr8   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                    ru   r   r   r  r   r   r   r     r   z"getrandbits_impl.<locals>.<lambda>)ry   r   rz   r   r  r   r   r   getrandbits_impl  s
   
r  c              	      s  t  td}td}	tj dd}
  |||
   d||!  	 	 
|
||	} || |
 W d    n1 sRw   Y    d||	!   	 
|
||	} || |
 W d    n1 sw   Y   
|
t  d| d}j t|f W d    n1 sw   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rU  d|	9\}}|  | W d    n	1 s)w   Y  | |  W d    n	1 s?w   Y  W d    n	1 sOw   Y  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   rG   )append_basic_blockbranchposition_at_endrt   re   icmp_signedZcbranchrP   )Zbbwhilebbendr  r  r'   r&   r  rg   Zrptrr   r8   r   r   r   get_num  s   




z _randrange_impl.<locals>.get_numr  )r,   r   r   r   r   rP   ra   if_thenr  r$   rL   ZsdivrO   r  r  
ValueErrorr   Ztrue_bitrb   r!   rD   r"   re   r%   r   rc   ro   mul)r&   r'   startstopstepr   r  r   zerooneZnptrwr  r*   r+   Znm1r!  Zis_oneZ
is_not_oner   r   r   _randrange_impl  sT   


r+  c                 C      t | tjr
dd S d S )Nc                 S   s   t d| dS r<   r   	randranger%  r   r   r   r     r   z"randrange_impl_1.<locals>.<lambda>ry   r   rz   r/  r   r   r   randrange_impl_1  r   r1  c                 C   (   t | tjrt |tjrdd S 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>r0  r4  r   r   r   randrange_impl_2     r5  c                 C   s(   |j | kr|jrtjjS tjjS dd S )Nc                 S   r  r   r   )r  r  Z_tyr   r   r   r     r  z)_randrange_preprocessor.<locals>.<lambda>)r	  r  r   Z	IRBuilderZsextrd   )r	  r   r   r   r   _randrange_preprocessor  s
   
r7  c                    s   t | tjrRt |tjrTt |tjrVt| j|j|jt| j|j|j}tj|t|t	|| t	||t	||t
fdd  fddS d S d S d S )Nc                    s&   fdd}t  ||||fS )Nc              	      sD   |\}}}|| }|| }|| }t | |||| dS r   )r+  r&   r'   r   rE   r%  r&  r'  )	llvm_typer  start_preprocessorstep_preprocessorstop_preprocessorr   r   r   0  s   
z0randrange_impl_3.<locals>._impl.<locals>.codegenr   )r   r%  r&  r'  r   )int_tyr9  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   9  r  z"randrange_impl_3.<locals>.<lambda>ry   r   rz   maxr  r	  Zfrom_bitwidthr   IntTyper7  r   )r%  r&  r'  r	  r   )r   r=  r9  r  r:  r;  r<  r   randrange_impl_3!  s   





rA  c                 C   r2  )Nc                 S   s   t | |d dS r3  r-  r^   r_   r   r   r   r   ?      z randint_impl_1.<locals>.<lambda>r0  rB  r   r   r   randint_impl_1<  r6  rD  c                 C   r,  )Nc                 S   s   t jd| S r4   r   r   randintrq   r   r   r   r   E  r   z#np_randint_impl_1.<locals>.<lambda>r0  rG  r   r   r   np_randint_impl_1B  r   rH  c                    s   t | tjrBt |tjrDt| j|jt| j|j}tj|t|t	|| t	||t
fdd  fddS d S d S )Nc                    s"   fdd}t  |||fS )Nc              	      sB   |\}}|| }|| }t  d}t| |||| dS )Nr=   r   )r   r   r+  r8  )r9  r  r:  r<  r   r   r   U  s   z1np_randint_impl_2.<locals>._impl.<locals>.codegenr   )r   rq   rr   r   )r=  r9  r  r:  r<  r   r   r   S  s   z np_randint_impl_2.<locals>._implc                    r   r   r   rq   rr   r   r   r   r   ^  r   z#np_randint_impl_2.<locals>.<lambda>r>  )rq   rr   r	  r   )r   r=  r9  r  r:  r<  r   np_randint_impl_2H  s   



rJ  c                    s   t | tjrt |tjrt|rdd 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sGt |tjrbt |jtjrdt| j|j}t	t
d|   fdd}|S d S d S d S d S )Nc                 S   r   r   rE  rq   rr   r   r   r   r   r   e  r   z#np_randint_impl_3.<locals>.<lambda>c                 S   r   r   )r   r   r   rF  rK  r   r   r   r   i  r   intc                    s:   t j| d}|j}t|jD ]}t j| |||< q|S N)r   )r   r   r   r   r   r   rF  rq   rr   r   r   r   rU   Zresult_typer   r   r   q  s
   z np_randint_impl_3.<locals>._impl)ry   r   rz   r   r   r   r   r?  r	  getattrr   )rq   rr   r   r	  r   r   rO  r   np_randint_impl_3a  s,   

rQ  c                   C   r   )Nc                   S   r   r   r   r   uniformr   r   r   r   r   |  r   z"np_uniform_impl0.<locals>.<lambda>r   r   r   r   r   np_uniform_impl0z     rT  c                    r   )Nc                 S   r   r   r   r   r   r   uniform_impl)r   r^   r_   low_preprocessorhigh_preprocessorr   r   r   r     
   zuniform_impl2.<locals>._implc                    r   r   r   rB  r   r   r   r     r   zuniform_impl2.<locals>.<lambda>r   rB  r   r   r   uniform_impl2  r   r[  c                    r   )Nc                 S   r   r}   rV  )r   rq   rr   rX  rY  r   r   r   r     rZ  znp_uniform_impl2.<locals>._implc                    r   r   r   rI  r   r   r   r     r   z"np_uniform_impl2.<locals>.<lambda>r   rI  r   r   r   np_uniform_impl2  r   r\  c                    r   )Nc           	         sT   t | |}|\}} ||}||}|||}t| ||}|||||S r   )r,   Zfsubr`   r\   r]   )	r&   r'   r   rE   r8   r^   r_   rc   r  a_preprocessorb_preprocessorr   r   r   rx     s   

zuniform_impl.<locals>.implr   )r   r^  r_  rx   r   r]  r   rW    s   rW  c                 C   r   )Nc                 S   r   r   rR  rK  r   r   r   r     r   z"np_uniform_impl3.<locals>.<lambda>c                 S   r   r   )r   r   r   rS  rK  r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   rS  rN  r   r   r   r     r   znp_uniform_impl3.<locals>._implr   )rq   rr   r   r   r   r   r   np_uniform_impl3  s4   

r`  c                 C   s8   dd }t | tjtjfrt |tjtjfr|S d S d S )Nc                 S   s@   t   }d}||krd| }|| } }| ||  t||   S )N      ?r   r   r   r   )rq   rr   ucr   r   r   r     s   
z triangular_impl_2.<locals>._implr   )rq   rr   r   r   r   r   triangular_impl_2  s   re  c                 C   N   t | tjtjfr!t |tjtjfr#t |tjtjfr%dd }|S d S d S d S )Nc                 S   s`   || kr| S t   }||  ||   }||kr#d| }d| }|| } }| ||  t||   S r   rb  )rq   rr   moderc  rd  r   r   r   r     s   
 triangular_impl_3.<locals>._implr   )rq   rr   rg  r   r   r   r   triangular_impl_3     ri  c                 C   rf  )Nc                 S   sb   || kr| S t j }||  ||   }||kr$d| }d| }|| } }| ||  t||   S r   )r   r   r   r   )leftrg  rightrc  rd  r   r   r   r     s   

rh  r   )rk  rg  rl  r   r   r   r   ri    rj  c                 C   s`   t |r	dddS t|rdddS t|tjs%t|tjr,t|jtjr.ddd}|S d S d S )Nc                 S      t j| ||S r   )r   r   
triangularrk  rg  rl  r   r   r   r   r     s    z!triangular_impl.<locals>.<lambda>c                 S      t t j| ||S r   )r   r   r   rn  ro  r   r   r   r     s    c                 S   s8   t |}|j}t|jD ]}t j| ||||< q|S r   )r   r   r   r   r   r   rn  )rk  rg  rl  r   r   r   rU   r   r   r   r     s
   
ztriangular_impl.<locals>._implr   r   )rk  rg  rl  r   r   r   r   r   triangular_impl  s   


rq  c                 C   s6   t | tjtjfrt |tjtjfrttjS d S d S r   )ry   r   r   rz   _gammavariate_implr   alphabetar   r   r   gammavariate_impl  
   
rv  c                 C   r   )Nc                 S   r   r   r   r   gammashaper   r   r   r     r   z%ol_np_random_gamma1.<locals>.<lambda>r   rz  r   r   r   ol_np_random_gamma1  s   r|  c                    sL   t | tjtjfr"t |tjtjfr$tttjj  fdd}|S d S d S )Nc                    r   r   r   )r{  r   rw   r   r   rx        
z!ol_np_random_gamma2.<locals>.impl)ry   r   r   rz   r   rr  r   r   )r{  r   rx   r   rw   r   ol_np_random_gamma2     r~  c                    r   )Nc                    s  dt d }| dks|dkrtd| dkrvt d|  d }| t d }| | }	   }d|  k r9d	k s;n q+d   }t |d|  | }| t | }	|| | }
|||  |	 }|| d|
  dksq|t |
kru|	| S q,| dkrt d    | S 	   }t j|  t j }|| }|dkr|d|   }	n
t || |   }	  }|dkr||	| d  kr	 |	| S n|t |	 kr	 |	| S q)
z1Gamma distribution.  Taken from CPython.
        r   g      @r   z*gammavariate: alpha and beta must be > 0.0r   g      @r=   gHz>gP?)r   r   r#  r   expe)rt  ru  SG_MAGICCONSTainvbbbcccu1u2r  r   zr  rc  r_   pr   r   r   r   $  sL   
"z!_gammavariate_impl.<locals>._implr   r   r   r   r   r   rr  #  s   7rr  c                 C   Z   t |rdd S t|rdd S t|tjs#t|tjr)t|jtjr+dd }|S d S d S )Nc                 S   r   r   rx  r{  r   r   r   r   r   r   a  r   zgamma_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   ry  r  r   r   r   r   d  r   c                 S   r   r   )r   r   r   r   r   r   ry  )r{  r   r   r   r   rU   r   r   r   r   h  r   zgamma_impl.<locals>._implr   )r{  r   r   r   r   r   r   
gamma_impl^  r   r  c                 C   Z   t |rdd S t|rdd S t|tjs#t|tjr)t|jtjr+dd }|S d S d S )Nc                 S      t j| S r   r   r   standard_gammar{  r   r   r   r   r   t  r  z%standard_gamma_impl.<locals>.<lambda>c                 S      t t j| S r   )r   r   r   r  r  r   r   r   r   w  rC  c                 S   4   t |}|j}t|jD ]
}t j| ||< q|S r   )r   r   r   r   r   r   r  )r{  r   r   r   rU   r   r   r   r   {  
   
z"standard_gamma_impl.<locals>._implr   )r{  r   r   r   r   r   standard_gamma_implq  r   r  c                 C   s6   t | tjtjfrt |tjtjfrttjS d S d S r   )ry   r   r   rz   _betavariate_implr   gammavariaters  r   r   r   betavariate_impl  rw  r  c                    sL   t | tjtjfr"t |tjtjfr$tttjj  fdd}|S d S d S )Nc                    r   r   r   rB  rw   r   r   rx     r}  zol_np_random_beta.<locals>.impl)	ry   r   r   rz   r   r  r   r   ry  )r^   r_   rx   r   rw   r   ol_np_random_beta  r  r  c                    r   )Nc                    s(    | d}|dkrdS || |d  S )z0Beta distribution.  Taken from CPython.
        r   r   r   )rt  ru  rV   ry  r   r   r     s   
z _betavariate_impl.<locals>._implr   )ry  r   r   r  r   r    s   
r  c                 C   r  )Nc                 S   r   r   )r   r   ru  r^   r_   r   r   r   r   r     r   zbeta_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   ru  r  r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   ru  )r^   r_   r   r   r   rU   r   r   r   r     r   zbeta_impl.<locals>._implr   )r^   r_   r   r   r   r   r   	beta_impl     r  c                 C      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ry   r   r   )r  r   r   r   r   expovariate_impl  s   
r  c                 C   "   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   r  )Nc                 S   r  r   )r   r   exponentialr   r   r   r   r   r     r  z"exponential_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   r  r  r   r   r   r     rC  c                 S   r  r   )r   r   r   r   r   r   r  r   r   r   r   rU   r   r   r   r     r  r  r   r   r   r   r   r   r   r    r   c                  C      dd } | S )Nc                   S   s   t dtj   S r   r  r   r   r   r   r        r  r   r   r   r   r   r    s   c                 C   r   )Nc                 S   r   r   )r   r   standard_exponentialr   r   r   r   r     r   z+standard_exponential_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r   r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r  r   r   r   r   r     r   z(standard_exponential_impl.<locals>._implr   r   r   r   r   standard_exponential_impl  s   
r  c                   C   r   )Nc                   S   r   r   r   r   	lognormalr   r   r   r   r      r   z$np_lognormal_impl0.<locals>.<lambda>r   r   r   r   r   np_lognormal_impl0  rU  r  c                 C   r   )Nc                 S   r   r   r  meanr   r   r   r     r   z%np_log_normal_impl1.<locals>.<lambda>r   r  r   r   r   np_log_normal_impl1  r   r  c                    sH   t | tjtjfr t |tjtjfr"tttjj  fddS d S d S )Nc                    r   r   r   r  r   rw   r   r   r     r   z%np_log_normal_impl2.<locals>.<lambda>)	ry   r   r   rz   r   _lognormvariate_implr   r   r   r  r   rw   r   np_log_normal_impl2	  s   r  c                 C   r  )Nc                 S   r   r   r  r  r   r   r   r   r   r     r   z lognormal_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r  r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r  )r  r   r   r   r   rU   r   r   r   r     r   zlognormal_impl.<locals>._implr   )r  r   r   r   r   r   r   lognormal_impl  r   r  c                    s:   t | tjrt |tjrtttj  fddS d S d S )Nc                    r   r   r   r   rw   r   r   r   (  r   z%lognormvariate_impl.<locals>.<lambda>)ry   r   r   r   r  r   gaussr   r   rw   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  +  r   r  c                 C   r  )Nc                 S   s   dt    }d|d|    S )z)Pareto distribution.  Taken from CPython.r   )r   )rt  rc  r   r   r   r   2  s   z!paretovariate_impl.<locals>._implr  )rt  r   r   r   r   paretovariate_impl/  s   r  c                 C   r  )Nc                 S   s"   dt j  }d|d|    d S )Nr   r=   r   r^   rc  r   r   r   r   >     pareto_impl.<locals>._implr  r^   r   r   r   r   pareto_impl;  s   r  c                 C   r  )Nc                 S   r  r   )r   r   paretor^   r   r   r   r   r   I  r  zpareto_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   r  r  r   r   r   r   L  rC  c                 S   r  r   )r   r   r   r   r   r   r  r^   r   r   r   rU   r   r   r   r   P  r  r  r   r^   r   r   r   r   r   r  F  r   c                 C   8   t | tjtjfrt |tjtjfrdd }|S d S d S )Nc                 S   s$   dt    }| t| d|   S )z*Weibull distribution.  Taken from CPython.r   )r   r   r   )rt  ru  rc  r   r   r   r   ]  s   z"weibullvariate_impl.<locals>._implr   )rt  ru  r   r   r   r   weibullvariate_implY  s   r  c                 C   r  )Nc                 S   s"   dt j  }t| d|   S r   r   r   r   r   r  r   r   r   r   i  r  zweibull_impl.<locals>._implr   r  r   r   r   weibull_implf  s   r  c                 C   r  )Nc                 S   r  r   )r   r   weibullr  r   r   r   r   t  r  zweibull_impl2.<locals>.<lambda>c                 S   r  r   )r   r   r   r  r  r   r   r   r   w  rC  c                 S   r  r   )r   r   r   r   r   r   r  r  r   r   r   r   {  r  zweibull_impl2.<locals>._implr   r  r   r   r   weibull_impl2q  r   r  c                 C   s*   t | tjrt |tjrttjS d S d S r   )ry   r   r   _vonmisesvariate_implr   r   kappar   r   r   vonmisesvariate_impl  s   
r  c                 C   s,   t | tjrt |tjrttjjS d S d S r   )ry   r   r   r  r   r   r  r   r   r   r    s   c                    r   )Nc                    s   |dkrdt j    S d| }|t d||   }	   }t t j| }|||  }  }|d||  k sC|d| t | krDnqd| }|| d||   }	  }
|
dkrh| t |	 dt j  }|S | 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   ra  r   )r   pir   cosr  acos)r   r  sr  r  r  dr  qr   u3thetar   r   r   r     s(   &	z$_vonmisesvariate_impl.<locals>._implr   r  r   r   r   r    s   (r  c                 C   r  )Nc                 S   r   r   )r   r   vonmisesr   r  r   r   r   r   r     r   zvonmises_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r  r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r  )r   r  r   r   r   rU   r   r   r   r     r   zvonmises_impl.<locals>._implr   )r   r  r   r   r   r   r   vonmises_impl  r   r  c                 C   2   t | tjrt |tjtjfrdd }|S d S d S )Nc                 S   s\  | dk rt dd|  krdkst d t d|dkr dS |dkr&| S |dk}|r0d| }d| }d}||  }|dkrT|d	K }| d	L } ||  }| dksPJ |dks>| | }t| |d
t|| d   }d}|dkrd}	tj }
|}|	|kr|
|kr||r| |	 n|	7 }|d8 }n|
|8 }
|	d7 }	| |	 d | | |	|  }|	|ks{|dksn|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]ra  r=   gx0 r?         $@)r#  minr   r   r   r   )r  r  Zflippedr  ZnitersqnZnp_prodboundrs   XUZpxr   r   r   r     sP    
binomial_impl.<locals>._implry   r   rz   r   r  r  r   r   r   r   binomial_impl  s   1r  c                 C   r  )Nc                 S   r   r   )r   r   binomialr  r  r   r   r   r   r   
  r   zbinomial_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r  r   r   r   r     r   c                 S   s<   t j|t jd}|j}t|jD ]}t j| |||< q|S rM  )r   r   intpr   r   r   r   r  )r  r  r   r   r   rU   r   r   r   r     s
   r  r   )r  r  r   r   r   r   r   r    r  c                 C   r  )Nc                 S   s   dt j| d  S Nr   r  )dfr   r   r   r        zchisquare_impl.<locals>._implr   r  r   r   r   r   chisquare_impl  s   r  c                 C   r  )Nc                 S   r  r   r   r   	chisquarer  r   r   r   r   r   '  r  z!chisquare_impl2.<locals>.<lambda>c                 S   r  r   )r   r   r   r  r  r   r   r   r   )  rC  c                 S   r  r   )r   r   r   r   r   r   r  r  r   r   r   rU   r   r   r   r   -  r  zchisquare_impl2.<locals>._implr   r  r   r   r   r   r   chisquare_impl2$     r  c                 C   r  )Nc                 S   s    t j| | t j||   S r   r  )dfnumdfdenr   r   r   r   :  s   f_impl.<locals>._implr   )r  r  r   r   r   r   f_impl6     r  c                 C   s   t | tjtjfrt |tjtjfrt|rdd S t | tjtjfr4t |tjtjfr4t|r4dd S t |tjsGt |tjrMt |jtjrOdd }|S d S d S )Nc                 S   r   r   )r   r   r   r  r  r   r   r   r   r   F  r   zf_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   r   r  r   r   r   r   K  r   c                 S   r   r   )r   r   r   r   r   r   r   )r  r  r   r   r   rU   r   r   r   r   O  r   r  r   )r  r  r   r   r   r   r   r  A  s(   c                 C   r  )Nc                 S   s   | dks| dkrt dd|  }| dkr7td}|  }}tj }||kr5||9 }||7 }|d7 }||ks%|S ttdtj  t| S )Nr   r   z geometric(): p outside of (0, 1]gUUUUUU?r=   )r#  rL  r   r   r   ceilr   )r  r  r  sumprodr  r   r   r   r   [  s    
geometric_impl.<locals>._implr   )r  r   r   r   r   geometric_implX  s   r  c                 C   r  )Nc                 S   r  r   )r   r   	geometricr  r   r   r   r   r   s  r  z geometric_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   r  r  r   r   r   r   v  rC  c                 S   :   t j|t jd}|j}t|jD ]
}t j| ||< q|S rM  )r   r   int64r   r   r   r   r  r  r   r   r   rU   r   r   r   r   z  
   r   r   r  r   r   r   r   r   r  p  r   c                 C   r  )Nc                 S   s(   dt j  }| |tt|   S r   r  r   r   r  r   r   r   r     s   zgumbel_impl.<locals>._implr   )r   r   r   r   r   r   gumbel_impl  r  r
  c                 C   r  )Nc                 S   r   r   )r   r   gumbelr   r   r   r   r     r   zgumbel_impl3.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r   r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r  r   r   r   r   r     r   zgumbel_impl3.<locals>._implr   r   r   r   r   gumbel_impl3  r   r  c                 C   rf  )Nc                 S   s   t |t |  t | }tt|| }|}t |}|dkr=|dkr=|ttj |||   8 }|d8 }|dkr=|dks!t || }| |krMt || S |S )z'Numpy's algorithm for hypergeometric().r   r   r=   )rL  floatr  r   floorr   r   )ngoodnbadnsampleZd1Zd2YKZr   r   r   r     s    "hypergeometric_impl.<locals>._implr   )r  r  r  r   r   r   r   hypergeometric_impl  s   r  c                 C   sZ   t |rdd S t|rdd S t|tjs#t|tjr)t|jtjr+dd }|S d S d S )Nc                 S   rm  r   )r   r   hypergeometricr  r  r  r   r   r   r   r     r:   z%hypergeometric_impl.<locals>.<lambda>c                 S   rp  r   )r   r   r   r  r  r   r   r   r     r  c                 S   s>   t j|t jd}|j}t|jD ]}t j| ||||< q|S rM  )r   r   r  r   r   r   r   r  )r  r  r  r   r   r   rU   r   r   r   r     s
   r  r   )r  r  r  r   r   r   r   r   r    s   c                   C   r   )Nc                   S   r   r   r   r   laplacer   r   r   r   r     r   zlaplace_impl0.<locals>.<lambda>r   r   r   r   r   laplace_impl0  rU  r  c                 C   r   )Nc                 S   r   r   r  r   r   r   r   r     r   zlaplace_impl1.<locals>.<lambda>r   r   r   r   r   laplace_impl1  r   r  c                 C   0   t | tjtjfrt |tjtjfrtS d S d S r   )ry   r   r   rz   laplace_implr   r   r   r   laplace_impl2  
   r  c                 C   r  )Nc                 S   r   r   r  r   r   r   r   r     r   zlaplace_impl3.<locals>.<lambda>c                 S   r   r   )r   r   r   r  r   r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r  r   r   r   r   r     r   zlaplace_impl3.<locals>._implr   r   r   r   r   laplace_impl3  r   r!  c                 C   sB   t j }|dk r| |t||   S | |td| |   S )Nra  r   r  r	  r   r   r   r    s   
r  c                   C   r   )Nc                   S   r   r   r   r   logisticr   r   r   r   r     r   z logistic_impl0.<locals>.<lambda>r   r   r   r   r   logistic_impl0  rU  r$  c                 C   r   )Nc                 S   r   r   r"  r   r   r   r   r     r   z logistic_impl1.<locals>.<lambda>r   r   r   r   r   logistic_impl1   r   r%  c                 C   r  r   )ry   r   r   rz   logistic_implr   r   r   r   logistic_impl2  r   r'  c                 C   r  )Nc                 S   r   r   r"  r   r   r   r   r     r   z logistic_impl3.<locals>.<lambda>c                 S   r   r   )r   r   r   r#  r   r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   r#  r   r   r   r   r     r   zlogistic_impl3.<locals>._implr   r   r   r   r   logistic_impl3  r   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rBtdt|t|  S ||krHdS dS )z"Numpy's algorithm for logseries().r   r   z logseries(): p outside of (0, 1]r=   r?   )r#  r   r   r   r   r  r  )r  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   )ry   r   r   rz   r*  )r  r   r   r   logseries_impl:  s   r+  c                 C   r  )Nc                 S   r  r   )r   r   	logseriesr  r   r   r   r   C  r  z logseries_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   r,  r  r   r   r   r   E  rC  c                 S   r  rM  )r   r   r  r   r   r   r   r,  r  r   r   r   r   I  r  zlogseries_impl.<locals>._implr   r  r   r   r   r+  @  r  c                 C   r  )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   ry  poisson)r  r  r  r   r   r   r   V  s   z%negative_binomial_impl.<locals>._implr  r  r   r   r   negative_binomial_implR  s   r.  c                   C   r   )Nc                   S      t jdS r   r   r   r-  r   r   r   r   r   c  r  zpoisson_impl0.<locals>.<lambda>r   r   r   r   r   poisson_impl0a  rU  r1  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}	|	|	, t
tttf}
t|jj|
d}||||f}||| || W d    n1 s^w   Y  || || tjjtj  fdd	}| ||||}||| || || ||S )
Nrp   r   bbcontr  rG   r  Znumba_poisson_ptrsc                    sT   | dk rt d| dkrdS  |  }d}d}	  }||9 }||kr%|S |d7 }q)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=   r#  )lamZenlamr  r  r  _expr   r   r   poisson_impl  s   
zCpoisson_impl1.<locals>._impl.<locals>.codegen.<locals>.poisson_impl)r2   r   r   rn   r  Zfcmp_orderedr   r   r[   r"  r   r    r!   rD   r"   r%   rP   r  r  r   r   r   r  r   rL   )r&   r'   r   rE   r8   Zretptrr2  r  r4  Zbig_lamr*   r+   rp   r7  Zlam_preprocessorr5  r   r   m  s:   










z-poisson_impl1.<locals>._impl.<locals>.codegen)r   r   r   r  )r   r4  r   r   r8  r   r   i  s   7zpoisson_impl1.<locals>._implc                    ru   r   r   r4  r   r   r   r     r   zpoisson_impl1.<locals>.<lambda>r   r9  r   r   r   poisson_impl1f  s
   
;r:  c                 C   s   t | tjtjfrt|rdd S t | tjtjfr"t|r"dd S t | tjtjfrDt |tjs>t |tjrFt |jtjrHdd }|S d S d S d S )Nc                 S   r  r   r0  r4  r   r   r   r   r     r  zpoisson_impl2.<locals>.<lambda>c                 S   r  r   )r   r   r   r-  r;  r   r   r   r     rC  c                 S   r  rM  )r   r   r  r   r   r   r   r-  )r4  r   r   r   rU   r   r   r   r     r  zpoisson_impl2.<locals>._implr   )r4  r   r   r   r   r   poisson_impl2  s    

r<  c                 C   r  )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  rv   r   r   r   r     s
   power_impl.<locals>._implr   r  r   r   r   
power_impl     r?  c                 C   r  )Nc                 S   r  r   )r   r   powerr  r   r   r   r     r  zpower_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   rA  r  r   r   r   r     rC  c                 S   r  r   )r   r   r   r   r   r   rA  r  r   r   r   r     r  r>  r   r  r   r   r   r?    r   c                   C   r   )Nc                   S   r/  r   r   r   rayleighr   r   r   r   r     r  z rayleigh_impl0.<locals>.<lambda>r   r   r   r   r   rayleigh_impl0  rU  rD  c                 C   r  )Nc              	   S   s2   | dkrt d| tdtdtj    S )Nr   zrayleigh(): scale <= 0r   r   )r#  r   r   r   r   r   r  r   r   r   rx     s   "zrayleigh_impl1.<locals>.implr   )r   rx   r   r   r   rayleigh_impl1     rE  c                 C   r  )Nc                 S   r  r   rB  r  r   r   r   r     r  z rayleigh_impl2.<locals>.<lambda>c                 S   r  r   )r   r   r   rC  r  r   r   r   r     rC  c                 S   r  r   )r   r   r   r   r   r   rC  r  r   r   r   r     r  zrayleigh_impl2.<locals>._implr   r  r   r   r   rayleigh_impl2  r   rG  c                  C   r  )Nc                   S   s   t j t j  S r   r   r   r   r   r   r     r  zcauchy_impl.<locals>._implr   r   r   r   r   cauchy_impl   s   rH  c                 C   r   )Nc                 S   r   r   )r   r   standard_cauchyr   r   r   r   r     r   z&standard_cauchy_impl.<locals>.<lambda>c                 S   r   r   )r   r   r   rI  r   r   r   r   r     r   c                 S   r   r   )r   r   r   r   r   r   rI  r   r   r   r   r     r   z#standard_cauchy_impl.<locals>._implr   r   r   r   r   standard_cauchy_impl  r   rJ  c                 C   r  )Nc                 S   s:   t j }t j| d }t| d | t| }|S r  )r   r   r   r  r   r   )r  NGr  r   r   r   r     s   
zstandard_t_impl.<locals>._implr   r  r   r   r   standard_t_impl  r@  rM  c                 C   r  )Nc                 S   r  r   )r   r   
standard_tr  r   r   r   r   *  r  z"standard_t_impl2.<locals>.<lambda>c                 S   r  r   )r   r   r   rN  r  r   r   r   r   ,  rC  c                 S   r  r   )r   r   r   r   r   r   rN  r  r   r   r   r   0  r  zstandard_t_impl2.<locals>._implr   r  r   r   r   standard_t_impl2'  r  rO  c                 C   s,   t | tjrt |tjrdd }|S 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rC|S | |  | S )Nr   zwald(): mean <= 0zwald(): scale <= 0r      )r#  r   r   r   r   r   )r  r   Zmu_2lr  r  r  r   r   r   r   <  s   
&
zwald_impl.<locals>._implr  )r  r   r   r   r   r   	wald_impl9  s   rQ  c                 C   r  )Nc                 S   r   r   )r   r   waldr  r   r   r   r   r   r   Q  r   zwald_impl2.<locals>.<lambda>c                 S   r   r   )r   r   r   rR  rS  r   r   r   r   T  r   c                 S   r   r   )r   r   r   r   r   r   rR  )r  r   r   r   r   rU   r   r   r   r   X  r   zwald_impl2.<locals>._implr   )r  r   r   r   r   r   r   
wald_impl2N  r   rT  c                 C   r  )Nc                 S   s   | dkrt d| d }d| }	 dtj  }tj }tt|d|  }|tks0|dk r1qdd|  | }|dkrO|| |d  |d  || krO|S q)Nr   zzipf(): a <= 1r   r=   g      )r#  r   r   rL  r   r  r   )r^   Zam1r_   r  r)  r  Tr   r   r   r   d  s   
(zipf_impl.<locals>._implr  r  r   r   r   	zipf_impla  s   rW  c                 C   r  )Nc                 S   r  r   )r   r   zipfr  r   r   r   r   {  r  zzipf_impl.<locals>.<lambda>c                 S   r  r   )r   r   r   rX  r  r   r   r   r   ~  rC  c                 S   r  rM  )r   r   r  r   r   r   r   rX  r  r   r   r   r     r  rV  r   r  r   r   r   rW  x  r   c                    sb   t | tjsd}t||dkrtjj n|dkrtj | jdkr) fdd}|S  fdd}|S )Nz1The argument to shuffle() should be a buffer typer   r   r=   c                    sT   | j d d }|dkr( |d }| | | | | |< | |< |d8 }|dksd S d S r<   rz  r   ijrandr   r   rx     s   zdo_shuffle_impl.<locals>.implc                    s`   | j d d }|dkr. |d }t| | t| | | |< | |< |d8 }|dksd S d S r<   )r{  r   copyrY  r\  r   r   rx     s   &)	ry   r   ZBufferr   r   r   rF  r.  ndim)r   rngr  rx   r   r\  r   do_shuffle_impl  s   

ra  c                 C   
   t | dS r   ra  r   r   r   r   shuffle_impl     
rd  c                 C   rb  r}   rc  r   r   r   r   rd    re  c                 C   s8   t | tjrdd }|S t | tjrdd }|S d }|S )Nc                 S   s   t | }t j| |S r   )r   aranger   shuffle)r   rV   r   r   r   permutation_impl  s   
z*permutation_impl.<locals>.permutation_implc                 S   s   |   }tj| |S r   )r^  r   r   rg  )r   Zarr_copyr   r   r   rh    s   )ry   r   rz   Array)r   rh  r   r   r   rh    s   rh  c                  G   $   t | dkrdd }|S dd }|S )Nr   c                  W   r   r   r   r   r   r   r   	rand_impl  r}  zrand.<locals>.rand_implc                  W   s   t j| S r   r   r   r   r   r   rk    r   len)r   rk  r   r   r   r]    
   r]  c                  G   rj  )Nr   c                  W   r   r   r   r   r   r   r   
randn_impl  r}  zrandn.<locals>.randn_implc                  W   r  r   r   r   r   r   r   ro    r   rl  )r   ro  r   r   r   randn  rn  rp  Tc                    s   t | tjr#| jdksJ | j tdd tdd }tdd n#t | tjr?tj tdd td	d }td
d nt	d| f |d tj
fv rWdfdd	}|S d fdd	}|S )Nr=   c                 S   s   t | S r   rl  rv   r   r   r   get_source_size  rU  zchoice.<locals>.get_source_sizec                 S   s   |   S r   )r^  rv   r   r   r   copy_source  rU  zchoice.<locals>.copy_sourcec                 S   s   | | S r   r   r^   Za_ir   r   r   getitem  rU  zchoice.<locals>.getitemc                 S   s   | S r   r   rv   r   r   r   rq       c                 S   s
   t | S r   )r   rf  rv   r   r   r   rr    re  c                 S   r  r   r   rs  r   r   r   rt    ru  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   rE  )r^   r   replacer  rZ  )rq  rt  r   r   choice_impl  s   
zchoice.<locals>.choice_implc           	         s   | }|r(t | }|j}tt|D ]}t jd|}| |||< q|S t | }|j|kr7tdt j	| }|j}tt|D ]}|| ||< qF|S )zO
            choice() implementation returning an array of samples
            r   z@Cannot take a larger sample than population when 'replace=False')
r   r   r   r   rm  r   rF  r   r#  permutation)	r^   r   rv  r  r   flrZ  r[  Z
permuted_ar   rq  rt  r   r   rw    s    
NT)ry   r   ri  r_  r   r   rz   r   r  r   r   )r^   r   rv  rr  rw  r   rz  r   choice  s2   



(r|  c                    s   t j tdd t| tjstd| f t|tjtjfs&td|f |d tj	fv r7d
 fdd	}|S t|tjrGd
 fdd	}|S t|tj
rWd
 fdd	}|S td	|f )Nc                 S   s   |j }|j}t|}td||D ]=}d}| }td|d D ]#}	||	 }
tj||
|  }|||	 < ||8 }|dkr< n||
8 }q|dkrM|||| d < qd S )Nr   r   r=   )r   r   rm  r   r   r   r  )r  pvalsr   ry  szplenrZ  Zp_sumZn_experimentsr[  Zp_jZn_jr   r   r   multinomial_innerB  s"   
z&multinomial.<locals>.multinomial_innerz7np.random.multinomial(): n should be an integer, got %szEnp.random.multinomial(): pvals should be an array or sequence, got %sc                    s    t t| }| || |S )z5
            multinomial(..., size=None)
            r   Zzerosrm  r  r}  r   r   r   r  r   r   multinomial_implj  s   z%multinomial.<locals>.multinomial_implc                    s$   t |t|f }| || |S )z4
            multinomial(..., size=int)
            r  r  r  r   r   r  s  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 %sr   )r   r  r   ry   r   rz   r   Sequenceri  r   Z	BaseTuple)r  r}  r   r  r   r  r   multinomial=  s.   
r  c                 C   r  )Nc                 S   s   t t| }t| | |S r   r   r   rm  dirichlet_arr)rt  r   r   r   r   dirichlet_impl     
!dirichlet.<locals>.dirichlet_impl)ry   r   r  ri  )rt  r  r   r   r   	dirichlet  rF  r  c                 C   s   t | tjtjfstd| f |d tjfv st|r"ddd}|S t |tjr/ddd}|S t |tjrCt |j	tjrCddd}|S td| )NzCnp.random.dirichlet(): alpha should be an array or sequence, got %sc                 S   s   t t| }t| | |S r   r  rt  r   r   r   r   r   r    r  r  c                 S   s    t |t| f}t| | |S )z2
            dirichlet(..., size=int)
            r  r  r   r   r   r    s   
c                 S   s"   t |t| f }t| | |S )z4
            dirichlet(..., size=tuple)
            r  r  r   r   r   r    s   
zJnp.random.dirichlet(): size should be int or tuple of ints or None, got %sr   )
ry   r   r  ri  r   r   r   rz   r   r   )rt  r   r  r   r   r   r    s,   


c           
      C   s   t | D ]
}|dkrtdqt| }|j}|j}td||D ]5}d}t| D ]\}}	tj	|	d||| < ||||  
 7 }q't| D ]\}}	|||   |  < qEqd S )Nr   zdirichlet: alpha must be > 0.0r=   )iterr#  rm  r   r   r   	enumerater   r   ry  item)
rt  r   Za_valZa_lenr   r   rZ  Znormr  r*  r   r   r   r    s    r  c                 C   r  )Nc                 S      t | | t| |S r   #validate_noncentral_chisquare_inputnoncentral_chisquare_singler  noncr   r   r   noncentral_chisquare_impl     

7noncentral_chisquare.<locals>.noncentral_chisquare_implr   )r  r  r  r   r   r   noncentral_chisquare  r  r  c                 C   sr   |d t jfv rddd}|S t|rddd}|S t|t js,t|t jr3t|jt jr3ddd}|S td| )Nc                 S   r  r   r  r  r  r   r   r   r   r    r  r  c                 S   s   t | | tt| |S r   )r  r   r   r  r  r   r   r   r    s   
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   rU   r   r   r   r    s   

zUnp.random.noncentral_chisquare(): size should be int or tuple of ints or None, got %sr   )r   r   r   ry   rz   r   r   r   )r  r  r   r  r   r   r   r    s$   


c                 C   sl   t |rt jS d| k r$t j| d }t j t | }|||  S t j|d }t j| d|  S )Nr=   r   r?   )r   isnannanr   r  r   r   r-  )r  r  Zchi2r  rZ  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 < 0r3  r  r   r   r   r  	  s
   r  r   r{  )__doc__r   r   numpyr   Zllvmliter   Znumba.core.cgutilsr   r   Znumba.core.extendingr   r   r   Znumba.core.imputilsr   r	   r
   Znumba.core.typingr   Z
numba.corer   r   Znumba.core.errorsr   Znumba.np.random._constantsr   registrylowerr@  r   rn   r   r  r[   rK  r   rN   ZLiteralStructType	ArrayTypeZrnd_state_tZPointerTyper    r,   r0   r2   r3   r9   r>   r@   rB   rF   rW   r`   rt   r   r|   r{   r   Zrandom_samplesampleZranfr   r   r  normalvariater   r   r   r   r   r   r   r   r   r   r   getrandbitsr  r+  r.  r1  r5  r7  rA  rF  rD  rH  rJ  rQ  rS  rT  r[  r\  rW  r`  rn  re  ri  rq  r  rv  r  ry  r|  r~  rr  r  r  betavariater  ru  r  r  r  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+  Znegative_binomialr.  r-  r1  r:  r<  rA  r?  rC  rD  rE  rG  rI  rH  rJ  rN  rM  rO  rR  rQ  rT  rX  rW  ra  rg  rd  rx  rh  r]  rp  r|  r  r  r  r  r  r  r   r   r   r   <module>   s.   



1











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












,



7


















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

