
    Pg1                        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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de	def   	      Z eed
      xr	  eed      Z ejB                  d        Z" G d d      Z#de#defdZ$i Z%e
e&df   e'd<   ejP                  ejR                  ejT                  ejV                  ejX                  ejZ                  gZ. G d de#e j^                        Z0d Z1d Z2d Z3d Z4 G d d      Z5 e5       a6d:dZ7d Z8d Z9d Z:d Z;d  Z<d! Z= e>       a?ed"   e'd#<   d$ Z@d% ZAd& ZB G d' d"e#      ZC G d( d)eC      ZDd* ZEd+ej                  d,eGfd-ZH G d. d/      ZIdeIfd0ZJ G d1 d2ej                        ZLd3 ZMd4 ZN G d5 d6eL      ZO G d7 d8ej                        ZP eP       ZQePe'd9<   y);    N)AnyCallableDictListSetTypeTypeVarUnion)_utils_internal)_dispatch_is_included_in_aliasDispatchKey)dispatch_functorch)TorchDispatchMode_F.)bound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    Q/var/www/html/suriana-translation/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                   Z    e Zd ZdZd Zd Zd Zd Zdede	e
ge
f   fdZd	e
de
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__1   s1    $  	 BD  	  "    c                     t         r   NotImplementedErrorr%   argskwargss      r   __call__zOperatorBase.__call__]       !!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%   ksr1   s      r   has_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_keyc   s9     	A882215"&&)	 r'   r1   returnc                 0     dt         dt         f fd}|S )Nfnr:   c                    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   r4   Tensorr"   r    clear
isinstancer5   
_functorchTransformTyper#   r   Pythonr!   RuntimeErrorname)r<   r1   r%   s    r   innerz#OperatorBase.py_impl.<locals>.innerj   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%   r1   rI   s   `` r   py_implzOperatorBase.py_impli   s    	b 	R 	8 r'   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    )r,   r-   _CppFunctionalizeAPIr<   s     r   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s    *,>t>v>>r'   c                 (      |       g|i |S r   rP   )moder,   r-   _PythonFunctionalizeAPIr<   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   rP   )interpreterr,   r-   _FunctorchFunctionalizeAPIr<   s      r   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s    0=OOOOr'   )#torch._subclasses.functional_tensorrL   rM   rN   rJ   r   Functionalizer4   _subclassesfunctional_tensorFunctionalTensorModer5   rD   rE   )r%   r<   rR   rV   rZ   rQ   rY   rU   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   rH   zOperatorBase.name   r/   r'   N)__name__
__module____qualname____doc__r&   r.   r2   r9   r   r   r   rJ   r`   rH   rP   r'   r   r   r   +   sS    
*"X"$ 2$(!3 T r 8"r'   r   opr1   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 )r2   r   &CompositeExplicitAutogradNonFunctional	Undefinedis_included_in_aliasCompositeExplicitAutogradr9   r4   r5   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrG   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr*   )rf   r1   candhas_backend_kernels       r   resolve_keyrw      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                        e Zd Zdd fd
Zdedeegef   f fdZed        Z	d Z
d	 Zd
 Zej                  d        Zd Zd Z xZS )rx   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&   typerx   rG   _namerb   ry   _nsrc   
_cacheabler4   r5   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r%   rH   r{   dispatch_key	__class__s       r   r&   zHigherOrderOperator.__init__   s    :,,a  
 "&$!2#$)HH$B$B$D!N 	+L\*	+r'   r1   r:   c                     t        |t              r;| j                  j                  |      s | j                  j	                  |      | _        t
        |   |      S r   )rC   r   r   r7   addr   rJ   r%   r1   r   s     r   rJ   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                     | j                   S r   )r   r$   s    r   r{   zHigherOrderOperator.cacheable   s    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 )NrF   )r4   r5   _dispatch_keysr7   )tensors    r   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key9  s"    xx..v6::8DDr'   c                 p    t        | t        j                        r |       rj                  |        y y y r   )rC   r4   rA   append)argr   overloaded_args_lists    r   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloaded<  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>G  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 rh   z (resolved from ))torch.utils._python_dispatchr   r    rC   r   FuncTorchDynamicLayerFrontModer   rF   valueslisttupler   r   r"   r*   r   NotImplemented__torch_dispatch__r4   r5   _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_dispatchrw   r!   )r%   r   r,   r-   r   kernelr   r   aoverloaded_argsoverloaded_typesr   	curr_modehandlerrT   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_tupler4   	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   )rH   r$   s    r   __str__zHigherOrderOperator.__str__  s    ))+r'   c                     | j                   S r   r   r$   s    r   rH   zHigherOrderOperator.name      zzr'   )rb   rc   rd   r&   r   r   r   rJ   propertyr   r{   r   r   abcabstractmethodr.   r   rH   __classcell__r   s   @r   rx   rx      su     +0 +8" "2$(!3 "
  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   rC   r4   rA   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   )r4   r5   _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%   indexrT   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)rb   rc   rd   r&   r   r   r   rP   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      )	r4   r5   _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   r4   r5   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)r[   r_   #torch._subclasses.schema_check_moder  "torch.fx.experimental.proxy_tensorr	  rC   r   r   r   AssertionErrorr   r   r4   r5   r  r   r   )rT   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   r4   r5   r   r   r   )
mode_stackpre_dispatch_lens     r   _pop_mode_from_pre_dispatchr  I  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   rP   r'   r   r   r   X  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   )r4   r5   r   r   r   r   r   )r  s    r   _get_dispatch_mode_pre_dispatchr  \  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   g  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_dispatchrP   r'   r   r   r   w  s    --r'   
OpOverload
cached_opsc                 .    t         j                  |        y r   )r  r   )op_overloads    r   add_cached_opr    s    NN;r'   c                  ,    t         j                          y r   )r  rB   rP   r'   r   reset_cached_opsr!    s    r'   c                      t         S r   )r  rP   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   )r   r&   _op_op_dk_schema_overloadpacket_tagsoverload_name_overloadnamerH   r   splitrb   rc   rd   __annotations___lazy_handler4   library_defs_defined_in_python	arguments
alias_infois_writeis_view)	r%   overloadpacketrf   op_dkschematagsr9  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,  rH   r1  r$   s    r   
_namespacezOpOverload._namespace  "    ||  &&t,Q//r'   c                 R    | j                   j                  j                  d      d   S )Nr)  r   rA  r$   s    r   _opnamezOpOverload._opname  rC  r'   c                     | j                   Mt        j                  j                  | j                  j
                  | j                  j                        | _         | j                   S r   )r3  r4   r5   _dispatch_find_schema_or_throwr,  rH   r/  r$   s    r   _handlezOpOverload._handle  sL    $ % G G!!4<<#=#=!D    r'   c                     | S r   rP   r%   memos     r   __deepcopy__zOpOverload.__deepcopy__      r'   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz'<OpOverload(op='{}.{}', overload='{}')>r)  formatr,  rH   r1  r0  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   )rH  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)  rO  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   )r   r2   r4   r5   %_dispatch_has_kernel_for_dispatch_keyrH   r   s     r   r2   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   )r4   r5   )_dispatch_has_kernel_for_any_dispatch_keyrH   r   r9   )r%   r8   r   s     r   r9   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 r@  rA  r$   s    r   r   zOpOverload.namespace  rC  r'   c                     t         j                  }|| j                  v xs. t        j                  j                  | j                         |      S r   )r   ro   r!   r4   r5   r_  rH   )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   ro   r!   r4   r5   r_  rH   r+  r   )r%   r,   r-   rd  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"   rC   TorchBindOpOverloadr4   utils_python_dispatchr   _libraryhandle_dispatch_moder+  )r,   r-   r   r   rT   rj  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_dispatch?  s)     #>#@="*N28<28<s   . .+.)
contextlibcontextmanagerr4   rr  rp  rs  )r,   r-   rw  r   r%   s       r   r   z)OpOverload._get_dispatch.<locals>.handler>  sh    ..= /= BC y$~~33HH%t .2 6<   s   .AA )r    r   rF   rC   ro  r"   r  r4   r5   r   r   r   r   rw   r\   torch._dispatch.python	_dispatchpythonCROSSREF_FUNCTIONALIZEmake_crossref_functionalizer!   r   )	r%   rj  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   rH   zOpOverload.namek  r   r'   c                     | j                   S r   )r-  r$   s    r   r;  zOpOverload.overloadpacketn  s    ###r'   c                     | j                   S r   rS  r$   s    r   rf   zOpOverload.opr  r   r'   c                     | j                   S r   )r.  r$   s    r   r>  zOpOverload.tagsv  s    zzr'   r   )rb   rc   rd   r&   r   rB  rE  rH  rL  rQ  r.   rW  r[  r   r2   r9   r   re  rg  rk  r  rH   r;  rf   r>  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)ro  r:   c                 ,    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 )Nrj  c                 .   t         j                  j                  j                         |       r.t         j                  j	                  j                         |       S | j
                  vxs) j
                  |    t         j                  j                  u S r   )r4   r5   r_  rH   0_dispatch_kernel_for_dispatch_key_is_fallthroughr!   r4  fallthrough_kernel)rj  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   rr   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcher)r%   _DEFAULT_FALLTHROUGH_KEYSr  rj  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.)r4   r5   r   r   r   r   r    r  rC   r   r  rH   r  rG   r   )	r%   r,   r-   fallthrough_keysr   rj  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)rb   rc   rd   r   r   r  rx  ry  r  r.   r  rP   r'   r   ro  ro    s7    
4#4 
< ' '") #(r'   ro  c                 4    t        j                  d | |f      S )Nc                 ^    t        | t        j                  j                  j                        S r   )rC   r4   rr  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'   r=  r:   c                 :    t        d | j                  D              S )Nc              3   d   K   | ](  }t        |j                  t        j                         * y wr   )rC   r   r4   	ClassTyper   s     r   r   z)_has_script_object_arg.<locals>.<genexpr>  s     Qz#((EOO4Qs   .0)anyr7  )r=  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   r=  s     r   r   z,OpOverloadPacket.__init__.<locals>.<genexpr>   s      .
/5"6*.
r   )	_qualified_op_namerb   r*  _overload_names_dirr  _schemasr   _has_torchbind_op_overload)r%   qualified_op_nameop_namerf   overload_namess        r   r&   zOpOverloadPacket.__init__  sP     #4-	*- .
9=9M9M9O.
 +
'r'   Nc                     | S r   rP   rJ  s     r   rL  zOpOverloadPacket.__deepcopy__  rM  r'   c                 R     dj                   | j                  j                  d       S )Nz<OpOverloadPacket(op='{}.{}')>r)  rP  r  r1  r$   s    r   rQ  zOpOverloadPacket.__repr__  s,    6/66$$**40
 	
r'   c                 ,    t        | j                        S r   rY  r$   s    r   r[  zOpOverloadPacket.__hash__  r\  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   rS  r$   s    r   rf   zOpOverloadPacket.op  r   r'   c                     | j                   D ci c]-  }|t        j                  j                  | j                  |      / c}S c c}w r   )r  r4   r5   _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strr4   r5   _get_operation_overloadr  r  r  r  ro  setattrr  r   rG   )	r%   rj  use_key
op_dk_tagsop_op_dk_r>  r=  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__S      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__X  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.overloadsf  s#    /3/C/CD!QI%DDDs   r   )rb   rc   rd   r&   rL  rQ  r[  r   r   rf   r  r  r  r.   r  rP   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:
 
)
r4   r5   (_maybe_call_torch_function_for_op_packetr  r  &_check_schema_allow_fake_script_objectr,  rG   	enumerateitems)rf   r,   r-   torch_function_calledret
exceptionsfound_opr/  r  _eerr_msgr   rj  msgs                  r   r  r  l  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.)r   r&   rH   r  )r%   rH   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  rH   rc   _get_packetrG   r  r  r  r   )	r%   r  namespace_namer  module_namerf   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<)rb   rc   rd   re   r&   r  r  r   r   s   @r   r  r    s    (
% r'   r  c                     t         j                  j                  |       \  }}|1t         j                  j                  j                  ||        ||_        ||fS r   )r4   r5   _jit_get_operationjit	_builtins_register_builtinrc   )qualname	op_modulerf   r  s       r   r  r    sN    44X>B	~ 			--b(;!~r'   c                     t        | j                  | j                  j                        \  }}|J || _        || _        y r   )r  r  r*  rc   r  )packetrf   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   )r   r&   _ops)r%   rH   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  rH   r  )r%   rH   rf   s      r   r  z_PyOpNamespace.__getattr__  sS    YY]]4&: $TYYK/J4&PQR  	dB	r'   )rb   rc   rd   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  r~   )r   r&   r   loaded_librariesr  ry   _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 )Nr}   )r  r  r  r  r   )r%   rH   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)	r4   _running_with_deployr   resolve_library_pathr   r   CDLLr
  r   )r%   paths     r   load_libraryz_Ops.load_library3  sa    $ %%'33D9_ 	 KK		
 	!!$'	 	s   A//A8)
rb   rc   rd   r  r&   r  r  r  r  r   r   s   @r   r  r    s!    H	(&(r'   r  r  )F)Rr   rx  r   r  r>   r   typestypingr   r   r   r   r   r   r	   r
   r4   torch.utils._pytreerp  _pytreer   r   torch._Cr   rk   r   torch._functorch.pyfunctorchr   r   r   r   hasattrr   ry  r   r   rw   ry   r  r2  r  r  r  r  AutocastCPUAutocastCUDAr   ABCrx   r   r   r   r   r   r  r  r  r  r   r  r   r   r   r  r  r!  r#  r  ro  r  FunctionSchemaboolr  r  r  
ModuleTyper  r  r   r  r  r  rP   r'   r   <module>r%     s4   
     
  G G G  $ $ ! X ; : T#s(+, C!12UwsDT7U  & & E" E"R2UL 2U[ 2Uj 79 4223 8   !!6 2I, IX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'   