Ë
    øÿæiZø  ã                   ó¼  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZmZmZmZmZ d dlmZmZ d dlZd dlmc mZ d dlmZ d dlmZmZ d dl m!Z!m"Z" d d	l#m$Z$ 	 d d
lm%Z% erd dl)m*Z*  ede¬«      Z+ edd¬«      Z, e-ed«      xr	  e-ed«      Z.ej^                  d„ «       Z0 G d„ d«      Z1de1defd„Z2i Z3e4e5df   e6d<   ejn                  ejp                  ejr                  ejt                  ejv                  ejx                  ejz                  gZ> G d„ de1e j~                  «      Z@d„ ZAd„ ZBd„ ZCd„ ZD G d„ d «      ZE eE«       aFdCd!„ZGd"„ ZHd#„ ZId$„ ZJd%„ ZKd&„ ZLd'„ ZM eN«       aOeNd(   e6d)<   d*„ ZPd+„ ZQd,„ ZR G d-„ d(e1ee,e+f   «      ZS G d.„ d/eSe,e+f   «      ZTd0eUfd1„ZVd0eUfd2„ZWd3ej°                  d0eUfd4„ZY G d5„ d6ee,e+f   «      ZZdeZe,e+f   d7e,j¶                  d8e,j¸                  d0e+fd9„Z] G d:„ d;ej¼                  «      Z_d<„ Z`d=„ Za G d>„ d?ej¼                  «      Zb G d@„ dAej¼                  «      Zc ec«       Zdece6dB<   y# e&$ r  e'e(«      Z%Y �Œæw xY w)Dé    N)ÚCallableÚIterator)Úcached_property)ÚAnyÚClassVarÚConcatenateÚfinalÚGenericÚTYPE_CHECKING)Ú	ParamSpecÚTypeVar)Ú_utils_internal)Ú_dispatch_is_included_in_aliasÚDispatchKey)Údispatch_functorchÚTransformType)ÚTorchDispatchMode)ÚNotImplementedType)ÚBaseFunctionalizeAPIÚ_T)ÚdefaultÚ_P.ÚgetdlopenflagsÚsetdlopenflagsc               #   óþ   K  — t         sd–— yt        j                  «       } t        j                  | t        j
                  z  «       	 d–— t        j                  | «       y# t        j                  | «       w xY w­w)z�
    Context manager to set the RTLD_GLOBAL dynamic linker flag while we open a
    shared library to load custom operators.
    N)Ú_SET_GLOBAL_FLAGSÚsysr   r   ÚctypesÚRTLD_GLOBAL)Ú	old_flagss    ú_/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torch/_ops.pyÚdl_open_guardr"   (   s\   è ø€ õ ÛØÜ×"Ñ"Ó$€IÜ×Ñ�y¤6×#5Ñ#5Ñ5Ô6ð&Ûä×Ñ˜9Õ%øŒ×Ñ˜9Õ%üs   ‚AA=Á	A# ÁA=Á#A:Á:A=c                   óÈ   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zdee	   ee
j                     z  ez  ez  deeeef   geeef   f   fd„Zd	eed
ef   ef   deed
ef   ef   fd„Zd„ Zy)ÚOperatorBasez·
    Base class for OpOverload (which represents C++ ATen operators) and HigherOrderOperator
    (which represents Python-only operators that are unrepresentable in TorchScript).
    c                 ó<   — i | _         i | _        i | _        i | _        y ©N)Ú_dispatch_cacheÚ
py_kernelsÚpython_key_tableÚfunctorch_table©Úselfs    r!   Ú__init__zOperatorBase.__init__?   s0   € ð  UWˆÔð BDˆŒð ð 	Ôð  "ˆÕó    c                 ó   — t         ‚r&   ©ÚNotImplementedError©r,   ÚargsÚkwargss      r!   Ú__call__zOperatorBase.__call__i   ó   € Ü!Ð!r.   c                 ó   — || j                   v S r&   )r(   )r,   Úks     r!   Úhas_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyl   s   € Ø�D—O‘OÐ#Ð#r.   c                 óŒ   — | j                   D ]5  }t        j                  j                  |«      rŒ#|j	                  |«      sŒ5 y y)NTF)r(   ÚtorchÚ_CÚ_dispatch_is_alias_keyÚhas)r,   Úksr8   s      r!   Úhas_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_keyo   s4   € Ø—”ˆAÜ—8‘8×2Ñ2°1Õ5¸"¿&¹&À½)Ùð !ð r.   r8   Úreturnc                 ód   ‡ ‡— dt         t        t        f   dt         t        t        f   fˆˆ fd„}|S )NÚfnrA   c                 óÄ  •— t        j                  ‰«      rqt        ‰t        «      st        ‰t        j
                  «      rG‰‰j                  v rt        ‰› d�«      ‚| ‰j                  ‰<   ‰j                  j                  «        | S t        ‰t        «      r-‰‰j                  v rt        ‰› d�«      ‚| ‰j                  ‰<   | S t        ‰t        «      st        dt        ‰«      › �«      ‚‰t        j                  k(  rt        d«      ‚‰‰j                   v rt#        d‰› d‰j%                  «       › �«      ‚| ‰j                   ‰<   ‰j                  j                  «        | S )Nz' already registered in python_key_tablez& already registered in functorch_tablezexpected DispatchKey, got z>Please register a mode for the DispatchKey.Python key instead.z%Trying to override a python impl for z on operator )ÚinspectÚisclassÚ
issubclassr   r;   ÚTensorr)   ÚAssertionErrorr'   ÚclearÚ
isinstancer   r*   r   ÚtypeÚPythonr(   ÚRuntimeErrorÚname)rC   r8   r,   s    €€r!   Úinnerz#OperatorBase.py_impl.<locals>.innery   sF  ø€ Ü�‰˜qÔ!Ü˜1Ô/Ô0´J¸qÄ%Ç,Á,Ô4Oà˜×-Ñ-Ñ-Ü(¨A¨3Ð.UÐ)VÓWÐWà+-�×%Ñ% aÑ(Ø×$Ñ$×*Ñ*Ô,Ø�	ä˜!œ]Ô+Ø˜×,Ñ,Ñ,Ü(¨A¨3Ð.TÐ)UÓVÐVØ*,�×$Ñ$ QÑ'Ø�	ä˜a¤Ô-Ü$Ð'AÄ$ÀqÃ'ÀÐ%KÓLÐLØ”K×&Ñ&Ò&Ü$ØTóð ð �D—O‘OÑ#Ü"Ø;¸A¸3¸mÈDÏIÉIËKÈ=ÐYóð ð "$ˆD�O‰O˜AÑØ× Ñ ×&Ñ&Ô(ØˆIr.   )r   r   r   )r,   r8   rP   s   `` r!   Úpy_implzOperatorBase.py_implu   s0   ù€ ð	”hœr¤2˜vÑ&ð 	¬8´B¼°FÑ+;ö 	ð@ ˆr.   rC   r   c           	      ó  ‡‡‡‡— ddl mŠm}mŠmŠ dt
        j                  dt
        j                  dt        fˆˆfd„}d|d z  dt
        j                  dt
        j                  dt        t        z  fˆˆfd„}dt
        j                  dt
        j                  dt        fˆˆfd	„} | j                  t        j                  «      |«        | j                  |«      |«        | j                  t        j                  «      |«       ‰S )
Nr   )ÚCppFunctionalizeAPIÚFunctionalTensorModeÚFunctorchFunctionalizeAPIÚPythonFunctionalizeAPIr3   r4   rA   c                  ó&   •—  ‰ ‰«       g| ¢­i |¤ŽS r&   © )r3   r4   rS   rC   s     €€r!   Úfunctionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn²   s   ø€ ÙÑ)Ó+Ð=¨dÒ=°fÑ=Ð=r.   Úmodec                 ót   •— ddl m} ddlm} ddlm}  |||f||f¬«      rt        S  ‰ ‰| «      g|¢­i |¤ŽS )Nr   )Úhas_user_subclass)Ú
FakeTensor)ÚFunctionalTensor)Úallowed_subclasses)Útorch._higher_order_ops.utilsr\   Útorch._subclassesr]   Ú#torch._subclasses.functional_tensorr^   ÚNotImplemented)rZ   r3   r4   r\   r]   r^   rV   rC   s         €€r!   Úfunctionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fnµ   sJ   ø€ õ HÝ4ÝLá Ø�v�Ø$.Ð0@Ð#Aõô &Ð%ÙÑ,¨TÓ2ÐD°TÒD¸VÑDÐDr.   c                 ó(   •—  ‰ ‰| «      g|¢­i |¤ŽS r&   rX   )Úinterpreterr3   r4   rU   rC   s      €€r!   Úfunctionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fnÃ   s    ø€ ñ Ñ/°Ó<ÐN¸tÒNÀvÑNÐNr.   )rb   rS   rT   rU   rV   r   r3   r4   r   r   rQ   r   ÚFunctionalizer   )	r,   rC   rT   rY   rd   rg   rS   rU   rV   s	    `    @@@r!   Úpy_functionalize_implz"OperatorBase.py_functionalize_impl¦   så   û€ ÷	
ó 	
ð	>¤r§w¡wð 	>¼"¿)¹)ð 	>Ìö 	>ð	EØ&¨Ñ-ð	EÜ68·g±gð	EÜIKÏÉð	EäÔ$Ñ$ö	Eð	OÜ "§¡ð	OÜ35·9±9ð	Oäö	Oð
 	0ˆ�‰”[×.Ñ.Ó/Ð0CÔDØ*ˆ�‰Ð)Ó*Ð+IÔJØ1ˆ�‰”]×0Ñ0Ó1Ð2LÔMàˆ	r.   c                 ó   — t         ‚r&   r0   r+   s    r!   rO   zOperatorBase.nameÎ   r6   r.   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r-   r5   r9   r@   rL   r   r;   rH   r   r   r   r   r   rQ   r   ri   rO   rX   r.   r!   r$   r$   9   s¶   „ ñò
