
    sg@                        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	m
Z
mZmZ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 d dlmZ  eed      xr	  eed      Zej>                  d	        Z  G d
 d      Z!de!defdZ"i Z#e
e$df   e%d<   ejL                  ejN                  ejP                  ejR                  ejT                  ejV                  gZ, G d de!e jZ                        Z.d Z/d Z0d Z1d Z2 G d d      Z3 e3       a4d7dZ5d Z6d Z7d Z8d Z9d Z:d Z; e<       a=ed   e%d <   d! Z>d" Z?d# Z@ G d$ de!      ZA G d% d&eA      ZBd' ZCd(ej                  d)eEfd*ZF G d+ d,      ZGdeGfd-ZH G d. d/ej                        ZJd0 ZKd1 ZL G d2 d3eJ      ZM G d4 d5ej                        ZN eN       ZOeNe%d6<   y)8    N)AnyCallableDictListSetTypeUnion)_utils_internal)_dispatch_is_included_in_aliasDispatchKey)dispatch_functorch)TorchDispatchMode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    =/var/www/html/venv/lib/python3.12/site-packages/torch/_ops.pydl_open_guardr      s\      ""$Iy6#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 Z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__.   s1    $  	 BD  	  "    c                     t         r   NotImplementedErrorr"   argskwargss      r   __call__zOperatorBase.__call__Z       !!r$   c                     || j                   v S r   )r   )r"   ks     r   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_key]   s    DOO##r$   c                     | j                   D ]5  }t        j                  j                  |      r#|j	                  |      s5 y y)NTF)r   torch_C_dispatch_is_alias_keyhas)r"   ksr.   s      r   has_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_key`   s9     	A882215"&&)	 r$   c                       fd}|S )Nc                    t        j                        ret        t              st        t        j
                        r;j                  vsJ | j                  <   j                  j                          | S t        t        j                  j                  j                        r!j                  vsJ | j                  <   | S t        t              sJ t        j                  k7  sJ d       j                   v rt#        d dj%                                | j                   <   j                  j                          | S )NzGPlease register a mode for the torch._C.DispatchKey.Python key instead.z%Trying to override a python impl for z on operator )inspectisclass
issubclassr   r1   Tensorr   r   clear
isinstancer2   
_functorchTransformTyper    r   Pythonr   RuntimeErrorname)fnr.   r"   s    r   innerz#OperatorBase.py_impl.<locals>.innerg   s-   q!1/0Jq%,,4O 5 5555+-%%a($$**,	!UXX00>>? 4 4444*,$$Q'	a---['''YXY' DOO#";A3mDIIK=Y  "$DOOA  &&(Ir$    )r"   r.   rE   s   `` r   py_implzOperatorBase.py_implf   s    	8 r$   c                    ddl mmm fd}fd}fd} | j	                  t
        j                        |        | j	                  t        j                  j                  j                        |        | j	                  t        j                  j                  j                  j                        |       S )Nr   )CppFunctionalizeAPIFunctorchFunctionalizeAPIPythonFunctionalizeAPIc                  &             g| i |S r   rF   )r)   r*   _CppFunctionalizeAPIrD   s     r   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s    *,>t>v>>r$   c                 (      |       g|i |S r   rF   )moder)   r*   _PythonFunctionalizeAPIrD   s      r   functionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fn   s    -d3EdEfEEr$   c                 (      |       g|i |S r   rF   )interpreterr)   r*   _FunctorchFunctionalizeAPIrD   s      r   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s    0=OOOOr$   )#torch._subclasses.functional_tensorrI   rJ   rK   rG   r   Functionalizer1   _subclassesfunctional_tensorFunctionalTensorModer2   r?   r@   )r"   rD   rN   rR   rV   rM   rU   rQ   s    `   @@@r   py_functionalize_implz"OperatorBase.py_functionalize_impl   s    	
 	
	?	F	P 	0[../0CDNU&&88MMN*	
 	FUXX((66DDE&	
 	r$   c                     t         r   r&   r!   s    r   rC   zOperatorBase.name   r,   r$   N)__name__
__module____qualname____doc__r#   r+   r/   r6   rG   r\   rC   rF   r$   r   r   r   (   s,    
*"X"$T8"r$   r   opr.   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 )r/   r   &CompositeExplicitAutogradNonFunctional	Undefinedis_included_in_aliasCompositeExplicitAutogradr6   r1   r2   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrB   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr'   )rb   r.   candhas_backend_kernels       r   resolve_keyrs      s   	%%a(==D	["""&:1d&C

(
(
.00D	["""&:1d&C

(
(
.;;;;A> O		'	'(M(M	N  <<D	
k##	#(<Q(E**40"00D	["""&:1d&C

(
(
.)))b.P.PHH55/
 ?@@#KDAt$)G)G)M44DAt$)G)G)Mxx..q1 
 :2$>OPQsS
TTr$   HigherOrderOperator_higher_order_opsc                   t     e Zd Z fdZ fdZed        Zd Zd Ze	j                  d        Zd Zd Z xZS )	rt   c                 "   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#   typert   rB   _namer^   ru   _nsr_   r1   r2   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r"   rC   dispatch_key	__class__s      r   r#   zHigherOrderOperator.__init__   s    :,,a  
 "&$!2$)HH$B$B$D!N 	+L\*	+r$   c                     t        |t              r;| j                  j                  |      s | j                  j	                  |      | _        t
        |   |      S r   )r>   r   r   r4   addrz   rG   r"   r.   r   s     r   rG   zHigherOrderOperator.py_impl  sH    a%d.G.G.K.KA.N(,(A(A(E(Ea(HD%wq!!r$   c                     | j                   S r   )r}   r!   s    r   	namespacezHigherOrderOperator.namespace      xxr$   c                 D    | j                   j                  |      | _         y r   )r   remove)r"   r   s     r   r   zHigherOrderOperator.fallthrough  s    $($=$=$D$D\$R!r$   c                \   ddl m} || j                  v r)| j                  |   }t        |t              rJ  ||i |S |t        j
                  k(  rt        | ||      S |t        j                  k(  rg d fd}g ||j                         D ]0  } ||       t        |t        t        f      s"|D ]
  } ||        2 t              }	t        d |	D              }
