§
    ƒÛgâ'  ã                   ó¤  — 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„ ¦   «         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dS )é    N)Úuint64Úuint32Úuint16Úuint8)Úregister_jitable)Ú
UINT32_MAXÚ
UINT64_MAXÚ
UINT16_MAXÚ	UINT8_MAX)Únext_uint32Únext_uint64c                 ó„   — t          | ¦  «        }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }||dz	  z  }|S )Né   é   é   é   é   é    )r   )ÚmaxÚmasks     úT/granary/edev/quantum/lib/python3.11/site-packages/numba/np/random/random_methods.pyÚgen_maskr      sf   € å�#‰;Œ;€DØˆD�A‰IÑ€DØˆD�A‰IÑ€DØˆD�A‰IÑ€DØˆD�A‰IÑ€DØˆD�B‰JÑ€DØˆD�B‰JÑ€DØ€Kó    c                 ól   — |dk    r|||fS |st          | ¦  «        }d}n
|dz  }|dz  }|dz  dk    ||fS )Nr   é   r   )r   )ÚbitgenÚoffÚrngÚbcntÚbufs        r   Úbuffered_bounded_boolr!      sZ   € àˆqŠˆØ�D˜#ˆ~ÐØð Ý˜&Ñ!Ô!ˆØˆˆà�‰	ˆØ�‰	ˆà�1‰W˜ŠN˜T 3Ð&Ð&r   c                 ób   — |st          | ¦  «        }d}n
|dz  }|dz  }t          |¦  «        ||fS )Né   r   r   )r   r   ©r   r   r    s      r   Úbuffered_uint8r%   (   sC   € àð Ý˜&Ñ!Ô!ˆØˆˆà�‰	ˆØ�‰	ˆå�‰:Œ:�t˜SÐ Ð r   c                 ób   — |st          | ¦  «        }d}n
|dz  }|dz  }t          |¦  «        ||fS )Nr   r   )r   r   r$   s      r   Úbuffered_uint16r'   4   sC   € àð Ý˜&Ñ!Ô!ˆØˆˆà�‰
ˆØ�‰	ˆå�#‰;Œ;˜˜cÐ!Ð!r   c                 óh  — t          |¦  «        t          d¦  «        z   }|dk    sJ ‚t          | ||¦  «        \  }}}t          ||z  ¦  «        }|dz  }||k     rRt          t          ¦  «        |z
  |z  }||k     r2t          | ||¦  «        \  }}}t          ||z  ¦  «        }|dz  }||k     °2|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    Úrng_exclÚnÚmÚleftoverÚ	thresholds	            r   Úbuffered_bounded_lemire_uint8r0   B   sÚ   € õ �S‰zŒz�E !™HœHÑ$€Hà�4ŠKˆKˆKˆKõ " &¨$°Ñ4Ô4�L€A€tˆSÝˆq�8‰|ÑÔ€Að �4‰x€Hà�8ÒÐå�IÑ&Ô&¨Ñ,°Ñ8ˆ	à˜)Ò#Ð#Ý)¨&°$¸Ñ<Ô<‰LˆAˆt�SÝ�q˜8‘|Ñ$Ô$ˆAØ˜4‘xˆHð ˜)Ò#Ð#ð
 �‰6�4˜ÐÐr   c                 óh  — t          |¦  «        t          d¦  «        z   }|dk    sJ ‚t          | ||¦  «        \  }}}t          ||z  ¦  «        }|dz  }||k     rRt          t          ¦  «        |z
  |z  }||k     r2t          | ||¦  «        \  }}}t          ||z  ¦  «        }|dz  }||k     °2|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   r
   r*   s	            r   Úbuffered_bounded_lemire_uint16r3   f   sÚ   € õ �c‰{Œ{�V A™YœYÑ&€Hà�6ŠMˆMˆMˆMõ # 6¨4°Ñ5Ô5�L€A€tˆSÝˆq�8‰|ÑÔ€Að �6‰z€Hà�8ÒÐå�ZÑ(Ô(¨3Ñ.°(Ñ:ˆ	à˜)Ò#Ð#Ý*¨6°4¸Ñ=Ô=‰LˆAˆt�SÝ�q˜8‘|Ñ$Ô$ˆAØ˜6‘zˆHð ˜)Ò#Ð#ð
 �‰7�D˜#ÐÐr   c                 ó\  — t          |¦  «        t          d¦  «        z   }|dk    sJ ‚t          t          | ¦  «        ¦  «        t          |¦  «        z  }|dz  }||k     rJt          |z
  |z  }||k     r7t          t          | ¦  «        ¦  «        t          |¦  «        z  }|dz  }||k     °7|dz	  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/   s         r   Úbuffered_bounded_lemire_uint32r6   Š   sÃ   € õ �c‰{Œ{�V A™YœYÑ&€Hà�:ÒÐÐÐõ 	�{˜6Ñ"Ô"Ñ#Ô#¥f¨XÑ&6Ô&6Ñ6€Að �:‰~€Hà�8ÒÐå #Ñ%¨Ñ1ˆ	à˜)Ò#Ð#Ý•{ 6Ñ*Ô*Ñ+Ô+­f°XÑ.>Ô.>Ñ>ˆAØ˜:‘~ˆHð ˜)Ò#Ð#ð �‰GÐr   c                 ó   — t          |¦  «        t          d¦  «        z   }|dk    sJ ‚t          | ¦  «        }t          |¦  «        t          |¦  «        z  }||k     rGt          |z
  |z  }||k     r4t          | ¦  «        }t          |¦  «        t          |¦  «        z  }||k     °4|t          d¦  «        z  }|dz	  }|t          d¦  «        z  }|dz	  }	||z  }
