
    {Yhz                     b   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 d dl	m
Z
 d dlmZmZmZmZmZmZmZmZ d dl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#m$Z$ d d	l%m&Z& erd d
l'm(Z(  ede          Z) edd          Z* e+ed          o e+ed          Z,ej-        d             Z. G d d          Z/de/de!fdZ0i Z1e2e3df         e4d<   e!j5        e!j6        e!j7        e!j8        e!j9        e!j:        gZ; G d de/e j<                  Z=d Z>d Z?d Z@d ZA G d d          ZB eB            aCdBd!ZDd" ZEd# ZFd$ ZGd% ZHd& ZId' ZJ eK            aLeKd(         e4d)<   d* ZMd+ ZNd, ZO G d- d(e/ee*e)f                   ZP G d. d/ePe*e)f                   ZQd0 ZRd1ejS        d2eTfd3ZU G d4 d5ee*e)f                   ZVdeVe*e)f         d6e*jW        d7e*jX        d2e)fd8ZY G d9 d:ejZ                  Z[d; Z\d< Z] G d= d>ejZ                  Z^ G d? d@ejZ                  Z_ e_            Z`e_e4dA<   dS )C    N)Iterator)cached_property)AnyCallableClassVarfinalGenericOptionalTYPE_CHECKINGUnion)Concatenate	ParamSpecTypeVar)_utils_internal)_dispatch_is_included_in_aliasDispatchKey)dispatch_functorchTransformType)TorchDispatchMode)BaseFunctionalizeAPI_Tdefault_P.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    \/var/www/tools.fuzzalab.pt/emblema-extractor/venv/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ee	e
         e	ej                 eef         deeeef         geeef         f         fdZd	eed
ef         ef         deed
ef         ef         fdZd Z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__B   s7    $  	 BD  	  "    c                     t           r(   NotImplementedErrorr.   argskwargss      r#   __call__zOperatorBase.__call__n       !!r0   c                     || j         v S r(   )r*   )r.   ks     r#   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyq   s    DO##r0   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_keyt   sI     	 	A822155 "&&)) ttur0   r:   returnc                 |     dt           t          t          f         dt           t          t          f         f fd}|S )NfnrC   c                 N   t          j                  r_t          t                    st          t          j                  r0j        vsJ | j        <   j                                         | S t          t                    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 )Nz>Please register a mode for the DispatchKey.Python key instead.z%Trying to override a python impl for z on operator )inspectisclass
issubclassr   r=   Tensorr+   r)   clear
isinstancer   r,   r   Pythonr*   RuntimeErrorname)rE   r:   r.   s    r#   innerz#OperatorBase.py_impl.<locals>.inner   sJ   q!! 1/004>q%,4O4O  55555+-%a($**,,,	!]++  44444*,$Q'	a-----****P +** DO##"YAYYDIIKKYY   "$DOA &&(((Ir0   )r   r   r   )r.   r:   rP   s   `` r#   py_implzOperatorBase.py_implz   sN    	hr2v& 	8BF+; 	 	 	 	 	 	 	8 r0   rE   r   c                     ddl mm}mm dt
          j        dt
          j        dt          ffd}dt          |         dt
          j        dt
          j        dt          ffd}dt
          j        dt
          j        dt          ffd	} | 
                    t          j                  |            | 
                    |          |            | 
                    t          j                  |           S )
Nr   )CppFunctionalizeAPIFunctionalTensorModeFunctorchFunctionalizeAPIPythonFunctionalizeAPIr5   r6   rC   c                  ,                  g| R i |S r(    )r5   r6   rS   rE   s     r#   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s-    2))++=d===f===r0   modec                 .      |           g|R i |S r(   rX   )rZ   r5   r6   rV   rE   s      r#   functionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fn   s1     2,,T22DTDDDVDDDr0   c                 .      |           g|R i |S r(   rX   )interpreterr5   r6   rU   rE   s      r#   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s1     2//<<NtNNNvNNNr0   )#torch._subclasses.functional_tensorrS   rT   rU   rV   r   r5   r6   r   r
   rQ   r   Functionalizer   )	r.   rE   rT   rY   r\   r_   rS   rU   rV   s	    `    @@@r#   py_functionalize_implz"OperatorBase.py_functionalize_impl   s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	>rw 	>") 	> 	> 	> 	> 	> 	> 	> 	>	E/0	E9;	ELNI	E	E 	E 	E 	E 	E 	E 	E
	O "	O359	O	O 	O 	O 	O 	O 	O 	O
 	0[.//0CDDD*)**+IJJJ1]0112LMMM	r0   c                     t           r(   r2   r-   s    r#   rO   zOperatorBase.name   r8   r0   N)__name__
__module____qualname____doc__r/   r7   r;   rB   r   typer   r=   rJ   r   r   r   r   r   rQ   r   rb   rO   rX   r0   r#   r&   r&   <   s!        
*" *" *"X" " "$ $ $  %"#
% 
8BF#$hr2v&66	7% % % %d;'=r'ABBFG	+4b892=	>   >" " " " "r0   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CompositeExplicitAutogradrB   r=   r>   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrN   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr3   )ri   r:   candhas_backend_kernels       r#   resolve_keyrz      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Tr0   HigherOrderOperator_higher_order_opsc                   @    e Zd Zdd fd
Zdeee         eej                 e	e
f         deeeef         geeef         f         f fdZdeeef         deeef         fdZed	             Zedefd
            Zd Zd Zej        d             Zd Zd Zd Z xZS )r{   F)	cacheablec                p   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/   rh   r{   rN   _namerd   r|   _nsre   
_cacheabler=   r>   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r.   rO   r~   dispatch_key	__class__s       r#   r/   zHigherOrderOperator.__init__  s    ::,,,a   
 "&$!2#$)H$B$B$D$D!N 	+ 	+L\****	+ 	+r0   r:   rC   c                     t          |t                    r9| j                            |          s| j                            |          | _        t                                          |          S r(   )rL   r   r   r@   addr   rQ   r.   r:   r   s     r#   rQ   zHigherOrderOperator.py_impl3  s`     a%% 	Id.G.K.KA.N.N 	I(,(A(E(Ea(H(HD%wwq!!!r0   rE   c                      dt           j        dt           j        dt          f fd}                      t
          j                  |           S )Nr5   r6   rC   c                     t          j                    r&t          j        t           j        d g | |R           r>t           j                                        5   | i |cd d d            S # 1 swxY w Y   ddlm}  |          rP j	        | i |}t          d |j        D                       r%t          d                                 d           | i |S )Nc                     | j          S r(   )requires_grad)ts    r#   <lambda>zRHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<lambda>G  s    ao- r0   r   )_has_gen_schemac              3   $   K   | ]}|j         V  d S r(   )is_write.0args     r#   	<genexpr>zSHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<genexpr>Q  s$      @@s|@@@@@@r0   zThe z HigherOrderOperator does not currently support training with in-place input or buffer mutations If you require this feature, please submit an issue to PyTorch. Alternatively, consider creating your own custom autograd.Function. )r=   is_grad_enabledpytreetree_all_onlyrJ   r>   _AutoDispatchBelowAutogradtorch._higher_order_ops.utilsr   