ddl m}  |       }|rt        |      | j                  v r5| j                  t        |         } |       5 } ||g|i |}d d d        nt        d| j                   d| d	      t         ur|S |	D ]  }t        |      }|j"                  t$        j&                  j(                  k(  r6|| j                  v r| j                  |   } ||i |}nt        d| j                   d
| d	      |t         us|c S  t+        d| j                   d| d|	D cg c]  }t        |       c}       t$        j&                  j-                  |      }|t        j.                  k(  rddl m} t1               dkD  rt$        j&                  j3                  t        j                        skt5               }|J d       t        |      | j                  v sJ d| d       | j                  t        |         } ||      5 } ||g|i |cd d d        S t7        | |      }|| j8                  vrt        d| j                   d| d| d      |t        j.                  k7  r| j8                  |   | j                  |<   | j8                  |   }t        |t              rJ  ||i |S # 1 sw Y   ?xY wc c}w # 1 sw Y   xY w)Nr   _get_current_dispatch_modec                 ^    t         j                  j                  |       j                  d      S )NrA   )r1   r2   _dispatch_keysr4   )tensors    r   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key2  s"    xx..v6::8DDr$   c                 p    t        | t        j                        r |       rj                  |        y y y r   )r>   r1   r<   append)argr   overloaded_args_lists    r   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloaded5  s/    c5<<0^C5H(//4 6I0r$   c              3   2   K   | ]  }t        |        y wr   )r{   .0r   s     r   	<genexpr>z/HigherOrderOperator.dispatch.<locals>.<genexpr>@  s     $J3T#Y$J   )_pop_mode_temporarilyz%There was no rule registered for HOP z
 and mode z. We recommend filing an issue.z and subclass zMultiple dispatch failed for zl. There was no registered that did not return NotImplemented. Use HOP.py_impl to register some. Tried mode: z) and subclasses: zRIllegal invocation of dispatch on torch._C.DispatchKey.PreDispatch without a mode.zCurrent active mode z not registeredz.could not find kernel for HigherOrderOperator rd   z (resolved from ))torch.utils._python_dispatchr   r   r>   r   FuncTorchDynamicLayerFrontModer   rA   valueslisttupler   r{   r   r'   r|   NotImplemented__torch_dispatch__r1   r2   _disabled_torch_dispatch_impl	TypeError_to_functionality_keyPreDispatch&_len_torch_dispatch_stack_pre_dispatch&_dispatch_tls_is_dispatch_key_excluded'_get_current_dispatch_mode_pre_dispatchrs   r   )r"   r   r)   r*   r   kernelr   r   aoverloaded_argsoverloaded_typesr   	curr_modehandlerrP   resultsubclass_typefunctionality_key	final_keyr   r   s                      @@r   dispatchzHigherOrderOperator.dispatch!  s   K4///)),7F!&+6664*6**;EEE%dD&99;--- $& E5 100 , %cD%=1  ,(+,, $$89O$$J/$JJ K24I$	?d&;&;;"33DODG.0 @D ")!?!?!?@ @
 .?