("òT"ò$òð$àÐ!Ñ" T¨%¯,©,Ñ%7Ñ7¸-ÑGÈ+ÑUð$ð 
�8˜B ˜FÑ#Ð$ h¨r°2¨vÑ&6Ð6Ñ	7ó$ðb&Ø˜;Ð'=¸rÐ'AÑBÀBÐFÑGð&à	�+Ð4°bÐ8Ñ9¸2Ð=Ñ	>ó&óP"r.   r$   Úopr8   c                 óŒ  — | j                  |«      r|S t        j                  }|t        j                  k(  st	        ||«      r| j                  |«      r|S t        j
                  }|t        j                  k(  st	        ||«      r| j                  |«      r|S | j                  t        j                  j                  |«      «      xs | j                  t        j
                  «      }t        j                  }|t        j                  k7  r!t	        ||«      r| j                  |«      r|s|S t        j                  }|t        j                  k(  st	        ||«      r\| j                  |«      rK|t        j                  k(  r4| j                  t        j                  j                  «      rt        d«      ‚|s|S t        j                  }t	        ||«      r| j                  |«      r|S t        j                   }t	        ||«      r| j                  |«      r|S t        j                  j#                  |«      r|S t%        d| › d|› �«      ‚)Nzambiguous autogradother kernelzcould not find kernel for ú at dispatch key )r9   r   Ú&CompositeExplicitAutogradNonFunctionalÚ	UndefinedÚis_included_in_aliasÚCompositeExplicitAutogradr@   r;   r<   Ú*_dispatch_get_backend_keyset_from_autogradÚ%CompositeImplicitAutogradNestedTensorÚCompositeImplicitAutogradÚAutogradOtherÚ _dispatch_autogradother_backendsrN   ÚAutogradÚFuncTorchBatchedDecompositionÚ_dispatch_has_backend_fallbackr1   )ro   r8   ÚcandÚhas_backend_kernels       r!   Úresolve_keyr€   Ó   sì  € à	×%Ñ% aÔ(Øˆä×=Ñ=€Dà	Œ[×"Ñ"Ò"Ô&:¸1¸dÔ&CØ
×
(Ñ
(¨Ô
.Øˆä×0Ñ0€Dà	Œ[×"Ñ"Ò"Ô&:¸1¸dÔ&CØ
×
(Ñ
(¨Ô
.ØˆØ×;Ñ;Ü�‰×;Ñ;¸AÓ>óò Oà	×	'Ñ	'¬×(MÑ(MÓ	Nð ô ×<Ñ<€Dà	
Œk×#Ñ#Ò	#Ô(<¸QÀÔ(EØ×*Ñ*¨4Ô0Ù"àˆÜ×0Ñ0€Dà	Œ[×"Ñ"Ò"Ô&:¸1¸dÔ&CØ
×
(Ñ
(¨Ô
.Ø”×)Ñ)Ò)¨b×.PÑ.PÜ�H‰H×5Ñ5ô/
ô Ð?Ó@Ð@Ù#ØˆKä×Ñ€DÜ˜A˜tÔ$¨×)GÑ)GÈÔ)MØˆä×4Ñ4€DÜ˜A˜tÔ$¨×)GÑ)GÈÔ)MØˆä‡x�x×.Ñ.¨qÔ1ð ˆÜ
Ð :¸2¸$Ð>OÐPQÈsÐSÓ
TÐTr.   ÚHigherOrderOperatorÚ_higher_order_opsc                   ó  ‡ — e Zd Zddœˆ fd„
Zdee   eej                     z  ez  e	z  de
e
eef   ge
eef   f   fˆ fd„Zde
eef   de
eef   fd„Zed	„ «       Zedefd
„«       Zd„ Zd„ Zej.                  d„ «       Zd„ Zd„ Zd„ Zdd„Zˆ xZS )r�   F)Ú	cacheablec                ó0  •— t         ‰| �  «        t        | «      t        u rt	        d«      ‚|| _        || _        | t        |<   d| _        d| _	        || _
        t        j                  j                  «       | _        t        D ]  }| j!                  |«       Œ y )NzODirect instantiation of HigherOrderOperator is not allowed. Please subclass it.Úhigher_orderútorch.ops.higher_order)Úsuperr-   rL   r�   rN   Ú_namerk   r‚   Ú_nsrl   Ú
_cacheabler;   r<   Ú_dispatch_keyset_fullÚnon_fallthrough_keysÚ2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSÚfallthrough)r,   rO   r„   Údispatch_keyÚ	__class__s       €r!   r-   zHigherOrderOperator.__init__  s‹   ø€ Ü‰ÑÔÜ�‹:Ô,Ñ,ÜØaóð ð ˆŒ
ð ˆŒØ"&Ô˜$ÑØ!ˆŒØ2ˆŒØ#ˆŒä$)§H¡H×$BÑ$BÓ$DˆÔ!çNˆLØ×Ñ˜\Õ*ñ Or.   r8   rA   c                 ó¸   •— t        |t        «      r;| j                  j                  |«      s | j                  j	                  |«      | _        t
        ‰| �  |«      S r&   )rK   r   r�   r>   Úaddrˆ   rQ   ©r,   r8   r‘   s     €r!   rQ   zHigherOrderOperator.py_impl7  sJ   ø€ ô �aœÔ%¨d×.GÑ.G×.KÑ.KÈAÔ.NØ(,×(AÑ(A×(EÑ(EÀaÓ(HˆDÔ%Ü‰w‰˜qÓ!Ð!r.   rC   c                 ó®   ‡ ‡— dt         j                  dt         j                  dt        fˆˆ fd„} ‰ j	                  t
        j                  «      |«       ‰S )Nr3   r4   rA   c                  ó¼  •— t        j                  «       r+t        j                  t         j                  d„ g | ¢|‘­«      r0t         j
                  j                  «       5   ‰| i |¤Žcd d d «       S ddlm}  |‰«      rK ‰j                  | i |¤Ž}t        d„ |j                  D «       «      rt        d‰j                  «       › d�«      ‚ ‰| i |¤ŽS # 1 sw Y   ŒjxY w)Nc                 ó   — | j                    S r&   )Úrequires_grad)Úts    r!   Ú<lambda>zRHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<lambda>F  s   € ˜aŸo™oÑ-r.   r   )Ú_has_gen_schemac              3   ó4   K  — | ]  }|j                   –— Œ y ­wr&   )Úis_write©Ú.0Úargs     r!   Ú	<genexpr>zSHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<genexpr>P  s   è ø€ Ð@Ñ/?¨�s—|•|Ñ/?ùs   ‚zThe zå HigherOrderOperator does not currently support training with in-place input or buffer mutations If you require this feature, please submit an issue to PyTorch. Alternatively, consider creating your own custom autograd.Function. )r;   Úis_grad_enabledÚpytreeÚtree_all_onlyrH   r<   Ú_AutoDispatchBelowAutogradr`   r›   Ú
gen_schemaÚanyÚ	argumentsrN   rO   )r3   r4   r›   ÚschemarC   r,   s       €€r!   Úmaybe_run_autogradz@HigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autogradC  sÐ   ø€ Ü×(Ñ(Ô*¬f×.BÑ.BÜ—‘Ù-Ø�$�˜‘ô/ô
 —X‘X×8Ñ8Õ:Ù Ð0¨Ñ0÷ ;Ñ:õ Fá˜tÔ$Ø(˜Ÿ™¨$Ð9°&Ñ9�ÜÑ@¨v×/?Ò/?Ó@Ô@Ü&Ø˜tŸy™y›{˜mð ,_ð _óð ñ �tÐ&˜vÑ&Ð&÷ ;Ð:ús   ÁCÃC)r   r3   r4   r   rQ   r   r{   )r,   rC   rª   s   `` r!   Úpy_autograd_implz$HigherOrderOperator.py_autograd_impl?  sF   ù€ ð	'¤b§g¡gð 	'¼¿¹ð 	'Ärö 	'ð. 	+ˆ�‰”[×)Ñ)Ó*Ð+=Ô>àˆ	r.   c                 ó   — | j                   S r&   )rŠ   r+   s    r!   Ú	namespacezHigherOrderOperator.namespace^  ó   € à�x‰xˆr.   c                 ó  — ddl m} | j                  xss | j                  › d| j                  › �t
        j                  j                  j                  v xs2 t        | |«      xr$ t
        j                  j                  j                  S )Nr   )ÚAutogradFunctionApplyÚ.)Ú"torch._functorch.autograd_functionr°   r‹   rl   rk   r;   Ú	_inductorÚconfigÚ!unsafe_marked_cacheable_functionsrK   Ú
_functorchÚ.autograd_cache_allow_custom_autograd_functions)r,   r°   s     r!   r„   zHigherOrderOperator.cacheableb  su   € åLð �O‰Oò Ø—/‘/Ð" ! D§M¡M ?Ð3Ü�‰×%Ñ%×GÑGðHòô ˜4Ð!6Ó7ò [Ü×$Ñ$×+Ñ+×ZÑZð	
r.   c                 óD   — | j                   j                  |«      | _         y r&   )r�   Úremove)r,   r�   s     r!   r�   zHigherOrderOperator.fallthroughp  s   € Ø$(×$=Ñ$=×$DÑ$DÀ\Ó$RˆÕ!r.   c                ó:	  ‡‡— ddl m} || j                  v r5| j                  |   }t        |t        «      rt        d|› �«      ‚ ||i |¤ŽS |t        j                  k(  rt        | ||«      S |t        j                  k(  �rpg Šd„ Šˆˆfd„}g |¢|j                  «       ¢­D ]0  } ||«       t        |t        t        f«      sŒ"|D ]
  } ||«       Œ Œ2 t        ‰«      }	ddl m}
  |«       }|�¹t        |«      | j                  v r5| j                  t        |«         } |
«       5 } ||g|¢­i |¤Ž}d d d «       nc|j                  r% |
«       5 }|j!                  | g ||«      cd d d «       S t#        d| j$                  › d|› d	|› d
|› d| j$                  › d|› d�«      ‚t&        ur|S |	D ]õ  }t        |«      }|j                   t(        j*                  j,                  u rŒ5|t(        j.                  j0                  j2                  u rMt(        j.                  j0                  j4                  }| j                  |   } ||j6                  g|¢­i |¤Ž}|c S || j                  v r| j                  |   } ||i |¤Ž}nt#        d| j$                  › d|› d�«      ‚|t&        usŒó|c S  t9        d| j$                  › d|› d|	D �cg c]  }t        |«      j:                  ‘Œ c}› d| j$                  › d|› d�«      ‚t(        j*                  j=                  |«      }|t        j>                  k(  r³ddl m}
 tA        «       dkD  r t(        j*                  jC                  t        j                  «      sstE        «       }|€t        d«      ‚t        |«      | j                  vrt        d|› d�«      ‚| j                  t        |«         } |
