
    קg@                     |   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          o 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j&        ej'        ej(        ej)        ej*        ej+        gZ, G d de!e j-                  Z.d Z/d Z0d Z1d Z2 G d d          Z3 e3            a4d8d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jD        d*eEfd+ZF G d, d-          ZGdeGfd.ZH G d/ d0ejI                  ZJd1 ZKd2 ZL G d3 d4eJ          ZM G d5 d6ejI                  ZN eN            ZOeNe%d7<   dS )9    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V  dS t          j                    } t          j        | t          j        z             	 dV  t          j        |            dS # t          j        |            w xY 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    F/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_ops.pydl_open_guardr      s        "$$Iy6#55666&9%%%%%9%%%%s   A A5c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
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 | _        d S N)_dispatch_cache
py_kernelspython_key_tablefunctorch_tableselfs    r   __init__zOperatorBase.__init__.   s7    $  	 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    DO##r$   c                     | j         D ]9}t          j                            |          s|                    |          r dS :dS )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`   sI     	 	A822155 "&&)) ttur$   c                       fd}|S )Nc                 l   t          j                  r_t          t                    st          t          j                  r0j        vsJ | j        <   j                                         | S t          t          j
        j        j                  rj        vsJ | j        <   | S t          t                    sJ t          j        k    s