|:V_U` a8 9  /!M ' " $S	!44xx==>  D$9$99"33MBG %d5f5F-?

|>ZgYh i8 9  /!M%"* /

| <(k);%45DG568  "HH::<H 7 77J
 781<hhEE"" DE	)hgh) Ot'<'<<E))ODE<//Y@*+<= :"49$9&9: :  l3	 DOO+%@ M##,+-=l^1N  ;222151KD  .+ fk222t&v&&g@ @L 6,: :s   )NN)N"N"N+c                :     ddl m} | fd       } |       S )Nr   )disablec                     t              } t        j                  j                  |       r$t        j                  j                  | gi S t        j                        } j                  |j                         gi S r   )	_to_flat_tupler1   	overrideshas_torch_functionhandle_torch_function_compute_keysetr   r   highestPriorityTypeId)	flat_argsdispatch_key_setr)   r*   r"   s     r   wrapperz-HigherOrderOperator.__call__.<locals>.wrapper  s    &tV4I11)<<<)&*.4   /tVT=V=VW 4== 668;?CI r$   )torch._dynamor   )r"   r)   r*   r   r   s   ```  r   r+   zHigherOrderOperator.__call__  s$     	*	
	 

	 yr$   c                 $    | j                          S r   )rC   r!   s    r   __str__zHigherOrderOperator.__str__  s    ))+r$   c                     | j                   S r   r|   r!   s    r   rC   zHigherOrderOperator.name      zzr$   )r^   r_   r`   r#   rG   propertyr   r   r   abcabstractmethodr+   r   rC   __classcell__r   s   @r   rt   rt      sR    +6"
  S
{'z 	 ( r$   c                 ,    t        j                  | i |S r   )pytreearg_tree_leavesr)   r*   s     r   r   r     s    !!42622r$   c                 2    t        | |      }t        ||      S r   )_get_tensorskey_extractor)r)   r*   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   r>   r1   r<   r   )r)   r*   flat_allttensor_argss        r   r   r     s?    dF+H&F*Q*E1FKF Gs
   AAc                     t         j                  j                         }| D ]$  }|t         j                  j                  |      z  }& |t         j                  j	                         z
  }||z  }|S r   )r1   r2   _dispatch_tls_local_include_setr   _dispatch_tls_local_exclude_set)r   key_maskkey_setr   s       r   r   r     sb    hh668G <EHH33F;;<@@BBG 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                 V    |t        | j                        k  sJ || j                  |<   y r   lenr   )r"   indexrP   s      r   setz!_ModeStackStateForPreDispatch.set  s+    s4--....$(5!r$   c                 T    |t        | j                        k  sJ | j                  |   S r   r   )r"   r   s     r   getz!_ModeStackStateForPreDispatch.get  s,    s4--....!!%((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.count  sB    t11C!Q]ACDs##4/H
 
 	
Cs   ??N)r^   r_   r`   r#   r   r   r   rF   r$   r   r   r     s    '))
r$   r   c                 Z    t                L t        j                  j                  j                  t        j                  j                  j
                  fv sJ |r J  fd} |       }t               }|dk(  r.t        j                  j                  t        j                  d       |S )Nc                     t         j                  j                  j                  k(  r-j	                  d      } t               j                  dd        | S t         j                  j                  j                  k(  r-j	                  d      } t               j                  dd        | S t               j                  } d t               _        | S Nr      )	r1   r2   _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    uxx55;;;:>>qAL-/33At<77BBB:>>qAL-/33At<<>QQLEI-/Br$   r   F)
