
    '}h̤                     H   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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 d dlmZ  eed      xr	  eed      Ze j4                  d        Z G d	 d
      Zej:                  j<                  Zej:                  j@                  Z dede fdZ!i Z"e	e#df   e$d<   e jJ                  e jL                  e jN                  e jP                  e jR                  e jT                  gZ+ G d de      Z,d Z-d Z.d Z/d Z0 G d d      Z1 e1       a2d Z3d Z4d Z5d Z6d Z7d Z8d Z9 e:       a;e
d   e$d<   d  Z<d! Z=d" Z> G d# de      Z? G d$ d%      Z@ G d& d'ej                        ZB G d( d)eB      ZC G d* d+ej                        ZD eD       ZEy),    N)AnyCallableDictSetTypeUnion)_utils_internal)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    I/var/www/html/test/engine/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_mode_tablefunctorch_tableselfs    r   __init__zOperatorBase.__init__+   s1    $  	 KM  	"  "    c                     t               r   NotImplementedError)r   argskwargss      r   __call__zOperatorBase.__call__W       !##r!   c                     || j                   v S r   )r   )r   ks     r   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyZ   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                        rKt        t              r;j                  vsJ | j                  <   j
                  j                          | S t        t        j                  j                  j                        r!j                  vsJ | j                  <   | S t        t        j                  j                        sJ t        j                  j                  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   r   r   clear
isinstancer-   r.   
_functorchTransformTyper   DispatchKeyPythonr   RuntimeErrorname)fnr*   r   s    r   innerz#OperatorBase.py_impl.<locals>.innerd   s3   q!j4E&F : ::::02**1-$$**,	!UXX00>>? 4 4444*,$$Q'	a!5!5666UXX))000YXY0 DOO#";A3mDIIK=Y  "$DOOA  &&(Ir!    )r   r*   rA   s   `` r   py_implzOperatorBase.py_implc   s    	4 r!   c                    ddl mmm fd}fd}fd} | j	                  t
        j                  j                  j                        |        | j	                  t
        j                  j                  j                        |        | j	                  t
        j                  j                  j                  j                        |       S )Nr   )CppFunctionalizeAPIFunctorchFunctionalizeAPIPythonFunctionalizeAPIc                  &             g| i |S r   rB   )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   rB   )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   rB   )interpreterr%   r&   _FunctorchFunctionalizeAPIr@   s      r   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s    0=OOOOr!   )#torch._subclasses.functional_tensorrE   rF   rG   rC   r-   r.   r<   Functionalize_subclassesfunctional_tensorFunctionalTensorModer:   r;   )r   r@   rJ   rN   rR   rI   rQ   rM   s    `   @@@r   py_functionalize_implz"OperatorBase.py_functionalize_impl   s    	
 	
	?	F	P 	9UXX))7789LMNU&&88MMN*	
 	FUXX((66DDE&	
 	r!   c                     t               r   r#   r   s    r   r?   zOperatorBase.name   r(   r!   N)__name__
__module____qualname____doc__r    r'   r+   r2   rC   rX   r?   rB   r!   r   r   r   %   s,    
*"X$$P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CompositeExplicitAutogradr2   r-   r.   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsr>   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr$   )r^   r*   candhas_backend_kernels       r   resolve_keyro      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                   V     e Zd Z fdZ fdZed        Zd Zd Zd Z	d Z
d Z xZS )	rp   c                     t                    | _        | _         t        |<   d _         j                  t        u r1 j                  rd j                  z   nd} j                  |z    _	        t        j                  j                          _        t        D ]  } j                  |         fd}  j!                  t        j                  j"                  j$                        |       y )Nhigher_order. c                     t               dk(  r\t        j                  j                  t        j                  j	                  t
        j                              5   | i |cd d d        S t        d      # 1 sw Y   t        d      xY w)Nr   z
                Can't directly invoke HOP implementation at PreDispatch key
                if there are active modes on PreDispatch mode stack.
                )&_len_torch_dispatch_stack_pre_dispatchr-   r.   _ExcludeDispatchKeyGuardDispatchKeySetr<   PreDispatchAssertionError)r%   r&   r   s     r   _z'HigherOrderOperator.__init__.<locals>._  s    571<XX66HH++K,C,CD 1  001 1 ! 	1 ! s   A66B	)superr    _namerZ   rq   _ns	__class__rp   	namespacer[   r-   r.   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthroughrC   r<   r{   )r   r?   self_name_spacedispatch_keyr}   r   s   `    r   r    zHigherOrderOperator.__init__   s    
 "&$! >>006:nncDNN2"O"oo?DO$)HH$B$B$D!N 	+L\*	+	 	7UXX))556q9r!   c                     t        |t        j                  j                        r;| j                  j                  |      s | j                  j                  |      | _        t        | !  |      S r   )	r9   r-   r.   r<   r   r0   addr~   rC   r   r*   r   s     r   rC   zHigherOrderOperator.py_impl$  sS    a--.t7P7P7T7TUV7W(,(A(A(E(Ea(HD%wq!!r!   c                     | j                   S r   )r   r   s    r   r   z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           	      l   ddl m} || j                  v r=| j                  |   }t        |t        j
                  j                        rJ  ||i |S |t        j
                  j                  j                  k(  rt        | ||      S |t        j
                  j                  j                  k(  rmddl m
}  |       }|J d       t        |      | j                  v sJ d| d       | j                  t        |         } |       5 }	 ||	g|i |cd d d        S t        j
                  j                  |      }
