
    l
qi=                     f   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	 d dl
mZ d dlmZmZmZmZmZmZ d dl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Z.i Z/e0e1df         e2d<   ej3        ej4        ej5        ej6        ej7        ej8        ej9        gZ: G d de-e j;                  Z<d Z=d Z>d Z?d Z@ G d d          ZA eA            aBdBd!ZCd" ZDd# ZEd$ ZFd% ZGd& ZHd' ZI eJ            aKeJd(         e2d)<   d* ZLd+ ZMd, ZN G d- d(e-ee(e'f                   ZO G d. d/eOe(e'f                   ZPd0 ZQd1ejR        d2eSfd3ZT G d4 d5ee(e'f                   ZUdeUe(e'f         d6e(jV        d7e(jW        d2e'fd8ZX G d9 d:ejY                  ZZd; Z[d< Z\ G d= d>ejY                  Z] G d? d@ejY                  Z^ e^            Z_e^e2dA<   dS )C    N)CallableIterator)cached_property)AnyClassVarConcatenatefinalGenericTYPE_CHECKING)	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    j/var/www/html/bestrading.cuttalo.com/services/ml-inference/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
j                 z  ez  ez  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__9   s6      UW BD  	  "    c                     t           r&   NotImplementedErrorr,   argskwargss      r!   __call__zOperatorBase.__call__c       !!r.   c                     || j         v S r&   )r(   )r,   ks     r!   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyf   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,   ksr8   s      r!   has_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_keyi   sI     	 	A822155 "&&)) ttur.   r8   returnc                 |     dt           t          t          f         dt           t          t          f         f fd}|S )NfnrA   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)rC   r8   r,   s    r!   innerz#OperatorBase.py_impl.<locals>.inners   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 &&(((Ir.   )r   r   r   )r,   r8   rN   s   `` r!   py_implzOperatorBase.py_implo   sN    	hr2v& 	8BF+; 	 	 	 	 	 	 	8 r.   rC   r   c                    ddl mm}mm dt
          j        dt
          j        dt          ffd}d|d z  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PythonFunctionalizeAPIr3   r4   rA   c                  ,                  g| R i |S r&    )r3   r4   rQ   rC   s     r!   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s-    2))++=d===f===r.   modec                 .      |           g|R i |S r&   rV   )rX   r3   r4   rT   rC   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Dr.   c                 .      |           g|R i |S r&   rV   )interpreterr3   r4   rS   rC   s      r!   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s1     2//<<NtNNNvNNNr.   )#torch._subclasses.functional_tensorrQ   rR   rS   rT   r   r3   r4   r   rO   r   Functionalizer   )	r,   rC   rR   rW   rZ   r]   rQ   rS   rT   s	    `    @@@r!   py_functionalize_implz"OperatorBase.py_functionalize_impl   s   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	>rw 	>") 	> 	> 	> 	> 	> 	> 	> 	>	E&-	E68g	EIK	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	r.   c                     t           r&   r0   r+   s    r!   rM   zOperatorBase.name   r6   r.   N)__name__
