
    jZ                        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$ 	 d d
lm%Z% n# e&$ r  e'e(          Z%Y nw xY w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             Z0 G d d          Z1de1defdZ2i Z3e4e5df         e6d<   ej7        ej8        ej9        ej:        ej;        ej<        ej=        gZ> G d de1e j?                  Z@d ZAd ZBd ZCd ZD G d d           ZE eE            aFdDd"ZGd# ZHd$ ZId% ZJd& ZKd' ZLd( ZM eN            aOeNd)         e6d*<   d+ ZPd, ZQd- ZR G d. d)e1ee,e+f                   ZS G d/ d0eSe,e+f                   ZTd1eUfd2ZVd1eUfd3ZWd4ejX        d1eUfd5ZY G d6 d7ee,e+f                   ZZdeZe,e+f         d8e,j[        d9e,j\        d1e+fd:Z] G d; d<ej^                  Z_d= Z`d> Za G d? d@ej^                  Zb G dA dBej^                  Zc ec            Zdece6dC<   dS )E    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)NotImplementedType)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    T/lsinfo/ai/hellotax_ai/base_platform/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__?   s6      UW BD  	  "    c                     t           r'   NotImplementedErrorr-   argskwargss      r"   __call__zOperatorBase.__call__i       !!r/   c                     || j         v S r'   )r)   )r-   ks     r"   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyl   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-   ksr9   s      r"   has_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_keyo   sI     	 	A822155 "&&)) ttur/   r9   returnc                 |     dt           t          t          f         dt           t          t          f         f fd}|S )NfnrB   c                    t          j                  rot          t                    st          t          j                  r@j        v rt           d          | j        <   j        	                                 | S t          t                    r'j        v rt           d          | j        <   | S t          t                    st          dt                               t          j        k    rt          d          j        v r't#          d d                                           | j        <   j        	                                 | S )Nz' already registered in python_key_tablez& already registered in functorch_tablezexpected DispatchKey, got z>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*   AssertionErrorr(   clear
isinstancer   r+   r   typePythonr)   RuntimeErrorname)rD   r9   r-   s    r"   innerz#OperatorBase.py_impl.<locals>.innery   s   q!! 1/004>q%,4O4O ---(A)V)V)VWWW+-%a($**,,,	!]++ ,,,(A)U)U)UVVV*,$Q'	a-- M$%K$q''%K%KLLLK&&&$T   DO##"YAYYDIIKKYY   "$DOA &&(((Ir/   )r   r   r   )r-   r9   rQ   s   `` r"   py_implzOperatorBase.py_implu   sO    	hr2v& 	8BF+; 	 	 	 	 	 	 	@ r/   rD   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          t          z  ffd}dt
          j        dt
          j        dt          ffd	} | 
                    t          j                  |            | 
                    |          |            | 
                    t          j                  |           S )