|«      5 } ||g|¢­i |¤Žcd d d «       S tG        | |«      }|| jH                  vrt#        d| j$                  › d|› d|› d�«      ‚|t        j>                  k7  r| jH                  |   | j                  |<   | jH                  |   }t        |t        «      rt        d|› �«      ‚ ||i |¤ŽS # 1 sw Y   �ŒàxY w# 1 sw Y   �ŒíxY wc c}w # 1 sw Y   ŒÅxY w)Nr   ©Ú_get_current_dispatch_modez!unexpected DispatchKey in cache: c                 ó^   — t         j                  j                  | «      j                  d«      S )NrM   )r;   r<   Ú_dispatch_keysr>   )Útensors    r!   Úhas_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key‡  s"   € Ü—x‘x×.Ñ.¨vÓ6×:Ñ:¸8ÓDÐDr.   c                 óp   •— t        | t        j                  «      r ‰| «      r‰j                  | «       y y y r&   )rK   r;   rH   Úappend)r    rÀ   Úoverloaded_args_lists    €€r!   Úcheck_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloadedŠ  s/   ø€ Ü˜c¤5§<¡<Ô0±^ÀCÔ5HØ(×/Ñ/°Õ4ð 6IÐ0r.   )Ú_pop_mode_temporarilyz5There was no rule registered for HigherOrderOperator z
 and mode z.Hint: set zc's supports_higher_order_operators to True. This causes all higher order operators to pass through zk's __torch_dispatch__, so handle them accordingly by adding support for HigerOrderOperators (in this case, z) in zC.__torch_dispatch__ or returning NotImplemented when not supported.z%There was no rule registered for HOP z and subclass z. We recommend filing an issue.zHigherOrderOperator 'z¹' is not supported for the given input types. This typically happens when using custom tensor types or dispatch modes that don't have implementations for this operation.

Current mode: z
Input types: z$

To fix this, can add support for 'z' in z's __torch_dispatch__
zIIllegal invocation of dispatch on DispatchKey.PreDispatch without a mode.zCurrent active mode z not registeredz.could not find kernel for HigherOrderOperator rq   z (resolved from Ú)z&unexpected DispatchKey in py_kernels: )%Útorch.utils._python_dispatchr¼   r'   rK   r   rI   ÚFuncTorchDynamicLayerFrontModer   rM   ÚvaluesÚlistÚtuplerÅ   rL   r)   Úsupports_higher_order_operatorsÚ__torch_dispatch__r1   r‰   rc   r;   r<   Ú_disabled_torch_dispatch_implÚ_subclassesÚfake_tensorr]   ÚFakeTensorModeÚ	fake_modeÚ	TypeErrorrk   Ú_to_functionality_keyÚPreDispatchÚ&_len_torch_dispatch_stack_pre_dispatchÚ&_dispatch_tls_is_dispatch_key_excludedÚ'_get_current_dispatch_mode_pre_dispatchr€   r(   )r,   r�   r3   r4   r¼   ÚkernelrÄ   r    ÚaÚoverloaded_argsrÅ   Ú	curr_modeÚhandlerrZ   ÚresultÚsubclass_typeÚfunctionality_keyÚ	final_keyrÀ   rÃ   s                     @@r!   ÚdispatchzHigherOrderOperator.dispatchu  sý  ù€ ÝKà˜4×/Ñ/Ñ/Ø×)Ñ)¨,Ñ7ˆFÜ˜&¤+Ô.Ü$Ð'HÈÈÐ%QÓRÐRÙ˜4Ð* 6Ñ*Ð*àœ;×EÑEÒEÜ% d¨D°&Ó9Ð9àœ;×-Ñ-Ó-ð $&Ð òEõ5ð 1˜Ð0 §¡£Ô0�Ù  Ô%Ü˜c¤D¬% =Õ1Û ˜Ù(¨Õ+ñ !ð 1ô $Ð$8Ó9ˆOõ Ká2Ó4ˆIØÐ$Ü˜	“? d×&;Ñ&;Ñ;Ø"×3Ñ3´D¸³OÑD�GÙ.Ô0°Dñ ")¨Ð!?°Ò!?¸Ñ!?˜÷ 1Ð0ð
 !×@Ò@Ù2Ô4¸Ø#,×#?Ñ#?ÀÀbÈ$ÐPVÓ#W÷ 5Ñ4ô 2ØSÐTX×T^ÑT^ÐS_Ð_iÐjsÐitð u)Ø)2¨ð 4WØW`ÐVað bVàVZ×V`ÑV`ÐUað b Ø )˜{ð +LðMóð ð ¤Ñ/Ø!�Mó '�Ü $ S£	�à!×4Ñ4Ü—x‘x×=Ñ=ñ>ð ð !¤E×$5Ñ$5×$AÑ$A×$LÑ$LÑLÜ$)×$5Ñ$5×$AÑ$A×$PÑ$P�MØ"×3Ñ3°MÑB�GÙ$ S§]¡]ÐD°TÒD¸VÑD�FØ!’Mà  D×$9Ñ$9Ñ9Ø"×3Ñ3°MÑB�Gñ % dÐ5¨fÑ5‘Fä-Ø?ÀÇ
Á
¸|È>ÐZgÐYhð i8ð 9óð ð ¤Ò/Ø!’Mð= 'ôB Ø'¨¯
©
 |ð 4!ð "+ ð , Ù;JÓ K¹?°a¤ a£×!1Ó!1¸?Ñ KÐLð M5Ø59·Z±Z°LÀÀiÀ[ÐPgðióð ô "ŸH™H×:Ñ:¸<ÓHÐØ¤× 7Ñ 7Ò7ÝJô
 7Ó8¸1Ò<Ü—h‘h×EÑEÜ×"Ñ"ôô DÓE�	ØÐ$Ü(Øcóð ô ˜	“?¨$×*?Ñ*?Ñ?Ü(Ø.¨y¨k¸ÐIóð ð ×/Ñ/´°Y³Ñ@�Ù*Ð+<Ô=ÀÙ" 4Ð9¨$Ò9°&Ñ9÷ >Ñ=ô    lÓ3ˆ	ð ˜DŸO™OÑ+Ü%Ø@ÀÇÁÀð M#Ø#, +Ð-=¸l¸^È1ðNóð ð œ;×2Ñ2Ò2Ø15·±ÀÑ1KˆD× Ñ  Ñ.Ø—‘ Ñ+ˆô �fœkÔ*Ü Ð#IÈ&ÈÐ!RÓSÐSÙ�tÐ&˜vÑ&Ð&÷[ 1Ñ0ú÷ 5Ñ4üòl !L÷2 >Ð=ús*   Ä#Q2ÅQ?Ê:RÎ?RÑ2Q<Ñ?R	ÒRc                ó  — t        ||«      }t        j                  j                  |«      r$t        j                  j                  | |g|¢­i |¤ŽS t        ||| j                  «      } | j                  |j                  «       g|¢­i |¤ŽS r&   )	Ú_to_flat_tupler;   Ú	overridesÚhas_torch_functionÚhandle_torch_functionÚ_compute_keysetr�   râ   ÚhighestPriorityTypeId)r,   r3   r4   Ú	flat_argsÚdispatch_key_sets        r!   r5   zHigherOrderOperator.__call__  s‰   € ä" 4¨Ó0ˆ	Ü�?‰?×-Ñ-¨iÔ8Ü—?‘?×8Ñ8Ø�iðØ"&òØ*0ñð ô +¨4°¸×9RÑ9RÓSÐØˆt�}‰}Ð-×CÑCÓEÐWÈÒWÐPVÑWÐWr.   c                 ó4   — t        d| j                  › d�«      ‚)NzHigherOrderOperator z¼ does not implement a gen_schema. This is OK as long as the hop is functional. e.g. it should not mutate its inputs and there are no input, output aliasing via views or direct referencing.)r1   r‰   r2   s      r!   r¦   zHigherOrderOperator.gen_schema#  s$   € Ü!Ø" 4§:¡: ,ð //ð 0ó
ð 	
r.   c                 ó$   — | j                  «       › S r&   )rO   r+   s    r!   Ú__str__zHigherOrderOperator.__str__+  s   € Ø—)‘)“+�Ðr.   c                 ó   — | j                   S r&   ©r‰   r+   s    r!   rO   zHigherOrderOperator.name.  ó   € Ø�z‰zÐr.   c                 ó   — | S r&   rX   ©r,   Úmemos     r!   Ú__deepcopy__z HigherOrderOperator.__deepcopy__2  ó   € Øˆr.   r&   )rk   rl   rm   r-   rL   r   r;   rH   r   r   r   r   r   rQ   r«   Úpropertyr­   r	   Úboolr„   r�   râ   ÚabcÚabstractmethodr5   r¦   rî   rO   rõ   Ú__classcell__©r‘   s   @r!   r�   r�     sö   ø„ ð +0ö +ð8"àÐ!Ñ" T¨%¯,©,Ñ%7Ñ7¸-ÑGÈ+ÑUð"ð 
�8˜B ˜FÑ#Ð$ h¨r°2¨vÑ&6Ð6Ñ	7õ"ðà�R˜�VÑðð 
�"�b�&Ñ	óð> ñó ðð ð
˜4ò 
ó ð
òSò
U'ðn 	×ÑñXó ðXò,
ò ò÷r.   c                 ó,   — t        j                  | i |¤ŽS r&   )r£   Úarg_tree_leaves©r3   r4   s     r!   rä   rä   6  s   € Ü×!Ñ! 4Ð2¨6Ñ2Ð2r.   c                 ó2   — t        | |«      }t        ||«      S r&   )Ú_get_tensorsÚkey_extractor)r3   r4   r�   Útensorss       r!   rè   rè   :  s   € Ü˜4 Ó(€GÜ˜Ð"6Ó7Ð7r.   c                 óŽ   — t        | |«      }|D �cg c]  }t        |t        j                  «      sŒ|‘Œ! }}t	        |«      S c c}w r&   )rä   rK   r;   rH   rË   )r3   r4   Úflat_allr™   Útensor_argss        r!   r  r  ?  s@   € Ü˜d FÓ+€HÙ&ÓF™h˜¬*°Q¼¿¹Õ*E’1˜h€KÐFÜ�ÓÐùò Gs
   ‘A±Ac                 óà   — t         j                  j                  «       }| D ]$  }|t         j                  j                  |«      z  }Œ& |t         j                  j	                  «       z
  }||z  }|S r&   )r;   r<   Ú_dispatch_tls_local_include_setr¾   Ú_dispatch_tls_local_exclude_set)r  Úkey_maskÚkey_setr¿   s       r!   r  r  G  s]   € Ü�h‰h×6Ñ6Ó8€GÛˆØœEŸH™H×3Ñ3°FÓ;Ñ;‰ð àœŸ™×@Ñ@ÓBÑB€GØ˜Ñ €GØ€Nr.   c                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)Ú_ModeStackStateForPreDispatchc                 ó$   — d d g| _         d | _        y r&   )Ú*_ModeStackStateForPreDispatch__infra_modesÚ_schema_check_moder+   s    r!   r-   z&_ModeStackStateForPreDispatch.__init__^  s   € Ø" D˜\ˆÔØ"&ˆÕr.   c                 óš   — |t        | j                  «      k\  r$t        d|› dt        | j                  «      › �«      ‚|| j                  |<   y ©Nzindex z& out of bounds for infra_modes length ©Úlenr  rI   )r,   ÚindexrZ   s      r!   Úsetz!_ModeStackStateForPreDispatch.setb  sQ   € Ø”C˜×*Ñ*Ó+Ò+Ü Ø˜˜ÐEÄcÈ$×J\ÑJ\ÓF]ÐE^Ð_óð ð %)ˆ×Ñ˜5Ò!r.   c                 ó˜   — |t        | j                  «      k\  r$t        d|› dt        | j                  «      › �«      ‚| j                  |   S r  r  )r,   r  s     r!   Úgetz!_ModeStackStateForPreDispatch.geti  sR   € Ø”C˜×*Ñ*Ó+Ò+Ü Ø˜˜ÐEÄcÈ$×J\ÑJ\ÓF]ÐE^Ð_óð ð ×!Ñ! %Ñ(Ð(r.   c                 óˆ   — t        | j                  D �cg c]  }|€Œ|‘Œ	 c}«      t        | j                  d u«      z   S c c}w r&   )r  r  Úintr  )r,   Úis     r!   Úcountz#_ModeStackStateForPreDispatch.countp  sH   € Ü˜t×1Ò1ÓCÑ1˜!°Q±]’AÐ1ÑCÓDÄsØ×#Ñ#¨4Ð/óH