__module____qualname____doc__r-   r5   r9   r@   typer   r;   rH   r   r   r   r   r   rO   r   r`   rM   rV   r.   r!   r$   r$   3   s        
(" (" ("T" " "$ $ $   !"T%,%77-G+U  
8BF#$hr2v&66	7       Z;'=r'ABBFG	+4b892=	>   >" " " " "r.   r$   opr8   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 )r9   r   &CompositeExplicitAutogradNonFunctional	Undefinedis_included_in_aliasCompositeExplicitAutogradr@   r;   r<   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrL   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr1   )rg   r8   candhas_backend_kernels       r!   resolve_keyrx      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                   F    e Zd Zdd fd
Zdee         eej                 z  ez  e	z  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ddZ xZS )ry   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-   rf   ry   rL   _namerb   rz   _nsrc   
_cacheabler;   r<   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r,   rM   r|   dispatch_key	__class__s       r!   r-   zHigherOrderOperator.__init__  s    ::,,,a   
 "&$!2#$)H$B$B$D$D!N 	+ 	+L\****	+ 	+r.   r8   rA   c                     t          |t                    r9| j                            |          s| j                            |          | _        t                                          |          S r&   )rJ   r   r   r>   addr   rO   r,   r8   r   s     r!   rO   zHigherOrderOperator.py_impl$  s`     a%% 	Id.G.K.KA.N.N 	I(,(A(E(Ea(H(HD%wwq!!!r.   rC   c                      dt           j        dt           j        dt          f fd}                      t
          j                  |           S )Nr3   r4   rA   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>3  s    ao- r.   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>=  s$      @@s|@@@@@@r.   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_onlyrH   r<   _AutoDispatchBelowAutogradtorch._higher_order_ops.utilsr   
gen_schemaany	argumentsrL   rM   )r3   r4   r   schemarC   r,   s       r!   maybe_run_autogradz@HigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd0  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   r3   r4   r   rO   r   rs   )r,   rC   r   s   `` r!   py_autograd_implz$HigherOrderOperator.py_autograd_impl,  sg    	'bg 	' 	'r 	' 	' 	' 	' 	' 	' 	'. 	+[)**+=>>>	r.   c                     | j         S r&   )r   r+   s    r!   	namespacezHigherOrderOperator.namespaceK  	    xr.   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   rc   rb   r;   	_inductorconfig!unsafe_marked_cacheable_functionsrJ   
_functorch.autograd_cache_allow_custom_autograd_functions)r,   r   s     r!   r|   zHigherOrderOperator.cacheableO  sr    LLLLLL O /33DM33%GH 4!677 [$+Z	
r.   c                 D    | j                             |          | _         d S r&   )r   remove)r,   r   s     r!   r   zHigherOrderOperator.fallthrough]  s!    $($=$D$D\$R$R!!!r.   c                z   ddl m} || j        v r,| j        |         }t          |t                    rJ  ||i |S |t          j        k    rt          | ||          S |t          j        k    rNg 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   nn|j        r; |
            5 }|                    | g ||          cd d d            S # 1 swxY w Y   n,t!          d| j         d| d| d	| d
| j         d| d          |t$          ur|S |	D ]}t          |          }|j        t&          j        j        u 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 t7          d| j         d| dd |	D              d| j         d| d          t&          j                            |          }|t          j        k    rddl m}
 t=                      dk    rt&          j                            t          j                  stA                      }|
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   tC          | |          }|| 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 )NrK   )r;   r<   _dispatch_keysr>   )tensors    r!   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_keys  s&    x..v66::8DDDr.   c                     t          | t          j                  r" |           r                    |            d S d S d S r&   )rJ   r;   rH   append)r   r   overloaded_args_lists    r!   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloadedv  sV    c5<00 5^^C5H5H 5(//444445 5 5 5r.   )_pop_mode_temporarilyz5There was no rule registered for HigherOrderOperator z
 and mode z.Hint: set zc's supports_higher_order_operators to True. This causes all higher order operators to pass through zk's __torch_dispatch__, so handle them accordingly by adding support for HigerOrderOperators (in this case, z) in zC.__torch_dispatch__ or returning NotImplemented when not supported.z%There was no rule registered for HOP z and subclass z. We recommend filing an issue.zHigherOrderOperator 'z' is not supported for the given input types. This typically happens when using custom tensor types or dispatch modes that don't have implementations for this operation.

Current mode: z
Input types: c                 6    g | ]}t          |          j        S rV   )rf   rb   )r   as     r!   
<listcomp>z0HigherOrderOperator.dispatch.<locals>.<listcomp>  s!     K K Kaa!1 K K Kr.   z$