Nr   )CppFunctionalizeAPIFunctionalTensorModeFunctorchFunctionalizeAPIPythonFunctionalizeAPIr4   r5   rB   c                  ,                  g| R i |S r'    )r4   r5   rT   rD   s     r"   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s-    2))++=d===f===r/   modec                     ddl m} ddlm} ddlm}  |||f||f          rt          S   |           g|R i |S )Nr   )has_user_subclass)
FakeTensor)FunctionalTensor)allowed_subclasses)torch._higher_order_ops.utilsr]   torch._subclassesr^   #torch._subclasses.functional_tensorr_   NotImplemented)r[   r4   r5   r]   r^   r_   rW   rD   s         r"   functionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fn   s     HGGGGG444444LLLLLL  v$.0@#A   & &%2,,T22DTDDDVDDDr/   c                 .      |           g|R i |S r'   rY   )interpreterr4   r5   rV   rD   s      r"   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s1     2//<<NtNNNvNNNr/   )rc   rT   rU   rV   rW   r   r4   r5   r   r   rR   r   Functionalizer   )	r-   rD   rU   rZ   re   rh   rT   rV   rW   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'   r1   r,   s    r"   rP   zOperatorBase.name   r7   r/   N)__name__
__module____qualname____doc__r.   r6   r:   rA   rM   r   r<   rI   r   r   r   r   r   rR   r   rj   rP   rY   r/   r"   r%   r%   9   s        
(" (" ("T" " "$ $ $  $!"T%,%77-G+U$ 
8BF#$hr2v&66	7$ $ $ $b&;'=r'ABBFG&	+4b892=	>& & & &P" " " " "r/   r%   opr9   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CompositeExplicitAutogradrA   r<   r=   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrO   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr2   )rp   r9   candhas_backend_kernels       r"   resolve_keyr      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 )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.   rM   r   rO   _namerl   r   _nsrm   
_cacheabler<   r=   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r-   rP   r   dispatch_key	__class__s       r"   r.   zHigherOrderOperator.__init__  s    ::,,,a   
 "&$!2#$)H$B$B$D$D!N 	+ 	+L\****	+ 	+r/   r9   rB   c                     t          |t                    r9| j                            |          s| j                            |          | _        t                                          |          S r'   )rL   r   r   r?   addr   rR   r-   r9   r   s     r"   rR   zHigherOrderOperator.py_impl7  s`     a%% 	Id.G.K.KA.N.N 	I(,(A(E(Ea(H(HD%wwq!!!r/   rD   c                      dt           j        dt           j        dt          f fd}                      t
          j                  |           S )Nr4   r5   rB   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>F  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>P  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_onlyrI   r=   _AutoDispatchBelowAutogradra   r   
gen_schemaany	argumentsrO   rP   )r4   r5   r   schemarD   r-   s       r"   maybe_run_autogradz@HigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autogradC  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   r4   r5   r   rR   r   r|   )r-   rD   r   s   `` r"   py_autograd_implz$HigherOrderOperator.py_autograd_impl?  sg    	'bg 	' 	'r 	' 	' 	' 	' 	' 	' 	'. 	+[)**+=>>>	r/   c                     | j         S r'   )r   r,   s    r"   	namespacezHigherOrderOperator.namespace^  	    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   rm   rl   r<   	_inductorconfig!unsafe_marked_cacheable_functionsrL   
_functorch.autograd_cache_allow_custom_autograd_functions)r-   r   s     r"   r   zHigherOrderOperator.cacheableb  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.fallthroughp  s!    $($=$D$D\$R$R!!!r/   c                   ddl m} || j        v r<| j        |         }t          |t                    rt          d|            ||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 t9          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                  stC                      }|t          d          t          |          | j        vrt          d| d          | j        t          |                   } |
|          5 } ||g|R i |cd d d            S # 1 swxY w Y   tE          | |          }|| j#        vrt#          d| j         d| d| d          |t          j        k    r| j#        |         | j        |<   | j#        |         }t          |t                    rt          d|            ||i |S ) Nr   _get_current_dispatch_modez!unexpected DispatchKey in cache: c                 f    t           j                            |                               d          S )NrN   )r<   r=   _dispatch_keysr?   )tensors    r"   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key  s&    x..v66::8DDDr/   c                     t          | t          j                  r" |           r                    |            d S d S d S r'   )rL   r<   rI   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 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 rY   )rM   rl   )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 rr   z (resolved from )z&unexpected DispatchKey in py_kernels: )$torch.utils._python_dispatchr   r(   rL   r   rJ   FuncTorchDynamicLayerFrontModer   rN   valueslisttupler   rM   r*   supports_higher_order_operators__torch_dispatch__r2   r   rd   r<   r=   _disabled_torch_dispatch_impl_subclassesfake_tensorr^   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_dispatchr   r)   )r-   r   r4   r5   r   kernelr   r   r   overloaded_argsr   	curr_modehandlerr[   resultsubclass_typefunctionality_key	final_keyr   r   s                     @@r"   dispatchzHigherOrderOperator.dispatchu  sT   KKKKKK4///),7F&+.. S$%Q%Q%QRRR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	$(c   	??$*???(IyIII   /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** 	T !R&!R!RSSSvt&v&&&s6   9EEE/FFF+OOO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-   r4   r5   	flat_argsdispatch_key_sets        r"   r6   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.)r2   r   r3   s      r"   r   zHigherOrderOperator.gen_schema#  s,    !04: 0 0 0
 
 	
r/   c                 ,    |                                   S r'   )rP   r,   s    r"   __str__zHigherOrderOperator.__str__+  s    ))++r/   c                     | j         S r'   r   r,   s    r"   rP   zHigherOrderOperator.name.  
    zr/   Nc                     | S r'   rY   r-   memos     r"   __deepcopy__z HigherOrderOperator.__deepcopy__2      r/   r'   )rl   rm   rn   r.   rM   r   r<   rI   r   r   r   r   r   rR   r   propertyr   r	   boolr   r   r   abcabstractmethodr6   r   r   rP   r   __classcell__r   s   @r"   r   r     s        +0 + + + + + + +8"!"T%,%77-G+U" 
8BF#$hr2v&66	7" " " " " "RV 
"b&	   >   X 
4 
 
 
 U
S S S
U' U' U'n 	X X X,
 
 
              r/   c                 $    t          j        | i |S r'   )r   arg_tree_leavesr4   r5   s     r"   r   r   6  s    !426222r/   c                 B    t          | |          }t          ||          S r'   )_get_tensorskey_extractor)r4   r5   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 rY   )rL   r<   rI   )r   r   s     r"   r   z _get_tensors.<locals>.<listcomp>A  s)    FFF*Q*E*EF1FFFr/   )r   r   )r4   r5   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  G  sg    h6688G < <EH33F;;;@@BBBG GNr/   c                   &    e Zd Zd Zd Zd Zd ZdS )_ModeStackStateForPreDispatchc                 &    d d g| _         d | _        d S r'   )*_ModeStackStateForPreDispatch__infra_modes_schema_check_moder,   s    r"   r.   z&_ModeStackStateForPreDispatch.__init__^  s    "D\"&r/   c                     |t          | j                  k    r't          d| dt          | j                             || j        |<   d S Nzindex z& out of bounds for infra_modes length lenr  rJ   )r-   indexr[   s      r"   setz!_ModeStackStateForPreDispatch.setb  s]    C*++++ ___c$J\F]F]__   %)5!!!r/   c                     |t          | j                  k    r't          d| dt          | j                             | j        |         S r  r  )r-   r  s     r"   getz!_ModeStackStateForPreDispatch.geti  sX    C*++++ ___c$J\F]F]__   !%((r/   c                 l    t          d | j        D                       t          | j        d u          z   S )Nc                     g | ]}||S r'   rY   )r   is     r"   r   z7_ModeStackStateForPreDispatch.count.<locals>.<listcomp>q  s    CCC!Q]A]]]r/   )r  r  intr  r,   s    r"   countz#_ModeStackStateForPreDispatch.countp  sB    CCt1CCCDDs#4/H
 H
 
 	
r/   N)rl   rm   rn   r.   r  r  r!  rY   r/   r"   r  r  ]  sP        ' ' ') ) )) ) )
 
 
 
 
r/   r  Fc                 v    t                      t          j        j        j        t          j        j        j        f}  |vrt          d| d            |r t          d           fd} |            }t                      }|dk    r*t          j                            t          j
        d           |S )Nz mode_key must be None or one of z, got z/mode_key must be None when schema_check is Truec                     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_mode  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(  rJ   r   '_dispatch_tls_set_dispatch_key_includedr   r   )r+  schema_check
valid_keysr,  r)  new_pre_dispatch_lenr*  s   `     @r"   unset_mode_pre_dispatchr1  y  s    &G&I&I#&,&1J 
 : :KzKKKK
 
 	
  T !RSSS             ;==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t          dt          |                      t                      }t          | |          r<t                      j        }|dk    rt          d          | t                      _        nt          | |          rXt                                          d          }|t          d|           t                                          d|            nWt                                          d          }|t          d	|           t                                          d|            |dk    r,t          j                            t"          j        d
           d S d S )Nr   )rU   )SchemaCheckMode)ProxyTorchDispatchModezSmode must be FunctionalTensorMode, ProxyTorchDispatchMode, or SchemaCheckMode, got zYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr$  z.FunctionalTensorMode slot already occupied by z0ProxyTorchDispatchMode slot already occupied by T)rc   rU   #torch._subclasses.schema_check_moder3  "torch.fx.experimental.proxy_tensorr4  rL   rJ   rM   r   r'  r  r  r  r<   r=   r-  r   r   )r[   rU   r3  r4  previous_mode_stack_lenr)  s         r"   _set_mode_pre_dispatchr8    s   HHHHHHCCCCCCIIIIII "	
  

 nbfgkblblnn
 
 	
 EFF$(( 98::M"Q&& k   BF)++>>	D.	/	/ 98::>>qAA# OOO   	*++//488888::>>qAA# Q<QQ   	*++//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   rJ   r  r1  r  r<   r=   r%  r(  r&  )
mode_stackpre_dispatch_lens     r"   _pop_mode_from_pre_dispatchr<    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!  rY   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rt          d|            t	                                          d          S )Nr   z*mode_key must be PROXY or FUNCTIONAL, got r$  )r<   r=   r%  r&  r'  r  r(  rJ   )r+  s    r"   _get_dispatch_mode_pre_dispatchr?    s{    58177702266q999589DDD GXGG   1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_dispatchrY   r/   r"   r'  r'    s    --r/   
OpOverload
cached_opsc                 :    t                               |            d S r'   )rF  r   )op_overloads    r"   add_cached_oprI    s    NN;r/   c                  8    t                                            d S r'   )rF  rK   rY   r/   r"   reset_cached_opsrK    s    r/   c                      t           S r'   )rF  rY   r/   r"   get_cached_opsrM    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 )%rE  overloadpacketOpOverloadPacketrp   op_dkr   tagsrB   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_seededrP   r   splitrl   rm   rn   __annotations__library_defs_defined_in_pythonr   
alias_infor   is_view)	r-   rO  rp   rQ  r   rR  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 )NrU  r$  maxsplitr   rX  rP   r`  r,   s    r"   
_namespacezOpOverload._namespaceI  %    | &&ta&88;;r/   c                 P    | j         j                            dd          d         S )NrU  r$  rh  rj  r,   s    r"   _opnamezOpOverload._opnameM  rl  r/   c                 j    t           j                            | j        j        | j        j                  S r'   )r<   r=   _dispatch_find_schema_or_throwrX  rP   r[  r,   s    r"   _handlezOpOverload._handleQ  s+    x66Lt|9
 
 	
r/   c                     | S r'   rY   r   s     r"   r   zOpOverload.__deepcopy__X  r   r/   c                 8    d| j          d| j         d| j         dS )Nz<OpOverload(op='r   z', overload='z')>)rk  rn  r\  r,   s    r"   __repr__zOpOverload.__repr__[  s*    f$/ffDLfftOaffffr/   r4   r5   c                     | j         |i |S r'   rV  r3   s      r"   r6   zOpOverload.__call__`  s    tx((((r/   keysetc                .     | j         j        |g|R i |S r'   )rq  redispatch_boxed)r-   rw  r4   r5   s       r"   
redispatchzOpOverload.redispatche  s)     -t|,VEdEEEfEEEr/   c                 *    t          | j                  S r'   hashrV  r,   s    r"   __hash__zOpOverload.__hash__j      DH~~r/   c                 d     dj         g | j        j                            d          | j        R  S )Nz{}.{}.{}rU  )formatrX  rP   r`  r\  r,   s    r"   r   zOpOverload.__str__n  s6     z T$,"3"9"9$"?"?TASTTTTr/   r9   c                     t                                          |          p1t          j                            |                                 |          S r'   )r   r:   r<   r=   %_dispatch_has_kernel_for_dispatch_keyrP   r   s     r"   r:   z&OpOverload.has_kernel_for_dispatch_keyq  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_keyrP   r   rA   )r-   r@   r   s     r"   rA   z*OpOverload.has_kernel_for_any_dispatch_keyv  sD    xAAIIKK
 
 9WW44R88	9r/   c                     | j         S r'   )rk  r,   s    r"   r   zOpOverload.namespace{  s
    r/   c                     t           j        }|| j        v p1t          j                            |                                 |          S r'   )r   ry   r)   r<   r=   r  rP   )r-   dks     r"   _can_decomposezOpOverload._can_decompose  s?    2T_$ 
(V(VIIKK)
 )
 	
r/   c                     t           j        }|| j        v r | j        |         |i |S t          j                            |                                 |          r | j        |g|R i |S t          S r'   )	r   ry   r)   r<   r=   r  rP   rW  rd   )r-   r4   r5   r  s       r"   	decomposezOpOverload.decompose  s    2  
 '4?2&7777X;;DIIKKLL 	"4;r3D333F333!!r/   keyc                 <    | j                             |d            d S r'   )r(   pop)r-   r  s     r"   _uncache_dispatchzOpOverload._uncache_dispatch  s!      d+++++r/   c                      j         v rt            d 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 z already in dispatch cacher4   r5   rB   c                     ddl m} t           |                      }|t          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   rM   rJ   r*   rL   TorchBindOpOverloadr<   utils_python_dispatchr   _libraryhandle_dispatch_moderW  )r4   r5   r   r   r[   r  r-   s        r"   r   z)OpOverload._get_dispatch.<locals>.handler  s   SSSSSS !!;!;!=!=>>	$(^   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$   1 BB"%B"DD	Dr   c                      t           j        d             } |            5 }t          j        j        j        |g| R i |cd d d            S # 1 swxY w Y   d S )Nc               3   v   K   t                      } 	 | V  t          |            d S # t          |            w xY wr'   )r<  r8  )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  )r4   r5   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(   rJ   r   rN   rL   r  r*   rI  r   r4   r5   r   r<   r=   r   r   r   r   r   ri   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_dispatch  sN   $&&& D!J!J3!J!J!JKKK+$$$d$788 AV ,/$S)d###