ñ 
ð 	
ùÒCs   ”?œ?N)rk   rl   rm   r-   r  r  r  rX   r.   r!   r  r  ]  s   „ ò'ò)ò)ó
r.   r  c                 óŽ  ‡ ‡— t        «       Št        j                  j                  j                  t        j                  j                  j
                  f}‰ �‰ |vrt        d|› d‰ › �«      ‚|r‰ �t        d«      ‚ˆˆ fd„} |«       }t        «       }|dk(  r.t        j                  j                  t        j                  d«       |S )Nz mode_key must be None or one of z, got z/mode_key must be None when schema_check is Truec                  óš  •— ‰t         j                  j                  j                  u r-‰j	                  d«      } t        «       j                  dd «       | S ‰t         j                  j                  j                  u r-‰j	                  d«      } t        «       j                  dd «       | S t        «       j                  } d t        «       _        | S )Nr   é   )	r;   r<   Ú_TorchDispatchModeKeyÚPROXYr  Ú!mode_stack_state_for_pre_dispatchr  Ú
FUNCTIONALr  )Úcurrent_modeÚcurrent_mode_stack_pre_dispatchÚmode_keys    €€r!   Ú_unset_modez,unset_mode_pre_dispatch.<locals>._unset_mode‡  s§   ø€ ð ”u—x‘x×5Ñ5×;Ñ;Ñ;Ø:×>Ñ>¸qÓAˆLÜ-Ó/×3Ñ3°A°tÔ<ØÐØœŸ™×7Ñ7×BÑBÑBØ:×>Ñ>¸qÓAˆLÜ-Ó/×3Ñ3°A°tÔ<ØÐä<Ó>×QÑQˆLØEIÔ-Ó/ÔBØÐr.   r   F)r"  r;   r<   r   r!  r#  rI   rÖ   Ú'_dispatch_tls_set_dispatch_key_includedr   rÕ   )r&  Úschema_checkÚ
valid_keysr'  r$  Únew_pre_dispatch_lenr%  s   `     @r!   Úunset_mode_pre_dispatchr,  y  s¾   ù€ Ü&GÓ&IÐ#ä�‰×&Ñ&×,Ñ,Ü�‰×&Ñ&×1Ñ1ð€Jð Ð °
Ñ :ÜØ.¨z¨l¸&ÀÀ
ÐKó
ð 	
ñ ØÐÜ Ð!RÓSÐSõ ñ  “=€LäAÓCÐð
 ˜qÒ Ü�‰×8Ñ8¼×9PÑ9PÐRWÔXàÐr.   c                 ó–  — ddl m} ddlm} ddlm} t        | |||f«      st        dt        | «      › �«      ‚t        «       }t        | |«      r4t        «       j                  }|dkD  rt        d«      ‚| t        «       _        n“t        | |«      rDt        «       j                  d«      }|�t        d|› �«      ‚t        «       j                  d| «       nCt        «       j                  d«      }|�t        d	|› �«      ‚t        «       j                  d| «       |dk(  r/t        j                  j!                  t"        j$                  d
«       y y )Nr   )rT   )ÚSchemaCheckMode)ÚProxyTorchDispatchModezSmode must be FunctionalTensorMode, ProxyTorchDispatchMode, or SchemaCheckMode, got zYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr  z.FunctionalTensorMode slot already occupied by z0ProxyTorchDispatchMode slot already occupied by T)rb   rT   Ú#torch._subclasses.schema_check_moder.  Ú"torch.fx.experimental.proxy_tensorr/  rK   rI   rL   rÖ   r"  r  r  r  r;   r<   r(  r   rÕ   )rZ   rT   r.  r/  Úprevious_mode_stack_lenr$  s         r!   Ú_set_mode_pre_dispatchr3  ¤  sP  € ÝHÝCÝIäØà Ø"Øð	
ôô ØaÔbfÐgkÓblÐamÐnó
ð 	
ô EÓFÐÜ�$˜Ô(Ü8Ó:×MÑMˆØ" QÒ&Ü Økóð ð BFÔ)Ó+Õ>Ü	�DÐ.Ô	/Ü8Ó:×>Ñ>¸qÓAˆØÐ#Ü Ø@ÀÀÐOóð ô 	*Ó+×/Ñ/°°4Õ8ä8Ó:×>Ñ>¸qÓAˆØÐ#Ü ØBÀ<À.ÐQóð ô 	*Ó+×/Ñ/°°4Ô8ð  !Ò#Ü�‰×8Ñ8¼×9PÑ9PÐRVÕWð $r.   c                  óv  — t        «       } t        «       }|dk(  rt        d«      ‚| j                  �t	        d d¬«      S | j                  d«      �-t	        t        j                  j                  j                  «      S | j                  d«      �-t	        t        j                  j                  j                  «      S y )Nr   zTrying to pop empty mode stackT)r)  r  )r"  rÖ   rI   r  r,  r  r;   r<   r   r#  r!  )Ú
mode_stackÚpre_dispatch_lens     r!   Ú_pop_mode_from_pre_dispatchr7  Ô  s™   € Ü2Ó4€JÜ=Ó?Ðà˜1ÒÜÐ=Ó>Ð>à×$Ñ$Ð0Ü& t¸$Ô?Ð?Ø‡~�~�aÓÐ$Ü&¤u§x¡x×'EÑ'E×'PÑ'PÓQÐQØ‡~�~�aÓÐ$Ü&¤u§x¡x×'EÑ'E×'KÑ'KÓLÐLð %r.   c                  ó2   — t        «       j                  «       S r&   )r"  r  rX   r.   r!   rÖ   rÖ   ã  s   € Ü,Ó.×4Ñ4Ó6Ð6r.   c                 ó  — | t         j                  j                  j                  u rt	        «       j                  d«      S | t         j                  j                  j                  urt        d| › �«      ‚t	        «       j                  d«      S )Nr   z*mode_key must be PROXY or FUNCTIONAL, got r  )r;   r<   r   r!  r"  r  r#  rI   )r&  s    r!   Ú_get_dispatch_mode_pre_dispatchr:  ç  ss   € à”5—8‘8×1Ñ1×7Ñ7Ñ7Ü0Ó2×6Ñ6°qÓ9Ð9àœ5Ÿ8™8×9Ñ9×DÑDÑDÜ Ø<¸X¸JÐGóð ô 1Ó2×6Ñ6°qÓ9Ð9r.   c                  ó`  — t        «       j                  �t        «       j                  S t        «       j                  «       } | dk(  rt        «       j                  d«      S | dk(  rKt        «       j                  d«      �t        «       j                  d«      S t        «       j                  d«      S y )Né   r  r   )r"  r  r  r  )Ú	stack_lens    r!   rØ   rØ   ó  sž   € Ü(Ó*×=Ñ=ÐIÜ0Ó2×EÑEÐEä5Ó7×=Ñ=Ó?ˆ	Ø˜Š>Ü4Ó6×:Ñ:¸1Ó=Ð=Ø˜Š>ô 5Ó6×:Ñ:¸1Ó=ÐIô 2Ó3×7Ñ7¸Ó:ðô 7Ó8×<Ñ<¸QÓ?ðð
 r.   c                  ó   — t         S r&   )Ú"_mode_stack_state_for_pre_dispatchrX   r.   r!   r"  r"    s   € ä-Ð-r.   Ú
