a
    
d'                     @   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   g/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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(   s    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   s    r"   c           	      C   s   t |t d }|dksJ t| ||\}}}t|| }|d@ }||k rt t| | }||k rt| ||\}}}t|| }|d@ }qZ|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   s    
r*   c           	      C   s   t |t d }|dksJ t| ||\}}}t|| }|d@ }||k rt t| | }||k rt| ||\}}}t|| }|d@ }qZ|d? ||fS )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   s    
r,   c                 C   sz   t |t d }|dksJ tt| t| }|d@ }||k rrt| | }||k rrtt| t| }|d@ }qL|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    
r.   c                 C   s   t |t d }|dksJ t| }t |t | }||k rjt| | }||k rjt| }t |t | }qH|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       r-   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(    r4   c                 C   s   t j||d}|dkr0t |D ]}|||< q n|dkr|dkrbt |D ]}|t|  ||< qJqt |D ]}|t| | ||< qlnL|dkrt |D ]}|t|  ||< qn"t |D ]}|t| | ||< q|S )z_
    Returns a new array of given size with 64 bit integers
    bounded by given interval.
    dtyper   r-   r/   )npemptyndindexr   r.   r   r4   r   lowr   sizer6   outir   r   r   random_bounded_uint64_fill   s     r?   c                 C   s   t j||d}|dkr0t |D ]}|||< q nL|dkrZt |D ]}|t|  ||< qBn"t |D ]}|t| | ||< qd|S )z_
    Returns a new array of given size with 32 bit integers
    bounded by given interval.
    r5   r   r-   )r7   r8   r9   r   r.   r:   r   r   r   random_bounded_uint32_fill   s    r@   c           
      C   s   d}d}t j||d}|dkr8t |D ]}|||< q(nh|dkrpt |D ]"}t| ||\}	}}||	 ||< qJn0t |D ]$}t| |||\}	}}||	 ||< qz|S )z_
    Returns a new array of given size with 16 bit integers
    bounded by given interval.
    r   r5   r+   )r7   r8   r9   r"   r,   
r   r;   r   r<   r6   r   r   r=   r>   valr   r   r   random_bounded_uint16_fill   s"    rC   c           
      C   s   d}d}t j||d}|dkr8t |D ]}|||< q(nh|dkrpt |D ]"}t| ||\}	}}||	 ||< qJn0t |D ]$}t| |||\}	}}||	 ||< qz|S )z^
    Returns a new array of given size with 8 bit integers
    bounded by given interval.
    r   r5   r#   )r7   r8   r9   r!   r*   rA   r   r   r   random_bounded_uint8_fill  s"    rD   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   r5   )r7   r8   r9   r   rA   r   r   r   random_bounded_bool_fill/  s    rE   c                 C   s   | |k rt d|dkrjt|}|s0|td8 }t|}| dkrHt| } ||krXt d| |krt dn ||krzt d| |krt 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endpointZlower_boundZupper_boundr   r   r   _randint_arg_check=  s"    
rH   c                 C   s~   |dkrdS t |}t t|}|dkrTt t| |@ }||krvt t| |@ }q8n"t| |@ }||krvt| |@ }q`t |S )Nr   r-   )r   r   r   r   )r   Zmax_valr   valuer   r   r   random_interval\  s    rJ   ) numpyr7   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,   r.   r4   r?   r@   rC   rD   rE   rH   rJ   r   r   r   r   <module>   sD   




#
#

"





