Ë
    g^(h‚8  ã                   ó6  — d dl mZ d dlZd dlmc mZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZmZ d„ Zdd„Zdej8                  fd„Zdej8                  fd„Zd„ Zd„ Z d„ Z!d„ Z" e!«       Z# e"«       Z$d„ Z% e%«       Z&d„ Z'y)é    )ÚOptionalN)Ú_prims)ÚDispatchKey)Úautograd_not_implemented)ÚHigherOrderOperator)ÚCUDARngStateHelperÚmake_contiguous_strides_for)ÚFakeTensorMode)Údisable_proxy_modes_tracingÚProxyTorchDispatchModeÚtrack_tensor_tree)Ú_deviceÚ_dtypec           	      óh   — t        d| j                  › d| j                  › d| j                  › d�«      ‚)Nz"You are trying to functionalize a z RNG operator but zE does not use Philox/counter-based RNG. Therefore, functionalizing a zo RNG operator is not supported. We are discussing the possibility of a Philox-based RNG implementation for CPU.)ÚRuntimeErrorÚtype)Údevices    úT/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_prims/rng_prims.pyÚthrow_on_non_cudar      sB   € Ü
Ø
,¨V¯[©[¨MÐ9KÈFÏKÉKÈ=ð YFØFLÇkÁkÀ]ð Sið	ióð ó    c                 óš  — t         j                  j                  d| z   |d|¬«      }|j                  |«       t	        t         j
                  j                  j                  | «      }|j                  }|r||_	        ||fD ]J  }	||	_
        t         j                  j                  j                  |	_        | |z   |	_        ||	_        ||	_        ŒL y )Nz
rngprims::© )Úmutates_argsÚschema)ÚtorchÚlibraryÚ	custom_opÚregister_fakeÚgetattrÚ_opsÚopsÚrngprimsÚdefaultÚ_tagsÚ__doc__Ú_prims_commonÚRETURN_TYPEÚNEWÚreturn_typer   Ú	impl_atenÚprim_meta_impl)
Únamer   r*   Ú	impl_metaÚdocÚtagsÚrngprim_defÚprim_packetÚprimÚps
             r   Úregister_rng_primr4      s¶   € Ü—-‘-×)Ñ)Ø�tÑ˜Y°RÀð *ó €Kð ×Ñ˜iÔ(äœ%Ÿ*™*Ÿ.™.×1Ñ1°4Ó8€KØ×Ñ€DÙØˆŒ
à˜4Ð ò %ˆØˆŒ	Ü×+Ñ+×7Ñ7×;Ñ;ˆŒà˜&‘=ˆŒØˆŒØ$ˆÕñ%r   Úshapec                 ór   — t        j                  t        j                  dt        j                  ¬«      «      S )Nr   ©Údtype)r   Ú
TensorLiker   ÚtensorÚint64)r5   s    r   Úphilox_rand_offset_metar<   2   s$   € ô ×ÑœUŸ\™\¨!´5·;±;Ô?Ó@Ð@r   c                 ó|  — d}| D ]  }||z  }Œ	 t        j                  |t         j                  ¬«      }d}d}d}t         j                  j	                  t         j                  j                  «       «      }|j                  |z  }||z   dz
  |z  }	t        |	|j                  |z  «      }	|dz
  ||	z  |z  z  dz   |z  }
|
S )Né   r7   é   é   )	r   Úscalar_tensorr;   ÚcudaÚget_device_propertiesÚcurrent_deviceÚmax_threads_per_multi_processorÚminÚmulti_processor_count)r5   Únumel_scalarÚdim_sizeÚnumelÚ
block_sizeÚunrollÚcurand4_engine_callsÚdevice_propertyÚblocks_per_smÚ	grid_sizeÚoffsets              r   Úphilox_rand_offsetrR   8   sÐ   € ð €LØò !ˆØ˜Ñ ‰ð!ä×Ñ ´E·K±KÔ@€Eà€JØ€FØÐÜ—j‘j×6Ñ6´u·z±z×7PÑ7PÓ7RÓS€OØ#×CÑCÀzÑQ€MØ˜Ñ# aÑ'¨JÑ6€IÜ�I˜×DÑDÀ}ÑTÓU€Ià	�‰˜
 YÑ.°Ñ7Ñ8¸1Ñ<Øñ€Fð €Mr   c                  ó¸  — d} d}dt         j                  dt         j                  dt         j                  dt        t        t
        df      dt        d	t        fd
