
    rh!(                     0   d dl 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        Zed        Zed        Zed        Zed	        Zed
        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zed        Zy)    N)register_jitable)
UINT32_MAX
UINT64_MAX
UINT16_MAX	UINT8_MAX)next_uint32next_uint64c                     t        j                  |       }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }|S )N                   )npuint64)maxmasks     \/var/www/html/engine/venv/lib/python3.12/site-packages/numba/np/random/new_random_methods.pygen_maskr      sh    99S>DDAIDDAIDDAIDDAIDDBJDDBJDK    c                 `    |dk(  r|||fS |st        |       }d}n
|dz  }|dz  }|dz  dk7  ||fS )Nr      r   )r   )bitgenoffrngbcntbufs        r   buffered_bounded_boolr      sN    qD#~&!		1WNT3&&r   c                 f    |st        |       }d}n
|dz  }|dz  }t        j                  |      ||fS )N   r   r   )r   r   uint8r   r   r   s      r   buffered_uint8r$   '   s;    &!		88C=$##r   c                 f    |st        |       }d}n
|dz  }|dz  }t        j                  |      ||fS )Nr   r   )r   r   uint16r#   s      r   buffered_uint16r'   3   s;    &!
	99S>4$$r   c                    t        j                  |      t        j                  d      z   }|dk7  sJ t        | ||      \  }}}t        j                  ||z        }|dz  }||k  rXt        j                  t              |z
  |z  }||k  r4t        | ||      \  }}}t        j                  ||z        }|dz  }||k  r4|dz	  ||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   r   rng_exclnmleftover	thresholds	            r   buffered_bounded_lemire_uint8r0   A   s     xx}rxx{*H4KK "&$4LAtS
		!h,A 4xH8hhy)C/8;	)#)&$<LAtS		!h,'A4xH )#
 64r   c                    t        j                  |      t        j                  d      z   }|dk7  sJ t        | ||      \  }}}t        j                  ||z        }|dz  }||k  rXt        j                  t              |z
  |z  }||k  r4t        | ||      \  }}}t        j                  ||z        }|dz  }||k  r4|dz	  ||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'   uint32r   r*   s	            r   buffered_bounded_lemire_uint16r4   e   s     yy~		!,H6MM #645LAtS
		!h,A 6zH8ii
+c1X=	)#*64=LAtS		!h,'A6zH )#
 7D#r   c                    t        j                  |      t        j                  d      z   }|dk7  sJ t        j                  t        |             t        j                  |      z  }|dz  }||k  rPt        |z
  |z  }||k  r?t        j                  t        |             t        j                  |      z  }|dz  }||k  r?|dz	  S )zr
    Generates a random unsigned 32 bit integer bounded
    within a given interval using Lemire's rejection.
    r       r   )r   r3   r   r   r   )r   r   r+   r-   r.   r/   s         r   buffered_bounded_lemire_uint32r7      s     yy~		!,H: 			+f%&8)<<A :~H8#%1	)#		+f-.81DDA:~H )# Gr   c                 t   t        j                  |      t        j                  d      z   }|dk7  sJ t        |       }t        j                  |      t        j                  |      z  }||k  rMt        |z
  |z  }||k  r<t        |       }t        j                  |      t        j                  |      z  }||k  r<|t        j                  d      z  }|dz	  }|t        j                  d      z  }|dz	  }	||z  }
||z  |
dz	  z   }|t        j                  d      z  }|dz	  }|||	z  z  }||	z  |z   |dz	  z   }|S )zr
    Generates a random unsigned 64 bit integer bounded
    within a given interval using Lemire's rejection.
    r       r6   r   )r   r   r	   r   )r   r   r+   xr.   r/   x0x1	rng_excl0	rng_excl1w0tw1w2m1s                  r   bounded_lemire_uint64rD      s;    yy~		!,H%%&%FAyy|bii11H8#%1	)#F#Ayy|bii&99H )# 
RYYz"	"B	
bB299Z00IBI	iB
Y"(#A	
RYYz"	"B	
bB"y.B	i"	b	)BIr   c                    t        j                  ||      }|dk(  r!t        j                  |      D ]  }|||<   	 |S |dk  r`|dk(  r-t        j                  |      D ]  }|t        |       z   ||<    |S t        j                  |      D ]  }|t	        | |      z   ||<    |S |dk(  r-t        j                  |      D ]  }|t        |       z   ||<    |S t        j                  |      D ]  }|t        | |      z   ||<    |S )z_
    Returns a new array of given size with 64 bit integers
    bounded by given interval.
    dtyper   r6   r9   )r   emptyndindexr   r7   r	   rD   r   lowr   sizerG   outis          r   random_bounded_uint64_fillrO      s4    ((4u
%C
axD! 	ACF	" J 

	:ZZ% 3{622A3 J ZZ% K=fcJJAK J #
#D! 	/A;v..CF	/ J D! 	>A0==CF	> Jr   c                 <   t        j                  ||      }|dk(  r!t        j                  |      D ]  }|||<   	 |S |dk(  r-t        j                  |      D ]  }|t        |       z   ||<    |S t        j                  |      D ]  }|t	        | |      z   ||<    |S )z_
    Returns a new array of given size with 32 bit integers
    bounded by given interval.
    rF   r   r6   )r   rH   rI   r   r7   rJ   s          r   random_bounded_uint32_fillrQ      s     ((4u
%C
axD! 	ACF	 J 

	D! 	/A;v..CF	/
 J D! 	GA9&#FFCF	GJr   c                 d   d}d}t        j                  ||      }|dk(  r!t        j                  |      D ]  }|||<   	 |S |dk(  r5t        j                  |      D ]  }t        | ||      \  }	}}||	z   ||<    |S t        j                  |      D ]  }t	        | |||      \  }	}}||	z   ||<    |S )z_
    Returns a new array of given size with 16 bit integers
    bounded by given interval.
    r   rF   r2   )r   rH   rI   r'   r4   
r   rK   r   rL   rG   r   r   rM   rN   vals
             r   random_bounded_uint16_fillrU      s     CD
((4u
%C
axD! 	ACF	 J 
D! 	A,VT3?NCs3YCF	 J D! 	A.vs/3S: Cs 3YCF		
 Jr   c                 d   d}d}t        j                  ||      }|dk(  r!t        j                  |      D ]  }|||<   	 |S |dk(  r5t        j                  |      D ]  }t        | ||      \  }	}}||	z   ||<    |S t        j                  |      D ]  }t	        | |||      \  }	}}||	z   ||<    |S )z^
    Returns a new array of given size with 8 bit integers
    bounded by given interval.
    r   rF   r)   )r   rH   rI   r$   r0   rS   s
             r   random_bounded_uint8_fillrW     s     CD
