o
    Y۷imO                     @   s  d Z ddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZmZmZ edd Zedd	 Zed
d Z edd Z!edd Z"edd Z#edd Z$edd Z%edd Z&edd Z'edd Z(edd Z)edd Z*ed d! Z+ed"d# Z,ed$d% Z-ed&d' Z.ed(d) Z/ed*d+ Z0ed,d- Z1ed.d/ Z2ed0d1 Z3ed2d3 Z4ed4d5 Z5ed6d7 Z6ed8d9 Z7ed:d; Z8ed<d= Z9ed>d? Z:ed@dA Z;edBdC Z<edDdE Z=edFdG Z>edHdI Z?edJdK Z@edLdM ZAedNdO ZBedPdQ ZCedRdS ZDedTdU ZEedVdW ZFedXdY ZGedZd[ ZHed\d] ZIed^d_ ZJed`da ZKdS )bzU
Algorithmic implementations for generating different types
of random distributions.
    N)register_jitable)	wi_double	ki_doubleziggurat_nor_r	fi_doublewi_floatki_floatziggurat_nor_inv_r_fziggurat_nor_r_ffi_float	we_double	ke_doubleziggurat_exp_r	fe_doublewe_floatke_floatziggurat_exp_r_ffe_float	INT64_MAXziggurat_nor_inv_r)next_double
next_floatnext_uint32next_uint64c                 C   
   t | S N)nplog1px r    W/home/ubuntu/vllm_env/lib/python3.10/site-packages/numba/np/random/new_distributions.pynp_log1p      
r"   c                 C   s   t t | S r   )r   r   float32r   r    r    r!   	np_log1pf      r%   c                 C   s   |t dt|   S N       @)r   sqrtrandom_standard_exponential)bitgenmoder    r    r!   random_rayleigh#   s   r-   c                 C   r   r   )r   expm1r   r    r    r!   np_expm1(   r#   r/   c                 C   s   	 t | }|d@ }|dL }|d@ }|d? d@ }|t|  }|d@ r$| }|t| k r,|S |dkr]	 t tt|   }tt|   }|| || kr\|d? d@ rXt|  S t| S q1t|d  t|  t|  t|  t	d| | k rz|S q)N         l    r   g      )
r   r   r   r   r   r   r   r   r   expr+   ridxsignrabsr   xxyyr    r    r!   random_standard_normal-   s:   
	r;   c                 C   s,  	 t | }|d@ }|d? d@ }|d? d@ }tt|t|  }|d@ r(| }|t| k r0|S |dkrq	 tt tt|   }ttt|   }t|| t|| krp|d? d@ ritt|  S tt| S q5t	|d  t	|  t|  t	|  tt
td | | k r|S q)Nr0   r1   r2   	   i r         ?)r   r   r$   r   r   r	   r%   r   r
   r   r3   r4   r    r    r!   random_standard_normal_fJ   s8   
r>   c                 C   s   	 t | }|dL }|d@ }|dL }|t|  }|t| k r|S |dkr,ttt|   S t|d  t|  t|  t|  t| k rF|S q)Nr0      r1   r2   r   )	r   r   r   r   r"   r   r   r   r3   r+   rir6   r   r    r    r!   r*   f   s"   
r*   c                 C   s   	 t | }|dL }|d@ }|dL }tt|t|  }|t| k r%|S |dkr8ttttt|   S t|d  t|  t|  t|  tt	t| k rX|S q)Nr0   r1   r2   r   )
r   r   r$   r   r   r   r%   r   r   r3   r@   r    r    r!   random_standard_exponential_fx   s&   rB   c                 C   s   t t|   S r   )r"   r   r+   r    r    r!   random_standard_exponential_inv   r&   rD   c                 C   s   t t dt|   S N      ?)r   logr$   r   rC   r    r    r!   !random_standard_exponential_inv_f      rH   c                 C   sJ  |dkrt | S |dkrdS |dk rO	 t| }t | }|d| kr/t|d| }||kr.|S ntd| |  }td| ||  d| }||| krN|S q|d }dtd|  }	 	 t| }d||  }|dkrmnq^|| | }t| }|dd||  ||   k r|| S t|d| | |d| t|   k r|| S q])NrF           r0   UUUUUU?r<   m{?r=   )r*   r   powr   rG   r)   r;   )r+   shapeUVXYbcr    r    r!   random_standard_gamma   sD   ,rU   c           	   
   C   s  t d}t |}||krt| S |t dkrt dS ||k rt	 t| }t| }||| krEt t|t || }||krD|S n.t t t || |  }t t|| t ||  t || }||| krs|S q#||t d  }t |t t t d|  }	 	 t t| }t |||  }|t dkrnqt || | }t| }||t d||  ||   k rt || S t |t d| | ||| t |   k rt || S q)NrF   rJ   r0         @g      "@rL   r=   )r   r$   rB   r   rM   rG   r)   r>   )	r+   rN   f32_onerO   rP   rQ   rR   rS   rT   r    r    r!   random_standard_gamma_f   sP   


 $"rX   c                 C      |t |  }|| S r   r;   r+   locscalescaled_normalr    r    r!   random_normal      r_   c                 C   s    t |t|  }t || S r   )r   r$   r>   r[   r    r    r!   random_normal_f   s   ra   c                 C   s   |t |  S r   )r*   )r+   r]   r    r    r!   random_exponential   s   rb   c                 C   rY   r   r   )r+   lowerrangescaled_uniformr    r    r!   random_uniform   r`   rg   c                 C   s   |t | | S r   rU   r+   rN   r]   r    r    r!   random_gamma   s   rj   c                 C   s   t |t| | S r   )r   r$   rX   ri   r    r    r!   random_gamma_f  s   rk   c              	   C   s   |dkrc|dkrc	 t | }t | }t|d| }t|d| }|| }|dkrb|dkrb|| dkr5|| S t|| }t|| }	t||	}