gen_schemaany	argumentsrN   rO   )r5   r6   r   schemarE   r.   s       r#   maybe_run_autogradz@HigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autogradD  sl   (** 1f.B--$/ / 1
 X88:: 1 140001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FEEEEEt$$ ($9&99@@v/?@@@@@ &_tyy{{ _ _ _   2t&v&&&s   A..A25A2)r   r5   r6   r   rQ   r   ru   )r.   rE   r   s   `` r#   py_autograd_implz$HigherOrderOperator.py_autograd_impl@  sg    	'bg 	' 	'r 	' 	' 	' 	' 	' 	' 	'. 	+[)**+=>>>	r0   c                     | j         S r(   )r   r-   s    r#   	namespacezHigherOrderOperator.namespace_  	    xr0   c                     ddl m} | j        pL| j         d| j         t
          j        j        j        v p%t          | |          ot
          j
        j        j        S )Nr   )AutogradFunctionApply.)"torch._functorch.autograd_functionr   r   re   rd   r=   	_inductorconfig!unsafe_marked_cacheable_functionsrL   
_functorch.autograd_cache_allow_custom_autograd_functions)r.   r   s     r#   r~   zHigherOrderOperator.cacheablec  sr    LLLLLL O /33DM33%GH 4!677 [$+Z	
r0   c                 D    | j                             |          | _         d S r(   )r   remove)r.   r   s     r#   r   zHigherOrderOperator.fallthroughq  s!    $($=$D$D\$R$R!!!r0   c          	         ddl m} || j        v r,| j        |         }t          |t                    rJ  ||i |S |t          j        k    rt          | ||          S |t          j        k    rg d fd}g ||                                R D ]9} ||           t          |t          t          f          r|D ]} ||           :t                    }	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 ]}t          |          }|j        t$          j        j        k    r,|t$          j        j        j        u r8t$          j        j        j        }| j        |         } ||j        g|R i |}|c S || j        v r| j        |         } ||i |}nt          d| j         d	| d          |t           ur|c S t5          d
| j         d| dd |	D                        t$          j                            |          }|t          j        k    rddl m}
 t;                      dk    rt$          j                            t          j                  st?                      }|
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   tA          | |          }|| 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 )NrM   )r=   r>   _dispatch_keysr@   )tensors    r#   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key  s&    x..v66::8DDDr0   c                     t          | t          j                  r" |           r                    |            d S d S d S r(   )rL   r=   rJ   append)r   r   overloaded_args_lists    r#   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloaded  sV    c5<00 5^^C5H5H 5(//444445 5 5 5r0   )_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 rX   )rh   )r   as     r#   
<listcomp>z0HigherOrderOperator.dispatch.<locals>.<listcomp>  s    555DGG555r0   zIIllegal invocation of dispatch on DispatchKey.PreDispatch without a mode.zCurrent active mode z not registeredz.could not find kernel for HigherOrderOperator rk   z (resolved from ))"torch.utils._python_dispatchr   r)   rL   r   FuncTorchDynamicLayerFrontModer   rM   valueslisttupler   rh   r+   r3   r   NotImplemented__torch_dispatch__r=   r>   _disabled_torch_dispatch_impl_subclassesfake_tensor
FakeTensorFakeTensorMode	fake_mode	TypeError_to_functionality_keyPreDispatch&_len_torch_dispatch_stack_pre_dispatch&_dispatch_tls_is_dispatch_key_excluded'_get_current_dispatch_mode_pre_dispatchrz   r*   )r.   r   r5   r6   r   kernelr   r   r   overloaded_argsr   	curr_modehandlerrZ   resultsubclass_typefunctionality_key	final_keyr   r   s                     @@r#   dispatchzHigherOrderOperator.dispatchv  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 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=> >  !E$5$A$LLL$)$5$A$PM"3MBG$WS]DTDDDVDDF!MMM 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	 ,,_ -,, I$*????E9EEE @?? /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4MMMc                *      fd} |            S )Nc                  
   t                    } t          j                            |           rt          j        j        | gR i S t          j                  } j        |                                gR i S r(   )	_to_flat_tupler=   	overrideshas_torch_functionhandle_torch_function_compute_keysetr   r   highestPriorityTypeId)	flat_argsdispatch_key_setr5   r6   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  r0   rX   )r.   r5   r6   r   s   ``` r#   r7   zHigherOrderOperator.__call__  s6    
	 
	 
	 
	 
	 
	 
	 wyyr0   c                 2    t          d| j         d          )NzHigherOrderOperator z does not implement a gen_schema. This is OK as long as the hop is functional. e.g. it should not mutate its inputs and there are no input, output aliasing via views or direct referencing.)r3   r   r4   s      r#   r   zHigherOrderOperator.gen_schema  s,    !04: 0 0 0
 
 	
r0   c                 ,    |                                   S r(   )rO   r-   s    r#   __str__zHigherOrderOperator.__str__"  s    ))++r0   c                     | j         S r(   r   r-   s    r#   rO   zHigherOrderOperator.name%  
    zr0   )rd   re   rf   r/   r   rh   r   r=   rJ   r   r   r   r   r   rQ   r   propertyr   r   boolr~   r   r   abcabstractmethodr7   r   r   rO   __classcell__r   s   @r#   r{   r{     s        +0 + + + + + + +8""#
" 
8BF#$hr2v&66	7" " " " " "RV 
"b&	   >   X 
4 
 
 
 U
S S S
F' F' F'P 	  6
 
 
           r0   c                 $    t          j        | i |S r(   )r   arg_tree_leavesr5   r6   s     r#   r   r   )  s    !426222r0   c                 B    t          | |          }t          ||          S r(   )_get_tensorskey_extractor)r5   r6   r   tensorss       r#   r   r   -  s"    4((G"6777r0   c                 X    t          | |          }d |D             }t          |          S )Nc                 F    g | ]}t          |t          j                  |S rX   )rL   r=   rJ   )r   r   s     r#   r   z _get_tensors.<locals>.<listcomp>4  s)    FFF*Q*E*EF1FFFr0   )r   r   )r5   r6   flat_alltensor_argss       r#   r   r   2  s2    dF++HFFhFFFKr0   c                     t           j                                        }| D ]$}|t           j                            |          z  }%|t           j                                        z
  }||z  }|S r(   )r=   r>   _dispatch_tls_local_include_setr   _dispatch_tls_local_exclude_set)r   key_maskkey_setr   s       r#   r   r   :  sg    h6688G < <EH33F;;;@@BBBG GNr0   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__Q  s    "D\"&r0   c                 N    |t          | j                  k     sJ || j        |<   d S r(   lenr  )r.   indexrZ   s      r#   setz!_ModeStackStateForPreDispatch.setU  s1    s4-......$(5!!!r0   c                 P    |t          | j                  k     sJ | j        |         S r(   r  )r.   r  s     r#   getz!_ModeStackStateForPreDispatch.getY  s,    s4-......!%((r0   c                 l    t          d | j        D                       t          | j        d u          z   S )Nc                     g | ]}||S r(   rX   )r   is     r#   r   z7_ModeStackStateForPreDispatch.count.<locals>.<listcomp>^  s    CCC!Q]A]]]r0   )r  r  intr  r-   s    r#   countz#_ModeStackStateForPreDispatch.count]  sB    CCt1CCCDDs#4/H
 H
 
 	
r0   N)rd   re   rf   r/   r  r  r  rX   r0   r#   r	  r	  P  sP        ' ' ') ) )) ) )
 
 
 
 
r0   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      )	r=   r>   _TorchDispatchModeKeyPROXYr  !mode_stack_state_for_pre_dispatchr  
FUNCTIONALr  )current_modecurrent_mode_stack_pre_dispatchmode_keys    r#   _unset_modez,unset_mode_pre_dispatch.<locals>._unset_modeo  s    ux5;;;:>>qAAL-//33At<<<7BBB:>>qAAL-//33At<<<<>>QLEI-//Br0   r   F)
r  r=   r>   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(  f  s    &G&I&I#x&,&1,                       ;==LACC
 q  889PRWXXXr0   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   )rT   )SchemaCheckMode)ProxyTorchDispatchModezYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr  T)r`   rT   #torch._subclasses.schema_check_moder*  "torch.fx.experimental.proxy_tensorr+  rL   r   r  r  AssertionErrorr  r  r=   r>   r%  r   r   )rZ   rT   r*  r+  previous_mode_stack_lenr!  s         r#   _set_mode_pre_dispatchr0    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 $#r0   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  r=   r>   r  r   r  )