OpOverloadÚ
cached_opsc                 ó.   — t         j                  | «       y r&   )rA  r“   )Úop_overloads    r!   Úadd_cached_oprD    s   € ä‡N�N�;Õr.   c                  ó,   — t         j                  «        y r&   )rA  rJ   rX   r.   r!   Úreset_cached_opsrF    s   € ä×ÑÕr.   c                  ó   — t         S r&   )rA  rX   r.   r!   Úget_cached_opsrH    s   € äÐr.   c                   óÀ  ‡ — e Zd Zdddeeef   deeeef   ef   dej                  j                  dee   ddfˆ fd	„Zedefd
„«       Zedefd„«       Zedej                  j$                  fd„«       Zd$d„Zd„ Zdej,                  dej.                  defd„Zdej                  j2                  dej,                  dej.                  defd„Zd„ Zd„ Zdedefˆ fd„Zdej                  j2                  defˆ fd„Ze defd„«       Z!defd„Z"dej,                  dej.                  defd„Z#deddfd„Z$dedeeeef   z  fd„Z%d „ Z&e d!„ «       Z'e d"„ «       Z(e d#„ «       Z)ˆ xZ*S )%r@  ÚoverloadpacketÚOpOverloadPacketro   Úop_dkr©   ÚtagsrA   Nc                 óœ  •— t         ‰| �  «        || _        || _        || _        || _        || _        |j                  dk(  rdn|j                  | _        |r!t        j                  j                  |v | _        | j                  j                  | _        |j                  r"| xj                  d|j                  z   z  c_        | j                  j                  j                  d«      d   › d| j                  › �| _        |j"                  | _        |j"                  |_        | j                  | _        i | _        | j$                  t        j(                  j*                  v | _        d }| j                  j.                  D ]B  }|j0                  €Œ|€|j0                  j2                  }Œ)|j0                  j2                  xs |}ŒD |d uxr | | _        y )NÚ r   r±   ú::r  )rˆ   r-   Ú_opÚ_op_dkÚ_schemaÚ_overloadpacketÚ_tagsÚoverload_nameÚ_overloadnamer;   ÚTagÚnondeterministic_seededÚ_nondeterministic_seededrO   r‰   Úsplitrk   rl   rm   Ú__annotations__ÚlibraryÚ_defsÚ_defined_in_pythonr¨   Ú
alias_infor�   Úis_view)	r,   rJ  ro   rL  r©   rM  r�   rÚ   r‘   s	           €r!   r-   zOpOverload.__init__  s�  ø€ ô 	‰ÑÔØˆŒØˆŒØˆŒØ-ˆÔØˆŒ
à×-Ñ-°Ò3‰I¸×9MÑ9Mð 	Ôñ Ü,1¯I©I×,MÑ,MÐQUÐ,UˆDÔ)Ø—\‘\×&Ñ&ˆŒ
Ø×ÒØ�JŠJ˜# × 4Ñ 4Ñ4Ñ4�JØŸ<™<×,Ñ,×2Ñ2°4Ó8¸Ñ;Ð<¸A¸d×>PÑ>PÐ=QÐRˆŒØ(×3Ñ3ˆŒØ&×1Ñ1ˆŒØ ŸJ™JˆÔØ!ˆÔð #'×"3Ñ"3´u·}±}×7JÑ7JÐ"JˆÔð ˆØ—‘×'Ô'ˆAØ�|‰|Ð#ØØÐØŸ<™<×0Ñ0‘ð Ÿ<™<×0Ñ0Ò<°H‘ð (ð   tÐ+Ò<°H°ˆ�r.   c                 óV   — | j                   j                  j                  dd¬«      d   S )NrP  r  ©Úmaxsplitr   ©rS  rO   r[  r+   s    r!   Ú
_namespacezOpOverload._namespaceI  ó'   € à�|‰|× Ñ ×&Ñ& t°aÐ&Ó8¸Ñ;Ð;r.   c                 óV   — | j                   j                  j                  dd¬«      d   S )NrP  r  rc  re  r+   s    r!   Ú_opnamezOpOverload._opnameM  rg  r.   c                 ó’   — t         j                  j                  | j                  j                  | j                  j
                  «      S r&   )r;   r<   Ú_dispatch_find_schema_or_throwrS  rO   rV  r+   s    r!   Ú_handlezOpOverload._handleQ  s2   € ä�x‰x×6Ñ6Ø�L‰L×Ñ˜tŸ|™|×9Ñ9ó
ð 	
r.   c                 ó   — | S r&   rX   ró   s     r!   rõ   zOpOverload.__deepcopy__X  rö   r.   c                 óV   — d| j                   › d| j                  › d| j                  › d�S )Nz<OpOverload(op='r±   z', overload='z')>)rf  ri  rW  r+   s    r!   Ú__repr__zOpOverload.__repr__[  s.   € Ø! $§/¡/Ð!2°!°D·L±L°>ÀÈt×OaÑOaÐNbÐbeÐfÐfr.   r3   r4   c                ó&   —  | j                   |i |¤ŽS r&   ©rQ  r2   s      r!   r5   zOpOverload.__call__`  s   € Øˆt�x‰x˜Ð( Ñ(Ð(r.   Úkeysetc                óB   —  | j                   j                  |g|¢­i |¤ŽS r&   )rl  Úredispatch_boxed)r,   rr  r3   r4   s       r!   Ú
redispatchzOpOverload.redispatche  s%   € ð -ˆt�|‰|×,Ñ,¨VÐE°dÒE¸fÑEÐEr.   c                 ó,   — t        | j                  «      S r&   ©ÚhashrQ  r+   s    r!   Ú__hash__zOpOverload.__hash__j  ó   € Ü�D—H‘H‹~Ðr.   c                 ó„   —  dj                   g | j                  j                  j                  d«      ¢| j                  ‘­Ž S )Nz{}.{}.{}rP  )ÚformatrS  rO   r[  rW  r+   s    r!   rî   zOpOverload.__str__n  s8   € Ø ˆz× Ñ ÐT $§,¡,×"3Ñ"3×"9Ñ"9¸$Ó"?ÐTÀ×ASÑASÒTÐTr.   r8   c                 ó‚   •— t         ‰| �  |«      xs. t        j                  j	                  | j                  «       |«      S r&   )rˆ   r9   r;   r<   Ú%_dispatch_has_kernel_for_dispatch_keyrO   r”   s     €r!   r9   z&OpOverload.has_kernel_for_dispatch_keyq  s9   ø€ Ü‰wÑ2Øó
ò Lä�X‰X×;Ñ;¸D¿I¹I»KÈÓKð	Lr.   r?   c                 ó‚   •— t         j                  j                  | j                  «       |«      xs t        ‰| �  |«      S r&   )r;   r<   Ú)_dispatch_has_kernel_for_any_dispatch_keyrO   rˆ   r@   )r,   r?   r‘   s     €r!   r@   z*OpOverload.has_kernel_for_any_dispatch_keyv  s7   ø€ Ü�x‰x×AÑAØ�I‰I‹K˜ó
ò 9ä‰WÑ4°RÓ8ð	9r.   c                 ó   — | j                   S r&   )rf  r+   s    r!   r­   zOpOverload.namespace{  s   € à�‰Ðr.   c                 óž   — t         j                  }|| j                  v xs. t        j                  j                  | j                  «       |«      S r&   )r   rx   r(   r;   r<   r~  rO   )r,   Údks     r!   Ú_can_decomposezOpOverload._can_decompose  s?   € Ü×2Ñ2ˆØ�T—_‘_Ð$ò 
¬¯©×(VÑ(VØ�I‰I‹K˜ó)
ð 	
r.   c                 óü   — t         j                  }|| j                  v r | j                  |   |i |¤ŽS t        j                  j                  | j                  «       |«      r | j                  |g|¢­i |¤ŽS t        S r&   )	r   rx   r(   r;   r<   r~  rO   rR  rc   )r,   r3   r4   rƒ  s       r!   Ú	decomposezOpOverload.decompose…  sq   € Ü×2Ñ2ˆØ�—‘Ñ ð
 '�4—?‘? 2Ñ&¨Ð7°Ñ7Ð7Ü�X‰X×;Ñ;¸D¿I¹I»KÈÔLØ�4—;‘;˜rÐ3 DÒ3¨FÑ3Ð3ä!Ð!r.   Úkeyc                 ó<   — | j                   j                  |d «       y r&   )r'   Úpop)r,   r‡  s     r!   Ú_uncache_dispatchzOpOverload._uncache_dispatchš  s   € Ø×Ñ× Ñ   dÕ+r.   c                 ó  ‡ ‡— ‰‰ j                   v rt        ‰ › d‰› d�«      ‚‰t        j                  k(  r�t	        ‰ t
        «      s(‰ j                  s‰‰ j                   ‰<   t        ‰ «       ‰S dt        j                  dt        j                  dt        fˆˆ fd„}|‰ j                   ‰<   t        ‰ «       |S t        j                  j                  ‰«      }|t        j                  k(  rjt!        «       }|dkD  r[t        j                  j#                  t        j                  «      s.dt        j                  dt        j                  dt        fˆ fd„}|S t%        ‰ ‰«      }‰t        j                  k7  }‰t        j&                  k(  rEdd lmc m} |j.                  r0|j1                  ‰ |«      }|r|‰ j                   ‰<   t        ‰ «       |S ‰ j2                  j5                  ||«      }|r|‰ j                   ‰<   t        ‰ «       |S )	NÚ z already in dispatch cacher3   r4   rA   c                  ó8  •— ddl m} t         |«       «      }|€t        d«      ‚|‰j                  vr†t        ‰t        «      r`t        j                  j                  j                  «       5 }t        j                  j                  j                  |‰g| ¢­i |¤Žcd d d «       S  ‰j                  ‰g| ¢­i |¤ŽS t        j                  j                  j                  «       5 } ‰j                  |   |g| ¢­i |¤Žcd d d «       S # 1 sw Y   ŒTxY w# 1 sw Y   y xY w)Nr   r»   zDIllegal invocation of dispatch on DispatchKey.Python without a mode.)rÇ   r¼   rL   rI   r)   rK   ÚTorchBindOpOverloadr;   ÚutilsÚ_python_dispatchrÅ   Ú_libraryÚhandle_dispatch_moderR  )r3   r4   r¼   rÜ   rZ   r‡  r,   s        €€r!   rÝ   z)OpOverload._get_dispatch.<locals>.handler©  s  ø€ ÝSô !Ñ!;Ó!=Ó>�	ØÐ$Ü(Ø^óð ð  D×$9Ñ$9Ñ9Ü! $Ô(;Ô<ä!ŸK™K×8Ñ8×NÑNÔPÐTXä#(§>¡>×#7Ñ#7×#LÑ#LØ $ dð$Ø-1ò$Ø5;ñ$÷ QÑPð  +˜tŸ{™{¨3Ð@°Ò@¸Ñ@Ð@ä—[‘[×1Ñ1×GÑGÔIÈTØ;˜4×0Ñ0°Ñ;¸DÐRÀ4ÒRÈ6ÑR÷ JÑI÷ QÐPú÷ JÐIús   Á+.DÃ!DÄDÄDr   c                  óÆ   •— t         j                  d„ «       } |«       5 }t        j                  j                  j
                  |‰g| ¢­i |¤Žcd d d «       S # 1 sw Y   y xY w)Nc               3   ó`   K  — t        «       } 	 | –— t        | «       y # t        | «       w xY w­wr&   )r7  r3  )Útop_modes    r!   Ú(_temporarily_pop_modes_from_pre_dispatchz[OpOverload._get_dispatch.<locals>.handler.<locals>._temporarily_pop_modes_from_pre_dispatchÓ  s)   è ø€ ä#>Ó#@˜ð=Ø"*šNä2°8Õ<øÔ2°8Õ<üs   ‚.Ž ’.ž+«.)Ú
