o
    i'                     @   s  d dl Zd dlmZmZmZmZ d dlmZ d dl	m
Z
mZmZmZ d dl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dS )$    N)uint64uint32uint16uint8)register_jitable)
UINT32_MAX
UINT64_MAX
UINT16_MAX	UINT8_MAX)next_uint32next_uint64c                 C   sT   t | }||d? O }||d? O }||d? O }||d? O }||d? O }||d? O }|S )N                   )r   )maxmask r   m/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/np/random/random_methods.pygen_mask   s   r   c                 C   sF   |dkr	|||fS |st | }d}n|dL }|d8 }|d@ dk||fS )Nr      r   )r   )bitgenoffrngbcntbufr   r   r   buffered_bounded_bool   s   
r   c                 C   s0   |s	t | }d}n|dL }|d8 }t|||fS )N   r   r   )r   r   r   r   r   r   r   r   buffered_uint8(      r!   c                 C   s0   |s	t | }d}n|dL }|d8 }t|||fS )Nr   r   )r   r   r    r   r   r   buffered_uint164   r"   r#   c           	      C      t |t d }|dksJ t| ||\}}}t|| }|d@ }||k rHt t| | }||k rHt| ||\}}}t|| }|d@ }||k s1|d? ||fS )a?  
    Generates a random unsigned 8 bit integer bounded
    within a given interval using Lemire's rejection.

    The buffer acts as storage for a 32 bit integer
    drawn from the associated BitGenerator so that
    multiple integers of smaller bitsize can be generated
    from a single draw of the BitGenerator.
    r      r   )r   r!   r   r
   	r   r   r   r   rng_exclnmleftover	thresholdr   r   r   buffered_bounded_lemire_uint8B      r,   c           	      C   r$   )a@  
    Generates a random unsigned 16 bit integer bounded
    within a given interval using Lemire's rejection.

    The buffer acts as storage for a 32 bit integer
    drawn from the associated BitGenerator so that
    multiple integers of smaller bitsize can be generated
    from a single draw of the BitGenerator.
    r     r   )r   r#   r   r	   r&   r   r   r   buffered_bounded_lemire_uint16f   r-   r/   c                 C   s   t |t d }|dksJ tt| t| }|d@ }||k r<t| | }||k r<tt| t| }|d@ }||k s*|d? S )zr
    Generates a random unsigned 32 bit integer bounded
    within a given interval using Lemire's rejection.
    r       r   )r   r   r   r   )r   r   r'   r)   r*   r+   r   r   r   buffered_bounded_lemire_uint32   s   r1   c                 C   s   t |t d }|dksJ t| }t |t | }||k r8t| | }||k r8t| }t |t | }||k s(|t d@ }|d? }|t d@ }|d? }	|| }
|| |
d?  }|t d@ }|d? }|||	 7 }||	 | |d?  }|S )zr
    Generates a random unsigned 64 bit integer bounded
    within a given interval using Lemire's rejection.
    r       r0   r   )r   r   r   )r   r   r'   xr*   r+   Zx0x1Z	rng_excl0Z	rng_excl1Zw0tZw1Zw2m1r   r   r   bounded_lemire_uint64   s*   r7   c                 C   s   t j||d}|dkrt |D ]}|||< q|S |dkrF|dkr3t |D ]
}|t|  ||< q&|S t |D ]}|t| | ||< q8|S |dkr\t |D ]
}|t|  ||< qO|S t |D ]}|t| | ||< qa|S )z_
    Returns a new array of given size with 64 bit integers
    bounded by given interval.
    dtyper   r0   r2   )npemptyndindexr   r1   r   r7   r   lowr   sizer9   outir   r   r   random_bounded_uint64_fill   s(   
	rB   c                 C   s   t j||d}|dkrt |D ]}|||< q|S |dkr/t |D ]
}|t|  ||< q"|S t |D ]}|t| | ||< q4|S )z_
    Returns a new array of given size with 32 bit integers
    bounded by given interval.
    r8   r   r0   )r:   r;   r<   r   r1   r=   r   r   r   random_bounded_uint32_fill   s   
rC   c           
      C      d}d}t j||d}|dkrt |D ]}|||< q|S |dkr:t |D ]}t| ||\}	}}||	 ||< q&|S t |D ]}t| |||\}	}}||	 ||< q?|S )z_
    Returns a new array of given size with 16 bit integers
    bounded by given interval.
    r   r8   r.   )r:   r;   r<   r#   r/   
r   r>   r   r?   r9   r   r   r@   rA   valr   r   r   random_bounded_uint16_fill   s&   
rG   c           
      C   rD   )z^
    Returns a new array of given size with 8 bit integers
    bounded by given interval.
    r   r8   r%   )r:   r;   r<   r!   r,   rE   r   r   r   random_bounded_uint8_fill  s&   
rH   c           
      C   sL   d}d}t j||d}t |D ]}t| ||||\}	}}||	 ||< q|S )z@
    Returns a new array of given size with boolean values.
    r   r8   )r:   r;   r<   r   rE   r   r   r   random_bounded_bool_fill/  s   rI   c                 C   s   | |k rt d|dkr6t|}|s|td8 }t|}| dkr$t| } ||kr,t d| |kr4t ddS ||kr>t d| |krFt ddS )zS
    Check that low and high are within the bounds
    for the given datatype.
    zlow is out of boundsr   r   zhigh is out of boundsz*low is greater than high in given intervalN)
ValueErrorr   )r>   highZendpointlower_boundupper_boundr   r   r   _randint_arg_check=  s&   rN   c                 C   s   |dkrdS t |}t t|}|dkr0t t| |@ }||kr,t t| |@ }||ks t |S t| |@ }||krDt| |@ }||ks:t |S )Nr   r0   )r   r   r   r   )r   Zmax_valr   valuer   r   r   random_interval\  s   rP   ) numpyr:   Znumbar   r   r   r   Znumba.core.extendingr   Znumba.np.random._constantsr   r   r	   r
   Znumba.np.random.generator_corer   r   r   r   r!   r#   r,   r/   r1   r7   rB   rC   rG   rH   rI   rN   rP   r   r   r   r   <module>   sF    




#
#

"