mode_stackpre_dispatch_lens     r#   _pop_mode_from_pre_dispatchr4    s    244J=??1=>>>$0&t$????~~a$&ux'E'PQQQ~~a$&ux'E'KLLL %$r0   c                  B    t                                                      S r(   )r  r  rX   r0   r#   r   r     s    ,..44666r0   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  )r=   r>   r  r  r   r  r  )r#  s    r#   _get_dispatch_mode_pre_dispatchr7    s}    &,&1     58177702266q99902266q999r0   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??
 4r0   c                      t           S r(   )"_mode_stack_state_for_pre_dispatchrX   r0   r#   r  r    s    --r0   
OpOverload
cached_opsc                 :    t                               |            d S r(   )r>  r   )op_overloads    r#   add_cached_oprA    s    NN;r0   c                  8    t                                            d S r(   )r>  rK   rX   r0   r#   reset_cached_opsrC    s    r0   c                      t           S r(   )r>  rX   r0   r#   get_cached_opsrE    s    r0   c                       e Zd Zdddeeef         deeeef         ef         dej	        j
        dee         ddf fd	Zedefd
            Zedefd            Zedej	        j        fd            Zd$dZd Zdej        dej        defdZdej	        j        dej        dej        defdZd Zd Zdedef fdZdej	        j        def fdZe defd            Z!defdZ"dej        dej        defdZ#deddfdZ$dede%eeeef         f         fdZ&d  Z'e d!             Z(e d"             Z)e d#             Z* xZ+S )%r=  overloadpacketOpOverloadPacketri   op_dkr   tagsrC   Nc                    t                                                       || _        || _        || _        || _        || _        |j        dk    rdn|j        | _        |rt          j
        j        |v | _        | j        j        | _        |j        r| xj        d|j        z   z  c_        | j        j                            d          d          d| j         | _        |j        | _        |j        |_        | j        | _        i | _        | j        t          j        j        v | _        d }| j        j        D ]'}|j        
