§
    OŠtjÌ  ã                   óÆ  — d dl mZ ddlmZ ddlmZ  ej        d¦  «        Zeefdej        fd„¦   «         Zeefdej        fd„¦   «         Z	eefdej        fd	„¦   «         Z
eefdej        fd
„¦   «         Zed„ ¦   «         Zeefdej        fd„¦   «         Zeefdej        fd„¦   «         Zed„ ¦   «         Zeefdej        fd„¦   «         Zeefdej        fd„¦   «         ZdS )é   )Újité   )Úcore)Úmathé
   Ún_roundsc                 ó  — | j         t          j        k    r	d}d}d}	d}
n0t          j        | j         t          j        k    d¦  «         d}d}d}	d	}
t          j        |¦  «        D ]œ}|	}|
}| |}}t          j        ||¦  «        |z  |z  } t          j        ||¦  «        |z  |z  }t          j        ||d
¬¦  «        }t          j        ||d
¬¦  «        }t          j	        ||d
¬¦  «        }t          j	        ||d
¬¦  «        }Œ�| |||fS )zV
    Run `n_rounds` rounds of Philox for state (c0, c1, c2, c3) and key (k0, k1).
    l   ¹yn< l   ….Ïv l   S¢$ l   W= z"dtype not supported in philox_impll   |”~åf»q	 l   ;'•	:=[ l   “l˜B;: l   W$*Ž	ÔR F)Úsanitize_overflow)
ÚdtypeÚtlÚuint32Ústatic_assertÚuint64Ústatic_ranger   ÚumulhiÚmulÚadd)Úc0Úc1Úc2Úc3Úk0Úk1r   ÚPHILOX_KEY_AÚPHILOX_KEY_BÚPHILOX_ROUND_AÚPHILOX_ROUND_BÚ_ÚAÚBÚ_c0Ú_c2s                   úT/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/triton/language/random.pyÚphilox_implr$      s&  € ð
 
„x•2”9ÒÐØ%/ˆØ%/ˆØ'1ˆØ'1ˆˆå
Ô˜œ¥R¤YÒ.Ð0TÑUÔUÐUØ%7ˆØ%7ˆØ'9ˆØ'9ˆåŒ_˜XÑ&Ô&ð ?ð ?ˆð ˆØˆØ�rˆSˆÝŒ[˜˜CÑ Ô  2Ñ%¨Ñ*ˆÝŒ[˜˜CÑ Ô  2Ñ%¨Ñ*ˆÝŒV�A�s¨eÐ4Ñ4Ô4ˆÝŒV�A�s¨eÐ4Ñ4Ô4ˆåŒV�B˜¸Ð>Ñ>Ô>ˆÝŒV�B˜¸Ð>Ñ>Ô>ˆˆØˆr�2�rˆ>Ðó    c           	      óà  — t          j        | ¦  «        } t          j        | j                             ¦   «         ¦  «         |                      t           j        ¦  «        } t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |¦  «        }t          j        |j        j        ¦  «        dk    rTt           j	        }| dz	  dz                       t           j	        ¦  «        }| dz                       t           j	        ¦  «        }nZt          j        t          j        |j        j        ¦  «        dk    d¦  «         t           j        }t          j
        dd|¬¦  «        }| }|                     |d¬	¦  «        }|                     |d¬	¦  «        }|                     |d¬	¦  «        }|                     |d¬	¦  «        }t          |||||||¦  «        S )