||z  |
dz	  z   }|t          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   ì   ÿÿÿÿ r5   r   )r   r   r	   )r   r   r+   Úxr.   r/   Úx0Úx1Ú	rng_excl0Ú	rng_excl1Úw0ÚtÚw1Úw2Úm1s                  r   Úbounded_lemire_uint64rC   ¥   s@  € õ �c‰{Œ{�V A™YœYÑ&€HàÐ%Ò%Ð%Ð%Ð%å�FÑÔ€Aå�a‰yŒy�6 (Ñ+Ô+Ñ+€Hà�8ÒÐÝ #Ñ%¨Ñ1ˆ	à˜)Ò#Ð#Ý˜FÑ#Ô#ˆAÝ˜a‘y”y¥6¨(Ñ#3Ô#3Ñ3ˆHð ˜)Ò#Ð#ð 
�V�JÑÔÑ	€BØ	
ˆb‰€BØ�6 *Ñ-Ô-Ñ-€IØ˜B‘€IØ	ˆi‰€BØ
ˆY‰˜" ™(Ñ#€AØ	
�V�JÑÔÑ	€BØ	
ˆb‰€BØˆ"ˆy‰.Ñ€BØ	ˆi‰˜"Ñ	  b¡Ñ	)€Bà€Ir   c                 ó  — t          j        ||¬¦  «        }|dk    rt          j        |¦  «        D ]}|||<   ŒnÇ|dk    ra|dk    r-t          j        |¦  «        D ]}|t          | ¦  «        z   ||<   ŒnŽt          j        |¦  «        D ]}|t	          | |¦  «        z   ||<   Œn`|dk    r-t          j        |¦  «        D ]}|t          | ¦  «        z   ||<   Œn-t          j        |¦  «        D ]}|t          | |¦  «        z   ||<   Œ|S )z_
    Returns a new array of given size with 64 bit integers
    bounded by given interval.
    ©Údtyper   r5   r8   )ÚnpÚemptyÚndindexr   r6   r   rC   ©r   Úlowr   ÚsizerF   ÚoutÚis          r   Úrandom_bounded_uint64_fillrO   È   sS  € õ Œ(�4˜uÐ
%Ñ
%Ô
%€CØ
ˆa‚x€xÝ”˜DÑ!Ô!ð 	ð 	ˆAØˆC�‰FˆFð	à	�
Ò	Ð	Ø�:ÒÐÝ”Z Ñ%Ô%ð 3ð 3�Ø�{¨6Ñ2Ô2Ñ2��A‘�ð3õ ”Z Ñ%Ô%ð Kð K�ØÕ=¸fÀcÑJÔJÑJ��A‘�ðKð Ð#Ò
#Ð
#Ý”˜DÑ!Ô!ð 	/ð 	/ˆAØ�; vÑ.Ô.Ñ.ˆC�‰FˆFð	/õ ”˜DÑ!Ô!ð 	>ð 	>ˆAØÕ0°¸Ñ=Ô=Ñ=ˆC�‰FˆFà€Jr   c                 ó8  — t          j        ||¬¦  «        }|dk    rt          j        |¦  «        D ]}|||<   Œn`|dk    r-t          j        |¦  «        D ]}|t          | ¦  «        z   ||<   Œn-t          j        |¦  «        D ]}|t	          | |¦  «        z   ||<   Œ|S )z_
    Returns a new array of given size with 32 bit integers
    bounded by given interval.
    rE   r   r5   )rG   rH   rI   r   r6   rJ   s          r   Úrandom_bounded_uint32_fillrQ   ä   sÈ   € õ Œ(�4˜uÐ
%Ñ
%Ô
%€CØ
ˆa‚x€xÝ”˜DÑ!Ô!ð 	ð 	ˆAØˆC�‰FˆFð	à	�
Ò	Ð	å”˜DÑ!Ô!ð 	/ð 	/ˆAØ�; vÑ.Ô.Ñ.ˆC�‰FˆFð	/õ ”˜DÑ!Ô!ð 	Gð 	GˆAØÕ9¸&À#ÑFÔFÑFˆC�‰FˆFØ€Jr   c                 ó`  — d}d}t          j        ||¬¦  «        }|dk    rt          j        |¦  «        D ]}|||<   Œnp|dk    r5t          j        |¦  «        D ]}t          | ||¦  «        \  }	}}||	z   ||<   Œ n5t          j        |¦  «        D ] }t	          | |||¦  «        \  }	}}||	z   ||<   Œ!|S )z_
    Returns a new array of given size with 16 bit integers
    bounded by given interval.
    r   rE   r2   )rG   rH   rI   r'   r3   ©