contextlibÚcontextmanagerr;   r‘  r�  r’  )r3   r4   r–  rÜ   r,   s       €r!   rÝ   z)OpOverload._get_dispatch.<locals>.handlerÒ  s`   ø€ Ü×.Ñ.ñ=ó /ð=ñ BÔCÀyÜ$Ÿ~™~×3Ñ3×HÑHØ% tð Ø.2ò Ø6<ñ ÷ D×CÒCús   Ÿ.AÁA )r'   rI   r   rM   rK   rŽ  r)   rD  r   r3   r4   r   r;   r<   rÔ   rÕ   rÖ   r×   r€   rh   Útorch._dispatch.pythonÚ	_dispatchÚpythonÚCROSSREF_FUNCTIONALIZEÚmake_crossref_functionalizer(   r  )	r,   r‡  rÝ   rà   Úcurr_stack_lenrá   Úcache_resultÚ
pydispatchÚrs	   ``       r!   Ú_get_dispatchzOpOverload._get_dispatchž  sË  ù€ à�$×&Ñ&Ñ&Ü  D 6¨¨3¨%Ð/IÐ!JÓKÐKà”+×$Ñ$Ò$Ü˜dÔ$7Ô8À×AVÒAVØ,/�×$Ñ$ SÑ)Ü˜dÔ#Ø�
ðSœrŸw™wð S´"·)±)ð SÄö Sð2 )0ˆD× Ñ  Ñ%Ü˜$ÔØˆNä!ŸH™H×:Ñ:¸3Ó?ÐØ¤× 7Ñ 7Ò7ÜCÓEˆNð  Ò"ÜŸ™×GÑGÜ×&Ñ&ôð
¤2§7¡7ð ´b·i±ið ÄBõ ð& �ä  cÓ*ˆ	ð œk×5Ñ5Ñ5ˆð
 ”+×+Ñ+Ò+ß7Ð7à×0Ò0Ø$×@Ñ@ÀÀyÓQ�ÙØ07�D×(Ñ(¨Ñ-Ü! $Ô'Ø�à�O‰O×Ñ 	¨9Ó5ˆÙØ()ˆD× Ñ  Ñ%Ü˜$ÔØˆr.   c                 ó   — | j                   S r&   rð   r+   s    r!   rO   zOpOverload.nameÿ  rñ   r.   c                 ó   — | j                   S r&   )rT  r+   s    r!   rJ  zOpOverload.overloadpacket  s   € à×#Ñ#Ð#r.   c                 ó   — | j                   S r&   rq  r+   s    r!   ro   zOpOverload.op  r®   r.   c                 ó   — | j                   S r&   )rU  r+   s    r!   rM  zOpOverload.tags
  s   € à�z‰zÐr.   r&   )+rk   rl   rm   r   r   r   r   r   r;   r<   ÚFunctionSchemarÊ   r   r-   r   Ústrrf  ri  Ú_DispatchOperatorHandlerl  rõ   ro  r3   r4   r5   ÚDispatchKeySetru  ry  rî   rø   r9   r@   r÷   r­   r„  r†  rŠ  r¢  rO   rJ  ro   rM  rû   rü   s   @r!   r@  r@    s1  ø„ ð*=à*ð*=ð �R˜�VÑð*=ð ˜ K° OÑ4°bÐ8Ñ9ð	*=ð
 —‘×'Ñ'ð*=ð �3‰ið*=ð 
õ*=ðX ð<˜Cò <ó ð<ð ð<˜ò <ó ð<ð ð
˜Ÿ™×9Ñ9ò 
ó ð
óògð
) §¡ð )°B·I±Ið )À"ó )ð
FØŸ™×0Ñ0ðFØ9;¿¹ðFØLNÏIÉIðFà	óFò
òUðL¨[ð L¸Tõ Lð
9°%·(±(×2IÑ2Ið 9Èdõ 9ð
 ð˜3ò ó ðð
 ó 
ð"˜rŸw™wð "°"·)±)ð "Àó "ð*, [ð ,°Tó ,ð_ ð _°¸xÈÈBÈÑ?OÑ1Oó _òBð ñ$ó ð$ð ñó ðð ñó ôr.   c                   ó    — e Zd Zdee   fd„Zdej                  dej                  de	fd„Z
dee   dej                  dej                  de	fd„Zy)	rŽ  rA   c                 óJ  ‡ — t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  g}dt         fˆ fd„}|D �cg c]  } ||«      r|‘Œ c}S c c}w )Nr‡  c                 ó.  •— t         j                  j                  ‰j                  «       | «      r.t         j                  j	                  ‰j                  «       | «      S | ‰j
                  vxs) ‰j
                  |    t         j                  j                  u S r&   )r;   r<   r~  rO   Ú0_dispatch_kernel_for_dispatch_key_is_fallthroughr(   r]  Úfallthrough_kernel)r‡  r,   s    €r!   Ú(_may_use_fallthrough_instead_of_fallbackzWTorchBindOpOverload._fallthrough_keys.<locals>._may_use_fallthrough_instead_of_fallback$  ss   ø€ Ü�x‰x×=Ñ=¸d¿i¹i»kÈ3ÔOÜ—x‘x×PÑPØ—I‘I“K óð ð
 ˜4Ÿ?™?Ð*ò LØ—?‘? 3Ñ'¬5¯=©=×+KÑ+KÐKðr.   )	r   r{   ÚAutogradCPUÚAutogradCUDAÚADInplaceOrViewÚBackendSelectÚPythonTLSSnapshotÚPythonDispatcherrh   )r,   Ú_DEFAULT_FALLTHROUGH_KEYSr°  r‡  s   `   r!   Ú_fallthrough_keysz%TorchBindOpOverload._fallthrough_keys  s�   ø€ ô × Ñ Ü×#Ñ#Ü×$Ñ$Ü×'Ñ'Ü×%Ñ%Ü×)Ñ)Ü×(Ñ(Ü×%Ñ%ð	%
Ð!ð		¼+õ 		ñ 1ó
á0�Ù7¸Ô<ò Ø0ñ
ð 	
ùò 
s   ÂB r3   r4   c                ó†   — t        ||«      r$ | j                  | j                  «       g|¢­i |¤ŽS  | j                  |i |¤ŽS r&   )Ú_must_dispatch_in_pythonÚ_dispatch_in_pythonr¸  rQ  r2   s      r!   r5   zTorchBindOpOverload.__call__7  sJ   € Ü# D¨&Ô1ð ,�4×+Ñ+¨D×,BÑ,BÓ,DÐVÀtÒVÈvÑVÐVØˆt�x‰x˜Ð( Ñ(Ð(r.   Úfallthrough_keysc           	      ó<  — t         j                  j                  «       }|D ]  }|j                  |«      }Œ t	        |||«      }|j                  «       }|| j                  vr| j                  |«      n| j                  |   }t        |t        «      r]t         j                  j                  | j                  «       |«      r | j                  ||gz   g|¢­i |¤ŽS t        d| › d|› d|› d�«      ‚t        |t        «      st        dt!        |«      › �«      ‚ ||i |¤ŽS )NzTorchbind op z4 received a FakeScriptObject input when dispatching zÖ. but no python implementation is found. Please file an issue on this when you encounter this error. This error can happen when you export or compile the model. It can still happen even if a C++ implementation for zz.  has been registered. That's because FakeScriptObject purely lives in python and cannot work  with a C++ implementation.zhandler must be callable, got )r;   r<   rŒ   r¹   rè   ré   r'   r¢  rK   r   r®  rO   r»  rN   r   rI   rL   )	r,   r¼  r3   r4   r�   r‡  rë   r�   rÝ   s	            r!   r»  z'TorchBindOpOverload._dispatch_in_python?  sP  € ô  %Ÿx™x×=Ñ=Ó?ÐÛ#ˆCØ#7×#>Ñ#>¸sÓ#CÑ ð $ô +¨4°Ð9MÓNÐØ'×=Ñ=Ó?ˆð  4×#7Ñ#7Ñ7ð ×Ñ˜|Ô,à×%Ñ% lÑ3ð 	ô �gœ{Ô+ô �x‰x×HÑHØ—	‘	“˜\ôð 0�t×/Ñ/Ø$¨ ~Ñ5ðàòð ñð ô Ø ˜vÐ%YÐZaÐYbð cIð JVÈð W.ð	/óð ô ˜'¤8Ô,Ü Ð#AÄ$ÀwÃ-ÀÐ!QÓRÐRÙ˜Ð' Ñ'Ð'r.   N)rk   rl   rm   rÊ   r   r¸  r   r3   r4   r   r5   r»  rX   r.   r!   rŽ  rŽ    sh   „ ð
 4¨Ñ#4ó 
ðB) §¡ð )°B·I±Ið )À"ó )ð((Ø $ [Ñ 1ð((Ø:<¿'¹'ð((ØMOÏYÉYð((à	ô((r.   rŽ  rA   c                 ó  — t        | t        j                  j                  j                  «      ryt        | t
        t        f«      rt        d„ | D «       «      S t        | t        «      r t        d„ | j                  «       D «       «      S y)z•Check if obj is or contains a FakeScriptObject.
    This is load-bearing for TorchBindOpOverloads so we avoid pytree
    since it's much slower.
    Tc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr&   ©Ú_contains_fake_script_object)rŸ   Úitems     r!   r¡   z/_contains_fake_script_object.<locals>.<genexpr>r  s   è ø€ ÐFÁ#¸$Ô/°×5Á#ùó   ‚c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr&   rÀ  ©rŸ   Úvs     r!   r¡   z/_contains_fake_script_object.<locals>.<genexpr>t  s   è ø€ ÐI¹L°qÔ/°×2¹LùrÃ  F)
rK   r;   r‘  Úfake_class_registryÚFakeScriptObjectrÊ   rË   r§   ÚdictrÉ   )Úobjs    r!   rÁ  rÁ  j  sd   € ô
 �#”u—~‘~×9Ñ9×JÑJÔKØÜ	�Cœ$¤˜Ô	'ÜÑFÁ#ÓFÓFÐFÜ	�CœÔ	ÜÑI¸C¿J¹J¼LÓIÓIÐIØr.   c                 ó„   — t        d„ | D «       «      xs- t        |«      xr  t        d„ |j                  «       D «       «      S )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr&   rÀ  rž   s     r!   r¡   z+_must_dispatch_in_python.<locals>.<genexpr>y  s   è ø€ ÐA¹D°SÔ+¨C×0¹DùrÃ  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr&   rÀ  rÅ  s     r!   r¡   z+_must_dispatch_in_python.<locals>.<genexpr>z  s   è ø€ ÐVÁoÀÔ9¸!×<ÁoùrÃ  )r§   rø   rÉ   rÿ   s     r!   rº  rº  x  s7   € ÜÑA¹DÓAÓAò ÜˆV‹ÒVœÑVÀfÇmÁmÄoÓVÓVðr.   r©   c                 ó:   — t        d„ | j                  D «       «      S )Nc              3   ód   K  — | ](  }t        |j                  t        j                  «      –— Œ* y ­wr&   )rK   rL   r;   Ú	ClassTyperž   s     r!   r¡   z)_has_script_object_arg.<locals>.<genexpr>  s"   è ø€ ÐQÑ@P¸Œz˜#Ÿ(™(¤E§O¡O×4Ñ@Pùs   ‚.0)r§   r¨   )r©   s    r!   Ú_has_script_object_argrÑ  ~  s   € ÜÑQÀ×@PÒ@PÓQÓQÐQr.   c            
       óö   — e Zd ZU dZee   ed<   dededeee	f   de