Né    l   ÿÿ é@   z bitwidth not supported in philox)r   é    )r   T©Úbitcast)r   Ú	to_tensorr   r   Úis_intÚtor   Ú	constexprÚprimitive_bitwidthr   Úfullr$   )	Úseedr   r   r   r   r   Ú	int_dtypeÚseed_hiÚseed_los	            r#   Úphiloxr6   -   s’  € åŒ<˜ÑÔ€DÝÔ�T”Z×&Ò&Ñ(Ô(Ñ)Ô)Ð)Ø�7Š7•2”9ÑÔ€DÝ	Œ�bÑ	Ô	€BÝ	Œ�bÑ	Ô	€BÝ	Œ�bÑ	Ô	€BÝ	Œ�bÑ	Ô	€Bå	„|�B”HÔ/Ñ0Ô0°BÒ6Ð6Ý”Iˆ	Ø˜B‘J *Ñ,×0Ò0µ´Ñ;Ô;ˆØ˜*Ñ$×(Ò(­¬Ñ3Ô3ˆˆå
Ô�œ b¤hÔ&AÑBÔBÀbÒHÐJlÑmÔmÐmÝ”Iˆ	Ý”'˜% ¨)Ð4Ñ4Ô4ˆØˆà	�Šˆy $ˆÑ	'Ô	'€BØ	�Šˆy $ˆÑ	'Ô	'€BØ	�Šˆy $ˆÑ	'Ô	'€BØ	�Šˆy $ˆÑ	'Ô	'€BÝ�r˜2˜r 2 w°¸ÑBÔBÐBr%   c                 ó2   — t          | ||¦  «        \  }}}}|S )aq  
    Given a :code:`seed` scalar and an :code:`offset` block, returns a single
    block of random :code:`int32`.

    If you need multiple streams of random numbers,
    using `randint4x` is likely to be faster than calling `randint` 4 times.

    :param seed: The seed for generating random numbers.
    :param offset: The offsets to generate random numbers for.
    )Ú	randint4x)r2   Úoffsetr   Úretr   s        r#   Úrandintr;   H   s"   € õ ˜T 6¨8Ñ4Ô4�L€CˆˆAˆqØ€Jr%   c                 ó   — |                      t          j        ¦  «        }|dz  }t          j        |j        j        ¦  «        dk    r#|dz	                        t          j        ¦  «        }n|}t          | |||||¦  «        S )aU  
    Given a :code:`seed` scalar and an :code:`offset` block, returns four
    blocks of random :code:`int32`.

    This is the maximally efficient entry point
    to Triton's Philox pseudo-random number generator.

    :param seed: The seed for generating random numbers.
    :param offsets: The offsets to generate random numbers for.
    r)   r'   )r.   r   r   r/   r   r0   r6   )r2   r9   r   Ú	offset_loÚ_0Ú	offset_his         r#   r8   r8   X   sr   € ð —	’	�"œ)Ñ$Ô$€IØ	�Q‰€Bå	„|�F”LÔ3Ñ4Ô4°rÒ9Ð9Ø˜r‘\×%Ò%¥b¤iÑ0Ô0ˆ	ˆ	àˆ	å�$˜	 9¨b°"°hÑ?Ô?Ð?r%   c                 ó2  — t          j        | j        t           j        k    ¦  «        s't          j        | j        t           j        k    ¦  «        r$|                      t           j        d¬¦  «        } d}nƒt          j        t          j        | j        t           j        k    ¦  «        p&t          j        | j        t           j        k    ¦  «        ¦  «         |                      t           j        d¬¦  «        } d}t          j	        | dk     |  dz
  | ¦  «        } | |z  S )zo
    Numerically stable function to convert a random uint into a random float uniformly sampled in [0, 1).
    Tr*   gýïÿÿÿ=g   Àÿÿÿ;r)   r   )