|
t        j
                  j                  j                  k(  rddl m
} t               dkD  rt        j
                  j!                  t        j                        skt#               }|J d       t        |      | j                  v sJ d| d       | j                  t        |         } ||
      5 }	 ||	g|i |cd d d        S t%        | |      }|| j&                  vrt)        d| j*                   d	| d
| d      | j&                  |   | j                  |<   | j&                  |   }t        |t        j
                  j                        rJ  ||i |S # 1 sw Y   xY w# 1 sw Y   xY w)Nr   _get_current_dispatch_mode)_pop_mode_temporarilyMIllegal invocation of dispatch on torch._C.DispatchKey.Python without a mode.zCurrent active mode z not registeredzRIllegal invocation of dispatch on torch._C.DispatchKey.PreDispatch without a mode.z.could not find kernel for HigherOrderOperator r`   z (resolved from ))torch.utils._python_dispatchr   r   r9   r-   r.   r<   FuncTorchDynamicLayerFrontModer
   r=   r   typer   _to_functionality_keyr{   rx   &_dispatch_tls_is_dispatch_key_excluded'_get_current_dispatch_mode_pre_dispatchro   r   r$   r   )r   r   r%   r&   r   kernelr   	curr_modehandlerrL   functionality_key	final_keys               r   dispatchzHigherOrderOperator.dispatch0  s   K4///)),7F!&%((*>*>???4*6**588//NNN%dD&99588//666J24I%_^_% Y4#=#==A%i[@A=00iAG&( 6Dt5d5f56 6 "HH::<H 4 4 @ @@J
 781<hhEE"" DE	)hgh) Ot'A'AAE))ODEA44T)_E*+<= :"49$9&9: :  l3	 DOO+%@ M##,+-=l^1N  .2__Y-G\*+ fehh&:&:;;;t&v&&O6 6,: :s   J5J*J'*J3c                 F     dd l ddl m} | fd       } |       S )Nr   )disablec                  
   t              } j                  j                  |       r! j                  j                  | gi S t	        j
                        } j                  |j                         gi S r   )_to_flat_tuple	overrideshas_torch_functionhandle_torch_function_compute_keysetr   r   highestPriorityTypeId)	flat_argsdispatch_key_setr%   r&   r   r-   s     r   wrapperz-HigherOrderOperator.__call__.<locals>.wrapperv  s    &tV4I11)<<u<<)&*.4   /tVT=V=VW 4== 668;?CI r!   )torch._dynamor   )r   r%   r&   r   r   r-   s   ```  @r   r'   zHigherOrderOperator.__call__p  s'     	)	
	 

	 yr!   c                 $    | j                          S r   )r?   r   s    r   __str__zHigherOrderOperator.__str__  s    ))+r!   c                     | j                   S r   r   r   s    r   r?   zHigherOrderOperator.name      zzr!   )rZ   r[   r\   r    rC   propertyr   r   r   r'   r   r?   __classcell__r   s   @r   rp   rp      s=    *:X"
  S>'@* 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   r9   r-   Tensortuple)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   )r-   r.   _dispatch_tls_local_include_set_dispatch_keys_dispatch_tls_local_exclude_set)r   key_maskkey_settensors       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| _         y r   )*_ModeStackStateForPreDispatch__infra_modesr   s    r   r    z&_ModeStackStateForPreDispatch.__init__  s    "D\r!   c                 V    |t        | j                        k  sJ || j                  |<   y r   lenr   )r   indexrL   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                 X    t        | j                  D cg c]  }||	 c}      S c c}w r   r   )r   is     r   countz#_ModeStackStateForPreDispatch.count  s%    t11C!Q]ACDDCs   ''N)rZ   r[   r\   r    r   r   r   rB   r!   r   r   r     s    *))Er!   r   c                    t               }| t        j                  j                  j                  t        j                  j                  j
                  fv sJ | t        j                  j                  j                  k(  r-|j                  d      }t               j                  dd        |S |j                  d      }t               j                  dd        |S Nr      )!mode_stack_state_for_pre_dispatchr-   r.   _TorchDispatchModeKeyPROXY
FUNCTIONALr   r   )mode_keycurrent_mode_stack_pre_dispatchcurrent_modes      r   unset_mode_pre_dispatchr     s    &G&I#&&,,&&11    588117776::1=)+//486::1=)+//48r!   c                 2   ddl m} ddlm} t	        | ||f      sJ t	        | |      r8t               j                  d      }|J t               j                  d|        y t               j                  d      }|J t               j                  d|        y )Nr   )rW   )ProxyTorchDispatchModer   )rS   rW   "torch.fx.experimental.proxy_tensorr   r9   r   r   r   )rL   rW   r   r   s       r   _set_mode_pre_dispatchr     s    HId13IJKKK$,-8:>>qA###)+//4846::1=L%'++At4r!   c                     t               } | j                  d      %| j                  d      }| j                  dd        |S | j                  d      %| j                  d      }| j                  dd        |S t        d      )Nr   r   zTrying to pop empty mode stack)r   r   r   r|   )
mode_stackress     r   _pop_mode_from_pre_dispatchr     sv    24J~~a$nnQq$
~~a$nnQq$

9
::r!   c                  2    t               j                         S r   )r   r   rB   r!   r   rx   rx     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   )r-   r.   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,.22155r!   c                     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   )	stack_lens    r   r   r     s    1399;IA~0266q99A~ 1266q9E ./33A6	
 3488;	

 r!   c                      t         S r   )"_mode_stack_state_for_pre_dispatchrB   r!   r   r   r   	  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   r8   rB   r!   r   reset_cached_opsr     s    r!   c                      t         S r   )r   rB   r!   r   get_cached_opsr     s    r!   c                        e Zd Z fdZd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                 V   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 | _        | j                  t         j"                  j$                  v | _        d }| j                  j(                  D ]B  }|j*                  ||j*                  j,                  })|j*                  j,                  xs |}D |d uxr | | _        y )Nrv   defaultru   ::r   )r~   r    _op_op_dk_schema_overloadpacket_tagsoverload_name_overloadnamer?   r   splitrZ   r[   r\   __annotations__r-   library_defs_defined_in_python	arguments
alias_infois_writeis_view)	r   overloadpacketr^   op_dkschematagsr  ar   s	           r   r    zOpOverload.__init__#  su   -
--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                     | S r   rB   r   memos     r   __deepcopy__zOpOverload.__deepcopy__G      r!   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz'<OpOverload(op='{}.{}', overload='{}')>r   formatr  r?   r  r  r   s    r   __repr__zOpOverload.__repr__J  sC    ?8?? 
\\$$T*
,0,>,>
 	
r!   c                 &     | j                   |i |S r   r  self_r%   r&   s      r   r'   zOpOverload.__call__O  s     uyy$)&))r!   c                 ,    t        | j                        S r   hashr  r   s    r   __hash__zOpOverload.__hash__T      DHH~r!   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz{}.{}.{}r   r  r   s    r   r   zOpOverload.__str__X  s8     z  T$,,"3"3"9"9$"?TASASTTr!   c                     t         |   |      xs. t        j                  j	                  | j                         |      S r   )r~   r+   r-   r.   %_dispatch_has_kernel_for_dispatch_keyr?   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   )r-   r.   )_dispatch_has_kernel_for_any_dispatch_keyr?   r~   r2   )r   r1   r   s     r   r2   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 )Nr   r   )r  r?   r  r   s    r   r   zOpOverload.namespacee  s"    ||  &&t,Q//r!   c                     t         j                  j                  | j                  j                  | j                  j
                        S r   )r-   r.   _dispatch_find_schema_or_throwr  r?   r  r   s    r   _handlezOpOverload._handlei  s2    xx66LLt||99
 	
r!   c                 $   t         j                  j                  j                  }|| j                  v r | j                  |   |i |S t         j                  j                  | j                         |      r | j                  |g|i |S t        S r   )	r-   r.   r<   rg   r   r*  r?   r  NotImplemented)r   r%   r&   dks       r   	decomposezOpOverload.decomposen  s{    XX!!;; 
 '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                  j                  j                  k(  rJ j
                  s j                   <   t                S  fd}| j                   <   t                |S t        j                  j                        }|t        j                  j                  j                  k(  rCt               }|dkD  r4t        j                  j                  t        j                        s fd}|S t               }t        j                  j                  j                  k7  }t        j                  j                  j                  k(  rEdd lmc m} |j                   r0|j#                   |      }|r| j                   <   t                |S  j$                  j'                  ||      }|r| j                   <   t                |S )N c                      ddl m} t         |             }|J d       |j                  vr j                  g| i |S  j                  |   | i |S )Nr   r   r   )r   r   r   r   r  )r%   r&   r   r   r7  r   s       r   r   z)OpOverload._get_dispatch.<locals>.handler  sv    S !!;!=>	)cbc)D$>$>> '4;;s<T<V<<<t11)<dMfMMr!   r   c                  L   t         j                  d        } |       5 }t        |t              sJ g }t        j
                  j                  j                  | |j                         f      \  }}|D ]  }t        |t        j                        st        j                  j                  |      j                  t        j                  j                  j                        so|j                  t!        |              |j#                  || |      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contextmanagerr9   r   r-   utils_pytreetree_flattenvaluesr   r.   r   r0   r<   r=   appendr   __torch_dispatch__)	r%   r&   r?  r   overload_typesargs_flattenedr}   r  r   s	           r   r   z)OpOverload._get_dispatch.<locals>.handler  s   ..= /= BC y))5FGGG)+,1KK,?,?,L,L!6==?3-) "0 ?A
  *!U\\:uxx?V?V !@!c%(("6"6"="=>@? !/ 5 5d1g >?  );; .$ #  s   A0DAD!/DD#)r   r-   r.   r<   r=   r   r   r   r{   rx   r   ro   rT   torch._dispatch.python	_dispatchpythonCROSSREF_FUNCTIONALIZEmake_crossref_functionalizer   r   )	r   r7  r   r   curr_stack_lenr   cache_result
pydispatchrs	   ``       r   _get_dispatchzOpOverload._get_dispatch  s   $...?4&#?.%((&&-----,/$$S)d#
N  )0D  %$N!HH::3? 4 4 @ @@CEN "GG&&
F c*	 ehh22>>>
 %((&&4447700$@@yQ07D((-!$' OO	95()D  %$r!   c                     | j                   S r   r   r   s    r   r?   zOpOverload.name  r   r!   c                     | j                   S r   )r  r   s    r   r  zOpOverload.overloadpacket  s    ###r!   c                     | j                   S r   r   r   s    r   r^   zOpOverload.op  r   r!   c                     | j                   S r   )r  r   s    r   r  zOpOverload.tags  s    zzr!   r   )rZ   r[   r\   r    r  r  r'   r&  r   r+   r2   r   r   r0  r4  r8  rS  r?   r  r^   r  r   r   s   @r   r   r   "  s    !=H

*
UL
9
 0 0

"*,fP $ $    r!   c                   T    e Zd Zd ZddZd Zd Zd Zed        Z	d Z
d	 Zd
 Zd Zy)OpOverloadPacketc                 J    || _         || _        || _        || _        g | _        y r   )_qualified_op_namerZ   r  _overload_names_dir)r   qualified_op_nameop_namer^   overload_namess        r   r    zOpOverloadPacket.__init__  s)     #4-	r!   Nc                     | S r   rB   r  s     r   r  zOpOverloadPacket.__deepcopy__  r  r!   c                 R     dj                   | j                  j                  d       S )Nz<OpOverloadPacket(op='{}.{}')>r   r  r[  r  r   s    r   r  zOpOverloadPacket.__repr__  s,    6/66$$**40
 	
r!   c                 ,    t        | j                        S r   r$  r   s    r   r&  zOpOverloadPacket.__hash__  r'  r!   c                 R     dj                   | j                  j                  d       S )Nz{}.{}r   rc  r   s    r   r   zOpOverloadPacket.__str__  s$    w~~t66<<TBCCr!   c                     | j                   S r   r   r   s    r   r^   zOpOverloadPacket.op  r   r!   c           
      f   |dk(  ry	 |j                  d      rt        | j                  |      S 	 	 |dk(  rd	n|}t
        j                  j                  | j                  |      \  }}}t
        j                  j                  | j                  |      }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   rv   zThe underlying op of 'z' has no overload name ')
startswithgetattrr  AttributeErrorstrr-   r.   _get_operation_overloadr[  _get_schemar   setattrr]  rF  r>   )r   r7  use_keyop_op_dk_r  r  overloads           r   __getattr__zOpOverloadPacket.__getattr__   sI   *	~~d#txx-- $	9,b#G % @ @''!C XX))$*A*A7KF!$VVTBHD#x(IIS!O-  	
 !CI; !!$TXX/A#hP 	.  	 (T3KC5PQR	s   &C BD
 <D
&D0c                 ,    t        | j                        S r   iterr]  r   s    r   __iter__zOpOverloadPacket.__iter__K      DIIr!   c                 .     | j                   |i |xs i S r   r   r!  s      r   r'   zOpOverloadPacket.__call__N  s     uyy$16<R11r!   c                 H    | j                   D cg c]  }|r|nd
 c}S c c}w )Nr   )r\  )r   ns     r   	overloadszOpOverloadPacket.overloadsY  s#    /3/C/CD!QI%DDDs   r   )rZ   r[   r\   r    r  r  r&  r   r   r^   rw  r{  r'   r  rB   r!   r   rY  rY    sF    

D  )V2Er!   rY  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    r?   r]  )r   r?   r   s     r   r    z_OpNamespace.__init__  s#    ,-		r!   c                 ,    t        | j                        S r   ry  r   s    r   r{  z_OpNamespace.__iter__  r|  r!   c                 t   |dk(  ry|dv rt        d| d| j                   d      | j                  }| d| }	 t        j                  j	                  |      \  }}|t        d| j                   d	| d      	 t        j                  j                  j                  ||       | j                  d
z   |z   |_	        t        ||||      }| j                  d
z   |z   |_	        t        | ||       | j                  j                  |       |S # t
        $ r"}t        d| j                   d	| d      |d }~ww xY w)Nrh  ri  )
__origin____self__zInvalid attribute 'z' for '_OpNamespace' 'rk  r   z'_OpNamespace' '' object has no attribute 'ru   )rn  r?   r-   r.   _jit_get_operationr>   jit	_builtins_register_builtinr[   rY  rr  r]  rF  )r   r_  namespace_namer^  r^   r`  eopoverloadpackets           r   rw  z_OpNamespace.__getattr__  sg   j 22 %gY.DTYYKqQ  -.b	:	!&!<!<=N!OBz$&tyyk1LWIUVW   			--b2CD#->+wN
 '+oo&;n&L# 	g/0		!'  	 !"499+-H	QRS	s   A D 	D7D22D7)rZ   r[   r\   r]   r    r{  rw  r   r   s   @r   r  r  l  s    (