To fix this, can add support for 'z' in z's __torch_dispatch__
zIIllegal invocation of dispatch on DispatchKey.PreDispatch without a mode.zCurrent active mode z not registeredz.could not find kernel for HigherOrderOperator ri   z (resolved from ))#torch.utils._python_dispatchr   r'   rJ   r   FuncTorchDynamicLayerFrontModer   rK   valueslisttupler   rf   r)   supports_higher_order_operators__torch_dispatch__r1   r   NotImplementedr;   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_dispatchrx   r(   )r,   r   r3   r4   r   kernelr   r   r   overloaded_argsr   	curr_modehandlerrX   resultsubclass_typefunctionality_key	final_keyr   r   s                     @@r!   dispatchzHigherOrderOperator.dispatchb  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 ")!?!?!?!?!?!?@ @ @ @ @ @ @ @ @ @ @ @ @ @ @
 !@ 2244 X#,#?#?b$PV#W#WX X X X X X X X X X X X X X X X X 2MTXT^ M Mjs M M)2M MW`M M W[V`	M M
 !*M M M   //!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 i
 i i "+i i !L K? K K K	i i
 6:Zi i
 GPi i i   "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&&&s6   )EE	EFFFN**N.1N.c                   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)r,   r3   r4   	flat_argsdispatch_key_sets        r!   r5   zHigherOrderOperator.__call__  s    "400	?--i88 	?8i"&  *0   +49RSSt}-CCEEWWWWPVWWWr.   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.)r1   r   r2   s      r!   r   zHigherOrderOperator.gen_schema  s,    !04: 0 0 0
 
 	
r.   c                 ,    |                                   S r&   )rM   r+   s    r!   __str__zHigherOrderOperator.__str__  s    ))++r.   c                     | j         S r&   r   r+   s    r!   rM   zHigherOrderOperator.name  
    zr.   Nc                     | S r&   rV   r,   memos     r!   __deepcopy__z HigherOrderOperator.__deepcopy__      r.   r&   )rb   rc   rd   r-   rf   r   r;   rH   r   r   r   r   r   rO   r   propertyr   r	   boolr|   r   r   abcabstractmethodr5   r   r   rM   r   __classcell__r   s   @r!   ry   ry     s        +0 + + + + + + +8"!"T%,%77-G+U" 
8BF#$hr2v&66	7" " " " " "RV 
"b&	   >   X 
4 
 
 
 U
S S S
Q' Q' Q'f 	X X X,
 
 
              r.   c                 $    t          j        | i |S r&   )r   arg_tree_leavesr3   r4   s     r!   r   r     s    !426222r.   c                 B    t          | |          }t          ||          S r&   )_get_tensorskey_extractor)r3   r4   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 rV   )rJ   r;   rH   )r   r   s     r!   r   z _get_tensors.<locals>.<listcomp>*  s)    FFF*Q*E*EF1FFFr.   )r   r   )r3   r4   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&   )r;   r<   _dispatch_tls_local_include_setr   _dispatch_tls_local_exclude_set)r   key_maskkey_setr   s       r!   r   r   0  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__G  s    "D\"&r.   c                 N    |t          | j                  k     sJ || j        |<   d S r&   lenr  )r,   indexrX   s      r!   setz!_ModeStackStateForPreDispatch.setK  s1    s4-......$(5!!!r.   c                 P    |t          | j                  k     sJ | j        |         S r&   r  )r,   r  s     r!   getz!_ModeStackStateForPreDispatch.getO  s,    s4-......!%((r.   c                 l    t          d | j        D                       t          | j        d u          z   S )Nc                     g | ]}||S r&   rV   )r   is     r!   r   z7_ModeStackStateForPreDispatch.count.<locals>.<listcomp>T  s    CCC!Q]A]]]r.   )r  r  intr  r+   s    r!   countz#_ModeStackStateForPreDispatch.countS  sB    CCt1CCCDDs#4/H
 H
 
 	