„}dt         j                  dt         j                  dt         j                  dt        t        t
        df      dt        d	t        fd„}t        | |||dt         j                  j                  f¬«       y )NÚphilox_randz{(SymInt[] size, Tensor seed, Tensor offset, int[]? stride, Device? device=None, ScalarType? dtype=None) -> (Tensor, Tensor)r5   ÚseedrQ   Ústride.r   r8   c                 óp   — |�J ‚t        | «      }t        j                  | |||¬«      }t        | «      }||fS )N)r5   Ústridesr8   r   )r	   r   Ú
TensorMetar<   )r5   rU   rQ   rV   r   r8   Úrandom_valuess          r   Ú_philox_rand_metaz/register_philox_rand.<locals>._philox_rand_metaT   sH   € ð ˆ~Ðˆ~Ü,¨UÓ3ˆÜ×)Ñ)Ø ¨u¸Vô
ˆô )¨Ó/ˆØ˜vÐ&Ð&r   c                 óF  — |�J ‚|j                   dk(  rg }n|g}|j                   dk7  rt        |«      ‚t        j                  j	                  |«      5  t        j                  ||«       t        j                  | ||¬«      }d d d «       t        | «      fS # 1 sw Y   ŒxY w)NÚcpurB   )r   r8   )	r   r   r   ÚrandomÚfork_rngr   Úset_torch_state_tensorÚrandrR   )r5   rU   rQ   rV   r   r8   ÚdevicesrZ   s           r   Ú_philox_randz*register_philox_rand.<locals>._philox_rande   s�   € ð ˆ~Ðˆ~Ø�;‰;˜%ÒØ‰Gà�hˆGà�;‰;˜&Ò Ü# FÓ+Ð+ä�\‰\×"Ñ" 7Ó+ñ 	JÜ×5Ñ5°d¸FÔCÜ!ŸJ™J u°VÀ5ÔIˆM÷	Jð Ô0°Ó7Ð7Ð7÷		Jð 	Jús   Á/BÂB z$Philox based stateless rand operator)r,   r   r*   r-   r.   r/   )r   ÚSizeÚTensorr   ÚtupleÚintr   r   r4   ÚTagÚnondeterministic_seeded)r,   r   r[   rc   s       r   Úregister_philox_randrj   P   sä   € Ø€Dð K€Fð'Ü�z‰zð'ä�l‰lð'ô —‘ð'ô œœs C˜x™Ñ)ð	'ô
 ð'ô ó'ð"8Ü�z‰zð8ä�l‰lð8ô —‘ð8ô œœs C˜x™Ñ)ð	8ô
 ð8ô ó8ô0 ØØØØ#Ø2Ü�i‰i×/Ñ/Ð1ör   c                 óÈ  — |j                  d«      rB|j                  d«      }t        |t        «      rt        j                  |«      }|j
                  S | D �ch c]3  }t        |t        j                  «      sŒ|j                  j
                  ’Œ5 }}t        d„ |D «       «      ryt        d„ |D «       «      ryt        d„ |D «       «      ryt        d„ |D «       «      ry	y c c}w )
Nr   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)rB   Nr   ©Ú.0Údevs     r   ú	<genexpr>zget_device.<locals>.<genexpr>�   s   è ø€ Ò
,˜Sˆ3�&�=Ñ
,ùó   ‚rB   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)ÚxpuNr   rm   s     r   rp   zget_device.<locals>.<genexpr>‘   ó   è ø€ Ò-˜cˆS�E�\Ñ-ùrq   rs   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)ÚhpuNr   rm   s     r   rp   zget_device.<locals>.<genexpr>“   rt   rq   rv   c              3   ó&   K  — | ]	  }|d k(  –— Œ y­w)r]   Nr   rm   s     r   rp   zget_device.<locals>.<genexpr>•   rt   rq   r]   )ÚgetÚ
isinstanceÚstrr   r   r   re   Úany)ÚargsÚkwargsr   Úargrb   s        r   Ú
get_devicer   ‡   s³   € Ø‡z�z�(ÔØ—‘˜HÓ%ˆÜ�fœcÔ"Ü—\‘\ &Ó)ˆFØ�{‰{Ðà*.ÖP 3´*¸SÄ%Ç,Á,Õ2Oˆs�z‰z�‹ÐP€GÐPÜ
Ñ
, GÔ
,Ô,ØÜ	Ñ- WÔ-Ô	-ØÜ	Ñ- WÔ-Ô	-ØÜ	Ñ- WÔ-Ô	-ØØùò Qs   ÁCÁ8Cc                  ó�  ‡‡‡‡‡‡—  G d„ dt         «      }  | «       Š ‰j                  t        j                  «      t	        ‰d¬«      «       ‰j                  t        j
                  «      d„ «       Š‰j                  t        j                  «      d„ «       Š‰j                  t        j                  «      d„ «       Š‰j                  t        j                  «      d„ «       Š‰j                  t        j                  «      ˆˆˆˆfd	„«       Š‰j                  t        «      ˆfd
