U
    -e'                     @   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   _/var/www/html/Darija-Ai-Train/env/lib/python3.8/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t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   AssertionErrorr!   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t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   r   buffered_bounded_lemire_uint16f   s    
r-   c                 C   sz   t |t d }|dkst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   r   buffered_bounded_lemire_uint32   s    
r/   c                 C   s   t |t d }|dkst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   r&   xr)   r*   Zx0x1Z	rng_excl0Z	rng_excl1Zw0tZw1Zw2m1r   r   r   bounded_lemire_uint64   s(    r5   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.   r0   )npemptyndindexr   r/   r   r5   r   lowr   sizer7   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.
    r6   r   r.   )r8   r9   r:   r   r/   r;   r   r   r   random_bounded_uint32_fill   s    rA   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   r6   r,   )r8   r9   r:   r"   r-   
r   r<   r   r=   r7   r   r   r>   r?   valr   r   r   random_bounded_uint16_fill   s$     rD   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   r6   r#   )r8   r9   r:   r!   r+   rB   r   r   r   random_bounded_uint8_fill  s$     rE   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   r6   )r8   r9   r:   r   rB   r   r   r   random_bounded_bool_fill/  s    rF   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endpointlower_boundupper_boundr   r   r   _randint_arg_check=  s"    
rK   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    rM   ) numpyr8   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/   r5   r@   rA   rD   rE   rF   rK   rM   r   r   r   r   <module>   sD   




#
#

"