||j        j        }|j        j        p|}(|d uo| | _        d S )N r   r   ::r  )r   r/   _op_op_dk_schema_overloadpacket_tagsoverload_name_overloadnamer=   Tagnondeterministic_seeded_nondeterministic_seededrO   r   splitrd   re   rf   __annotations__library_defs_defined_in_pythonr   
alias_infor   is_view)	r.   rG  ri   rI  r   rJ  r   r   r   s	           r#   r/   zOpOverload.__init__  sz    	-
-33II9M 	  	V,1I,MQU,UD)\&
 	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r0   c                 P    | j         j                            dd          d         S )NrM  r  maxsplitr   rP  rO   rX  r-   s    r#   
_namespacezOpOverload._namespace%  %    | &&ta&88;;r0   c                 P    | j         j                            dd          d         S )NrM  r  r`  rb  r-   s    r#   _opnamezOpOverload._opname)  rd  r0   c                 j    t           j                            | j        j        | j        j                  S r(   )r=   r>   _dispatch_find_schema_or_throwrP  rO   rS  r-   s    r#   _handlezOpOverload._handle-  s+    x66Lt|9
 
 	
r0   c                     | S r(   rX   r.   memos     r#   __deepcopy__zOpOverload.__deepcopy__4      r0   c                 8    d| j          d| j         d| j         dS )Nz<OpOverload(op='r   z', overload='z')>)rc  rf  rT  r-   s    r#   __repr__zOpOverload.__repr__7  s*    f$/ffDLfftOaffffr0   r5   r6   c                     | j         |i |S r(   rN  r4   s      r#   r7   zOpOverload.__call__<  s    tx((((r0   keysetc                .     | j         j        |g|R i |S r(   )ri  redispatch_boxed)r.   rs  r5   r6   s       r#   
redispatchzOpOverload.redispatchA  s)     -t|,VEdEEEfEEEr0   c                 *    t          | j                  S r(   hashrN  r-   s    r#   __hash__zOpOverload.__hash__F      DH~~r0   c                 d     dj         g | j        j                            d          | j        R  S )Nz{}.{}.{}rM  )formatrP  rO   rX  rT  r-   s    r#   r   zOpOverload.__str__J  s6     z T$,"3"9"9$"?"?TASTTTTr0   r:   c                     t                                          |          p1t          j                            |                                 |          S r(   )r   r;   r=   r>   %_dispatch_has_kernel_for_dispatch_keyrO   r   s     r#   r;   z&OpOverload.has_kernel_for_dispatch_keyM  sF    ww22
 
 LX;;DIIKKKK	Lr0   rA   c                     t           j                            |                                 |          p t	                                          |          S r(   )r=   r>   )_dispatch_has_kernel_for_any_dispatch_keyrO   r   rB   )r.   rA   r   s     r#   rB   z*OpOverload.has_kernel_for_any_dispatch_keyR  sD    xAAIIKK
 
 9WW44R88	9r0   c                     | j         S r(   )rc  r-   s    r#   r   zOpOverload.namespaceW  s
    r0   c                     t           j        }|| j        v p1t          j                            |                                 |          S r(   )r   rr   r*   r=   r>   r  rO   )r.   dks     r#   _can_decomposezOpOverload._can_decompose[  s?    2T_$ 
(V(VIIKK)
 )
 	
r0   c                     t           j        }|| j        v r | j        |         |i |S t          j                            |                                 |          r | j        |g|R i |S t          S r(   )	r   rr   r*   r=   r>   r  rO   rO  r   )r.   r5   r6   r  s       r#   	decomposezOpOverload.decomposea  s    2  
 '4?2&7777X;;DIIKKLL 	"4;r3D333F333!!r0   keyc                 <    | j                             |d            d S r(   )r)   pop)r.   r  s     r#   _uncache_dispatchzOpOverload._uncache_dispatchv  s!      d+++++r0   c                      j         vsJ   d             t          j        k    rxt           t                    s" j        s j         <   t                      S dt          j        dt          j	        dt          f fd}| j         <   t                      |S t          j                                      }|t          j        k    rdt                      }|dk    rPt          j                            t          j                  s'dt          j        dt          j	        dt          f 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 r5   r6   rC   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   zDIllegal invocation of dispatch on DispatchKey.Python without a mode.)r   r   rh   r+   rL   TorchBindOpOverloadr=   utils_python_dispatchr   _libraryhandle_dispatch_moderO  )r5   r6   r   r   rZ   r  r.   s        r#   r   z)OpOverload._get_dispatch.<locals>.handler  s   SSSSSS !!;!;!=!=>>	 ,,Z -,, D$999!$(;<< A!K8NNPPTX#(>#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(   )r4  r0  )top_modes    r#   (_temporarily_pop_modes_from_pre_dispatchz[OpOverload._get_dispatch.<locals>.handler.<locals>._temporarily_pop_modes_from_pre_dispatch  sH      #>#@#@="*NNN28<<<<<28<<<<s   ' 8)
contextlibcontextmanagerr=   r  r  r  )r5   r6   r  r   r.   s       r#   r   z)OpOverload._get_dispatch.<locals>.handler  s    .= = /.= BACC y$~3H%t .2     6<                    s    AAA)r)   r   rM   rL   r  r+   rA  r   r5   r6   r   r=   r>   r   r   r   r   rz   ra   torch._dispatch.python	_dispatchpythonCROSSREF_FUNCTIONALIZEmake_crossref_functionalizer*   r  )	r.   r  r   r   curr_stack_lenr   cache_result
pydispatchrs	   ``       r#   _get_dispatchzOpOverload._get_dispatchz  sG   $....4#...+$$$d$788 AV ,/$S)d###
Srw S") S S S S S S S S0 )0D %$N!H::3?? 777CEEN ""GG&  #27 bi B      & c**	 k55
 ++++7777777770 $@@yQQ (07D(-!$'''O	955 	 ()D %$r0   c                     | j         S r(   r   r-   s    r#   rO   zOpOverload.name  r   r0   c                     | j         S r(   )rQ  r-   s    r#   rG  zOpOverload.overloadpacket  s    ##r0   c                     | j         S r(   rr  r-   s    r#   ri   zOpOverload.op  r   r0   c                     | j         S r(   )rR  r-   s    r#   rJ  zOpOverload.tags  s
    zr0   r(   ),rd   re   rf   r   r   r   r   r   r=   r>   FunctionSchemar   r   r/   r   strrc  rf  _DispatchOperatorHandleri  rm  rp  r5   r6   r7   DispatchKeySetrv  rz  r   r   r;   rB   r   r   r  r  r  r   r  rO   rG  ri   rJ  r   r   s   @r#   r=  r=    sc       *=**= RV*= KO4b89	*=
 '*= 3i*= 
*= *= *= *= *= *=X <C < < < _< < < < < _< 
9 
 
 
 _
   g g g
) )BI )" ) ) ) )
F0F9;FLNIF	F F F F
  U U UL[ LT L L L L L L
9%(2I 9d 9 9 9 9 9 9
 3    X
 
 
 
 
"rw "") " " " " "*,[ ,T , , , ,] ]{HRQSVDT7T1U ] ] ] ]~   $ $ X$   X   X    r0   c                       e Zd Zdee         fdZej        d             Zde	j
        de	j        defdZdee         de	j
        de	j        defdZd	S )
r  rC   c                      t           j        t           j        t           j        t           j        t           j        t           j        t           j        g}dt           f fdfd|D             S )Nr  c                    t           j                                                            |           r2t           j                                                            |           S | j        vpj        |          t           j        j        u S r(   )r=   r>   r  rO   0_dispatch_kernel_for_dispatch_key_is_fallthroughr*   rZ  fallthrough_kernel)r  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r0   c                 *    g | ]} |          |S rX   rX   )r   r  r  s     r#   r   z9TorchBindOpOverload._fallthrough_keys.<locals>.<listcomp>  s:     
 
 
77<<

 
 
r0   )r   ru   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcher)r.   _DEFAULT_FALLTHROUGH_KEYSr  s   ` @r#   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys  s      #$'%)(%
!		+ 		 		 		 		 		 		
 
 
 