((4u
%C
axD! 	ACF	 J 
D! 	A+FD#>NCs3YCF	 J D! 	A-fc.2C9 Cs 3YCF		
 Jr   c                     d}d}t        j                  ||      }t        j                  |      D ]  }t        | ||||      \  }	}}||	z   ||<    |S )z@
    Returns a new array of given size with boolean values.
    r   rF   )r   rH   rI   r   rS   s
             r   random_bounded_bool_fillrY   .  sb    
 CD
((4u
%CZZ .vsCsKT3sA Jr   c                 l   | |k  rt        d      |dkD  rt        j                  |      }|s|t        j                  d      z  }t        j                  |      }| dkD  rt        j                  |       } ||kD  rt        d      | |kD  rt        d      y||kD  rt        d      | |kD  rt        d      y)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   )rK   highendpointlower_boundupper_bounds        r   _randint_arg_checkr`   <  s     [/00
 axyyBIIaL Dii,7))C.C+455:IJJ  +455:IJJ r   c                    |dk(  ryt        j                  |      }t        j                  t        |            }|dk  rNt        j                  t        |             |z  }||kD  rOt        j                  t        |             |z  }||kD  r'n't	        |       |z  }||kD  rt	        |       |z  }||kD  rt        j                  |      S )Nr   r6   )r   r   r   r   r	   )r   max_valr   values       r   random_intervalrd   [  s    1ii G99Xg&'D:		+f-.5goIIk&12T9E go F#d*go'$.E go 99Ur   )numpyr   numba.core.extendingr   numba.np.random._constantsr   r   r   r   numba.np.random.generator_corer   r	   r   r   r$   r'   r0   r4   r7   rD   rO   rQ   rU   rW   rY   r`   rd    r   r   <module>rj      sI    1? ? C   
' 
' $ $ % %    F    F  4  D  6  &  6  4 
 
 K K<  r   