r   rK   r   rL   rF   r    r   rM   rN   Úvals
             r   Úrandom_bounded_uint16_fillrU   ø   só   € ð €CØ€Då
Œ(�4˜uÐ
%Ñ
%Ô
%€CØ
ˆa‚x€xÝ”˜DÑ!Ô!ð 	ð 	ˆAØˆC�‰FˆFð	à	�Šˆå”˜DÑ!Ô!ð 	ð 	ˆAÝ,¨V°T¸3Ñ?Ô?‰NˆC��sØ˜3‘YˆC�‰FˆFð	õ
 ”˜DÑ!Ô!ð 	ð 	ˆAå.¨v°sØ/3°Sñ:ô :ñ ˆC��sð ˜3‘YˆC�‰FˆFØ€Jr   c                 ó`  — d}d}t          j        ||¬¦  «        }|dk    rt          j        |¦  «        D ]}|||<   Œnp|dk    r5t          j        |¦  «        D ]}t          | ||¦  «        \  }	}}||	z   ||<   Œ n5t          j        |¦  «        D ] }t	          | |||¦  «        \  }	}}||	z   ||<   Œ!|S )z^
    Returns a new array of given size with 8 bit integers
    bounded by given interval.
    r   rE   r)   )rG   rH   rI   r%   r0   rS   s
             r   Úrandom_bounded_uint8_fillrW     só   € ð €CØ€Då
Œ(�4˜uÐ
%Ñ
%Ô
%€CØ
ˆa‚x€xÝ”˜DÑ!Ô!ð 	ð 	ˆAØˆC�‰FˆFð	à	�Šˆå”˜DÑ!Ô!ð 	ð 	ˆAÝ+¨F°D¸#Ñ>Ô>‰NˆC��sØ˜3‘YˆC�‰FˆFð	õ ”˜DÑ!Ô!ð 	ð 	ˆAå-¨f°cØ.2°Cñ9ô 9ñ ˆC��sð ˜3‘YˆC�‰Fˆ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   rE   )rG   rH   rI   r!   rS   s
             r   Úrandom_bounded_bool_fillrY   /  sj   € ð
 €CØ€DÝ
Œ(�4˜uÐ
%Ñ
%Ô
%€CÝŒZ˜ÑÔð ð ˆÝ.¨v°s¸CÀÀsÑKÔK‰ˆˆT�3Ø�s‘ˆˆA‰ˆØ€Jr   c                 óv  — | |k     rt          d¦  «        ‚|dk    rst          |¦  «        }|s|t          d¦  «        z  }t          |¦  «        }| dk    rt          | ¦  «        } ||k    rt          d¦  «        ‚| |k    rt          d¦  «        ‚dS ||k    rt          d¦  «        ‚| |k    rt          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   )rK   ÚhighÚendpointÚlower_boundÚupper_bounds        r   Ú_randint_arg_checkr`   =  sá   € ð ˆ[ÒÐÝÐ/Ñ0Ô0Ð0ð
 ˆa‚x€xÝ�d‰|Œ|ˆØð 	Ø•F˜1‘I”IÑˆDÝ˜[Ñ)Ô)ˆØ�Š7ˆ7Ý˜‘+”+ˆCØ�+ÒÐÝÐ4Ñ5Ô5Ð5Ø�Š:ˆ:ÝÐIÑJÔJÐJð ˆ:ð �+ÒÐÝÐ4Ñ5Ô5Ð5Ø�Š:ˆ:ÝÐIÑJÔJÐJð ˆ:r   c                 óˆ  — |dk    rdS t          |¦  «        }t          t          |¦  «        ¦  «        }|dk    rKt          t          | ¦  «        ¦  «        |z  }||k    r%t          t          | ¦  «        ¦  «        |z  }||k    °%n0t          | ¦  «        |z  }||k    rt          | ¦  «        |z  }||k    °t          |¦  «        S )Nr   r5   )r   r   r   r   )r   Úmax_valr   Úvalues       r   Úrandom_intervalrd   \  sÌ   € à�1ŠˆØˆqå�W‰oŒo€GÝ•(˜7Ñ#Ô#Ñ$Ô$€Dà�:ÒÐÝ•{ 6Ñ*Ô*Ñ+Ô+¨dÑ2ˆØ�gŠoˆoÝ�; vÑ.Ô.Ñ/Ô/°$Ñ6ˆEð �gŠoˆoøõ ˜FÑ#Ô# dÑ*ˆØ�gŠoˆoÝ Ñ'Ô'¨$Ñ.ˆEð �gŠoˆoõ �%‰=Œ=Ðr   ) ÚnumpyrG   Únumbar   r   r   r   Únumba.core.extendingr   Únumba.np.random._constantsr   r	   r
   r   Únumba.np.random.generator_corer   r   r   r!   r%   r'   r0   r3   r6   rC   rO   rQ   rU   rW   rY   r`   rd   © r   r   ú<module>rk      sO  ðØ Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1ð?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?à CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð ðð ñ Ôðð ð
'ð 
'ñ Ôð
'ð ð!ð !ñ Ôð!ð ð"ð "ñ Ôð"ð ð ð  ñ Ôð ðF ð ð  ñ Ôð ðF ðð ñ Ôðð4 ðð ñ ÔððD ðð ñ Ôðð6 ðð ñ Ôðð& ðð ñ Ôðð6 ðð ñ Ôðð4 ð
ð 
ñ Ôð
ð ðKð Kñ ÔðKð< ðð ñ Ôðð ð r   