0
 
 
 	
r0   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 	;r5   r6   c                    t          ||          rO|                                 5   | j        |                                 g|R i |cd d d            S # 1 swxY w Y    | j        |i |S r(   )_must_dispatch_in_pythonr  _dispatch_in_pythonr  rN  r4   s      r#   r7   zTorchBindOpOverload.__call__   s    #D&11 	 ;;==  /t/**,,/3  7=                 tx((((s   #AAAfallthrough_keysc           	      :   t           j                                        }|D ]}|                    |          }t	          |||          }|                                }|| j        vr|                     |          n| j        |         }t          |t                    r`t           j        
                    |                                 |          r | j        ||gz   g|R i |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.)r=   r>   r   r   r   r   r)   r  rL   r   r  rO   r  rN   r   )	r.   r  r5   r6   r   r  r   r   r   s	            r#   r  z'TorchBindOpOverload._dispatch_in_python2  s     %x==??# 	D 	DC#7#>#>s#C#C  *49MNN'==?? 4#777 |,,,%l3 	 g{++ 	 xHH		\   0t/$~5      / / /Za / / KW	/ / /   '8,,,,,w''''r0   N)rd   re   rf   r   r   r  r  r  r  r   r5   r6   r   r7   r  rX   r0   r#   r  r    s        