r.   N)rb   rc   rd   r-   r  r  r  rV   r.   r!   r  r  F  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        u r9                    d          } t                                          dd            | S t           j        j        j        u 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_modee  s     ux5;;;:>>qAAL-//33At<<<7BBB:>>qAAL-//33At<<<<>>QLEI-//Br.   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*  \  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   )rR   )SchemaCheckMode)ProxyTorchDispatchModezYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr  T)r^   rR   #torch._subclasses.schema_check_moder,  "torch.fx.experimental.proxy_tensorr-  rJ   r   r!  r  AssertionErrorr  r  r;   r<   r'  r   r   )rX   rR   r,  r-  previous_mode_stack_lenr#  s         r!   _set_mode_pre_dispatchr2    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   r0  r  r*  r  r;   r<   r  r"  r   )
mode_stackpre_dispatch_lens     r!   _pop_mode_from_pre_dispatchr6    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  rV   r.   r!   r   r     s    ,..44666r.   c                     | t           j        j        j        u r!t	                                          d          S | t           j        j        j        u sJ t	                                          d          S r  )r;   r<   r  r   r!  r  r"  )r%  s    r!   _get_dispatch_mode_pre_dispatchr9    sb    58177702266q999589DDDDD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_dispatchrV   r.   r!   r!  r!    s    --r.   
OpOverload
cached_opsc                 :    t                               |            d S r&   )r@  r   )op_overloads    r!   add_cached_oprC    s    NN;r.   c                  8    t                                            d S r&   )r@  rI   rV   r.   r!   reset_cached_opsrE    s    r.   c                      t           S r&   )r@  rV   r.   r!   get_cached_opsrG    s    r.   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f         z  fdZ%d  Z&e d!             Z'e d"             Z(e d#             Z) xZ*S )%r?  overloadpacketOpOverloadPacketrg   op_dkr   tagsrA   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_seededrM   r   splitrb   rc   rd   __annotations__library_defs_defined_in_pythonr   
alias_infor   is_view)	r,   rI  rg   rK  r   rL  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r.   c                 P    | j         j                            dd          d         S )NrO  r  maxsplitr   rR  rM   rZ  r+   s    r!   
_namespacezOpOverload._namespace  %    | &&ta&88;;r.   c                 P    | j         j                            dd          d         S )NrO  r  rb  rd  r+   s    r!   _opnamezOpOverload._opname  rf  r.   c                 j    t           j                            | j        j        | j        j                  S r&   )r;   r<   _dispatch_find_schema_or_throwrR  rM   rU  r+   s    r!   _handlezOpOverload._handle#  s+    x66Lt|9
 
 	
r.   c                     | S r&   rV   r   s     r!   r   zOpOverload.__deepcopy__*  r   r.   c                 8    d| j          d| j         d| j         dS )Nz<OpOverload(op='r   z', overload='z')>)re  rh  rV  r+   s    r!   __repr__zOpOverload.__repr__-  s*    f$/ffDLfftOaffffr.   r3   r4   c                     | j         |i |S r&   rP  r2   s      r!   r5   zOpOverload.__call__2  s    tx((((r.   keysetc                .     | j         j        |g|R i |S r&   )rk  redispatch_boxed)r,   rq  r3   r4   s       r!   
redispatchzOpOverload.redispatch7  s)     -t|,VEdEEEfEEEr.   c                 *    t          | j                  S r&   hashrP  r+   s    r!   __hash__zOpOverload.__hash__<      DH~~r.   c                 d     dj         g | j        j                            d          | j        R  S )Nz{}.{}.{}rO  )formatrR  rM   rZ  rV  r+   s    r!   r   zOpOverload.__str__@  s6     z T$,"3"9"9$"?"?TASTTTTr.   r8   c                     t                                          |          p1t          j                            |                                 |          S r&   )r   r9   r;   r<   %_dispatch_has_kernel_for_dispatch_keyrM   r   s     r!   r9   z&OpOverload.has_kernel_for_dispatch_keyC  sF    ww22
 
 LX;;DIIKKKK	Lr.   r?   c                     t           j                            |                                 |          p t	                                          |          S r&   )r;   r<   )_dispatch_has_kernel_for_any_dispatch_keyrM   r   r@   )r,   r?   r   s     r!   r@   z*OpOverload.has_kernel_for_any_dispatch_keyH  sD    xAAIIKK
 
 9WW44R88	9r.   c                     | j         S r&   )re  r+   s    r!   r   zOpOverload.namespaceM  s
    r.   c                     t           j        }|| j        v p1t          j                            |                                 |          S r&   )r   rp   r(   r;   r<   r}  rM   )r,   dks     r!   _can_decomposezOpOverload._can_decomposeQ  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   rp   r(   r;   r<   r}  rM   rQ  r   )r,   r3   r4   r  s       r!   	decomposezOpOverload.decomposeW  s    2  
 '4?2&7777X;;DIIKKLL 	"4;r3D333F333!!r.   keyc                 <    | j                             |d            d S r&   )r'   pop)r,   r  s     r!   _uncache_dispatchzOpOverload._uncache_dispatchl  s!      d+++++r.   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 r3   r4   rA   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   rf   r)   rJ   TorchBindOpOverloadr;   utils_python_dispatchr   _libraryhandle_dispatch_moderQ  )r3   r4   r   r   rX   r  r,   s        r!   r   z)OpOverload._get_dispatch.<locals>.handlerz  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&   )r6  r2  )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  )r3   r4   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   rK   rJ   r  r)   rC  r   r3   r4   r   r;   r<   r   r   r   r   rx   r_   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_dispatchp  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 %$r.   c                     | j         S r&   r   r+   s    r!   rM   zOpOverload.name  r   r.   c                     | j         S r&   )rS  r+   s    r!   rI  zOpOverload.overloadpacket  s    ##r.   c                     | j         S r&   rp  r+   s    r!   rg   zOpOverload.op  r   r.   c                     | j         S r&   )rT  r+   s    r!   rL  zOpOverload.tags  s
    zr.   r&   )+rb   rc   rd   r   r   r   r   r   r;   r<   FunctionSchemar   r   r-   r   strre  rh  _DispatchOperatorHandlerk  r   rn  r3   r4   r5   DispatchKeySetrt  rx  r   r   r9   r@   r   r   r  r  r  r  rM   rI  rg   rL  r   r   s   @r!   r?  r?    s]       *=**= 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 , , , ,] ]xB?O1O ] ] ] ]~   $ $ X$   X   X    r.   c                       e Zd Zdee         f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  rA   c                      t           j        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}  rM   0_dispatch_kernel_for_dispatch_key_is_fallthroughr(   r\  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r.   c                 *    g | ]} |          |S rV   rV   )r   r  r  s     r!   r   z9TorchBindOpOverload._fallthrough_keys.<locals>.<listcomp>  s:     
 
 
