Ë
    ÄÓ^j‡P  ã            	       óP  — U 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mZ d dlmZ d dlmZ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j6                  fd„Zdej6                  fd„Zd„ Zd„ Zd„ Z d„ Z! e «       Z" e!«       Z#ddœd„Z$d„ Z% e%«       Z& e'«       Z(e'd   e)d<   d!d„Z* e*e	jV                  «       d dl,m-Z- ej\                  j_                  e-«       ej`                  jb                  je                  ej\                  jf                  dd„ ej`                  jb                  jh                  jj                  ej`                  jb                  jh                  jj                  ej`                  jb                  jh                  jj                  dœ¬«       d„ Z6 e6«       Z7d„ Z8y)"é    )ÚcastN)Ú_prims)ÚDispatchKey)Úautograd_not_implementedÚregister_fake)ÚHigherOrderOperator)ÚCUDARngStateHelperÚmake_contiguous_strides_for)Ú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    úa/var/www/ramen.bs-engineer-server.com/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_opr   Ú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  }t        t        |«      }	|	|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_processorr   ÚintÚminÚmulti_processor_count)r5   Únumel_scalarÚdim_sizeÚnumelÚ
block_sizeÚunrollÚcurand4_engine_callsÚdevice_propertyÚblocks_per_smÚnumÚ	grid_sizes              r   Úphilox_rand_offsetrS   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Ü
Œs�EÓ
€CØ�zÑ! AÑ%¨*Ñ4€IÜ�I˜×DÑDÀ}ÑTÓU€IØ�1‰W˜* yÑ0°6Ñ9Ñ:¸QÑ>ÐBVÑVÐVr   c                  ó¨  — d} d}dt         j                  dt         j                  dt         j                  dt        t        df   d z  dt
        d	t        fd
„}dt         j                  dt         j                  dt         j                  dt        t        df   d z  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   ÚseedÚoffsetÚstride.r   r8   c                 óˆ   — |�t        d|› �«      ‚t        | «      }t        j                  | |||¬«      }t	        | «      }||fS )Nústride must be None, got )r5   Ústridesr8   r   )ÚAssertionErrorr
   r   Ú
TensorMetar<   )r5   rV   rW   rX   r   r8   Úrandom_valuess          r   Ú_philox_rand_metaz/register_philox_rand.<locals>._philox_rand_metaR   sW   € ð ÐÜ Ð#<¸V¸HÐ!EÓFÐFÜ,¨UÓ3ˆÜ×)Ñ)Ø ¨u¸Vô
ˆô )¨Ó/ˆØ˜vÐ&Ð&r   c                 ó^  — |�t        d|› �«      ‚|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)NrZ   ÚcpurB   )r   r8   )
r\   r   r   r   ÚrandomÚfork_rngr	   Úset_torch_state_tensorÚrandrS   )r5   rV   rW   rX   r   r8   Údevicesr^   s           r   Ú_philox_randz*register_philox_rand.<locals>._philox_randd   s¬   € ð ÐÜ Ð#<¸V¸HÐ!EÓFÐFØ�;‰;˜%ÒØ‰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ÚTensorÚtuplerF   r   r   r4   ÚTagÚnondeterministic_seeded)r,   r   r_   rg   s       r   Úregister_philox_randrm   N   sä   € Ø€Dð K€Fð'Ü�z‰zð'ä�l‰lð'ô —‘ð'ô ”c˜3�h‘ $Ñ&ð	'ô
 ð'ô ó'ð$8Ü�z‰zð8ä�l‰lð8ô —‘ð8ô ”c˜3�h‘ $Ñ&ð	8ô
 ð8ô ó8ô2 ØØØØ#Ø2Ü�i‰i×/Ñ/Ð1ör   c                 ó  — |j                  d«      rB|j                  d«      }t        |t        «      rt        j                  |«      }|j
                  S | D ]4  }t        |t        j                  «      sŒ|j                  j
                  c S  y )Nr   )ÚgetÚ