J d            j        v r't#          d d                                           | 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   sR   q!! 1/004>q%,4O4O  55555+-%a($**,,,	!UX0>??  44444*,$Q'	a-----[''''X ('' DO##"YAYYDIIKKYY   "$DOA &&(((Ir$    )r"   r.   rE   s   `` r   py_implzOperatorBase.py_implf   s)    	 	 	 	 	 	8 r$   c                 h   ddl mmm fd}fd}fd} |                     t
          j                  |            |                     t          j        j	        j
                  |            |                     t          j        j        j        j                  |           S )Nr   )CppFunctionalizeAPIFunctorchFunctionalizeAPIPythonFunctionalizeAPIc                  ,                  g| R i |S r   rF   )r)   r*   _CppFunctionalizeAPIrD   s     r   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s-    2**,,>t>>>v>>>r$   c                 .      |           g|R i |S r   rF   )moder)   r*   _PythonFunctionalizeAPIrD   s      r   functionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fn   s/    2--d33EdEEEfEEEr$   c                 .      |           g|R i |S r   rF   )interpreterr)   r*   _FunctorchFunctionalizeAPIrD   s      r   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s/    200==OOO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 	F 	F 	F 	F 	F	P 	P 	P 	P 	P 	P 	0[.//0CDDDNU&8MNN*	
 	
 	
 	FUX(6DE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                    |                      |          r|S t          j        }|t          j        k    st	          ||          r|                      |          r|S t          j        }|t          j        k    st	          ||          r|                      |          r|S |                     t          j        	                    |                    p|                      t          j                  }t          j
        }|t          j        k    r)t	          ||          r|                      |          r|s|S t          j        }|t          j        k    st	          ||          r\|                      |          rG|t          j        k    r3|                     t          j        j                  rt          d          |s|S t          j        }t	          ||          r|                      |          r|S t          j        }t	          ||          r|                      |          r|S t          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&C"

(
(
.
. 	#0D	["""&:1d&C&C"

(
(
.
. 	#;;;;A>>  O		'	'(M	N	N  <D	
k#	#	#(<Q(E(E	#**400 
$" 
$ 0D	["""&:1d&C&C"

(
(
.
. 	#)))b.P.PH5/
 /
) ?@@@# 	KDAt$$ )G)G)M)M 4DAt$$ )G)G)M)M x..q11  
S2SSPQSS
T
TTr$   HigherOrderOperator_higher_order_opsc                   v     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                 b   t                                                       t          |           t          u rt	          d          || _        || _        | t          |<   d| _        d| _	        t          j                                        | _        t          D ]}|                     |           d S )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$)H$B$B$D$D!N 	+ 	+L\****	+ 	+r$   c                     t          |t                    r9| j                            |          s| j                            |          | _        t                                          |          S r   )r>   r   r   r4   addrz   rG   r"   r.   r   s     r   rG   zHigherOrderOperator.py_impl  s^    a%% 	Id.G.K.KA.N.N 	I(,(A(E(Ea(H(HD%wwq!!!r$   c                     | j         S r   )r}   r!   s    r   	namespacezHigherOrderOperator.namespace  	    xr$   c                 D    | j                             |          | _         d S r   )r   remove)r"   r   s     r   r   zHigherOrderOperator.fallthrough  s!    $($=$D$D\$R$R!!!r$   c          	      R   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 ||                                R D ]9} ||           t          |t          t          f          r|D ]} ||           :t                    }	t          d |	D                       }
ddl m}  |            }|t          |          | j        v rI| j        t          |                   } |            5 } ||g|R i |}d d d            n# 1 swxY w Y   nt          d| j         d| d	          |t           ur|S |	D ]s}t          |          }|j        t$          j        j        k    r,|| j        v r| j        |         } ||i |}nt          d| j         d
| d	          |t           ur|c S tt+          d| j         d| dd |	D                        t$          j                            |          }|t          j        k    rddl m} t1                      dk    rt$          j                            t          j                  st5                      }|
J d            t          |          | j        v sJ d| d            | j        t          |                   } ||          5 } ||g|R i |cd d d            S # 1 swxY w Y   t7          | |          }|| j        vrt          d| j         d| d| d          |t          j        k    r| j        |         | j        |<   | j        |         }t          |t                    rJ  ||i |S )Nr   _get_current_dispatch_modec                 f    t           j                            |                               d          S )NrA   )r1   r2   _dispatch_keysr4   )tensors    r   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key2  s&    x..v66::8DDDr$   c                     t          | t          j                  r" |           r                    |            d S d S d S r   )r>   r1   r<   append)argr   overloaded_args_lists    r   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloaded5  sV    c5<00 5^^C5H5H 5(//444445 5 5 5r$   c              3   4   K   | ]}t          |          V  d S r   r{   .0r   s     r   	<genexpr>z/HigherOrderOperator.dispatch.<locals>.<genexpr>@  s(      $J$J3T#YY$J$J$J$J$J$Jr$   )_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: c                 ,    g | ]}t          |          S rF   r   )r   as     r   
<listcomp>z0HigherOrderOperator.dispatch.<locals>.<listcomp>o  s    555DGG555r$   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   r   overloaded_argsoverloaded_typesr   	curr_modehandlerrP   resultsubclass_typefunctionality_key	final_keyr   r   s                      @@r   dispatchzHigherOrderOperator.dispatch!  s   KKKKKK4///),7F!&+6666664*6***;EEE%dD&999;--- $& E E E5 5 5 5 5 5 1000 , ,  %%%cD%=11 ,  , ,((++++#$899O$$J$J/$J$J$JJJ KJJJJJ2244I$	??d&;;;"3DOODG..00 @D ")!?!?!?!?!?!?@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 .9
 9 9V_ 9 9 9   //!M ' " " $S		!4x=> >  D$999"3MBG %Wd5f55FF-9
 9 9Zg 9 9 9   //!MMM 0 8
 8 8(8 8 65_5558 8   "H::<HH 777JJJJJJ
 7881<<hEE"  = DEE	))g *)) OOt'<<<<D)DDD =<</Y@**+<== :"749$999&99: : : : : : : : : : : : : : : :  l33	 DO++%N N N#,N N>JN N N   ;222151KD .+ fk22222vt&v&&&s$   EE"E=LLLc                F     ddl m} | fd            } |            S )Nr   )disablec                  
   t                    } t          j                            |           rt          j        j        | gR i S t          j                  } j        |                                gR 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44I11)<< <)&*  .4    /tVT=VWW 4= 6688;?  CI  r$   )torch._dynamor   )r"   r)   r*   r   r   s   ```  r   r+   zHigherOrderOperator.__call__  sT     	*)))))	
	 
	 
	 
	 
	 
	 

	 wyyr$   c                 ,    |                                   S r   )rC   r!   s    r   __str__zHigherOrderOperator.__str__  s    ))++r$   c                     | j         S r   r|   r!   s    r   rC   zHigherOrderOperator.name  
    zr$   )r^   r_   r`   r#   rG   propertyr   r   r   abcabstractmethodr+   r   rC   __classcell__r   s   @r   rt   rt      s        + + + + +6" " " " "
   XS S S
{' {' {'z 	  (           r$   c                 $    t          j        | i |S r   )pytreearg_tree_leavesr)   r*   s     r   r   r     s    !426222r$   c                 B    t          | |          }t          ||          S r   )_get_tensorskey_extractor)r)   r*   r   tensorss       r   r   r     s"    4((G"6777r$   c                 X    t          | |          }d |D             }t          |          S )Nc                 F    g | ]}t          |t          j                  |S rF   )r>   r1   r<   )r   ts     r   r   z _get_tensors.<locals>.<listcomp>  s)    FFF*Q*E*EF1FFFr$   )r   r   )r)   r*   flat_alltensor_argss       r   r   r     s2    dF++HFFhFFFKr$   c                     t           j                                        }| D ]$}|t           j                            |          z  }%|t           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     sg    h6688G < <EH33F;;;@@BBBG GNr$   c                   &    e Zd Zd Zd Zd Zd ZdS )_ModeStackStateForPreDispatchc                 &    d d g| _         d | _        d S r   )*_ModeStackStateForPreDispatch__infra_modes_schema_check_moder!   s    r   r#   z&_ModeStackStateForPreDispatch.__init__  s    "D\"&r$   c                 N    |t          | j                  k     sJ || j        |<   d S r   lenr   )r"   indexrP   s      r   setz!_ModeStackStateForPreDispatch.set  s1    s4-......$(5!!!r$   c                 P    |t          | j                  k     sJ | j        |         S r   r   )r"   r   s     r   getz!_ModeStackStateForPreDispatch.get  s,    s4-......!%((r$   c                 l    t          d | j        D                       t          | j        d u          z   S )Nc                     g | ]}||S r   rF   )r   is     r   r   z7_ModeStackStateForPreDispatch.count.<locals>.<listcomp>  s    CCC!Q]A]]]r$   )r   r   intr   r!   s    r   countz#_ModeStackStateForPreDispatch.count  sB    CCt1CCCDDs#4/H
 H
 
 	
r$   N)r^   r_   r`   r#   r   r   r   rF   r$   r   r   r     sP        ' ' ') ) )) ) )
 
 
 
 
r$   r   Fc                 2    t                       0 t          j        j        j        t          j        j        j        fv sJ |r J  fd} |            }t                      }|dk    r*t          j                            t          j	        d           |S )Nc                     t           j        j        j        k    r9                    d          } t                                          dd            | S t           j        j        j        k    r9                    d          } t                                          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    ux5;;;:>>qAAL-//33At<<<7BBB:>>qAAL-//33At<<<<>>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&I#x&,&1,                       ;==LACC
 q  889PRWXXXr$   c                    ddl m} ddlm} ddlm} t          | |||f          sJ t                      }t          | |          r<t                      j	        }|dk    rt          d          | t                      _	        nt          | |          rHt                                          d          }|J t                                          d|            nGt                                          d          }|J t                                          d|            |dk    r,t          j                            t           j        d           d S d S )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HHHHHCCCCCCIIIIII "	
     EFF$(( 98::M"Q&& k   BF)++>>	D.	/	/ 98::>>qAA###)++//488888::>>qAA###)++//4888 !##889PRVWWWWW $#r$   c                  x   t                      } t                      }|dk    rt          d          | j        t	          d d          S |                     d          #t	          t          j        j        j	                  S |                     d          #t	          t          j        j        j
                  S d S )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44J=??1=>>>$0&t$????~~a$&ux'E'PQQQ~~a$&ux'E'KLLL %$r$   c                  B    t                                                      S r   )r   r   rF   r$   r   r   r   Q  s    ,..44666r$   c                    | t           j        j        j        t           j        j        j        fv sJ | t           j        j        j        k    r!t                                          d          S t                                          d          S r   )r1   r2   r   r   r   r   r   )r   s    r   _get_dispatch_mode_pre_dispatchr  U  s}    &,&1     58177702266q99902266q999r$   c                     t                      j        t                      j        S t                                                      } | dk    r!t                                          d          S | dk    rct                                          d          !t                                          d          n t                                          d          S d S )N   r   r   )r   r   r   r   )	stack_lens    r   r   r   `  s    (**=I022EE577==??	>>466::1===>> 566::1==I 23377:::688<<Q??
 4r$   c                      t           S r   )"_mode_stack_state_for_pre_dispatchrF   r$   r   r   r   p  s    --r$   
OpOverload
cached_opsc                 :    t                               |            d S r   )r  r   )op_overloads    r   add_cached_opr  x  s    NN;r$   c                  8    t                                            d S 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                    t                                                       || _        || _        || _        || _        || _        |j        dk    rdn|j        | _        | j        j	        | _
        |j        r| xj
        d|j        z   z  c_
        | j        j	                            d          d          d| j         | _        |j        | _        |j        |_        | j
        | _        i | _        d | _        | j        t"          j        j        v | _        d }| j        j        D ]'}|j        
||j        j        }|j        j        p|}(|d uo| | _        d S )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tagsr6  r   r   s	           r   r#   zOpOverload.__init__  sf   -
-33II9M 	 \&
 	5JJ# 444JJ<,22488;RRd>PRR(3&1 J! ! #'"3u}7J"J ' 	= 	=A|#<0 <0<Ht+<Hr$   c                 L    | j         j                            d          d         S Nr&  r   r)  rC   r.  r!   s    r   
_namespacezOpOverload._namespace       | &&t,,Q//r$   c                 L    | j         j                            d          d         S )Nr&  r   r>  r!   s    r   _opnamezOpOverload._opname  r@  r$   c                     | j         9t          j                            | j        j        | j        j                  | _         | j         S r   )r0  r1   r2   _dispatch_find_schema_or_throwr)  rC   r,  r!   s    r   _handlezOpOverload._handle  s?    $ % G G!4<#=! !D   r$   Nc                     | S r   rF   r"   memos     r   __deepcopy__zOpOverload.__deepcopy__      r$   c                 d     dj         g | j        j                            d          | j        R  S )Nz'<OpOverload(op='{}.{}', overload='{}')>r&  formatr)  rC   r.  r-  r!   s    r   __repr__zOpOverload.__repr__  sE    ?8? 
\$$T**
,0,>
 
 
 	
r$   c                     | j         |i |S r   r'  r(   s      r   r+   zOpOverload.__call__  s    tx((((r$   c                .     | j         j        |g|R i |S r   )rE  redispatch_boxed)r"   keysetr)   r*   s       r   
redispatchzOpOverload.redispatch  s'    ,t|,VEdEEEfEEEr$   c                 *    t          | j                  S r   hashr'  r!   s    r   __hash__zOpOverload.__hash__      DH~~r$   c                 d     dj         g | j        j                            d          | j        R  S )Nz{}.{}.{}r&  rL  r!   s    r   r   zOpOverload.__str__  s6     z T$,"3"9"9$"?"?TASTTTTr$   c                     t                                          |          p1t          j                            |                                 |          S r   )rz   r/   r1   r2   %_dispatch_has_kernel_for_dispatch_keyrC   r   s     r   r/   z&OpOverload.has_kernel_for_dispatch_key  sF    ww22
 
 LX;;DIIKKKK	Lr$   c                     t           j                            |                                 |          p 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  sD    xAAIIKK
 
 9WW44R88	9r$   c                 L    | j         j                            d          d         S r=  r>  r!   s    r   r   zOpOverload.namespace  r@  r$   c                     t           j        }|| j        v p1t          j                            |                                 |          S r   )r   rk   r   r1   r2   r\  rC   )r"   dks     r   _can_decomposezOpOverload._can_decompose  s?    2T_$ 
(V(VIIKK)
 )
 	
r$   c                     t           j        }|| j        v r | j        |         |i |S t          j                            |                                 |          r | j        |g|R i |S t          S r   )	r   rk   r   r1   r2   r\  rC   r(  r   )r"   r)   r*   ra  s       r   	decomposezOpOverload.decompose  s    2  
 '4?2&7777X;;DIIKKLL 	"4;r3D333F333!!r$   c                 <    | j                             |d            d S r   )r   pop)r"   keys     r   _uncache_dispatchzOpOverload._uncache_dispatch  s!      d+++++r$   c                 B     j         vsJ   d             t          j        k    rXt           t                    s" j        s j         <   t                      S  fd}| j         <   t                      |S t          j        	                              }|t          j
        k    rDt                      }|dk    r0t          j                            t          j                  s fd}|S t                     }t          j
        k    }t          j        k    rCdd lmc m} |j        r3|                     |          }|r| j         <   t                      |S  j                            ||          }|r| j         <   t                      |S )N c                     ddl m} t           |                      }|
J d            |j        vrt	          t
                    r\t          j        j        	                                5 }t          j
        j        j        |g| R i |cd d d            S # 1 swxY w Y   n j        g| R i |S t          j        j        	                                5 } j        |         |g| R i |cd d d            S # 1 swxY w Y   d S )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   rg  r"   s        r   r   z)OpOverload._get_dispatch.<locals>.handler  s   SSSSSS !!;!;!=!=>>	))b *)) D$999!$(;<< A"[9OOQQ UY#(>#7#L $d$-1$ $ $5;$ $                
  +t{3@@@@@@@[1GGII ST;40;DR4RRR6RRS S S S S S S S S S S S S S S S S Ss$   , BB BC==DDr   c                      t           j        d             } |            5 }t          j        j        j        |g| R i |cd d d            S # 1 swxY w Y   d S )Nc               3   v   K   t                      } 	 | V  t          |            d S # t          |            w xY 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  sH      #>#@#@="*NNN28<<<<<28<<<<s   ' 8)
contextlibcontextmanagerr1   ro  rm  rp  )r)   r*   rt  r   r"   s       r   r   z)OpOverload._get_dispatch.<locals>.handler7  s    .= = /.= BACC y$~3H%t .2     6<                    s    AAA)r   r   rA   r>   rl  r   r  r1   r2   r   r   r   r   rs   rX   torch._dispatch.python	_dispatchpythonCROSSREF_FUNCTIONALIZEmake_crossref_functionalizer   r   )	r"   rg  r   r   curr_stack_lenr   cache_result
pydispatchrs	   ``       r   _get_dispatchzOpOverload._get_dispatch  s   $....4#...+$$$d$788 AV ,/$S)d###
S S S S S S, )0D %$N!H::3?? 777CEEN ""GG&  #    & c**	 k55
 ++++7777777770 $@@yQQ (07D(-!$'''O	95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   r8  zOpOverload.overloadpacketg  s    ##r$   c                     | j         S r   rP  r!   s    r   rb   zOpOverload.opk  r   r$   c                     | j         S r   )r+  r!   s    r   r;  zOpOverload.tagso  s
    zr$   r   )r^   r_   r`   r#   r   r?  rB  rE  rI  rN  r+   rT  rX  r   r/   r6   r   rb  rd  rh  r  rC   r8  rb   r;  r   r   s   @r   r  r    s       $= $= $= $= $=L 0 0 X0 0 0 X0 ! ! X!   
 
 
) ) )
F F F  U U UL L L L L
9 9 9 9 9
 0 0 X0
 
 
" " "*, , ,[ [ [z   $ $ X$   X   X    r$   c                   R    e Zd Zdee         fdZej        d             Zd Z	d Z
dS )rl  returnc                      t           j        t           j        t           j        t           j        t           j        t           j        t           j        g}dt           f fdfd|D             S )Nrg  c                    t           j                                                            |           r2t           j                                                            |           S | j        vpj        |          t           j        j        u S r   )r1   r2   r\  rC   0_dispatch_kernel_for_dispatch_key_is_fallthroughr   r1  fallthrough_kernel)rg  r"   s    r   (_may_use_fallthrough_instead_of_fallbackzWTorchBindOpOverload._fallthrough_keys.<locals>._may_use_fallthrough_instead_of_fallback  sw    x==diikk3OO xPPIIKK  
 4?* L?3'5=+KKr$   c                 *    g | ]} |          |S rF   rF   )r   rg  r  s     r   r   z9TorchBindOpOverload._fallthrough_keys.<locals>.<listcomp>  s:     
 
 
77<<

 
 
r$   )r   rn   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcher)r"   _DEFAULT_FALLTHROUGH_KEYSr  s   ` @r   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys{  s      #$'%)(%
!		+ 		 		 		 		 		 		
 
 
 
0
 
 
 	
r$   c              #   |   K   ddl m}m}m} 	 | |vr || |j                   d V  | |v r|| = d S d S # | |v r|| = w xY 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  s      	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	'<''&&t[-@AAAEEE|## &&& $#t|## &&&&&s   2 	;c                    t          ||          rU|                                 5  |                     |||                                           cd d d            S # 1 swxY w Y    | j        |i |S r   )_must_dispatch_in_pythonr  _dispatch_in_pythonr  r'  r(   s      r   r+   zTorchBindOpOverload.__call__  s    #D&11 	X ;;== X X//fd>T>T>V>VWWX X X X X X X X X X X X X X X Xtx((((s   )AA"Ac           	      F   t           j                                        }|D ]}|                    |          }t	          |||          }|                                }|| j        vr|                     |          n| j        |         }t          |t                    rft           j        
                    |                                 |          r|                     ||||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   rg  r   r   r   s	            r   r  z'TorchBindOpOverload._dispatch_in_python  ss   $x==??# 	D 	DC#7#>#>s#C#C  *49MNN'==?? 4#777 |,,,%l3 	 g{++ 	 xHH		\   //&"2l^"C   / / /Za / / KW	/ / /   '8,,,,,w''''r$   N)r^   r_   r`   r   r   r  ru  rv  r  r+   r  rF   r$   r   rl  rl  z  sq        
4#4 
 
 
 
< ' ' '") ) ) #( #( #( #( #(r$   rl  c                 2    t          j        d | |f          S )Nc                 J    t          | t          j        j        j                  S r   )r>   r1   ro  fake_class_registryFakeScriptObject)objs    r   <lambda>z*_must_dispatch_in_python.<locals>.<lambda>  s    J3D
 
 r$   )r   tree_anyr   s     r   r  r    s)    ?	
 	
 