e   ddf
d	„Zdd
„Zd„ Zd„ Zd„ Zed„ «       Zed„ «       Zdedeee	f   fd„Zdee   fd„Zdej.                  dej0                  de	fd„Zd„ Zy)rK  ú	torch.opsÚ__file__Úqualified_op_nameÚop_namero   Úoverload_namesrA   Nc                 ó¨   — || _         || _        || _        || _        g | _        t        d„ | j                  j                  «       D «       «      | _        y )Nc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr&   )rÑ  )rŸ   r©   s     r!   r¡   z,OpOverloadPacket.__init__.<locals>.<genexpr>•  s   è ø€ ð .
Ù9O¨vÔ" 6×*Ñ9OùrÃ  )	Ú_qualified_op_namerk   rQ  Ú_overload_namesÚ_dirr§   Ú_schemasrÉ   Ú_has_torchbind_op_overload)r,   rÕ  rÖ  ro   r×  s        r!   r-   zOpOverloadPacket.__init__‡  sP   € ð #4ˆÔØˆŒØˆŒØ-ˆÔØ!ˆŒ	Ü*-ñ .
Ø9=¿¹×9MÑ9MÔ9Oó.
ó +
ˆÕ'r.   c                 ó   — | S r&   rX   ró   s     r!   rõ   zOpOverloadPacket.__deepcopy__š  rö   r.   c                 óR   —  dj                   | j                  j                  d«      Ž S )Nz<OpOverloadPacket(op='{}.{}')>rP  ©r|  rÚ  r[  r+   s    r!   ro  zOpOverloadPacket.__repr__�  s,   € Ø6Ð/×6Ñ6Ø×$Ñ$×*Ñ*¨4Ó0ð
ð 	
r.   c                 ó,   — t        | j                  «      S r&   rw  r+   s    r!   ry  zOpOverloadPacket.__hash__¢  rz  r.   c                 óR   —  dj                   | j                  j                  d«      Ž S )Nz{}.{}rP  rá  r+   s    r!   rî   zOpOverloadPacket.__str__¥  s$   € Øˆw�~‰~˜t×6Ñ6×<Ñ<¸TÓBÐCÐCr.   c                 ó   — | j                   S r&   rq  r+   s    r!   ro   zOpOverloadPacket.op¨  r®   r.   c                 ó’   — | j                   D �ci c]-  }|t        j                  j                  | j                  |«      “Œ/ c}S c c}w r&   )rÛ  r;   r<   Ú_get_schemarÚ  )r,   rV  s     r!   rÝ  zOpOverloadPacket._schemas¬  sK   € ð "&×!5Ò!5ó
á!5�ð œ5Ÿ8™8×/Ñ/°×0GÑ0GÈÓWÑWØ!5ñ
ð 	
ùò 
s   �2Ar‡  c           
      óÌ  — 	 |j                  d«      rt        | j                  |«      S 	 	 |dk(  rdn|}t
        j                  j                  | j                  |«      }|€t        dt	        | «      › d	|› d�«      ‚|\  }}}t
        j                  j                  | j                  |«      }t        |«      st        | ||||«      nt        | ||||«      }t        | ||«       | j                  j                  |«       |S # t        $ r3 t        dt	        | «      › dt	        | j                  «      › d|› d�«      d ‚w xY w# t         $ r t        dt	        | «      › d	|› d�«      d ‚w xY w)
NÚ__Ú'zH' can't have an overload name beginning with '__' and the underlying op z has no attribute z either.r   rO  zThe underlying op of 'z' has no overload name ')Ú
startswithÚgetattrrQ  ÚAttributeErrorr¨  r;   r<   Ú_get_operation_overloadrÚ  ræ  rÑ  r@  rŽ  ÚsetattrrÜ  rÂ   rN   )	r,   r‡  Úuse_keyÚ
op_dk_tagsÚop_Úop_dk_rM  r©   Úoverloads	            r!   Ú__getattr__zOpOverloadPacket.__getattr__³  s”  € ð	Ø�~‰~˜dÔ#Ü˜tŸx™x¨Ó-Ð-ð $ð	à 9Ò,‘b°#ˆGäŸ™×9Ñ9Ø×'Ñ'¨óˆJð Ð!Ü$Ø,¬S°«Y¨KÐ7OÐPSÈuÐTUÐVóð ð !+ÑˆC�˜Ü—X‘X×)Ñ)¨$×*AÑ*AÀ7ÓKˆFô .¨fÔ5ô ˜4  f¨f°dÔ;ä(¨¨s°F¸FÀDÓIð ô �D˜#˜xÔ(Ø�I‰I×Ñ˜SÔ!ØˆOøôA ò 	ô
 !Ø”C˜“I�;ð !Ü!$ T§X¡X£ Ð/AÀ#ÀÀhðPóð ðð	ûôB ò 	Ü Ø(¬¨T«¨Ð3KÈCÈ5ÐPQÐRóàðð	ús   ‚&C> «CD= Ã><D:Ä=&E#c                 ó,   — t        | j                  «      S r&   ©ÚiterrÜ  r+   s    r!   Ú__iter__zOpOverloadPacket.__iter__ä  ó   € Ü�D—I‘I‹Ðr.   r3   r4   c                ót   — | j                   rt        ||«      rt        | g|¢­i |¤ŽS  | j                  |i |¤ŽS r&   )rÞ  rº  Ú!_call_overload_packet_from_pythonrQ  r2   s      r!   r5   zOpOverloadPacket.__call__é  sB   € ð ×*Ò*Ô/GÈÈfÔ/Uä4°TÐK¸DÒKÀFÑKÐKØˆt�x‰x˜Ð( Ñ(Ð(r.   c                 óH   — | j                   D �cg c]  }|r|nd‘Œ
 c}S c c}w )Nr   )rÛ  )r,   Úns     r!   Ú	overloadszOpOverloadPacket.overloadsø  s)   € Ø/3×/CÒ/CÓDÑ/C¨!‘Q‘˜IÑ%Ð/CÑDÐDùÒDs   �r&   )rk   rl   rm   rÔ  r   r¨  r\  r   r   r   rÊ   r-   rõ   ro  ry  rî   r÷   ro   rÝ  r@  rô  r   rø  r3   r4   r5   rþ  rX   r.   r!   rK  rK  „  sä   … Ø)€Hˆh�s‰mÓ)ð
àð
ð ð
ð �R˜�VÑð	
ð
 ˜S™	ð
ð 
ó
ó&ò
ò
òDð ñó ðð ñ
ó ð
ð/˜sð / z°"°b°&Ñ'9ó /ðb˜( 3™-ó ð
) §¡ð )°B·I±Ið )À"ó )óEr.   rK  r3   r4   c                 ó¶  — t        j                  j                  | g|¢­i |¤Ž\  }}|r|S i }d }| j                  «       D ]?  }t	        | |«      }	 t        j                  j
                  |j                  g|¢­i |¤Ž}	|} n |r ||i |¤ŽS d| › d�}|j                  «       D ]  \  }}|d|› d|› d�z  }Œ t        |«      ‚# t        $ r}
|
||<   Y d }
~
Œ”d }
~
ww xY w)Nz'Fail to match any TorchBindOverload of z with following exceptions:
zOverload name z:
 Ú
)	r;   r<   Ú(_maybe_call_torch_function_for_op_packetrþ  rë  Ú&_check_schema_allow_fake_script_objectrS  rN   Úitems)ro   r3   r4   Útorch_function_calledÚretÚ
exceptionsÚfound_oprV  rC  Ú_ÚeÚerr_msgr‡  Úmsgs                 r!   rû  rû  þ  s!  € ô "'§¡×!RÑ!RØ
ð"Øò"Øñ"ÑÐ˜3ñ Øˆ
ð €JØ€HØŸ™žˆÜ˜b -Ó0ˆð	*Ü—‘×?Ñ?Ø×#Ñ#ðØ&*òØ.4ñˆAð #ˆHÙð (ñ Ù˜Ð( Ñ(Ð(ð 2°"°Ð5RÐSð ð ×$Ñ$Ö&‰ˆˆSØ�^ C 5¨¨S¨E°Ð4Ñ4‰ð 'ä
�wÓ
Ðøô ò 	*Ø()ˆJ�}Ö%ûð	*ús   Á/C Ã 	CÃ	CÃCc                   óR   ‡ — e Zd ZdZdZdeddfˆ fd„Zdee   fd„Zdede	fd	„Z
ˆ xZS )
Ú_OpNamespacea0  
    An op namespace to dynamically bind Operators into Python.

    Say a user has created a custom Operator called "my_namespace::my_op". To
    call this op, the user will write torch.ops.my_namespace.my_op(...).
    At startup, this operation will not yet be bound into Python. Instead, the
    following sequence of magic tricks will occur:
    1. `torch.ops.my_namespace` will invoke the `__getattr__` magic method
       on the `torch.ops` object, which will create a new `_OpNamespace`
       object called `my_namespace` and set it as an attribute on the `ops`
       object.
    2. `torch.ops.my_namespace.my_op` will then invoke `__getattr__` on
       the `my_namespace` object, which will retrieve the operation via
       `torch.get_operation`, a function bound from C++, and then in a similar
       fashion bind this new object onto the `my_namespace` object.
    3. `torch.ops.my_namespace.my_op(...)` then calls this new operation
        and subsequent accesses will incur no further lookup (the namespace and
        operation will already exist).
    rÓ  rO   rA   Nc                 óF   •— t         ‰| �  d|z   «       || _        g | _        y )Nz