||
8 }|	|
8 }	t|tt|t|	  S q	t| |}t| |}|||  S )NrF   r0   rJ   r   )r   rM   r   rG   minr3   rU   )r+   arS   rO   rP   rQ   rR   XpYlogXlogYlogMGaGbr    r    r!   random_beta  s(   
$

rt   c                 C   s   dt | |d  S r'   rh   )r+   dfr    r    r!   random_chisquare      rv   c                 C   s   t | || t | ||  S r   )rv   )r+   dfnumdfdenr    r    r!   random_f%  s   rz   c                 C   s   t | t |  S r   rZ   rC   r    r    r!   random_standard_cauchy+  r&   r{   c                 C   s   t t| | S r   )r/   r*   r+   rm   r    r    r!   random_pareto0  r&   r}   c                 C   s   |dkrdS t t| d| S NrJ   rF   )rM   r*   r|   r    r    r!   random_weibull5  s   r   c                 C   s   t tt|   d| S rE   )rM   r/   r*   r|   r    r    r!   random_power<  rI   r   c                 C   sh   t | }|dkrt | }|dks|dkr#||td| |   }|S |dkr2||t||   }|S )Nr   r=   r(   rJ   r   r   rG   r+   r\   r]   rO   r    r    r!   random_laplaceA  s   r   c                 C   s:   t | }|dkrt | }|dks||t|d|    S r~   r   r   r    r    r!   random_logisticM  s
   r   c                 C   s   t t| ||S r   )r   r3   r_   )r+   meansigmar    r    r!   random_lognormalU  rw   r   c                 C   s2   t | }t| |d }t|d | t| S )N   )r;   rU   r   r)   )r+   ru   numdenomr    r    r!   random_standard_tZ  s   r   c                 C   sn   |d|  }t | }|| | }|||td| | ||     }t| }||||  kr1|S || | S )Nr      )r;   r   r)   r   )r+   r   r]   mu_2lrR   rQ   rO   r    r    r!   random_walda  s   &r   c                 C   sH   d}| }}d| }t | }||kr"||9 }||7 }|d }||ks|S )Nr0   rF   rc   )r+   prQ   sumprodqrO   r    r    r!   random_geometric_searchn  s   r   c                 C   s   t t|  t |  S r   )r   ceilr*   r   r+   r   r    r    r!   random_geometric_inversion{  s   r   c                 C   s   |dkr	t | |S t| |S )NrK   )r   r   r   r    r    r!   random_geometric  s   

r   c                 C   s   |d }t d|}	 dt|  }t| }tt |d| }|tks&|dk r'q	t dd|  |}|| |d  |d  || krB|S q
)NrF   r(   r0   g      )rM   r   r   floorr   )r+   rm   am1rS   rO   rP   rQ   Tr    r    r!   random_zipf  s   
 r   c           
      C   sd   || }|| }|| }|| }|| | }t | }	|	|kr'|t|	|  S |td|	 |  S rE   )r   r   r)   )
r+   leftr,   rightbaseleftbaseratioleftprod	rightprodrO   r    r    r!   random_triangular  s   r   c           	      C   s   g d}| dks| dkrdS | dk rt d|  }nd}| | }d| d|  }d}|d	 }tdd	D ]}||9 }||d
|  7 }q2|| d|  |d t|  | }| dk rotd|d D ]}|t|d  }|d }q_|S )N)
gUUUUUU?gllfgJ?g88Cg$+K?g<ٰj_gAAz?gSˆBg8?g5gGrF   r(   rJ   g      @   r   gdg?r<   r2   r=   r0   )intre   r   rG   )	r   rm   nx0x2lg2pigl0kglr    r    r!   random_loggam  s&   &
r   c                 C   s>   t | }d}d}	 t| }||9 }||kr|d7 }n|S q)Nr   rF   r0   )r   r3   r   )r+   lamenlamrQ   r   rO   r    r    r!   random_poisson_mult  s   
r   c                 C   s  t |}t |}dd|  }dd|  }dd|d   }dd	|d
   }	 t| d }t| }	dt | }