Srw S") S S S S S S S S2 )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"   rP   zOpOverload.name  r   r/   c                     | j         S r'   )rY  r,   s    r"   rO  zOpOverload.overloadpacket  s    ##r/   c                     | j         S r'   rv  r,   s    r"   rp   zOpOverload.op  r   r/   c                     | j         S r'   )rZ  r,   s    r"   rR  zOpOverload.tags
  s
    zr/   r'   )+rl   rm   rn   r   r   r   r   r   r<   r=   FunctionSchemar   r   r.   r   strrk  rn  _DispatchOperatorHandlerq  r   rt  r4   r5   r6   DispatchKeySetrz  r~  r   r   r:   rA   r   r   r  r  r  r  rP   rO  rp   rR  r   r   s   @r"   rE  rE    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 _ _ _ _B   $ $ 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  rB   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  rP   0_dispatch_kernel_for_dispatch_key_is_fallthroughr)   rb  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 rY   rY   )r   r  r  s     r"   r   z9TorchBindOpOverload._fallthrough_keys.<locals>.<listcomp>/  s:     
 
 
77<<

 
 
r/   )	r   r|   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcherri   )r-   _DEFAULT_FALLTHROUGH_KEYSr  s   ` @r"   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys  s      #$'%)(%	%
!		+ 		 		 		 		 		 		
 
 
 
0
 
 
 	
r/   r4   r5   c                    t          ||          r# | j        |                                 g|R i |S  | j        |i |S r'   )_must_dispatch_in_python_dispatch_in_pythonr  rV  r3   s      r"   r6   zTorchBindOpOverload.__call__7  s]    #D&11 	W ,4+D,B,B,D,DVtVVVvVVVtx((((r/   fallthrough_keysc           	      t   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t          dt!          |                      ||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.zhandler must be callable, got )r<   r=   r   r   r   r   r(   r  rL   r   r  rP   r  rO   r   rJ   rM   )	r-   r  r4   r5   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,, 	S !Q$w--!Q!QRRRw''''r/   N)rl   rm   rn   r   r   r  r   r4   r5   r   r6   r  rY   r/   r"   r  r    s        
4#4 
 
 
 
B) )BI )" ) ) ) )(( $[ 1((:<'((MOY((	(( (( (( (( (( ((r/   r  rB   c                 <   t          | t          j        j        j                  rdS t          | t
          t          f          rt          d | D                       S t          | t                    r+t          d | 	                                D                       S dS )zCheck if obj is or contains a FakeScriptObject.
    This is load-bearing for TorchBindOpOverloads so we avoid pytree
    since it's much slower.
    Tc              3   4   K   | ]}t          |          V  d S r'   _contains_fake_script_object)r   items     r"   r   z/_contains_fake_script_object.<locals>.<genexpr>r  s+      FF$/55FFFFFFr/   c              3   4   K   | ]}t          |          V  d S r'   r  r   vs     r"   r   z/_contains_fake_script_object.<locals>.<genexpr>t  s+      IIq/22IIIIIIr/   F)
rL   r<   r  fake_class_registryFakeScriptObjectr   r   r   dictr   )objs    r"   r  r  j  s    
 #u~9JKK Jt	C$	'	' JFF#FFFFFF	C		 JIICJJLLIIIIII5r/   c                     t          d | D                       p9t          |          o*t          d |                                D                       S )Nc              3   4   K   | ]}t          |          V  d S r'   r  r   s     r"   r   z+_must_dispatch_in_python.<locals>.<genexpr>y  s+      AAS+C00AAAAAAr/   c              3   4   K   | ]}t          |          V  d S r'   r  r  s     r"   r   z+_must_dispatch_in_python.<locals>.<genexpr>z  s+      VV9!<<VVVVVVr/   )r   r   r   r  s     r"   r  r  x  sS    AADAAAAA VVVVfmmooVVVVVr/   r   c                 >    t          d | j        D                       S )Nc              3   T   K   | ]#}t          |j        t          j                  V  $d S r'   )rL   rM   r<   	ClassTyper   s     r"   r   z)_has_script_object_arg.<locals>.<genexpr>  s0      QQz#(EO44QQQQQQr/   )r   r   )r   s    r"   _has_script_object_argr  ~  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 )rP  	torch.ops__file__qualified_op_nameop_namerp   overload_namesrB   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**.
 .
 .
 .
 .
 .
r/   )	_qualified_op_namerl   rV  _overload_names_dirr   _schemasr   _has_torchbind_op_overload)r-   r  r  rp   r  s        r"   r.   zOpOverloadPacket.__init__  sk     #4-!	*- .
 .
9=9M9M9O9O.
 .
 .
 +
 +
'''r/   c                     | S r'   rY   r   s     r"   r   zOpOverloadPacket.__deepcopy__  r   r/   c                 F     dj         | j                            d           S )Nz<OpOverloadPacket(op='{}.{}')>rU  r  r  r`  r,   s    r"   rt  zOpOverloadPacket.__repr__  s)    6/6$**400
 	