v	  r$   r:  r  c                 >    t          d | j        D                       S )Nc              3   T   K   | ]#}t          |j        t          j                  V  $d S r   )r>   r{   r1   	ClassTyper   s     r   r   z)_has_script_object_arg.<locals>.<genexpr>  s0      QQz#(EO44QQQQQQr$   )anyr4  )r:  s    r   _has_script_object_argr    s"    QQ@PQQQQQQr$   c                   r    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dS )OpOverloadPacketc                     || _         || _        || _        || _        g | _        t          d | j                                        D                       | _        d S )Nc              3   4   K   | ]}t          |          V  d S r   )r  )r   r:  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__  sk     #4-	*- .
 .
9=9M9M9O9O.
 .
 .
 +
 +
'''r$   Nc                     | S r   rF   rG  s     r   rI  zOpOverloadPacket.__deepcopy__  rJ  r$   c                 F     dj         | j                            d           S )Nz<OpOverloadPacket(op='{}.{}')>r&  rM  r  r.  r!   s    r   rN  zOpOverloadPacket.__repr__  s)    6/6$**400
 	
r$   c                 *    t          | j                  S r   rV  r!   s    r   rX  zOpOverloadPacket.__hash__  rY  r$   c                 F     dj         | j                            d           S )Nz{}.{}r&  r  r!   s    r   r   zOpOverloadPacket.__str__	  s"    w~t6<<TBBCCr$   c                     | j         S r   rP  r!   s    r   rb   zOpOverloadPacket.op  r   r$   c                 *      fd j         D             S )Nc                 \    i | ](}|t           j                            j        |          )S rF   )r1   r2   _get_schemar  )r   r,  r"   s     r   
<dictcomp>z-OpOverloadPacket._schemas.<locals>.<dictcomp>  s@     
 
 
 58//0GWW
 
 
r$   r  r!   s   `r   r  zOpOverloadPacket._schemas  s1    
 
 
 
!%!5
 
 
 	
r$   c           
          |dk    rdS 	 |                     d          rt          | j        |          S nG# t          $ r: t          dt	          |            dt	          | j                   d| d          d w xY w	 |dk    rd	n|}t
          j                            | j        |          }|#t          d
t	          |            d| d          |\  }}}t
          j        	                    | j        |          }t          |          st          | ||||          nt          | ||||          }t          | ||           | j                            |           |S # 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  rl  setattrr  r   rB   )	r"   rg  use_key
op_dk_tagsop_op_dk_r;  r:  overloads	            r   __getattr__zOpOverloadPacket.__getattr__  s   *;	~~d## .tx---. 	 	 	
 !PCII P P!$TXP PBEP P P  		9,,bb#G99' J !$VSYYVVPSVVV   !+CX))$*A7KKF .f55J
4ffd;;;(sFFDII  D#x(((IS!!!O 	 	 	 RTRRCRRR 	s   )5 AA9=C E /Fc                 *    t          | j                  S r   iterr  r!   s    r   __iter__zOpOverloadPacket.__iter__L      DIr$   c                p    | j         r!t          ||          rt          | ||          S  | j        |i |pi S r   )r  r  !_call_overload_packet_from_pythonr'  r(   s      r   r+   zOpOverloadPacket.__call__Q  sP     * 	I/Gf/U/U 	I4T4HHHtx0&,B000r$   c                 $    d | j         D             S )Nc                     g | ]}|r|nd 	S )r$  rF   )r   ns     r   r   z.OpOverloadPacket.overloads.<locals>.<listcomp>`  s!    DDD!Q%IDDDr$   r  r!   s    r   	overloadszOpOverloadPacket.overloads_  s    DDt/CDDDDr$   r   )r^   r_   r`   r#   rI  rN  rX  r   r   rb   r  r  r  r+   r  rF   r$   r   r  r    s        

 

 

   
 
 

  D D D   X 
 
 X
3 3 3j  
1 1 1E E E E Er$   r  c                    t          j        j        | g|R i |\  }}|r|S i }d }|                                 D ]Q}t	          | |          }	 t          j        j        |j        g|R i |}	|} n# t          $ r}
|
||<   Y d }
~
Jd }
~
ww xY w|r ||i |S d|  d}t          |	                                          D ]\  }\  }}|d| d| dz  }t          |          )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   rg  msgs                  r   r  r  e  s   !&!R
"" " "" "3  
 JH 	* 	*b-00	*?#&*  .4 A #HE 	* 	* 	*()J}%%%%%%	*  )x(((( 	T"SSS  #:#3#3#5#566 5 5:C4C44S4444
w

s   !A00
B	:BB	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                 l    t                                          d|z              || _        g | _        d S )Nz
torch.ops.)rz   r#   rC   r  )r"   rC   r   s     r   r#   z_OpNamespace.__init__  s2    ,---				r$   c                 *    t          | j                  S r   r  r!   s    r   r  z_OpNamespace.__iter__  r  r$   c                    |dk    rdS |dv rt          d| d| j         d          | j        }| d| }| j        dz   |z   }	 t          ||          \  }}|t          d	| j         d
| d          n.# t          $ r!}t          d	| j         d
| d          |d }~ww xY w||_        t          ||||          }| j        dz   |z   |_        t          | ||           | j                            |           |S )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__  s~   j  ;222 QgQQTYQQQ   -::::o+n<	!,->!L!LBz$WtyWWWWWW     	 	 	 !S49SSSSS 	 $+wN
 
 '+o&;n&L# 	g/000	!!!s   0A5 5
B ?BB )r^   r_   r`   ra   r#   r  r  r   r   s   @r   r  r    s`         (    
  %  %  %  %  %  %  % r$   r  c                     t           j                            |           \  }}|,t           j        j                            ||            ||_        ||fS r   )r1   r2   _jit_get_operationjit	_builtins_register_builtinr_   )qualname	op_modulerb   r  s       r   r  r    sP    44X>>B	~ 		--b(;;;!~r$   c                 n    t          | j        | j        j                  \  }}|J || _        || _        d S r   )r  r  r'  r_   r  )packetrb   r  s      r   _refresh_packetr    s<    $V%>
@UVVB>>>FJ+Fr$   c                   $     e Zd Z fdZd Z xZS )_PyOpNamespacec                 X    t                                          |           || _        d S r   )rz   r#   _ops)r"   rC   opsr   s      r   r#   z_PyOpNamespace.__init__  s&    			r$   c                     | 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__  s_    Y]]4&&: RTYRR4RRR   	dB	r$   )r^   r_   r`   r#   r  r   r   s   @r   r  r    sG                  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                     t                                          d           t                      | _        t	          dt
                    | _        g | _        d S )Nr  ry   )rz   r#   r   loaded_librariesr  ru   _higher_order_op_namespacer  )r"   r   s    r   r#   z_Ops.__init__  sL    %%% #*8$&7+
 +
' 			r$   c                     |dk    r| j         S t          |          }t          | ||           | j                            |           |S )Nrx   )r  r  r  r  r   )r"   rC   r   s      r   r  z_Ops.__getattr__  sS    >!!22 !&&	dI&&&	r$   c                 *    t          | j                  S r   r  r!   s    r   r  z_Ops.__iter__  r  r$   c                 .    t          j        |           dS )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dS t          j        |          }t	                      5  t          j        |           ddd           n# 1 swxY w Y   | j                            |           dS )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,  s    $ %'' 	F3D99__ 	 	 K		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	!!$'''''s   AA A)
r^   r_   r`   r  r#   r  r  r  r  r   r   s   @r   r  r     sy        H    	 	 	  ( ( (&( ( ( ( ( ( (r$   r  r  )F)Pr   ru  r   r  r9   r   typestypingr   r   r   r   r   r   r	   r1   torch.utils._pytreerm  _pytreer   r
   torch._Cr   rg   r   torch._functorch.pyfunctorchr   r   r   hasattrr   rv  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  rl  r  FunctionSchemaboolr  r  r  
ModuleTyper  r  r  r  r  r  rF   r$   r   <module>r(     s   




           



  > > > > > > > > > > > > > > > > > >  $ $ $ $ $ $ $ $ $ ! ! ! ! ! ! X X X X X X X X ; ; ; ; ; ; : : : : : : GC!122UwwsDT7U7U  & & & E" E" E" E" E" E" E" E"R2UL 2U[ 2U 2U 2U 2Uj 79 4223 8 8 8  !6 2E E E E E, E E EP3 3 38 8 8
    ,
 
 
 
 
 
 
 
& &C%B%D%D "! ! ! !H$X $X $XNM M M7 7 7: : :   . . .
 !$
C % % %     
  
  h h h h h h h hbd( d( d( d( d(* d( d( d(N  R5#7 RD R R R RpE pE pE pE pE pE pE pEj# *: #  #  #  # jB  B  B  B  B 5# B  B  B J  , , ,    \    G( G( G( G( G(5 G( G( G(V DFFT     r$   