r   r1   r2   r   r   r   r   '_dispatch_tls_set_dispatch_key_includedr   r   )r   schema_checkr   r   new_pre_dispatch_lenr   s   `    @r   unset_mode_pre_dispatchr     s    &G&I#x&&,,&&11,       =LAC
 q 889P9PRWXr$   c                 <   ddl m} ddlm} ddlm} t        | |||f      sJ t               }t        | |      r4t               j                  }|dkD  rt        d      | t               _	        n{t        | |      r8t               j                  d      }|J t               j                  d|        n7t               j                  d      }|J t               j                  d|        |dk(  r/t        j                  j                  t         j"                  d       y y )Nr   )r[   )SchemaCheckMode)ProxyTorchDispatchModezYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr   T)rW   r[   #torch._subclasses.schema_check_moder  "torch.fx.experimental.proxy_tensorr  r>   r   r   r   AssertionErrorr   r   r1   r2   r   r   r   )rP   r[   r  r  previous_mode_stack_lenr   s         r   _set_mode_pre_dispatchr    s   HCI "	
   EF$(8:MM"Q& k  BF)+>	D.	/8:>>qA###)+//488:>>qA###)+//48 !#889P9PRV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   r  r   r   r   r1   r2   r   r   r   )
mode_stackpre_dispatch_lens     r   _pop_mode_from_pre_dispatchr  B  s    24J=?1=>>$$0&t$??~~a$&uxx'E'E'P'PQQ~~a$&uxx'E'E'K'KLL %r$   c                  2    t               j                         S r   )r   r   rF   r$   r   r   r   Q  s    ,.4466r$   c                 L   | t         j                  j                  j                  t         j                  j                  j                  fv sJ | t         j                  j                  j                  k(  rt               j                  d      S t               j                  d      S r   )r1   r2   r   r   r   r   r   )r   s    r   _get_dispatch_mode_pre_dispatchr  U  s    &&,,&&11    588117770266q990266q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_dispatchrF   r$   r   r   r   p  s    --r$   
OpOverload
cached_opsc                 .    t         j                  |        y r   )r  r   )op_overloads    r   add_cached_opr  x  s    NN;r$   c                  ,    t         j                          y r   )r  r=   rF   r$   r   reset_cached_opsr  }  s    r$   c                      t         S r   )r  rF   r$   r   get_cached_opsr    s    r$   c                        e Zd Z fdZed        Zed        Zed        ZddZd Z	d Z
d Zd	 Zd
 Z fdZ fdZed        Zd Zd Zd Zd Zd Zed        Zed        Zed        Z xZS )r  c                 d   t         |           || _        || _        || _        || _        || _        |j                  dk(  rdn|j                  | _        | j                  j                  | _
        |j                  r"| xj                  d|j                  z   z  c_
        | j                  j                  j                  d      d    d| j                   | _        |j                  | _        |j                  |_        | j                  | _        i | _        d | _        | j                  t"        j$                  j&                  v | _        d }| j                  j*                  D ]B  }|j,                  ||j,                  j.                  })|j,                  j.                  xs |}D |d uxr | | _        y )N default.::r   )rz   r#   _op_op_dk_schema_overloadpacket_tagsoverload_name_overloadnamerC   r|   splitr^   r_   r`   __annotations___lazy_handler1   library_defs_defined_in_python	arguments
alias_infois_writeis_view)	r"   overloadpacketrb   op_dkschematagsr2  r   r   s	           r   r#   zOpOverload.__init__  s   -
--3I9M9M 	 \\&&
JJ# 4 444J<<,,2248;<Ad>P>P=QR(33&11 JJ! ! #'"3"3u}}7J7J"J '' 	=A||#<<00 <<00<H	=  t+<Hr$   c                 R    | j                   j                  j                  d      d   S Nr"  r   r%  rC   r*  r!   s    r   
_namespacezOpOverload._namespace  "    ||  &&t,Q//r$   c                 R    | j                   j                  j                  d      d   S )Nr"  r   r:  r!   s    r   _opnamezOpOverload._opname  r<  r$   c                     | j                   Mt        j                  j                  | j                  j
                  | j                  j                        | _         | j                   S r   )r,  r1   r2   _dispatch_find_schema_or_throwr%  rC   r(  r!   s    r   _handlezOpOverload._handle  sL    $ % G G!!4<<#=#=!D    r$   c                     | S r   rF   r"   memos     r   __deepcopy__zOpOverload.__deepcopy__      r$   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz'<OpOverload(op='{}.{}', overload='{}')>r"  formatr%  rC   r*  r)  r!   s    r   __repr__zOpOverload.__repr__  sC    ?8?? 
\\$$T*
,0,>,>
 	
r$   c                &     | j                   |i |S r   r#  r(   s      r   r+   zOpOverload.__call__  s    txx(((r$   c                B     | j                   j                  |g|i |S r   )rA  redispatch_boxed)r"   keysetr)   r*   s       r   
redispatchzOpOverload.redispatch  s#    ,t||,,VEdEfEEr$   c                 ,    t        | j                        S r   hashr#  r!   s    r   __hash__zOpOverload.__hash__      DHH~r$   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz{}.{}.{}r"  rH  r!   s    r   r   zOpOverload.__str__  s8     z  T$,,"3"3"9"9$"?TASASTTr$   c                     t         |   |      xs. t        j                  j	                  | j                         |      S r   )rz   r/   r1   r2   %_dispatch_has_kernel_for_dispatch_keyrC   r   s     r   r/   z&OpOverload.has_kernel_for_dispatch_key  s9    w2
 LXX;;DIIKK	Lr$   c                     t         j                  j                  | j                         |      xs t        |   |      S r   )r1   r2   )_dispatch_has_kernel_for_any_dispatch_keyrC   rz   r6   )r"   r5   r   s     r   r6   z*OpOverload.has_kernel_for_any_dispatch_key  s7    xxAAIIK
 9W4R8	9r$   c                 R    | j                   j                  j                  d      d   S r9  r:  r!   s    r   r   zOpOverload.namespace  r<  r$   c                     t         j                  }|| j                  v xs. t        j                  j                  | j                         |      S r   )r   rk   r   r1   r2   rX  rC   )r"   dks     r   _can_decomposezOpOverload._can_decompose  s?    22T__$ 