r   r/   r   r   Úint32r.   r   r   Úint64Úwhere)ÚxÚscales     r#   Úuint_to_uniform_floatrF   ~   sØ   € õ 
„|�A”G�rœyÒ(Ñ)Ô)ð '­R¬\¸!¼'ÅRÄXÒ:MÑ-NÔ-Nð 'à�DŠD•” 4ˆDÑ(Ô(ˆØ ˆˆå
Ô�œ a¤gµ´Ò&:Ñ;Ô;Ð`½r¼|ÈAÌGÕWYÔW_ÒL_Ñ?`Ô?`ÑaÔaÐaØ�DŠD•” 4ˆDÑ(Ô(ˆØ&ˆÝ
Œ��Q’˜˜˜Q™ Ñ"Ô"€AØˆu‰9Ðr%   c                 óB   — t          | ||¦  «        }t          |¦  «        S )zþ
    Given a :code:`seed` scalar and an :code:`offset` block,
    returns a block of random :code:`float32` in :math:`U(0, 1)`.

    :param seed: The seed for generating random numbers.
    :param offsets: The offsets to generate random numbers for.
    )r;   rF   )r2   r9   r   Úsources       r#   ÚrandrI   ’   s#   € õ �T˜6 8Ñ,Ô,€FÝ  Ñ(Ô(Ð(r%   c                 ó²   — t          | ||¦  «        \  }}}}t          |¦  «        }t          |¦  «        }t          |¦  «        }	t          |¦  «        }
|||	|
fS )a   
    Given a :code:`seed` scalar and an :code:`offsets` block,
    returns 4 blocks of random :code:`float32` in :math:`U(0, 1)`.

    :param seed: The seed for generating random numbers.
    :param offsets: The offsets to generate random numbers for.
    )r8   rF   )r2   Úoffsetsr   Úi1Úi2Úi3Úi4Úu1Úu2Úu3Úu4s              r#   Úrand4xrT   Ÿ   s_   € õ ˜t W¨hÑ7Ô7�N€BˆˆB�Ý	˜rÑ	"Ô	"€BÝ	˜rÑ	"Ô	"€BÝ	˜rÑ	"Ô	"€BÝ	˜rÑ	"Ô	"€BØˆr�2�rˆ>Ðr%   c                 óä   — t          j        d| ¦  «        } d|z  }t          j        dt          j        | ¦  «        z  ¦  «        }|t          j        |¦  «        z  |t          j        |¦  «        z  fS )zBox-Muller transformgH¯¼šò×z>g-DTû!@g       À)r   Úmaximumr   ÚsqrtÚlogÚcosÚsin)rP   rQ   ÚthÚrs       r#   Úpair_uniform_to_normalr]   µ   s`   € õ 
Œ�F˜BÑ	Ô	€BØ	˜RÑ	€BÝŒ	�$�œ "™œÑ%Ñ&Ô&€AØ�tŒx˜‰|Œ|Ñ˜Q¥¤¨"¡¤Ñ-Ð-Ð-r%   c                 ó”   — t          | ||¦  «        \  }}}}t          |¦  «        }t          |¦  «        }t          ||¦  «        \  }}|S )a  
    Given a :code:`seed` scalar and an :code:`offset` block,
    returns a block of random :code:`float32` in :math:`\mathcal{N}(0, 1)`.

    :param seed: The seed for generating random numbers.
    :param offsets: The offsets to generate random numbers for.
    )r8   rF   r]   )	r2   r9   r   rL   rM   r   rP   rQ   Ún1s	            r#   Úrandnr`   ¾   sO   € õ ˜T 6¨8Ñ4Ô4�L€BˆˆAˆqÝ	˜rÑ	"Ô	"€BÝ	˜rÑ	"Ô	"€BÝ" 2 rÑ*Ô*�E€BˆØ€Ir%   c                 ó†   — t          | ||¦  «        \  }}}}t          ||¦  «        \  }}t          ||¦  «        \  }	}
|||	|
fS )a	  
    Given a :code:`seed` scalar and an :code:`offset` block,
    returns 4 blocks of random :code:`float32` in :math:`\mathcal{N}(0, 1)`.

    :param seed: The seed for generating random numbers.
    :param offsets: The offsets to generate random numbers for.
    )rT   r]   )r2   r9   r   rP   rQ   rR   rS   r_   Ún2Ún3Ún4s              r#   Úrandn4xre   Î   sQ   € õ ˜D &¨(Ñ3Ô3�N€BˆˆB�Ý# B¨Ñ+Ô+�F€BˆÝ# B¨Ñ+Ô+�F€BˆØˆr�2�rˆ>Ðr%   N)Úruntime.jitr   Ú r   r   r   r/   ÚN_ROUNDS_DEFAULTr$   r6   r;   r8   rF   rI   rT   r]   r`   re   © r%   r#   ú<module>rj      s#  ðØ Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à�2”< Ñ#Ô#Ð ð ØAQð ð °"´,ð ð ð ñ „ðð@ Ø:Jð Cð C¨2¬<ð Cð Cð Cñ „ðCð4 Ø3Cð ð  B¤Lð ð ð ñ „ðð Ø5Eð @ð @ b¤lð @ð @ð @ñ „ð@ðJ ðð ñ „ðð& Ø0@ð 	)ð 	) ¤ð 	)ð 	)ð 	)ñ „ð	)ð Ø3Cð ð  B¤Lð ð ð ñ „ðð* ð.ð .ñ „ð.ð Ø1Að ð  "¤,ð ð ð ñ „ðð Ø3Cð ð  B¤Lð ð ð ñ „ðð ð r%   