isinstanceÚstrr   r   r   ri   )ÚargsÚkwargsr   Úargs       r   Ú
get_deviceru   ‡   sn   € Ø‡z�z�(ÔØ—‘˜HÓ%ˆÜ�fœcÔ"Ü—\‘\ &Ó)ˆFØ�{‰{Ðàò #ˆÜ�cœ5Ÿ<™<Õ(Ø—:‘:—?‘?Ò"ð#ð 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        j                  «      ˆˆˆˆfd	„«       Št        ‰d¬
«      ˆ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d¬«       y )NÚrun_and_save_rng_stateT©Ú	cacheable©ÚsuperÚ__init__©ÚselfÚ	__class__s    €r   r   zGregister_run_and_save_rng_state_op.<locals>.RunAndSaveRngState.__init__–   s   ø€ Ü‰GÑÐ5ÀÐÕFr   c                 ó*   •— t        ‰| �  |g|¢­i |¤ŽS ©N©r~   Ú__call__)r�   Úoprr   rs   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   ÚRunAndSaveRngStaterx   •   s   ø„ ô	G÷	9ð 	9r   rŽ   T©Údeferred_errorc                 óN   — t         j                  j                  «        | |i |¤ŽfS r„   )r   rB   Úget_rng_state©r‡   rr   rs   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«      ‚©NÚhpuz2functionalize a hpu RNG operator is not supported.)Úhasattrr   r™   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   Úxpur’   r“   s      r   Úimpl_xpuz4register_run_and_save_rng_state_op.<locals>.impl_xpu±   s$   € ä�y‰y×&Ñ&Ó(©"¨dÐ*=°fÑ*=Ð=Ð=r   c                 óp   •— ‰‰‰‰	dœ}t        ||«      }||vrt        d|› �«      ‚||   } || g|¢­i |¤ŽS ©N)rB   ra   r™   r�   zBackend not supported for ©ru   r\   )
r‡   rr   rs   Úimpl_mapr   Úimplr–   r”   r›   rž   s
         €€€€r   Úimpl_backend_selectz?register_run_and_save_rng_state_op.<locals>.impl_backend_selectµ   s`   ø€ ð ØØØñ	
ˆô ˜D &Ó)ˆØ˜Ñ!Ü Ð#=¸f¸XÐ!FÓGÐGØ˜ÑˆÙ�BÐ(˜Ò( Ñ(Ð(r   ©Ú
skip_cachec                 ó   •—  ‰| g|¢­i |¤ŽS r„   r   )r‡   rr   rs   r¤   s      €r   Úimpl_fake_tensor_modezAregister_run_and_save_rng_state_op.<locals>.impl_fake_tensor_modeÃ   s   ø€ ñ # 2Ð7¨Ò7°Ñ7Ð7r   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   )
Úmoder‡   rr   rs   ÚoutÚ
proxy_argsÚproxy_kwargsÚ	out_proxyr¤   rz   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ž   rz   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×$=Ñ$=Ó>ö)ó ?ð)ô Ð)°dÔ;ó8ó <ð8ð ×#Ñ#Ô$:Ó;ô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
„«       }t        ‰	d¬«      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d¬«       y )NÚrun_with_rng_stateTr{   r}   r€   s    €r   r   z@register_run_with_rng_state_op.<locals>.RunWithRngState.__init__×   s   ø€ Ü‰GÑÐ1¸TÐÕBr   c                 ó,   •— t        ‰| �  ||g|¢­i |¤ŽS r„   r…   )r�   Ú	rng_stater‡   rr   rs   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   ø„ ô	C÷	Dð 	Dr   rÈ   Tr�   c                 óê   — t         j                  j                  «       }t         j                  j                  | j	                  «       «        ||i |¤Ž}t         j                  j                  |«       |S r„   )r   rB   r’   Úset_rng_statera   ©rÇ   r‡   rr   rs   Ú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   r™   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   r�   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‡   rr   rs   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                 ór   •— ‰‰‰	‰
dœ}t        ||«      }||vrt        d|› �«      ‚||   } || |g|¢­i |¤ŽS r    r¡   )rÇ   r‡   rr   rs   r¢   r   r£   r–   r”   r›   rž   s          €€€€r   r¤   z;register_run_with_rng_state_op.<locals>.impl_backend_select  sb   ø€ ð ØØØñ	
ˆô ˜D &Ó)ˆØ˜Ñ!Ü Ð#=¸f¸XÐ!FÓGÐGØ˜ÑˆÙ�I˜rÐ3 DÒ3¨FÑ3Ð3r   r¥   c                 ó   —  ||i |¤ŽS r„   r   )rÇ   r‡   rr   rs   s       r   r¨   z=register_run_with_rng_state_op.<locals>.impl_fake_tensor_mode!  s   € ñ �4Ð"˜6Ñ"Ð"r   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‡   rr   rs   Ú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ß   Õ   sY  ü€ ô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ô Ð%°$Ô7ñ#ó 8ð#ð
 ×-Ñ-ó	)ó .ð	)ð Ðr   ©rÇ   c                óR  — |j                   j                  }|j                   j                  }t        t        |d «      }|�t        |d«      st        d|› d|› d�«      ‚|j                  |   }|j                  «       }|j                  |«        | |i |¤Ž}	|j                  |«       |	S )NÚdefault_generatorsú3GraphSafe RNG operations not supported for device 'z' (no torch.z.default_generators))
r   Úindexr   r   r   rš   r\   râ   Úgraphsafe_get_stateÚgraphsafe_set_state)
r‡   rÇ   rr   rs   Ú
device_idxÚdevice_typeÚ
device_modÚ	generatorrÌ   r´   s
             r   Ú_impl_graphsafe_rngrë   :  s¹   € à×!Ñ!×'Ñ'€JØ×"Ñ"×'Ñ'€KÜœ ¨TÓ2€JØÐ¤¨Ð5IÔ!JÜØAÀ+Àð OØ$˜Ð%9ð;ó
ð 	
ð ×-Ñ-¨jÑ9€IØ×1Ñ1Ó3€Mà×!Ñ! )Ô,Ù
ˆdÐ
�fÑ
€CØ×!Ñ! -Ô0Ø€Jr   c                  ó~  ‡—  G d„ dt         «      }  | «       Š ‰j                  t        j                  «      t	        ‰d¬«      «       ‰j                  t        j
                  «      d dœd„«       }t        ‰d¬«      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d¬«       y )NÚgraphsafe_run_with_rng_stateTr{   r}   r€   s    €r   r   zSregister_graphsafe_run_with_rng_state_op.<locals>.GraphSafeRunWithRngState.__init__O  s   ø€ Ü‰GÑÐ;ÀtÐÕLr   Nrà   c                ó.   •— t        ‰| �  |g|¢­d|i|¤ŽS ©NrÇ   r…   )r�   r‡   rÇ   rr   rs   r‚   s        €r   r†   zSregister_graphsafe_run_with_rng_state_op.<locals>.GraphSafeRunWithRngState.__call__R  s"   ø€ ä‘7Ñ# BÐM¨ÒM¸ÐMÀfÑMÐMr   rˆ   r�   s   @r   ÚGraphSafeRunWithRngStaterî   N  s   ø„ ô	Mð 15÷ 	Nò 	Nr   ró   Tr�   rà   c                ó¦   — ddl m} t        ||«      }|� |t        j                  |«      «      st        d|› d|› d�«      ‚t        | g|¢­d|i|¤ŽS )Nr   )Úsupports_graphsafe_rngrã   z,'. Call register_graphsafe_rng_device_type('z') to register.rÇ   )Ú$torch._functorch._aot_autograd.utilsrõ   ru   r   r   r\   rë   )r‡   rÇ   rr   rs   rõ   r   s         r   r¤   zEregister_graphsafe_run_with_rng_state_op.<locals>.impl_backend_select\  sj   € åOä˜D &Ó)ˆØˆ>Ñ!7¼¿¹ÀVÓ8LÔ!MÜ ØEÀfÀXð N<Ø<B¸8À?ðTóð ô # 2ÐL¨ÒL¸	ÐLÀVÑLÐLr   r¥   c                ó   —  | |i |¤ŽS r„   r   )r‡   rÇ   rr   rs   s       r   r¨   zGregister_graphsafe_run_with_rng_state_op.<locals>.impl_fake_tensor_modeh  ó   € á�4Ð"˜6Ñ"Ð"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Ç   rr   rs   r´   rµ   r¶   r·   rð   s
            €r   r¸   zJregister_graphsafe_run_with_rng_state_op.<locals>.impl_proxy_dispatch_model  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Ç   rr   rs   rÚ   rÛ   rÜ   r´   rð   s
            €r   rÝ   zAregister_graphsafe_run_with_rng_state_op.<locals>.impl_functionaly  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ð   s        @r   Ú(register_graphsafe_run_with_rng_state_oprû   M  sÚ   ø€ ôNÔ#6ô Nñ $<Ó#=Ð à>Ð ×(Ñ(¬×)=Ñ)=Ó>Ü Ð!=ÈdÔSôð "×)Ñ)¬+×*CÑ*CÓDØ15ó 	Mó Eð	Mô Ð/¸DÔAØ37ó #ó Bð#ð "×)Ñ)Ô*@ÓAØ<@õ 
Tó Bð
Tð "×7Ñ7Ø26õ )ó 8ð)ð (Ð'r   r   Ú#_registered_graphsafe_dispatch_keysc                 ó|   — | t         v ryt         j                  | «       t        j                  | «      t        «       y)zARegister graphsafe_run_with_rng_state py_impl for a dispatch key.N)rü   Úaddrð   r¹   rë   )Údispatch_keys    r   Úregister_graphsafe_rng_dispatchr   �  s0   € àÔ:Ñ:ØÜ'×+Ñ+¨LÔ9Ü ×(Ñ(¨Ó6Ô7JÕKr   )ÚOpaqueBaseMetaÚ	referencec                 ó   — | j                   gS r„   r   )Úgens    r   ú<lambda>r  ¦  s   € ˜#Ÿ*™*˜€ r   )r   Ú__eq__Ú__ne__)ÚtypÚguard_fnÚmembersc                  ó¶  ‡‡—  G d„ dt         «      }  | «       Š ‰j                  t        j                  «      t	        ‰d¬«      «       ‰j                  t        j
                  «      d„ «       Š‰j                  t        j                  «      ˆfd„«       }t        ‰d¬«      d„ «       }‰j                  t        «      ˆfd	„«       }‰j                  ˆfd
„«       }‰S )u®  
    Register a higher-order operator for DTensor distributed random operations.
    Takes pre-computed integer offsets (start_offset_incr, end_offset_incr), an op,
    and args. Internally adjusts the RNG state using the offsets before/after
    running the op.

    The offsets are computed at trace time from the DTensorSpec, so the compiled graph
    contains only plain integers â€” no DTensorSpec or DeviceMesh objects.
    c                   ó(   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ xZS )ú4register_run_dtensor_rng_op.<locals>.RunDTensorRngOpc                 ó(   •— t         ‰| �  dd¬«       y )NÚrun_dtensor_rng_opFr{   r}   r€   s    €r   r   z=register_run_dtensor_rng_op.<locals>.RunDTensorRngOp.__init__»  s   ø€ ô ‰GÑÐ1¸UÐÕCr   c                 ó.   •— t        ‰| �  |||g|¢­i |¤ŽS r„   r…   )r�   Ústart_offset_incrÚend_offset_incrr‡   rr   rs   r‚   s         €r   r†   z=register_run_dtensor_rng_op.<locals>.RunDTensorRngOp.__call__Ã  s,   ø€ ä‘7Ñ#Ø! ?°BðØ9=òØAGñð r   rˆ   r�   s   @r   ÚRunDTensorRngOpr  º  s   ø„ ô	D÷	ð 	r   r  Tr�   c                 ó¢  — ddl m}  |t        j                  j	                  «       «      }|j
                  j                  «       }|| z   |_        |rt        |d   d«      r|d   j                  n3t        j                  dt        j                  j                  «       › �«      }t        j                  j                  |gd¬«      5  t        j                  j                  |j                  «       	  ||i |¤Ž}	||z   |_        	 d d d «       t        j                  j                  |j                  «       	S # ||z   |_        w xY w# 1 sw Y   ŒCxY w)Nr   )Ú_PhiloxStater   zcuda:rB   )rf   rè   )Ú torch.distributed.tensor._randomr  r   rB   r’   rW   Úclonerš   r   rD   rb   rc   rÊ   Ústate)
r  r  r‡   rr   rs   r  r  Ú
old_offsetr   r´   s
             r   r”   z.register_run_dtensor_rng_op.<locals>.impl_cudaÏ  s  € åAáœUŸZ™Z×5Ñ5Ó7Ó8ˆØ—\‘\×'Ñ'Ó)ˆ
Ø!Ð$5Ñ5ˆŒñ œ  Q¡¨Ô2ð �‰G�NŠNä—‘ ¤e§j¡j×&?Ñ&?Ó&AÐ%BÐCÓDð 	ô
 �\‰\×"Ñ"¨F¨8ÀÐ"ÓHñ 	<Ü�J‰J×$Ñ$ U§[¡[Ô1ð<Ù˜$Ð) &Ñ)�à)¨OÑ;�•÷	<ô 	�
‰
× Ñ  §¡Ô-Øˆ
øð  *¨OÑ;�•ú÷	<ð 	<ús$   Ã*EÃ0D6Ã8
EÄ6EÅEÅEc                 ó`   •— t        ||«      }|dk7  rt        d|› d�«      ‚ ‰| ||g|¢­i |¤ŽS )NrB   z2run_dtensor_rng_op only supports CUDA device, got zF. This operator is designed for distributed random operations on CUDA.)ru   r   )r  r  r‡   rr   rs   r   r”   s         €r   r¤   z8register_run_dtensor_rng_op.<locals>.impl_backend_selectæ  sT   ø€ ä˜D &Ó)ˆØ�VÒÜØDÀVÀHð MWð Xóð ñ Ð*¨O¸RÐQÀ$ÒQÈ&ÑQÐQr   r¥   c                 ó   —  ||i |¤ŽS r„   r   )r  r  r‡   rr   rs   s        r   r¨   z:register_run_dtensor_rng_op.<locals>.impl_fake_tensor_modeð  rø   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‡   rr   rs   r´   rµ   r¶   r·   r  s             €r   r¸   z=register_run_dtensor_rng_op.<locals>.impl_proxy_dispatch_modeô  s¿   ø€ ô )Ó*ñ 	Ù$Ø! ?°BðØ9=òØAGñˆC÷	ô —_‘_Ø�K‰K×$Ñ$Ð'8¸/È2Ð&UÐPTÑ&Uó
ˆ
ô —‘ t§{¡{×'?Ñ'?ÀÓHˆØ—K‘K×,Ñ,ØÐ/°¸\ó
ˆ	ô !  i¸$ÀtÇ{Á{ÔSÐS÷	ð 	ús   ŒB4Â4B=c                 óÒ   •— | j                  |«      }| j                  |«      }| j                  «       5   ‰	|||g|¢­i |¤Ž}| j                  |«      cd d d «       S # 1 sw Y   y xY wr„   rÕ   )
rÙ   r  r  r‡   rr   rs   rÛ   rÜ   r´   r  s
            €r   rÝ   z4register_run_dtensor_rng_op.<locals>.impl_functional  s|   ø€ à×+Ñ+¨DÓ1ˆØ×-Ñ-¨fÓ5Ðà×#Ñ#Ó%ñ 	)Ù$Ø!ØØðð  ò	ð
 #ñˆCð ×#Ñ# CÓ(÷	)÷ 	)ò 	)ús   ´AÁA&)
r   r¹   r   rº   r   r»   r¿   r   r   rÞ   )r  r¤   r¨   r¸   rÝ   r”   r  s        @@r   Úregister_run_dtensor_rng_opr  ¯  sî   ù€ ôÔ-ô ñ )Ó*Ðà4Ð×Ñœ{×3Ñ3Ó4Ü Ð!3ÀDÔIôð ×Ñ¤× 0Ñ 0Ó1ñó 2ðð, ×Ñ¤× 9Ñ 9Ó:óRó ;ðRô Ð%°$Ô7ñ#ó 8ð#ð ×ÑÔ 6Ó7óTó 8ðTð  ×-Ñ-ó)ó .ð)ð Ðr   c                  ó   — t        «        y r„   )rm   r   r   r   Úregister_rng_primsr     s   € ÜÕr   r„   )rÿ   r   ÚreturnN)9Útypingr   r   Útorch.utils._pytreeÚutilsÚ_pytreer¯   r   Útorch._Cr   Útorch._higher_order_ops.utilsr   r   Ú
torch._opsr   Útorch._prims_commonr	   r
   Ú"torch.fx.experimental.proxy_tensorr   r   r   Útorch.typesr   r   r   r4   rh   r<   rS   rm   ru   rÀ   rß   rz   rÅ   rë   rû   rð   Úsetrü   Ú__annotations__r   r»   Útorch._opaque_baser  Ú_CÚ_set_generator_metaclassÚ_libraryÚopaque_objectÚregister_opaque_typeÚ	GeneratorÚ
MemberTypeÚUSE_REALr  r  r   r   r   r   ú<module>r7     s  ðæ ã ß $Ð $Ý Ý  ß QÝ *ß O÷ñ ÷
 (òó%ð.AØ�:‰:óAðWØ�:‰:óWò,6òr
ò>"òB^ñB <Ó=Ð Ù3Ó5Ð ð .2ô ò&:(ñz  HÓIÐ á:=»%Ð # S¨Ñ%7Ó ?óLñ   × 0Ñ 0Ô 1õ .ð ‡�× !Ñ ! .Ô 1à ‡�× Ñ × 1Ñ 1Ø	‡H�H×ÑØÙ%à—.‘.×.Ñ.×9Ñ9×BÑBØ—.‘.×.Ñ.×9Ñ9×BÑBØ—.‘.×.Ñ.×9Ñ9×BÑBñð	 2ô 	òeñP 1Ó2Ð ór   