(V(VIIK)
 	
r$   c                     t         j                  }|| j                  v r | j                  |   |i |S t        j                  j                  | j                         |      r | j                  |g|i |S t        S r   )	r   rk   r   r1   r2   rX  rC   r$  r   )r"   r)   r*   r]  s       r   	decomposezOpOverload.decompose  sq    22 
 '4??2&777XX;;DIIKL4;;r3D3F33!!r$   c                 <    | j                   j                  |d        y r   )r   pop)r"   keys     r   _uncache_dispatchzOpOverload._uncache_dispatch  s      d+r$   c                 `     j                   vsJ   d        t        j                  k(  rZt         t              s( j
                  s j                   <   t                S  fd}| j                   <   t                |S t        j                  j                        }|t        j                  k(  rCt               }|dkD  r4t        j                  j                  t        j                        s fd}|S t               }t        j                  k7  }t        j                  k(  rEdd lmc m} |j$                  r0|j'                   |      }|r| j                   <   t                |S  j(                  j+                  ||      }|r| j                   <   t                |S )N c                  0   ddl m} t         |             }|J d       |j                  vrt	        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   zMIllegal invocation of dispatch on torch._C.DispatchKey.Python without a mode.)r   r   r{   r   r>   TorchBindOpOverloadr1   utils_python_dispatchr   _libraryhandle_dispatch_moder$  )r)   r*   r   r   rP   rc  r"   s        r   r   z)OpOverload._get_dispatch.<locals>.handler  s   S !!;!=>	)cbc) D$9$99!$(;<"[[99OOQ UY#(>>#7#7#L#L $d$-1$5;$ 
  +t{{3@@@@[[11GGI ST;400;DR4R6RS S S S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   )r  r  )top_modes    r   (_temporarily_pop_modes_from_pre_dispatchz[OpOverload._get_dispatch.<locals>.handler.<locals>._temporarily_pop_modes_from_pre_dispatch8  s)     #>#@="*N28<28<s   . .+.)
contextlibcontextmanagerr1   rk  ri  rl  )r)   r*   rp  r   r"   s       r   r   z)OpOverload._get_dispatch.<locals>.handler7  sh    ..= /= BC y$~~33HH%t .2 6<   s   .AA )r   r   rA   r>   rh  r   r  r1   r2   r   r   r   r   rs   rX   torch._dispatch.python	_dispatchpythonCROSSREF_FUNCTIONALIZEmake_crossref_functionalizer   r   )	r"   rc  r   r   curr_stack_lenr   cache_result
pydispatchrs	   ``       r   _get_dispatchzOpOverload._get_dispatch  s   $...?4&#?.+$$$d$78AVAV,/$$S)d#
S, )0D  %$N!HH::3? 7 77CEN "GG&&
& c*	 k555
 ++++7700$@@yQ07D((-!$'OO	95()D  %$r$   c                     | j                   S r   r   r!   s    r   rC   zOpOverload.named  r   r$   c                     | j                   S r   )r&  r!   s    r   r4  zOpOverload.overloadpacketg  s    ###r$   c                     | j                   S r   rL  r!   s    r   rb   zOpOverload.opk  r   r$   c                     | j                   S r   )r'  r!   s    r   r7  zOpOverload.tagso  s    zzr$   r   )r^   r_   r`   r#   r   r;  r>  rA  rE  rJ  r+   rP  rT  r   r/   r6   r   r^  r`  rd  r|  rC   r4  rb   r7  r   r   s   @r   r  r    s    $=L 0 0 0 0 ! !
)
FUL
9
 0 0