„«       }‰j                  t        «      ˆˆfd„«       }‰S )Nc                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ú>register_run_and_save_rng_state_op.<locals>.RunAndSaveRngStatec                 ó$   •— t         ‰| �  d«       y )NÚrun_and_save_rng_state©ÚsuperÚ__init__©ÚselfÚ	__class__s    €r   r‡   zGregister_run_and_save_rng_state_op.<locals>.RunAndSaveRngState.__init__œ   s   ø€ Ü‰GÑÐ5Õ6r   c                 ó*   •— t        ‰| �  |g|¢­i |¤ŽS ©N©r†   Ú__call__)r‰   Úopr|   r}   rŠ   s       €r   rŽ   zGregister_run_and_save_rng_state_op.<locals>.RunAndSaveRngState.__call__Ÿ   s   ø€ Ü‘7Ñ# BÐ8¨Ò8°Ñ8Ð8r   ©Ú__name__Ú
__module__Ú__qualname__r‡   rŽ   Ú__classcell__©rŠ   s   @r   ÚRunAndSaveRngStater‚   ›   s   ø„ ô	7÷	9ð 	9r   r–   T©Údeferred_errorc                 óN   — t         j                  j                  «        | |i |¤ŽfS rŒ   )r   rB   Úget_rng_state©r�   r|   r}   s      r   Ú	impl_cudaz5register_run_and_save_rng_state_op.<locals>.impl_cuda¨   s$   € ä�z‰z×'Ñ'Ó)©2¨tÐ+>°vÑ+>Ð>Ð>r   c                 ó:   — t        j                  «        | |i |¤ŽfS rŒ   )r   rš   r›   s      r   Úimpl_cpuz4register_run_and_save_rng_state_op.<locals>.impl_cpu¬   s    € ä×"Ñ"Ó$¡b¨$Ð&9°&Ñ&9Ð9Ð9r   c                 ó„   — t        t        d«      r&t        j                  j                  «        | |i |¤ŽfS t	        d«      ‚©Nrv   z2functionalize a hpu RNG operator is not supported.)Úhasattrr   rv   rš   r   r›   s      r   Úimpl_hpuz4register_run_and_save_rng_state_op.<locals>.impl_hpu°   s:   € ä”5˜%Ô Ü—9‘9×*Ñ*Ó,©b°$Ð.A¸&Ñ.AÐAÐAÜÐOÓPÐPr   c                 óN   — t         j                  j                  «        | |i |¤ŽfS rŒ   )r   rs   rš   r›   s      r   Úimpl_xpuz4register_run_and_save_rng_state_op.<locals>.impl_xpu¶   s$   € ä�y‰y×&Ñ&Ó(©"¨dÐ*=°fÑ*=Ð=Ð=r   c                 óh   •— ‰‰‰‰	dœ}t        ||«      }||v s
J d|› �«       ‚||   } || g|¢­i |¤ŽS ©N)rB   r]   rv   rs   zBackend not supported for ©r   )
r�   r|   r}   Úimpl_mapr   Úimplrž   rœ   r¢   r¤   s
         €€€€r   Úimpl_backend_selectz?register_run_and_save_rng_state_op.<locals>.impl_backend_selectº   s`   ø€ ð ØØØñ	
ˆô ˜D &Ó)ˆØ˜Ñ!ÐHÐ%?À¸xÐ#HÓHÐ!Ø˜ÑˆÙ�BÐ(˜Ò( Ñ(Ð(r   c                 óL   •— | 5   ‰|g|¢­i |¤Žcd d d «       S # 1 sw Y   y xY wrŒ   r   )Úmoder�   r|   r}   rª   s       €r   Úimpl_fake_tensor_modezAregister_run_and_save_rng_state_op.<locals>.impl_fake_tensor_modeÇ   s/   ø€ ð ñ 	<Ù& rÐ;¨DÒ;°FÑ;÷	<÷ 	<ò 	<ús   „š#c                 ó:  •—  ‰|g|¢­i |¤Ž}t        j                  | j                  j                  |g|¢­«      }t        j                  | j                  j                  |«      }| j                  j	                  d‰	||«      }t        ||d | j                  ¬«      S ©NÚcall_function©ÚconstantÚtracer)ÚpytreeÚtree_mapr³   Úunwrap_proxyÚcreate_proxyr   )
r¬   r�   r|   r}   ÚoutÚ
proxy_argsÚproxy_kwargsÚ	out_proxyrª   r„   s
           €€r   Úimpl_proxy_dispatch_modezDregister_run_and_save_rng_state_op.<locals>.impl_proxy_dispatch_modeÍ   s†   ø€ á! "Ð6 tÒ6¨vÑ6ˆÜ—_‘_ T§[¡[×%=Ñ%=À¸{ÀT¹{ÓKˆ
Ü—‘ t§{¡{×'?Ñ'?ÀÓHˆØ—K‘K×,Ñ,ØÐ3°ZÀó
ˆ	ô !  i¸$ÀtÇ{Á{ÔSÐSr   )r   Úpy_implr   ÚAutogradr   ÚCUDAÚCPUÚHPUÚXPUÚBackendSelectr
   r   )	r–   r­   r¼   rª   rž   rœ   r¢   r¤   r„   s	      @@@@@@r   Ú"register_run_and_save_rng_state_oprÄ   š   s@  ý€ ô9Ô0ô 9ñ 0Ó1Ðà8Ð×"Ñ"¤;×#7Ñ#7Ó8Ü Ð!7ÈÔMôð ×#Ñ#¤K×$4Ñ$4Ó5ñ?ó 6ð?ð ×#Ñ#¤K§O¡OÓ4ñ:ó 5ð:ð ×#Ñ#¤K§O¡OÓ4ñQó 5ðQð
 ×#Ñ#¤K§O¡OÓ4ñ>ó 5ð>ð ×#Ñ#¤K×$=Ñ$=Ó>ö
)ó ?ð
)ð ×#Ñ#¤NÓ3ó<ó 4ð<ð
 ×#Ñ#Ô$:Ó;ôTó <ðTð "Ð!r   c                  ó°  ‡‡‡‡‡	—  G d„ dt         «      }  | «       Š	 ‰	j                  t        j                  «      t	        ‰	d¬«      «       ‰	j                  t        j
                  «      d„ «       Š‰	j                  t        j                  «      d„ «       Š‰	j                  t        j                  «      d„ «       Š‰	j                  t        j                  «      d„ «       Š‰	j                  t        «      ˆ	fd	„«       }‰	j                  t        j                  «      ˆˆˆˆfd
„«       }‰	j                  t        «      d„ «       }‰	j                  ˆ	fd„«       }‰	S )Nc                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ú7register_run_with_rng_state_op.<locals>.RunWithRngStatec                 ó$   •— t         ‰| �  d«       y )NÚrun_with_rng_stater…   rˆ   s    €r   r‡   z@register_run_with_rng_state_op.<locals>.RunWithRngState.__init__Ü   s   ø€ Ü‰GÑÐ1Õ2r   c                 ó,   •— t        ‰| �  ||g|¢­i |¤ŽS rŒ   r�   )r‰   Ú	rng_stater�   r|   r}   rŠ   s        €r   rŽ   z@register_run_with_rng_state_op.<locals>.RunWithRngState.__call__ß   s   ø€ Ü‘7Ñ# I¨rÐC°DÒC¸FÑCÐCr   r�   r•   s   @r   ÚRunWithRngStaterÇ   Û   s   ø„ ô	3÷	Dð 	Dr   rÌ   Tr—   c                 óê   — t         j                  j                  «       }t         j                  j                  | j	                  «       «        ||i |¤Ž}t         j                  j                  |«       |S rŒ   )r   rB   rš   Úset_rng_stater]   ©rË   r�   r|   r}   Úcurrent_stater¸   s         r   rœ   z1register_run_with_rng_state_op.<locals>.impl_cudaè   sR   € äŸ
™
×0Ñ0Ó2ˆÜ�
‰
× Ñ  §¡£Ô1Ù�$Ð!˜&Ñ!ˆÜ�
‰
× Ñ  Ô/Øˆ
r   c                 ó’   — t        j                  «       }t        j                  | «        ||i |¤Ž}t        j                  |«       |S rŒ   )r   rš   rÎ   rÏ   s         r   rž   z0register_run_with_rng_state_op.<locals>.impl_cpuð   s@   € ä×+Ñ+Ó-ˆÜ×Ñ˜IÔ&Ù�$Ð!˜&Ñ!ˆÜ×Ñ˜MÔ*Øˆ
r   c                 ó  — t        t        d«      rft        j                  j                  «       }t        j                  j	                  | «        ||i |¤Ž}t        j                  j	                  |«       |S t        d«      ‚r    )r¡   r   rv   rš   rÎ   r   rÏ   s         r   r¢   z0register_run_with_rng_state_op.<locals>.impl_hpuø   sb   € ä”5˜%Ô Ü!ŸI™I×3Ñ3Ó5ˆMÜ�I‰I×#Ñ# IÔ.Ù�dÐ%˜fÑ%ˆCÜ�I‰I×#Ñ# MÔ2ØˆJÜÐOÓPÐPr   c                 óÎ   — t         j                  j                  «       }t         j                  j                  | «        ||i |¤Ž}t         j                  j                  |«       |S rŒ   )r   rs   rš   rÎ   rÏ   s         r   r¤   z0register_run_with_rng_state_op.<locals>.impl_xpu  sL   € äŸ	™	×/Ñ/Ó1ˆÜ�	‰	×Ñ 	Ô*Ù�$Ð!˜&Ñ!ˆÜ�	‰	×Ñ Ô.Øˆ
r   c                 ó|  •— t        «       5   ‰	||g|¢­i |¤Ž}d d d «       t        j                  | j                  j                  ||g|¢­«      }t        j                  | j                  j                  |«      }| j                  j                  d‰	||«      }t        |d | j                  ¬«      S # 1 sw Y   Œ™xY wr¯   ©r   r´   rµ   r³   r¶   r·   r   )
r¬   rË   r�   r|   r}   r¸   r¹   rº   r»   rÉ   s
            €r   r¼   z@register_run_with_rng_state_op.<locals>.impl_proxy_dispatch_mode
  s®   ø€ ô )Ó*ñ 	EÙ$ Y°ÐD°TÒD¸VÑDˆC÷	Eä—_‘_ T§[¡[×%=Ñ%=À	È2Ð?UÐPTÑ?UÓVˆ
Ü—‘ t§{¡{×'?Ñ'?ÀÓHˆØ—K‘K×,Ñ,ØÐ/°¸\ó
ˆ	ô !  i¸$ÀtÇ{Á{ÔSÐS÷	Eð 	Eús   ŒB2Â2B;c                 ój   •— ‰‰‰	‰
dœ}t        ||«      }||v s
J d|› �«       ‚||   } || |g|¢­i |¤ŽS r¦   r§   )rË   r�   r|   r}   r¨   r   r©   rž   rœ   r¢   r¤   s          €€€€r   rª   z;register_run_with_rng_state_op.<locals>.impl_backend_select  sb   ø€ ð ØØØñ	
ˆô ˜D &Ó)ˆØ˜Ñ!ÐHÐ%?À¸xÐ#HÓHÐ!Ø˜ÑˆÙ�I˜rÐ3 DÒ3¨FÑ3Ð3r   c                 óB   — | 5   ||i |¤Žcd d d «       S # 1 sw Y   y xY wrŒ   r   )r¬   rË   r�   r|   r}   s        r   r­   z=register_run_with_rng_state_op.<locals>.impl_fake_tensor_mode$  s)   € ð ñ 	'Ù�tÐ&˜vÑ&÷	'÷ 	'ò 	'úó   ƒ•c                 óò   •— | j                  |«      }| j                  |«      }| j                  |«      }| j                  «       5   ‰	||g|¢­i |¤Ž}| j                  |«      cd d d «       S # 1 sw Y   y xY wrŒ   ©Úunwrap_tensorsÚredispatch_to_nextÚwrap_tensors)
ÚctxrË   r�   r|   r}   Úunwrapped_rng_stateÚunwrapped_argsÚunwrapped_kwargsr¸   rÉ   s
            €r   Úimpl_functionalz7register_run_with_rng_state_op.<locals>.impl_functional+  s…   ø€ à!×0Ñ0°Ó;ÐØ×+Ñ+¨DÓ1ˆØ×-Ñ-¨fÓ5Ðà×#Ñ#Ó%ñ 	)Ù$Ø# RðØ*8òØ<LñˆCð ×#Ñ# CÓ(÷		)÷ 	)ò 	)ús   ÁA-Á-A6)r   r½   r   r¾   r   r¿   rÀ   rÁ   rÂ   r   rÃ   r
   Úpy_functionalize_impl)
rÌ   r¼   rª   r­   râ   rž   rœ   r¢   r¤   rÉ   s
        @@@@@r   Úregister_run_with_rng_state_oprä   Ú   s\  ü€ ôDÔ-ô Dñ )Ó*Ðà4Ð×Ñœ{×3Ñ3Ó4Ü Ð!3ÀDÔIôð ×Ñ¤× 0Ñ 0Ó1ñó 2ðð ×Ñ¤§¡Ó0ñó 1ðð ×Ñ¤§¡Ó0ñQó 1ðQð ×Ñ¤§¡Ó0ñó 1ðð ×ÑÔ 6Ó7ó
Tó 8ð
Tð ×Ñ¤× 9Ñ 9Ó:ö
4ó ;ð
4ð ×Ñ¤Ó/ñ'ó 0ð'ð ×-Ñ-ó	)ó .ð	)ð Ðr   c                  óä  ‡‡—  G d„ dt         «      }  | «       Š ‰j                  t        j                  «      t	        ‰d¬«      «       ‰j                  t        j
                  «      d dœd„«       Š‰j                  t        j                  «      d dœˆfd„
«       }‰j                  t        «      d dœd„«       }‰j                  t        «      d dœˆfd	„
«       }‰j                  d dœˆfd
„
«       }‰S )Nc                   ó.   ‡ — e Zd Zˆ fd„Zddœˆ fd„
Zˆ xZS )úJregister_graphsafe_run_with_rng_state_op.<locals>.GraphSafeRunWithRngStatec                 ó$   •— t         ‰| �  d«       y )NÚgraphsafe_run_with_rng_stater…   rˆ   s    €r   r‡   zSregister_graphsafe_run_with_rng_state_op.<locals>.GraphSafeRunWithRngState.__init__@  s   ø€ Ü‰GÑÐ;Õ<r   N©rË   c                ó.   •— t        ‰| �  |g|¢­d|i|¤ŽS ©NrË   r�   )r‰   r�   rË   r|   r}   rŠ   s        €r   rŽ   zSregister_graphsafe_run_with_rng_state_op.<locals>.GraphSafeRunWithRngState.__call__C  s"   ø€ Ü‘7Ñ# BÐM¨ÒM¸ÐMÀfÑMÐMr   r�   r•   s   @r   ÚGraphSafeRunWithRngStaterç   ?  s   ø„ ô	=ð 15÷ 	Nò 	Nr   rí   Tr—   rê   c                óà   — |j                   j                  }t        j                  j                  |   }|j                  «       }|j                  |«        | |i |¤Ž}|j                  |«       |S rŒ   )r   Úindexr   rB   Údefault_generatorsÚgraphsafe_get_stateÚgraphsafe_set_state)r�   rË   r|   r}   Ú
device_idxÚ	generatorrÐ   r¸   s           r   rœ   z;register_graphsafe_run_with_rng_state_op.<locals>.impl_cudaL  se   € à×%Ñ%×+Ñ+ˆ
Ü—J‘J×1Ñ1°*Ñ=ˆ	Ø!×5Ñ5Ó7ˆØ×%Ñ% iÔ0Ù�$Ð!˜&Ñ!ˆØ×%Ñ% mÔ4Øˆ
r   c                óV   •— t        ||«      }|dk(  s
J d|› �«       ‚ ‰| g|¢­d|i|¤ŽS )NrB   z6GraphSafe RNG operations only supported for CUDA, got rË   r§   )r�   rË   r|   r}   r   rœ   s        €r   rª   zEregister_graphsafe_run_with_rng_state_op.<locals>.impl_backend_selectV  sJ   ø€ ä˜D &Ó)ˆà�fÒð	MàCÀFÀ8ÐLó	MØá˜ÐB˜dÒB¨iÐB¸6ÑBÐBr   c                óB   — | 5   ||i |¤Žcd d d «       S # 1 sw Y   y xY wrŒ   r   )r¬   r�   rË   r|   r}   s        r   r­   zGregister_graphsafe_run_with_rng_state_op.<locals>.impl_fake_tensor_mode^  s'   € àñ 	'Ù�tÐ&˜vÑ&÷	'÷ 	'ò 	'úrØ   c                ó„  •— t        «       5   ‰	|g|¢­d|i|¤Ž}d d d «       t        j                  | j                  j                  |g|¢­«      }t        j                  | j                  j                  d|i|¥«      }| j                  j                  d‰	||«      }t        |d | j                  ¬«      S # 1 sw Y   ŒœxY w)NrË   r°   r±   rÕ   )
r¬   r�   rË   r|   r}   r¸   r¹   rº   r»   ré   s
            €r   r¼   zJregister_graphsafe_run_with_rng_state_op.<locals>.impl_proxy_dispatch_modec  sº   ø€ ä(Ó*ñ 	YÙ.¨rÐX°DÒXÀIÐXÐQWÑXˆC÷	Yä—_‘_ T§[¡[×%=Ñ%=À¸{ÀT¹{ÓKˆ
Ü—‘Ø�K‰K×$Ñ$ {°IÐ&HÀÐ&Hó
ˆð —K‘K×,Ñ,ØÐ9¸:À|ó
ˆ	ô !  i¸$ÀtÇ{Á{ÔSÐS÷	Yð 	Yús   ŒB6Â6B?c                óü   •— |�| j                  |«      nd }| j                  |«      }| j                  |«      }| j                  «       5   ‰	|g|¢­d|i|¤Ž}| j                  |«      cd d d «       S # 1 sw Y   y xY wrì   rÚ   )
rÞ   r�   rË   r|   r}   rß   rà   rá   r¸   ré   s
            €r   râ   zAregister_graphsafe_run_with_rng_state_op.<locals>.impl_functionalp  s˜   ø€ ð .7Ð-BˆC×Ñ˜yÔ)Èð 	ð ×+Ñ+¨DÓ1ˆØ×-Ñ-¨fÓ5Ðà×#Ñ#Ó%ñ 	)Ù.ØðØ#òØ/BðØFVñˆCð ×#Ñ# CÓ(÷		)÷ 	)ò 	)ús   Á	A2Á2A;)
r   r½   r   r¾   r   r¿   rÃ   r
   r   rã   )rí   rª   r­   r¼   râ   ré   rœ   s        @@r   Ú(register_graphsafe_run_with_rng_state_oprù   >  s  ù€ ôNÔ#6ô Nñ $<Ó#=Ð à>Ð ×(Ñ(¬×)=Ñ)=Ó>Ü Ð!=ÈdÔSôð "×)Ñ)¬+×*:Ñ*:Ó;Ø'+ó ó <ðð "×)Ñ)¬+×*CÑ*CÓDØ15õ Có EðCð "×)Ñ)¬.Ó9Ø9=ó 'ó :ð'ð "×)Ñ)Ô*@ÓAØ<@õ 
Tó Bð
Tð "×7Ñ7Ø26õ )ó 8ð)ð (Ð'r   c                  ó   — t        «        y rŒ   )rj   r   r   r   Úregister_rng_primsrû   „  s   € ÜÕr   rŒ   )(Útypingr   r   Útorch.utils._pytreeÚutilsÚ_pytreer´   r   Útorch._Cr   Útorch._higher_order_ops.utilsr   Ú
torch._opsr   Útorch._prims_commonr   r	   Útorch._subclasses.fake_tensorr
   Ú"torch.fx.experimental.proxy_tensorr   r   r   Útorch.typesr   r   r   r4   rd   r<   rR   rj   r   rÄ   rä   r„   rÉ   rù   ré   rû   r   r   r   ú<module>r     s¤   ðå ã ß $Ð $Ý Ý  Ý BÝ *ß OÝ 8÷ñ ÷
 (òó%ð,AØ�:‰:óAðØ�:‰:óò04ònò&="ò@]ñ@ <Ó=Ð Ù3Ó5Ð ò@(ñF  HÓIÐ ór   