4#4 
 
 
 
< ' ' '") )BI )" ) ) ) )$'( $[ 1'(:<''(MOY'(	'( '( '( '( '( '(r0   r  c                 2    t          j        d | |f          S )Nc                 J    t          | t          j        j        j                  S r(   )rL   r=   r  fake_class_registryFakeScriptObject)objs    r#   r   z*_must_dispatch_in_python.<locals>.<lambda>^  s    J3D
 
 r0   )r   tree_anyr   s     r#   r  r  \  s)    ?	
 	
 
v	  r0   r   rC   c                 >    t          d | j        D                       S )Nc              3   T   K   | ]#}t          |j        t          j                  V  $d S r(   )rL   rh   r=   	ClassTyper   s     r#   r   z)_has_script_object_arg.<locals>.<genexpr>f  s0      QQz#(EO44QQQQQQr0   )r   r   )r   s    r#   _has_script_object_argr  e  s"    QQ@PQQQQQQr0   c            
          e Zd ZU dZee         ed<   dededeee	f         de
e         ddf
d	Zdd
Zd Zd Zd Zed             Zed             Zdedeee	f         fdZdee         fdZdej        dej        de	fdZd ZdS )rH  	torch.ops__file__qualified_op_nameop_nameri   overload_namesrC   Nc                     || _         || _        || _        || _        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**.
 .
 .
 .
 .
 .
r0   )	_qualified_op_namerd   rN  _overload_names_dirr   _schemasr   _has_torchbind_op_overload)r.   r  r  ri   r  s        r#   r/   zOpOverloadPacket.__init__n  sk     #4-!	*- .
 .
9=9M9M9O9O.
 .
 .
 +
 +