"*,[z $ $    r$   c                   N    e Zd Zdee   fdZej                  d        Zd Z	d Z
y)rh  returnc                 ,    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 )Nrc  c                 .   t         j                  j                  j                         |       r.t         j                  j	                  j                         |       S | j
                  vxs) j
                  |    t         j                  j                  u S r   )r1   r2   rX  rC   0_dispatch_kernel_for_dispatch_key_is_fallthroughr   r-  fallthrough_kernel)rc  r"   s    r   (_may_use_fallthrough_instead_of_fallbackzWTorchBindOpOverload._fallthrough_keys.<locals>._may_use_fallthrough_instead_of_fallback  ss    xx==diik3OxxPPIIK 
 4??* L??3'5==+K+KKr$   )r   rn   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcher)r"   _DEFAULT_FALLTHROUGH_KEYSr  rc  s   `   r   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys{  s       ##$$''%%))((%
!		+ 		 1
7< 
 	
 
s   =Bc              #      K   ddl m}m}m} 	 | |vr || |j                         d  | |v r|| = y y # | |v r|| = w w xY ww)Nr   )_EffectType_register_effectful_opSIDE_EFFECTS)torch._higher_order_ops.effectsr  r  r  ORDERED)r"   r  r  r  s       r   %_register_as_effectful_op_temporarilyz9TorchBindOpOverload._register_as_effectful_op_temporarily  sZ     	
 	
	'<'&t[-@-@A|# & $t|# & $s   ?2 	?
<?c                    t        ||      r;| j                         5  | j                  ||| j                               cd d d        S  | j                  |i |S # 1 sw Y   xY wr   )_must_dispatch_in_pythonr  _dispatch_in_pythonr  r#  r(   s      r   r+   zTorchBindOpOverload.__call__  sj    #D&1 ;;= X//fd>T>T>VWX Xtxx(((X Xs   !AA#c           	         t         j                  j                         }|D ]  }|j                  |      } t	        |||      }|j                         }|| j                  vr| j                  |      n| j                  |   }t        |t              rZt         j                  j                  | j                         |      r| j                  ||||gz         S t        d|  d| d| d      t        |t              sJ  ||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 happpen 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.)r1   r2   r~   r   r   r   r   r|  r>   r   r  rC   r  rB   r   )	r"   r)   r*   fallthrough_keysr   rc  r   r   r   s	            r   r  z'TorchBindOpOverload._dispatch_in_python  s5   $xx==?# 	DC#7#>#>s#C 	D +49MN'==? 4#7#77 |,%%l3 	 g{+ xxHH		\ //&"2l^"C  v%YZaYb cJ KW X.	/  '8,,,'''r$   N)r^   r_   r`   r   r   r  rq  rr  r  r+   r  rF   r$   r   rh  rh  z  s7    
4#4 
< ' '") #(r$   rh  c                 4    t        j                  d | |f      S )Nc                 ^    t        | t        j                  j                  j                        S r   )r>   r1   rk  fake_class_registryFakeScriptObject)objs    r   <lambda>z*_must_dispatch_in_python.<locals>.<lambda>  s     J33DD
 r$   )r   tree_anyr   s     r   r  r    s!    ??	
 