77<<

 
 
r.   )	r   rs   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcherr_   )r,   _DEFAULT_FALLTHROUGH_KEYSr  s   ` @r!   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys  s      #$'%)(%	%
!		+ 		 		 		 		 		 		
 
 
 
0
 
 
 	
r.   r3   r4   c                    t          ||          r# | j        |                                 g|R i |S  | j        |i |S r&   )_must_dispatch_in_python_dispatch_in_pythonr  rP  r2   s      r!   r5   zTorchBindOpOverload.__call__  s]    #D&11 	W ,4+D,B,B,D,DVtVVVvVVVtx((((r.   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 happen 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  rJ   r   r  rM   r  rL   r   )	r,   r  r3   r4   r   r  r   r   r   s	            r!   r  z'TorchBindOpOverload._dispatch_in_python  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 / / JV	/ / /   '8,,,,,w''''r.   N)rb   rc   rd   r   r   r  r   r3   r4   r   r5   r  rV   r.   r!   r  r    s        
4#4 
 
 
 
B) )BI )" ) ) ) )'( $[ 1'(:<''(MOY'(	'( '( '( '( '( '(r.   r  c                 2    t          j        d | |f          S )Nc                 J    t          | t          j        j        j                  S r&   )rJ   r;   r  fake_class_registryFakeScriptObject)objs    r!   r   z*_must_dispatch_in_python.<locals>.<lambda>;  s    J3D
 
 r.   )r   tree_anyr   s     r!   r  r  9  s)    ?	
 	
 
v	  r.   r   rA   c                 >    t          d | j        D                       S )Nc              3   T   K   | ]#}t          |j        t          j                  V  $d S r&   )rJ   rf   r;   	ClassTyper   s     r!   r   z)_has_script_object_arg.<locals>.<genexpr>C  s0      QQz#(EO44QQQQQQr.   )r   r   )r   s    r!   _has_script_object_argr  B  s"    QQ@PQQQQQQr.   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 )rJ  	torch.ops__file__qualified_op_nameop_namerg   overload_namesrA   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>Y  s<       .
 .
/5"6**.
 .
 .
 .
 .
 .
r.   )	_qualified_op_namerb   rP  _overload_names_dirr   _schemasr   _has_torchbind_op_overload)r,   r  r  rg   r  s        r!   r-   zOpOverloadPacket.__init__K  sk     #4-!	*- .
 .
9=9M9M9O9O.
 .
 .
 +
 +
'''r.   c                     | S r&   rV   r   s     r!   r   zOpOverloadPacket.__deepcopy__^  r   r.   c                 F     dj         | j                            d           S )Nz<OpOverloadPacket(op='{}.{}')>rO  r{  r  rZ  r+   s    r!   rn  zOpOverloadPacket.__repr__a  s)    6/6$**400
 	
r.   c                 *    t          | j                  S r&   rv  r+   s    r!   rx  zOpOverloadPacket.__hash__f  ry  r.   c                 F     dj         | j                            d           S )Nz{}.{}rO  r  r+   s    r!   r   zOpOverloadPacket.__str__i  s"    w~t6<<TBBCCr.   c                     | j         S r&   rp  r+   s    r!   rg   zOpOverloadPacket.opl  r   r.   c                 *      fd j         D             S )Nc                 \    i | ](}|t           j                            j        |          )S rV   )r;   r<   _get_schemar  )r   rU  r,   s     r!   
<dictcomp>z-OpOverloadPacket._schemas.<locals>.<dictcomp>r  s@     
 
 
 58//0GWW
 
 
r.   r  r+   s   `r!   r  zOpOverloadPacket._schemasp  s1    
 
 
 