'''r0   c                     | S r(   rX   rk  s     r#   rm  zOpOverloadPacket.__deepcopy__  rn  r0   c                 F     dj         | j                            d           S )Nz<OpOverloadPacket(op='{}.{}')>rM  r}  r  rX  r-   s    r#   rp  zOpOverloadPacket.__repr__  s)    6/6$**400
 	
r0   c                 *    t          | j                  S r(   rx  r-   s    r#   rz  zOpOverloadPacket.__hash__  r{  r0   c                 F     dj         | j                            d           S )Nz{}.{}rM  r  r-   s    r#   r   zOpOverloadPacket.__str__  s"    w~t6<<TBBCCr0   c                     | j         S r(   rr  r-   s    r#   ri   zOpOverloadPacket.op  r   r0   c                 *      fd j         D             S )Nc                 \    i | ](}|t           j                            j        |          )S rX   )r=   r>   _get_schemar  )r   rS  r.   s     r#   
<dictcomp>z-OpOverloadPacket._schemas.<locals>.<dictcomp>  s@     
 
 
 58//0GWW
 
 
r0   r  r-   s   `r#   r  zOpOverloadPacket._schemas  s1    
 
 
 
!%!5
 
 
 	
r0   r  c           
         	 |                     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__'zH' can't have an overload name beginning with '__' and the underlying op z has no attribute z either.r   rL  zThe underlying op of 'z' has no overload name ')
startswithgetattrrN  AttributeErrorr  r=   r>   _get_operation_overloadr  r  r  r=  r  setattrr  r   rN   )	r.   r  use_key
op_dk_tagsop_op_dk_rJ  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   )- AA15C E /Fc                 *    t          | j                  S r(   iterr  r-   s    r#   __iter__zOpOverloadPacket.__iter__      DIr0   r5   r6   c                j    | j         r t          ||          rt          | g|R i |S  | j        |i |S r(   )r  r  !_call_overload_packet_from_pythonrN  r4   s      r#   r7   zOpOverloadPacket.__call__  sX     * 	L/Gf/U/U 	L4TKDKKKFKKKtx((((r0   c                 $    d | j         D             S )Nc                     g | ]}|r|nd 	S r   rX   )r   ns     r#   r   z.OpOverloadPacket.overloads.<locals>.<listcomp>  s!    DDD!Q%IDDDr0   r  r-   s    r#   	overloadszOpOverloadPacket.overloads  s    DDt/CDDDDr0   r(   )rd   re   rf   r  r   r  rY  r   r   r   r   r/   rm  rp  rz  r   r   ri   r  r=  r  r   r  r5   r6   r7   r  rX   r0   r#   rH  rH  k  s        )Hhsm)))

 
 RV	

 S	
 

 
 
 
&   
 
 

  D D D   X 
 
 X
/s /z"b&'9 / / / /b(3-    
) )BI )" ) ) ) )E E E E Er0   rH  r5   r6   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}|                                D ]\  }}|d| d| dz  }t          |          )Nz'Fail to match any TorchBindOverload of z with following exceptions:
zOverload name z:
 
)	r=   r>   (_maybe_call_torch_function_for_op_packetr  r  &_check_schema_allow_fake_script_objectrP  rN   items)ri   r5   r6   torch_function_calledret
exceptionsfound_oprS  r@  _eerr_msgr  msgs                 r#   r  r    s}    "'!R
"" " "" "3  
 JH 	* 	*b-00	*?#&*  .4 A #HE 	* 	* 	*()J}%%%%%%	*  )x(((( 	T"SSS  $$&& 5 5S4C44S4444
w

s   !A00
B	:BB	c                   X     e Zd ZdZdZdeddf fdZdee         fdZdede	fd	Z
 xZS )
_OpNamespacea0  
    An op namespace to dynamically bind Operators into Python.

    Say a user has created a custom Operator called "my_namespace::my_op". To
    call this op, the user will write torch.ops.my_namespace.my_op(...).
    At startup, this operation will not yet be bound into Python. Instead, the
    following sequence of magic tricks will occur:
    1. `torch.ops.my_namespace` will invoke the `__getattr__` magic method
       on the `torch.ops` object, which will create a new `_OpNamespace`
       object called `my_namespace` and set it as an attribute on the `ops`
       object.
    2. `torch.ops.my_namespace.my_op` will then invoke `__getattr__` on
       the `my_namespace` object, which will retrieve the operation via
       `torch.get_operation`, a function bound from C++, and then in a similar
       fashion bind this new object onto the `my_namespace` object.
    3. `torch.ops.my_namespace.my_op(...)` then calls this new operation
        and subsequent accesses will incur no further lookup (the namespace and
        operation will already exist).
    r  rO   rC   Nc                 l    t                                          d|z              || _        g | _        d S )Nz
torch.ops.)r   r/   rO   r  )r.   rO   r   s     r#   r/   z_OpNamespace.__init__2  s2    ,---	!			r0   c                 *    t          | j                  S r(   r  r-   s    r#   r  z_OpNamespace.__iter__7  r  r0   r  c                    |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 )	N)
__origin____self__zInvalid attribute 'z' for '_OpNamespace' 'r  rM  r   z'_OpNamespace' 'z' object has no attribute ')	r  rO   re   _get_packetrN   rH  r  r  r   )	r.   r  namespace_namer  module_nameri   r  r  opoverloadpackets	            r#   r  z_OpNamespace.__getattr__:  sn   000 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   0A- -
B7BB)rd   re   rf   rg   r  r  r/   r   r  rH  r  r   r   s   @r#   r  r    s         ( H"S "T " " " " " "
(3-    " 3 " +; "  "  "  "  "  "  "  " r0   r  c                     t           j                            |           \  }}|,t           j        j                            ||            ||_        ||fS r(   )r=   r>   _jit_get_operationjit	_builtins_register_builtinre   )qualname	op_moduleri   r  s       r#   r  r  _  sP    44X>>B	~ 		--b(;;;!~r0   c                 n    t          | j        | j        j                  \  }}|J || _        || _        d S r(   )r  r  rN  re   r  )packetri   r  s      r#   _refresh_packetr#  i  s<    $V%>
@UVVB>>>FJ+Fr0   c                   L     e Zd ZdZd fdZdee         fdZdedefdZ	 xZ
S )	_HigherOrderNamespacer  rC   Nc                 X    t                                          d           g | _        d S )Nr   )r   r/   r  r.   r   s    r#   r/   z_HigherOrderNamespace.__init__s  s'    1222!			r0   c                 *    t          | j                  S r(   r  r-   s    r#   r  z_HigherOrderNamespace.__iter__w  r  r0   rO   c                     t                               |d           }|t          d| d          t          | ||           | j                            |           |S )NzJ'_HigherOrderNamespace' 'torch.ops.higher_order' object has no attribute 'r  )r|   r  r  r  r  r   )r.   rO   ri   s      r#   r  z!_HigherOrderNamespace.__getattr__z  sl    ""4..: d]addd   	dB		r0   )rC   N)rd   re   rf   r  r/   r   r  r  r{   r  r   r   s   @r#   r%  r%  p  s        H" " " " " "(3-    	 	(; 	 	 	 	 	 	 	 	r0   r%  c                   V     e Zd ZdZ fdZdedefdZdee         fdZ	d Z
d Z xZS )	_Opsz_ops.pyc                     t                                          d           t                      | _        t	                      | _        g | _        d S )Nr  )r   r/   r  loaded_librariesr%  r   r  r'  s    r#   r/   z_Ops.__init__  s@    %%% #133			r0   rO   rC   c                 z    t          |          }t          | ||           | j                            |           |S r(   )r  r  r  r   )r.   rO   r   s      r#   r  z_Ops.__getattr__  s=     &&	dI&&&	r0   c                 *    t          | j                  S r(   r  r-   s    r#   r  z_Ops.__iter__  r  r0   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#   r2  z_Ops.import_module  s    " 	'''''r0   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)	r=   _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)rd   re   rf   r  r/   r  r  r  r   r  r2  r9  r   r   s   @r#   r+  r+    s        H         (3-    ( ( (&( ( ( ( ( ( (r0   r+  ops)F)ar   r  r    r1  rG   r   typescollections.abcr   	functoolsr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   r=   torch.utils._pytreer  _pytreer   r   torch._Cr   rn   r   torch._functorch.pyfunctorchr   r   r   r   r`   r   r   r   hasattrr   r  r$   r&   rz   r|   dictr  rY  r  r  r  r  AutocastCPUAutocastCUDAr   ABCr{   r   r   r   r   r	  r<  r(  r0  r4  r   r7  r   r  r  r>  rA  rC  rE  r=  r  r  r  r   r  rH  r5   r6   r  
ModuleTyper  r  r#  r%  r+  r:  rX   r0   r#   <module>rJ     s   




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



  $ $ $ $ $ $ % % % % % %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 > = = = = = = = = =  $ $ $ $ $ $ $ $ $ ! ! ! ! ! ! X X X X X X X X J J J J J J J J : : : : : :  IHHHHHH WT3YtS!!! GC!122UwwsDT7U7U  & & & P" P" P" P" P" P" P" P"h2UL 2U[ 2U 2U 2U 2Uj 79 4223 8 8 8  !6 2U U U U U, U U Up3 3 38 8 8
    ,
 
 
 
 
 
 
 
& &C%B%D%D "! ! ! !H$X $X $XNM M M7 7 7: : :   . . .
 !$
C % % %     
  
  n n n n nwr2v n n nnj( j( j( j( j(*RV, j( j( j(Z  R5#7 RD R R R RtE tE tE tE tEwr2v tE tE tEr% R % )+% <>I% %  %  %  % nA  A  A  A  A 5# A  A  A H  , , ,    E,   ,A( A( A( A( A(5 A( A( A(J DFFT     r0   