v	 r$   r6  r  c                 :    t        d | j                  D              S )Nc              3   d   K   | ](  }t        |j                  t        j                         * y wr   )r>   r{   r1   	ClassTyper   s     r   r   z)_has_script_object_arg.<locals>.<genexpr>  s     Qz#((EOO4Qs   .0)anyr0  )r6  s    r   _has_script_object_argr    s    Q@P@PQQQr$   c                   d    e Zd Zd ZddZd Zd Zd Zed        Z	ed        Z
d	 Zd
 Zd Zd Zy)OpOverloadPacketc                     || _         || _        || _        || _        g | _        t        d | j                  j                         D              | _        y )Nc              3   2   K   | ]  }t        |        y wr   )r  )r   r6  s     r   r   z,OpOverloadPacket.__init__.<locals>.<genexpr>  s      .
/5"6*.
r   )	_qualified_op_namer^   r#  _overload_names_dirr  _schemasr   _has_torchbind_op_overload)r"   qualified_op_nameop_namerb   overload_namess        r   r#   zOpOverloadPacket.__init__  sP     #4-	*- .
9=9M9M9O.
 +
'r$   Nc                     | S r   rF   rC  s     r   rE  zOpOverloadPacket.__deepcopy__  rF  r$   c                 R     dj                   | j                  j                  d       S )Nz<OpOverloadPacket(op='{}.{}')>r"  rI  r  r*  r!   s    r   rJ  zOpOverloadPacket.__repr__  s,    6/66$$**40
 	