td
| |
 | | | d }|
dkrR|	|krR|S |dk s^|
dk r_|	|
kr_q&t |	t | t ||
|
  |  | ||  t|d  kr|S q')Ngn?g=
ףp=@gh|?5g[	m?g$~?gr?g333333@gr鷯?gB>٬@r   r0   r=   gQ?gQ?r   g9v?)r   r)   rG   r   fabsr   r   )r+   r   slamloglamrS   rm   invalphavrrO   rP   usr   r    r    r!   random_poisson_ptrs  s(   

 (r   c                 C   s(   |dkr	t | |S |dkrdS t| |S )N
   r   )r   r   )r+   r   r    r    r!   random_poisson  s
   

r   c                 C   s   t | |d| | }t| |S )Nr0   )rj   r   )r+   r   r   rR   r    r    r!   random_negative_binomial  s   
r   c                 C   sv   t |rt jS |dkrt| |S d|k r+t| |d }t| t | }|||  S t| |d }t| |d|  S )Nr   r0   r(   r   )r   isnannanrv   r;   r)   r   )r+   ru   noncChi2r   ir    r    r!   random_noncentral_chisquare  s   

r   c                 C   s"   t | ||| }|t| ||  S r   )r   rv   )r+   rx   ry   r   tr    r    r!   random_noncentral_f  s   r   c              	   C   s   t | }	 t| }||krdS t| }t||  }||| kr?ttdt|t|  }|dk s<|dkr=q|S ||krEdS dS )Nr0   rJ   r   )r"   r   r   r.   int64r   rG   )r+   r   r5   rP   rO   r   resultr    r    r!   random_logseries  s   
$r   c           '      C   s,  t |d| }d| }|| | }tt|}ttdt|| |  d|  d }|d }|| }	|| }
ddd|   }||	 ||	|   }|d|d   }|
| |
|  }|d|d   }|dd|   }|||  }|||  }d	}d
 }}	 |d	kr|| | }t| | }t| }||krd}q~tt|||  | }d}q~|dkr||krd}q~|	|| |  }|| d t|| d |  }|dkrd	}q~tt|}d}q~|dkr||krd}q~tt|	t||  }|d
k s|dkrd	}q~|||  | }d}q~|dkr<tt|
t||  }||ks.|dkr1d	}q~|||  | }d}q~|dkrt|| }|dkrX||d d k rXd}q~|| }||d  }d}||k rt	|d |d D ]}||| |  }qrn||krt	|d |d D ]}||| |  }q||krd	}q~d}q~|dkr|| ||d d  d | d  }| | d|  }t|}||| k rd}q~||| krd	}q~|d }|d } |d | }!|| d }"|| }#| |  }$|!|! }%|"|" }&||t| |  || d t|!|"   || t|"| ||    ddddd|$  |$  |$  |$  |  d  ddddd|%  |%  |%  |%  |! d  ddddd|#  |#  |#  |#  | d  ddddd|&  |&  |&  |&  |" d  krd	}q~n|dkr|dkr|| }|S q)NrF   g(\@gffffff@r=   gx&?g     4@g.@r(   r   r   r0      <      2   (   rJ   4   rV   g      ?gUUUUUU?r   g     @g     |@g     `@g     X@g     a@g    MAg     1@)
rl   r   r   r   r)   r   r   rG   absre   )'r+   r   r   r5   r   fmmp1xmxlxrrT   rm   lamllamrp2p3p4caseyr   nrquvr   sFr   rhor   Ax1f1zwr   f2z2w2r    r    r!   random_binomial_btpe1  s&  ,"







,


r   c           
      C   s   d| }t |t | }|| }t||dt || d   }d}|}t| }	|	|krU|d }||kr?d}|}t| }	n|	|8 }	|| d | | ||  }|	|ks.|S )NrF   g      $@r0   r   )r   r3   rG   rl   r)   r   )
r+   r   r   r   qn_npboundrQ   pxrO   r    r    r!   random_binomial_inversion  s"    

r   c                 C   st   |dks|dkr
dS |dkr || dkrt | ||S t| ||S d| }|| dkr2|t | || S |t| || S )Nr   rJ   r=   g      >@rF   )r   r   )r+   r   r   r   r    r    r!   random_binomial  s   r   )L__doc__numpyr   numba.core.extendingr   numba.np.random._constantsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   numba.np.random.generator_corer   r   r   r   r"   r%   r-   r/   r;   r>   r*   rB   rD   rH   rU   rX   r_   ra   rb   rg   rj   rk   rt   rv   rz   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s    T











%
)























!


	




w