!%!5
 
 
 	
r.   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   rN  zThe underlying op of 'z' has no overload name ')
startswithgetattrrP  AttributeErrorr  r;   r<   _get_operation_overloadr  r  r  r?  r  setattrr  r   rL   )	r,   r  use_key
op_dk_tagsop_op_dk_rL  r   overloads	            r!   __getattr__zOpOverloadPacket.__getattr__w  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r.   r3   r4   c                j    | j         r t          ||          rt          | g|R i |S  | j        |i |S r&   )r  r  !_call_overload_packet_from_pythonrP  r2   s      r!   r5   zOpOverloadPacket.__call__  sX     * 	L/Gf/U/U 	L4TKDKKKFKKKtx((((r.   c                 $    d | j         D             S )Nc                     g | ]}|r|nd 	S r   rV   )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&   )rb   rc   rd   r  r   r  r[  r   r   r   r   r-   r   rn  rx  r   r   rg   r  r?  r  r   r  r3   r4   r5   r  rV   r.   r!   rJ  rJ  H  s        )Hhsm)))

 
 RV	

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

  D D D   X 
 
 X
/s /z"b&'9 / / / /b(3-    
) )BI )" ) ) ) )E E E E Er.   rJ  r3   r4   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_objectrR  rL   items)rg   r3   r4   torch_function_calledret
exceptionsfound_oprU  rB  _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  rM   rA   Nc                 l    t                                          d|z              || _        g | _        d S )Nz
torch.ops.)r   r-   rM   r  )r,   rM   r   s     r!   r-   z_OpNamespace.__init__  s2    ,---	!			r.   c                 *    t          | j                  S r&   r  r+   s    r!   r  z_OpNamespace.__iter__  r  r.   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  rO  r   z'_OpNamespace' 'z' object has no attribute ')	r  rM   rc   _get_packetrL   rJ  r  r  r   )	r,   r  namespace_namer  module_namerg   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)rb   rc   rd   re   r  r  r-   r   r  rJ  r  r   r   s   @r!   r  r    s         ( H"S "T " " " " " "
(3-    " 3 " +; "  "  "  "  "  "  "  " r.   r  c                     t           j                            |           \  }}|,t           j        j                            ||            ||_        ||fS r&   )r;   r<   _jit_get_operationjit	_builtins_register_builtinrc   )qualname	op_modulerg   r  s       r!   r  r  =  sP    44X>>B	~ 		--b(;;;!~r.   c                 n    t          | j        | j        j                  \  }}|J || _        || _        d S r&   )r  r  rP  rc   r  )packetrg   r  s      r!   _refresh_packetr  G  s<    $V%>
@UVVB>>>FJ+Fr.   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  rA   Nc                 X    t                                          d           g | _        d S )Nr   )r   r-   r  r,   r   s    r!   r-   z_HigherOrderNamespace.__init__Q  s'    1222!			r.   c                 *    t          | j                  S r&   r  r+   s    r!   r  z_HigherOrderNamespace.__iter__U  r  r.   rM   c                     t                               |          }|t          d| d          t          | ||           | j                            |           |S )NzJ'_HigherOrderNamespace' 'torch.ops.higher_order' object has no attribute 'r  )rz   r  r  r  r  r   )r,   rM   rg   s      r!   r  z!_HigherOrderNamespace.__getattr__X  sj    ""4((: d]addd   	dB		r.   )rA   N)rb   rc   rd   r  r-   r   r  r  ry   r  r   r   s   @r!   r  r  N  s        H" " " " " "(3-    	 	(; 	 	 	 	 	 	 	 	r.   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__g  s@    %%% #133			r.   rM   rA   c                 z    t          |          }t          | ||           | j                            |           |S r&   )r  r  r  r   )r,   rM   r   s      r!   r  z_Ops.__getattr__m  s=     &&	dI&&&	r.   c                 *    t          | j                  S r&   r  r+   s    r!   r  z_Ops.__iter__t  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_modulew  s    " 	'''''r.   c                 &   t          j        |          }t                      5  	 t          j        |           n%# t
          $ r}t          d|           |d}~ww xY w	 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.
        zCould not load this library: N)	r   resolve_library_pathr"   r   CDLL	ExceptionOSErrorr$  r   )r,   pathr  s      r!   load_libraryz_Ops.load_library  s    $ 3D99__ 	M 	MMD!!!! M M MDdDDEE1LM "	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	!!$'''''s1   A,:A,
AAAA,,A03A0)rb   rc   rd   r  r-   r  r  r  r   r  r)  r1  r   r   s   @r!   r"  r"  d  s        H         (3-    ( ( (&( ( ( ( ( ( (r.   r"  ops)F)`r   r  r   r(  rE   r   typescollections.abcr   r   	functoolsr   typingr   r   r   r	   r
   r   typing_extensionsr   r   r;   torch.utils._pytreer  _pytreer   r   torch._Cr   rl   r   torch._functorch.pyfunctorchr   r   r   r   r^   r   r   r   hasattrr   r  r"   r$   rx   rz   dictr  r[  r  r  r  r  AutocastCPUAutocastCUDAAutocastXPUr   ABCry   r   r   r   r   r  r>  r*  r2  r6  r   r9  r   r!  r  r@  rC  rE  rG  r?  r  r  r  r   r  rJ  r3   r4   r  
ModuleTyper  r  r  r  r"  r2  rV   r.   r!   <module>rC     s   




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



  . . . . . . . . % % % % % % L L L L L L L L L L L L L L L L 0 0 0 0 0 0 0 0  $ $ $ $ $ $ $ $ $ ! ! ! ! ! ! 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  & & & I" I" I" I" I" I" I" I"Z2UL 2U[ 2U 2U 2U 2Uj 79 4223 8 8 8  !6 2Z Z Z Z Z, Z Z Zz3 3 38 8 8
    ,
 
 
 
 
 
 
 
& &C%B%D%D "# # # #L$X $X $XNM M M7 7 7: : :   . . .
 !$
C % % %     
  
  n n n n nwr2v n n nnQ( Q( Q( Q( Q(*RV, Q( Q( Q(h  R5#7 RD R R R RuE uE uE uE uEwr2v uE uE uEt% 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     r.   