r/   c                 *    t          | j                  S r'   r|  r,   s    r"   r~  zOpOverloadPacket.__hash__  r  r/   c                 F     dj         | j                            d           S )Nz{}.{}rU  r  r,   s    r"   r   zOpOverloadPacket.__str__  s"    w~t6<<TBBCCr/   c                     | j         S r'   rv  r,   s    r"   rp   zOpOverloadPacket.op  r   r/   c                 *      fd j         D             S )Nc                 \    i | ](}|t           j                            j        |          )S rY   )r<   r=   _get_schemar  )r   r[  r-   s     r"   
<dictcomp>z-OpOverloadPacket._schemas.<locals>.<dictcomp>  s@     
 
 
 58//0GWW
 
 
r/   r  r,   s   `r"   r  zOpOverloadPacket._schemas  s1    
 
 
 
!%!5
 
 
 	
r/   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   rT  zThe underlying op of 'z' has no overload name ')
startswithgetattrrV  AttributeErrorr  r<   r=   _get_operation_overloadr  r  r  rE  r  setattrr  r   rO   )	r-   r  use_key
op_dk_tagsop_op_dk_rR  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r/   r4   r5   c                j    | j         r t          ||          rt          | g|R i |S  | j        |i |S r'   )r  r  !_call_overload_packet_from_pythonrV  r3   s      r"   r6   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   rY   )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'   )rl   rm   rn   r  r   r  ra  r   r   r   r   r.   r   rt  r~  r   r   rp   r  rE  r  r   r   r4   r5   r6   r  rY   r/   r"   rP  rP    s        )Hhsm)))

 
 RV	

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

  D D D   X 
 
 X
/s /z"b&'9 / / / /b(3-    
) )BI )" ) ) ) )E E E E Er/   rP  r4   r5   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_objectrX  rO   items)rp   r4   r5   torch_function_calledret
exceptionsfound_opr[  rH  _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  rP   rB   Nc                 l    t                                          d|z              || _        g | _        d S )Nz
torch.ops.)r   r.   rP   r  )r-   rP   r   s     r"   r.   z_OpNamespace.__init__L  s2    ,---	!			r/   c                 *    t          | j                  S r'   r  r,   s    r"   r   z_OpNamespace.__iter__Q  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  rU  r   z'_OpNamespace' 'z' object has no attribute ')	r  rP   rm   _get_packetrO   rP  r  r  r   )	r-   r  namespace_namer  module_namerp   r  r  opoverloadpackets	            r"   r  z_OpNamespace.__getattr__T  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)rl   rm   rn   ro   r  r  r.   r   r   rP  r  r   r   s   @r"   r  r  5  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_builtinrm   )qualname	op_modulerp   r  s       r"   r  r  y  sP    44X>>B	~ 		--b(;;;!~r/   c                     t          | j        | j        j                  \  }}|t	          d| j                   || _        || _        d S )Nzfailed to get packet for )r  r  rV  rm   rJ   r  )packetrp   r  s      r"   _refresh_packetr)    sR    $V%>
@UVVB	zT9RTTUUU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  rB   Nc                 X    t                                          d           g | _        d S )Nr   )r   r.   r  r-   r   s    r"   r.   z_HigherOrderNamespace.__init__  s'    1222!			r/   c                 *    t          | j                  S r'   r  r,   s    r"   r   z_HigherOrderNamespace.__iter__  r  r/   rP   c                     t                               |          }|t          d| d          t          | ||           | j                            |           |S )NzJ'_HigherOrderNamespace' 'torch.ops.higher_order' object has no attribute 'r  )r   r  r  r  r  r   )r-   rP   rp   s      r"   r  z!_HigherOrderNamespace.__getattr__  sj    ""4((: d]addd   	dB		r/   )rB   N)rl   rm   rn   r  r.   r   r  r   r   r  r   r   s   @r"   r+  r+    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__  s@    %%% #133			r/   rP   rB   c                 z    t          |          }t          | ||           | j                            |           |S r'   )r  r  r  r   )r-   rP   r   s      r"   r  z_Ops.__getattr__  s=     &&	dI&&&	r/   c                 *    t          | j                  S r'   r  r,   s    r"   r   z_Ops.__iter__  r  r/   c                 .    t          j        |           dS )a{  
        Imports a Python module that has torch.library registrations.

        Generally, to extend PyTorch with custom operators, a user will
        create a Python module whose import triggers registration of
        the custom operators via a torch.ops.load_library call or a call
        to one or more torch.library.* APIs.

        It is unexpected for Python modules to have side effects, so some
        linters and formatters will complain. Use this API to import Python
        modules that contain these torch.library side effects.

        Args:
            module (str): The name of the Python module to import

        N)	importlibimport_module)r-   modules     r"   r8  z_Ops.import_module  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OSErrorr3  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)rl   rm   rn   r  r.   r  r  r  r   r   r8  r@  r   r   s   @r"   r1  r1    s        H         (3-    ( ( (&( ( ( ( ( ( (r/   r1  ops)F)er   r  r   r7  rF   r   typescollections.abcr   r   	functoolsr   typingr   r   r   r	   r
   r   typing_extensionsr   r   r<   torch.utils._pytreer  _pytreer   r   torch._Cr   ru   r   torch._functorch.pyfunctorchr   r   r   r   r   ImportErrorrM   rd   rc   r   r   r   hasattrr   r  r#   r%   r   r   r  r  ra  r  r  r  r  AutocastCPUAutocastCUDAAutocastXPUr   ABCr   r   r   r  r  r  rD  r1  r8  r<  r   r?  r   r'  r  rF  rI  rK  rM  rE  r  r   r  r  r  r  rP  r4   r5   r  
ModuleTyper  r  r)  r+  r1  rA  rY   r/   r"   <module>rR     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 : : : : : :.((((((( . . .n--.  IHHHHHH WT3YtS!!! GC!122UwwsDT7U7U  & & & V" V" V" V" V" V" V" V"t2UL 2U[ 2U 2U 2U 2Uj 79 4223 8 8 8  !6 2^ ^ ^ ^ ^, ^ ^ ^B	3 3 38 8 8
    ,
 
 
 
 
 
 
 
2 &C%B%D%D "( ( ( (V-X -X -X`M M M7 7 7	: 	: 	:   . . .
 !$
C % % %     
  
  p p p p pwr2v p p prR( R( R( R( R(*RV, R( R( R(j    d    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     s   .A5 5BB