& r!   r  c                   $     e Zd Z fdZd Z xZS )_PyOpNamespacec                 2    t         |   |       || _        y r   )r~   r    _ops)r   r?   opsr   s      r   r    z_PyOpNamespace.__init__  s    	r!   c                     | j                   j                  |d       }|t        d| j                   d| d      t	        | ||       |S )Nz'_PyOpNamespace' 'r  rk  )r  r   rn  r?   rr  )r   r?   r^   s      r   rw  z_PyOpNamespace.__getattr__  sS    YY]]4&: $TYYK/J4&PQR  	dB	r!   )rZ   r[   r\   r    rw  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 )Nri  ztorch.ops.higher_order)r~   r    r   loaded_librariesr  rq   _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 )Nrt   )r  r  rr  r]  rF  )r   r?   r   s      r   rw  z_Ops.__getattr__  sF    >!222 !&	dI&		r!   c                 ,    t        | j                        S r   ry  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)	r-   _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)
rZ   r[   r\   rh  r    rw  r{  r  r  r   r   s   @r   r  r    s!    H	(&(r!   r  )Fr@  r   r  r5   r   typestypingr   r   r   r   r   r   torch._Cr-   torch.utils._pytreerB  rC  r   r	   torch._functorch.pyfunctorchr
   r   r   hasattrr   rA  r   r   r.   _dispatch_is_included_in_aliasrc   r<   ro   rq   ro  r	  PythonDispatcherPythonTLSSnapshotADInplaceOrViewBackendSelectAutocastCPUAutocastCUDAr   rp   r   r   r   r   r   r   r   r   r   rx   r   r   r   r   r   r   r   r   r   rY  
ModuleTyper  r  r  r  rB   r!   r   <module>r     s       
  8 8  $ $ ! ; : C!12UwsDT7U  & & C$ C$L xx>> hh""2UL 2U[ 2Uj 79 4223 8   !!6 2W, Wt38
E E  &C%D " 5 ;76
.
 !$
C % 

Z ZBWE WERC 5## C L\  G(5 G(V fr!   