torch.ops.)rˆ   r-   rO   rÜ  )r,   rO   r‘   s     €r!   r-   z_OpNamespace.__init__L  s#   ø€ Ü‰Ñ˜¨Ñ,Ô-ØˆŒ	Ø!ˆ�	r.   c                 ó,   — t        | j                  «      S r&   rö  r+   s    r!   rø  z_OpNamespace.__iter__Q  rù  r.   rÖ  c                 óò  — |dv rt        d|› d| j                  › d�«      ‚| j                  }|› d|› �}| j                  dz   |z   }	 t        ||«      \  }}|€t        d| j                  › d|› d�«      ‚	 ||_        t        ||||«      }| j                  dz   |z   |_        t        | ||«       | j                  j                  |«       |S # t        $ r"}t        d| j                  › d|› d�«      |‚d }~ww xY w)	N)Ú
__origin__Ú__self__zInvalid attribute 'z' for '_OpNamespace' 'ré  rP  r±   z'_OpNamespace' 'z' object has no attribute ')	rì  rO   rl   Ú_get_packetrN   rK  rî  rÜ  rÂ   )	r,   rÖ  Únamespace_namerÕ  Úmodule_namero   r×  r	  Úopoverloadpackets	            r!   rô  z_OpNamespace.__getattr__T  s>  € ØÐ0Ñ0Ü Ø% g YÐ.DÀTÇYÁYÀKÈqÐQóð ð Ÿ™ˆØ-Ð.¨b°°	Ð:ÐØ—o‘o¨Ñ+¨nÑ<ˆð	Ü!,Ð->ÀÓ!LÑˆB�ØˆzÜ$Ø& t§y¡y kÐ1LÈWÈIÐUVÐWóð ð ð $ˆŒÜ+Ø˜w¨¨Nó
Ðð '+§o¡o¸Ñ&;¸nÑ&LÐÔ#ô 	��gÐ/Ô0Ø�	‰	×Ñ˜Ô!ØÐøô! ò 	ô !Ø" 4§9¡9 +Ð-HÈÈ	ÐQRÐSóàðûð	ús   Á-C Ã	C6ÃC1Ã1C6)rk   rl   rm   rn   rÔ  r¨  r-   r   rø  rK  rô  rû   rü   s   @r!   r  r  5  sF   ø„ ñð( €Hð"˜Sð " Tõ "ð
˜( 3™-ó ð"  3ð " Ð+;÷ " r.   r  c                 ó´   — t         j                  j                  | «      \  }}|�1t         j                  j                  j                  || «       ||_        ||fS r&   )r;   r<   Ú_jit_get_operationÚjitÚ	_builtinsÚ_register_builtinrl   )ÚqualnameÚ	op_modulero   r×  s       r!   r  r  y  sN   € ÜŸ™×4Ñ4°XÓ>Ñ€BˆØ	€~ô 	�	‰	×Ñ×-Ñ-¨b°(Ô;Ø!ˆŒØˆ~ÐÐr.   c                 ó®   — t        | j                  | j                  j                  «      \  }}|€t	        d| j                  › �«      ‚|| _        || _        y )Nzfailed to get packet for )r  rÚ  rQ  rl   rI   rÛ  )Úpacketro   r×  s      r!   Ú_refresh_packetr   ƒ  sQ   € Ü$ V×%>Ñ%>ÀÇ
Á
×@UÑ@UÓVÑ€BˆØ	€zÜÐ8¸×9RÑ9RÐ8SÐTÓUÐUØ€F„JØ+€FÕr.   c                   óF   ‡ — e Zd ZdZdˆ fd„Zdee   fd„Zdedefd„Z	ˆ xZ
S )Ú_HigherOrderNamespacerÓ  rA   c                 ó2   •— t         ‰| �  d«       g | _        y )Nr‡   )rˆ   r-   rÜ  ©r,   r‘   s    €r!   r-   z_HigherOrderNamespace.__init__Ž  s   ø€ Ü‰ÑÐ1Ô2Ø!ˆ�	r.   c                 ó,   — t        | j                  «      S r&   rö  r+   s    r!   rø  z_HigherOrderNamespace.__iter__’  rù  r.   rO   c                 ó¢   — t         j                  |«      }|€t        d|› d�«      ‚t        | ||«       | j                  j                  |«       |S )NzJ'_HigherOrderNamespace' 'torch.ops.higher_order' object has no attribute 'ré  )r‚   r  rì  rî  rÜ  rÂ   )r,   rO   ro   s      r!   rô  z!_HigherOrderNamespace.__getattr__•  sX   € ä×"Ñ" 4Ó(ˆØˆ:Ü Ø\Ð]aÐ\bÐbcÐdóð ô 	��d˜BÔØ�	‰	×Ñ˜ÔØˆ	r.   )rA   N)rk   rl   rm   rÔ  r-   r   r¨  rø  r�   rô  rû   rü   s   @r!   r"  r"  ‹  s1   ø„ Ø€Hõ"ð˜( 3™-ó ð	 ð 	Ð(;÷ 	r.   r"  c                   óP   ‡ — e Zd ZdZˆ fd„Zdedefd„Zdee   fd„Z	d„ Z
d„ Zˆ xZS )	Ú_Opsz_ops.pyc                 ón   •— t         ‰| �  d«       t        «       | _        t	        «       | _        g | _        y )NrÓ  )rˆ   r-   r  Úloaded_librariesr"  r†   rÜ  r$  s    €r!   r-   z_Ops.__init__¤  s,   ø€ Ü‰Ñ˜Ô%Ü #£ˆÔÜ1Ó3ˆÔØˆ�	r.   rO   rA   c                 ól   — t        |«      }t        | ||«       | j                  j                  |«       |S r&   )r  rî  rÜ  rÂ   )r,   rO   r­   s      r!   rô  z_Ops.__getattr__ª  s0   € ä  Ó&ˆ	Ü��d˜IÔ&Ø�	‰	×Ñ˜ÔØÐr.   c                 ó,   — t        | j                  «      S r&   rö  r+   s    r!   rø  z_Ops.__iter__±  rù  r.   c                 ó.   — t        j                  |«       y)a{  
        Imports a Python module that has torch.library registrations.

        Generally, to extend PyTorch with custom operators, a user will
        create a Python module whose import triggers registration of
        the custom operators via a torch.ops.load_library call or a call
        to one or more torch.library.* APIs.

        It is unexpected for Python modules to have side effects, so some
        linters and formatters will complain. Use this API to import Python
        modules that contain these torch.library side effects.

        Args:
            module (str): The name of the Python module to import

        N)Ú	importlibÚimport_module)r,   Úmodules     r!   r/  z_Ops.import_module´  s   € ô" 	×Ñ Õ'r.   c                 ó  — t        j                  |«      }t        «       5  	 t        j                  |«       	 ddd«       | j                  j                  |«       y# t
        $ r}t        d|› �«      |‚d}~ww xY w# 1 sw Y   ŒExY w)a  
        Loads a shared library from the given path into the current process.

        The library being loaded may run global initialization code to register
        custom operators with the PyTorch JIT runtime. This allows dynamically
        loading custom operators. For this, you should compile your operator
        and the static registration code into a shared library object, and then
        call ``torch.ops.load_library('path/to/libcustom.so')`` to load the
        shared object.

        After the library is loaded, it is added to the
        ``torch.ops.loaded_libraries`` attribute, a set that may be inspected
        for the paths of all libraries loaded using this function.

        Args:
            path (str): A path to a shared library to load.
        zCould not load this library: N)	r   Úresolve_library_pathr"   r   ÚCDLLÚ	ExceptionÚOSErrorr*  r“   )r,   Úpathr	  s      r!   Úload_libraryz_Ops.load_libraryÇ  sw   € ô$ ×3Ñ3°DÓ9ˆÜ�_ðMÜ—‘˜DÕ!÷ ð 	×Ñ×!Ñ! $Õ'øô ò MÜÐ =¸d¸VÐDÓEÈ1ÐLûðMú÷ ˆ_ús(    A<¢AÁ	A9Á%A4Á4A9Á9A<Á<B)rk   rl   rm   rÔ  r-   r¨  r  rô  r   rø  r/  r7  rû   rü   s   @r!   r(  r(  ¡  s:   ø„ Ø€Hôð ð ¨ó ð˜( 3™-ó ò(ö&(r.   r(  Úops)F)erù   r—  r   r.  rE   r   ÚtypesÚcollections.abcr   r   Ú	functoolsr   Útypingr   r   r   r	   r
   r   Útyping_extensionsr   r   r;   Útorch.utils._pytreer�  Ú_pytreer£   r   Útorch._Cr   rt   r   Útorch._functorch.pyfunctorchr   r   rÇ   r   r   ÚImportErrorrL   rc   rb   r   r   r   Úhasattrr   r˜  r"   r$   r€   r‚   rÉ  r¨  r\  r¶  rµ  r³  r´  ÚAutocastCPUÚAutocastCUDAÚAutocastXPUrŽ   ÚABCr�   rä   rè   r  r  r  r?  r,  r3  r7  rÖ   r:  rØ   r"  r  rA  rD  rF  rH  r@  rŽ  rø   rÁ  rº  r§  rÑ  rK  r3   r4   rû  Ú
ModuleTyper  r  r   r"  r(  r8  rX   r.   r!   Ú<module>rI     sÒ  ðä 
Û Û Û Û Û 
Û ß .Ý %ß L× Lß 0ã ß $Ð $Ý !ß Xß JÝ :ð.Ý(ñ
 ÝHñ ˆT˜3Ô€Ùˆt˜SÔ!€ñ ˜CÐ!1Ó2ÒU±w¸sÐDTÓ7UÐ ð ×Ññ&ó ð&÷ V"ñ V"ðt2U�Lð 2U [ó 2Uðj 79Ð �4˜Ð2Ð2Ñ3Ó 8ð × Ñ Ø×!Ñ!Ø×ÑØ×ÑØ×ÑØ×ÑØ×Ñð6Ð 2ô^˜,¨¯©ô ^òB	3ò8ò
ò÷,
ñ 
ñ2 &CÓ%DÐ "ó(òV-Xò`Mò7ò	:òò .ñ
 !$£€
ˆC�ÑÓ %ò ò
ò
ôp�˜w r¨2 v™ô pôrR(˜* R¨ VÑ,ô R(ðj¨ó ð¨dó ðR 5×#7Ñ#7ð R¸Dó RôuE�w˜r 2˜v‘ô uEðt% Ø˜˜R˜Ñ ð% Ø)+¯©ð% Ø<>¿I¹Ið% àó% ônA �5×#Ñ#ô A òHò,ô˜E×,Ñ,ô ô,A(ˆ5×Ñô A(ñJ ‹F€€TÔ øð]. ò .Ù˜nÓ-Óð.ús   Á.I
 É
IÉI