r$   c                 ,    t        | j                        S r   rR  r!   s    r   rT  zOpOverloadPacket.__hash__  rU  r$   c                 R     dj                   | j                  j                  d       S )Nz{}.{}r"  r  r!   s    r   r   zOpOverloadPacket.__str__	  s$    w~~t66<<TBCCr$   c                     | j                   S r   rL  r!   s    r   rb   zOpOverloadPacket.op  r   r$   c                     | j                   D ci c]-  }|t        j                  j                  | j                  |      / c}S c c}w r   )r  r1   r2   _get_schemar  )r"   r(  s     r   r  zOpOverloadPacket._schemas  sF     "&!5!5
 588//0G0GWW
 	
 
s   2Ac           
         |dk(  ry	 |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__file__	torch.ops__'zH' can't have an overload name beginning with '__' and the underlying op z has no attribute z either.r   r  zThe underlying op of 'z' has no overload name ')
startswithgetattrr#  AttributeErrorstrr1   r2   _get_operation_overloadr  r  r  r  rh  setattrr  r   rB   )	r"   rc  use_key
op_dk_tagsop_op_dk_r7  r6  overloads	            r   __getattr__zOpOverloadPacket.__getattr__  s   *	~~d#txx-- $	9,b#G99''J !$,SYK7OPSuTUV  !+CXX))$*A*A7KF .f5 4ffd;(sFFDI  D#x(IIS!OA  	
 !CI; !!$TXX/A#hP 	B  	 (T3KC5PQR	s   &D CE <E &E)c                 ,    t        | j                        S r   iterr  r!   s    r   __iter__zOpOverloadPacket.__iter__L      DIIr$   c                x    | j                   rt        ||      rt        | ||      S  | j                  |i |xs i S r   )r  r  !_call_overload_packet_from_pythonr#  r(   s      r   r+   zOpOverloadPacket.__call__Q  s@     **/Gf/U4T4HHtxx0&,B00r$   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!QI%DDDs   r   )r^   r_   r`   r#   rE  rJ  rT  r   r   rb   r  r  r  r+   r  rF   r$   r   r  r    sZ    



D   
 
3j
1Er$   r  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}t        |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:
 
)
r1   r2   (_maybe_call_torch_function_for_op_packetr  r  &_check_schema_allow_fake_script_objectr%  rB   	enumerateitems)rb   r)   r*   torch_function_calledret
exceptionsfound_opr(  r  _eerr_msgr   rc  msgs                  r   r  r  e  s2   !&!R!R
"""3 
 JH 	*b-0	*??##&*.4A #H	* ((( 2"5RS  #:#3#3#56 5:C^C5SE445
w
  	*()J}%	*s   /C	C$CC$c                   .     e Zd ZdZ fdZd Z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).
    c                 F    t         |   d|z          || _        g | _        y )Nz
torch.ops.)rz   r#   rC   r  )r"   rC   r   s     r   r#   z_OpNamespace.__init__  s#    ,-		r$   c                 ,    t        | j                        S r   r  r!   s    r   r  z_OpNamespace.__iter__  r  r$   c                    |dk(  ry|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)Nr  r  )
__origin____self__zInvalid attribute 'z' for '_OpNamespace' 'r  r"  r!  z'_OpNamespace' '' object has no attribute ')	r  rC   r_   _get_packetrB   r  r  r  r   )	r"   r  namespace_namer  module_namerb   r  r  opoverloadpackets	            r   r  z_OpNamespace.__getattr__  sI   j 22 %gY.DTYYKqQ  -.b	:oo+n<	!,->!LBz$&tyyk1LWIUVW   $+wN
 '+oo&;n&L# 	g/0		!!  	 !"499+-H	QRS	s   -C 	C<C77C<)r^   r_   r`   ra   r#   r  r  r   r   s   @r   r  r    s    (
% r$   r  c                     t         j                  j                  |       \  }}|1t         j                  j                  j                  ||        ||_        ||fS r   )r1   r2   _jit_get_operationjit	_builtins_register_builtinr_   )qualname	op_modulerb   r  s       r   r  r    sN    44X>B	~ 			--b(;!~r$   c                     t        | j                  | j                  j                        \  }}|J || _        || _        y r   )r  r  r#  r_   r  )packetrb   r  s      r   _refresh_packetr    s<    $V%>%>

@U@UVB>>FJ+Fr$   c                   $     e Zd Z fdZd Z xZS )_PyOpNamespacec                 2    t         |   |       || _        y r   )rz   r#   _ops)r"   rC   opsr   s      r   r#   z_PyOpNamespace.__init__  s    	r$   c                     | j                   j                  |d       }|t        d| j                   d| d      t	        | ||       |S )Nz'_PyOpNamespace' 'r  r  )r  r   r  rC   r  )r"   rC   rb   s      r   r  z_PyOpNamespace.__getattr__  sS    YY]]4&: $TYYK/J4&PQR  	dB	r$   )r^   r_   r`   r#   r  r   r   s   @r   r  r    s    r$   r  c                   :     e Zd ZdZ fdZd Zd Zd Zd Z xZ	S )_Opsz_ops.pyc                 z    t         |   d       t               | _        t	        dt
              | _        g | _        y )Nr  ry   )rz   r#   r   loaded_librariesr  ru   _higher_order_op_namespacer  )r"   r   s    r   r#   z_Ops.__init__  s6    % #*8$&7+
' 	r$   c                     |dk(  r| j                   S t        |      }t        | ||       | j                  j	                  |       |S )Nrx   )r  r  r  r  r   )r"   rC   r   s      r   r  z_Ops.__getattr__  sF    >!222 !&	dI&		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                         ryt        j                  |      }t	               5  t        j                  |       ddd       | j                  j                  |       y# 1 sw Y   %x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.
        N)	r1   _running_with_deployr
   resolve_library_pathr   r   CDLLr  r   )r"   paths     r   load_libraryz_Ops.load_library,  sa    $ %%'33D9_ 	 KK		
 	!!$'	 	s   A//A8)
r^   r_   r`   r  r#   r  r  r
  r  r   r   s   @r   r  r     s!    H	(&(r$   r  r  )F)Pr   rq  r   r	  r9   r   typestypingr   r   r   r   r   r   r	   r1   torch.utils._pytreeri  _pytreer   r
   torch._Cr   rg   r   torch._functorch.pyfunctorchr   r   r   hasattrr   rr  r   r   rs   ru   r  r+  r  r  r  r  AutocastCPUAutocastCUDAr   ABCrt   r   r   r   r   r   r  r   r  r  r   r  r   r   r   r  r  r  r  r  rh  r  FunctionSchemaboolr  r  r  
ModuleTyper  r  r  r  r  r  rF   r$   r   <module>r     s   
     
  > > >  $ $ ! X ; : C!12UwsDT7U  & & E" E"R2UL 2U[ 2Uj 79 4223 8   !!6 2E, EP38
,
 
& &C%D "!H$XNM7: .
 !$
C % 

h hbd(* d(NR5#7#7 RD RpE pEj# *: # jB 5## B J,\  G(5 G(V FT r$   