
    rhz                     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 d dl	m
Z
 d dlmZmZmZmZmZmZmZmZ d dlmZmZmZ d dlZd dlmc mZ d dlmZ d dlmZ m!Z! d dl"m#Z#m$Z$ d d	l%m&Z& erd d
l'm(Z(  ede      Z) edd      Z* e+ed      xr	  e+ed      Z,ejZ                  d        Z. G d d      Z/de/de!fdZ0i Z1e2e3df   e4d<   e!jj                  e!jl                  e!jn                  e!jp                  e!jr                  e!jt                  gZ; G d de/e jx                        Z=d Z>d Z?d Z@d ZA G d d      ZB eB       aCdAd ZDd! ZEd" ZFd# ZGd$ ZHd% ZId& ZJ eK       aLeKd'   e4d(<   d) ZMd* ZNd+ ZO G d, d'e/ee*e)f         ZP G d- d.ePe*e)f         ZQd/ ZRd0ej                  d1eTfd2ZU G d3 d4ee*e)f         ZVdeVe*e)f   d5e*j                  d6e*j                  d1e)fd7ZY G d8 d9ej                        Z[d: Z\d; Z] G d< d=ej                        Z^ G d> d?ej                        Z_ e_       Z`e_e4d@<   y)B    N)Iterator)cached_property)AnyCallableClassVarfinalGenericOptionalTYPE_CHECKINGUnion)Concatenate	ParamSpecTypeVar)_utils_internal)_dispatch_is_included_in_aliasDispatchKey)dispatch_functorchTransformType)TorchDispatchMode)BaseFunctionalizeAPI_T)default_P.getdlopenflagssetdlopenflagsc               #      K   t         sd yt        j                         } t        j                  | t        j
                  z         	 d t        j                  |        y# t        j                  |        w xY ww)z
    Context manager to set the RTLD_GLOBAL dynamic linker flag while we open a
    shared library to load custom operators.
    N)_SET_GLOBAL_FLAGSsysr   r   ctypesRTLD_GLOBAL)	old_flagss    ]/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/torch/_ops.pydl_open_guardr#   +   s\      ""$Iy6#5#556&9%9%s   AA=	A# A=#A::A=c                       e Zd ZdZd Zd Zd Zd Zdee	e
   e	ej                     eef   deeeef   geeef   f   fdZd	eed
ef   ef   deed
ef   ef   fdZd Zy)OperatorBasez
    Base class for OpOverload (which represents C++ ATen operators) and HigherOrderOperator
    (which represents Python-only operators that are unrepresentable in TorchScript).
    c                 <    i | _         i | _        i | _        i | _        y N)_dispatch_cache
py_kernelspython_key_tablefunctorch_tableselfs    r"   __init__zOperatorBase.__init__B   s1    $  	 BD  	  "    c                     t         r'   NotImplementedErrorr-   argskwargss      r"   __call__zOperatorBase.__call__n       !!r/   c                     || j                   v S r'   )r)   )r-   ks     r"   has_kernel_for_dispatch_keyz(OperatorBase.has_kernel_for_dispatch_keyq   s    DOO##r/   c                     | j                   D ]5  }t        j                  j                  |      r#|j	                  |      s5 y y)NTF)r)   torch_C_dispatch_is_alias_keyhas)r-   ksr9   s      r"   has_kernel_for_any_dispatch_keyz,OperatorBase.has_kernel_for_any_dispatch_keyt   s9     	A882215"&&)	 r/   r9   returnc                 d     dt         t        t        f   dt         t        t        f   f fd}|S )NfnrB   c                 b   t        j                        ret        t              st        t        j
                        r;j                  vsJ | j                  <   j                  j                          | S t        t              r!j                  vsJ | j                  <   | S t        t              sJ t        j                  k7  sJ d       j                  v rt        d dj!                                | j                  <   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)rD   r9   r-   s    r"   innerz#OperatorBase.py_impl.<locals>.inner   s   q!1/0Jq%,,4O 5 5555+-%%a($$**,	!]+ 4 4444*,$$Q'	a---*** P* DOO#";A3mDIIK=Y  "$DOOA  &&(Ir/   )r   r   r   )r-   r9   rO   s   `` r"   py_implzOperatorBase.py_implz   s/    	hr2v& 	8BF+; 	8 r/   rD   r   c                    ddl mm}mm dt
        j                  dt
        j                  dt        ffd}dt        |   dt
        j                  dt
        j                  dt        ffd}dt
        j                  dt
        j                  dt        ffd	} | j                  t        j                        |        | j                  |      |        | j                  t        j                        |       S )
Nr   )CppFunctionalizeAPIFunctionalTensorModeFunctorchFunctionalizeAPIPythonFunctionalizeAPIr4   r5   rB   c                  &             g| i |S r'    )r4   r5   rR   rD   s     r"   functionalize_dk_fnz?OperatorBase.py_functionalize_impl.<locals>.functionalize_dk_fn   s    )+=d=f==r/   modec                 (      |       g|i |S r'   rW   )rY   r4   r5   rU   rD   s      r"   functionalize_dispatch_mode_fnzJOperatorBase.py_functionalize_impl.<locals>.functionalize_dispatch_mode_fn   s      ,T2DTDVDDr/   c                 (      |       g|i |S r'   rW   )interpreterr4   r5   rT   rD   s      r"   functionalize_functorch_fnzFOperatorBase.py_functionalize_impl.<locals>.functionalize_functorch_fn   s      /<NtNvNNr/   )#torch._subclasses.functional_tensorrR   rS   rT   rU   r   r4   r5   r   r
   rP   r   Functionalizer   )	r-   rD   rS   rX   r[   r^   rR   rT   rU   s	    `    @@@r"   py_functionalize_implz"OperatorBase.py_functionalize_impl   s    	
 	
	>rww 	>")) 	> 	>	E/0	E9;	ELNII	E	E
	O "	O3599	O	O
 	0[../0CD*)*+IJ1]0012LM	r/   c                     t         r'   r1   r,   s    r"   rN   zOperatorBase.name   r7   r/   N)__name__
__module____qualname____doc__r.   r6   r:   rA   r   typer   r<   rI   r   r   r   r   r   rP   r   ra   rN   rW   r/   r"   r%   r%   <   s    
*"X"$%"#
% 
8BF#$hr2v&66	7%d;'=r'ABBFG	+4b892=	>>"r/   r%   opr9   c                    | j                  |      r|S t        j                  }|t        j                  k(  st	        ||      r| j                  |      r|S t        j
                  }|t        j                  k(  st	        ||      r| j                  |      r|S | j                  t        j                  j                  |            xs | j                  t        j
                        }t        j                  }|t        j                  k7  r!t	        ||      r| j                  |      r|s|S t        j                  }|t        j                  k(  st	        ||      r\| j                  |      rK|t        j                  k(  r4| j                  t        j                  j                        rt        d      |s|S t        j                  }t	        ||      r| j                  |      r|S t        j                   }t	        ||      r| j                  |      r|S t        j                  j#                  |      r|S t%        d|  d|       )Nzambiguous autogradother kernelzcould not find kernel for  at dispatch key )r:   r   &CompositeExplicitAutogradNonFunctional	Undefinedis_included_in_aliasCompositeExplicitAutogradrA   r<   r=   *_dispatch_get_backend_keyset_from_autograd%CompositeImplicitAutogradNestedTensorCompositeImplicitAutogradAutogradOther _dispatch_autogradother_backendsrM   AutogradFuncTorchBatchedDecomposition_dispatch_has_backend_fallbackr2   )rh   r9   candhas_backend_kernels       r"   resolve_keyry      s   	%%a(==D	["""&:1d&C

(
(
.00D	["""&:1d&C

(
(
.;;;;A> O		'	'(M(M	N  <<D	
k##	#(<Q(E**40"00D	["""&:1d&C

(
(
.)))b.P.PHH55/
 ?@@#KDAt$)G)G)M44DAt$)G)G)Mxx..q1 
 :2$>OPQsS
TTr/   HigherOrderOperator_higher_order_opsc                       e Zd Zdd fd
Zdeee   eej                     e	e
f   deeeef   geeef   f   f fdZdeeef   deeef   fdZed	        Zedefd
       Zd Zd Zej0                  d        Zd Zd Zd Z xZS )rz   F)	cacheablec                0   t         |           t        |       t        u rt	        d      || _        || _        | t        |<   d| _        d| _	        || _
        t        j                  j                         | _        t        D ]  }| j!                  |        y )NzODirect instantiation of HigherOrderOperator is not allowed. Please subclass it.higher_ordertorch.ops.higher_order)superr.   rg   rz   rM   _namerc   r{   _nsrd   
_cacheabler<   r=   _dispatch_keyset_fullnon_fallthrough_keys2_HIGHER_ORDER_OP_DEFAULT_FALLTHROUGH_DISPATCH_KEYSfallthrough)r-   rN   r}   dispatch_key	__class__s       r"   r.   zHigherOrderOperator.__init__  s    :,,a  
 "&$!2#$)HH$B$B$D!N 	+L\*	+r/   r9   rB   c                     t        |t              r;| j                  j                  |      s | j                  j	                  |      | _        t
        |   |      S r'   )rK   r   r   r?   addr   rP   r-   r9   r   s     r"   rP   zHigherOrderOperator.py_impl3  sJ     a%d.G.G.K.KA.N(,(A(A(E(Ea(HD%wq!!r/   rD   c                      dt         j                  dt         j                  dt        f fd}  j	                  t
        j                        |       S )Nr4   r5   rB   c                     t        j                         r+t        j                  t         j                  d g | |      r0t         j
                  j                         5   | i |cd d d        S ddlm}  |      rK j                  | i |}t        d |j                  D              rt        dj                          d       | i |S # 1 sw Y   jxY w)Nc                     | j                    S r'   )requires_grad)ts    r"   <lambda>zRHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<lambda>G  s    aoo- r/   r   )_has_gen_schemac              3   4   K   | ]  }|j                     y wr'   )is_write.0args     r"   	<genexpr>zSHigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autograd.<locals>.<genexpr>Q  s     @s||@s   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=   _AutoDispatchBelowAutogradtorch._higher_order_ops.utilsr   
gen_schemaany	argumentsrM   rN   )r4   r5   r   schemarD   r-   s       r"   maybe_run_autogradz@HigherOrderOperator.py_autograd_impl.<locals>.maybe_run_autogradD  s    ((*f.B.B-$/
 XX88: 1001 1 Ft$($9&9@v/?/?@@&tyy{m ,_ _  t&v&&1 1s   CC)r   r4   r5   r   rP   r   rt   )r-   rD   r   s   `` r"   py_autograd_implz$HigherOrderOperator.py_autograd_impl@  sF    	'bgg 	' 	'r 	'. 	+[))*+=>	r/   c                     | j                   S r'   )r   r,   s    r"   	namespacezHigherOrderOperator.namespace_      xxr/   c                    ddl m} | j                  xss | j                   d| j                   t
        j                  j                  j                  v xs2 t        | |      xr$ t
        j                  j                  j                  S )Nr   )AutogradFunctionApply.)"torch._functorch.autograd_functionr   r   rd   rc   r<   	_inductorconfig!unsafe_marked_cacheable_functionsrK   
_functorch.autograd_cache_allow_custom_autograd_functions)r-   r   s     r"   r}   zHigherOrderOperator.cacheablec  su    L OO //"!DMM?3%%GGH 4!67 [$$++ZZ	
r/   c                 D    | j                   j                  |      | _         y r'   )r   remove)r-   r   s     r"   r   zHigherOrderOperator.fallthroughq  s    $($=$=$D$D\$R!r/   c                   ddl m} || j                  v r)| j                  |   }t        |t              rJ  ||i |S |t        j
                  k(  rt        | ||      S |t        j                  k(  rg d fd}g ||j                         D ]0  } ||       t        |t        t        f      s"|D ]
  } ||        2 t              }	ddl m}
  |       }|rt        |      | j                  v r5| j                  t        |         } |
       5 } ||g|i |}d d d        nt        d| j                   d| d      t         ur|S |	D ]  }t        |      }|j"                  t$        j&                  j(                  k(  r6|t$        j*                  j,                  j.                  u rMt$        j*                  j,                  j0                  }| j                  |   } ||j2                  g|i |}|c S || j                  v r| j                  |   } ||i |}nt        d| j                   d	| d      |t         us|c S  t5        d
| j                   d| d|	D cg c]  }t        |       c}       t$        j&                  j7                  |      }|t        j8                  k(  rddl m}
 t;               dkD  rt$        j&                  j=                  t        j                        skt?               }|J d       t        |      | j                  v sJ d| d       | j                  t        |         } |
|      5 } ||g|i |cd d d        S tA        | |      }|| jB                  vrt        d| j                   d| d| d      |t        j8                  k7  r| jB                  |   | j                  |<   | jB                  |   }t        |t              rJ  ||i |S # 1 sw Y   xY wc c}w # 1 sw Y   xY w)Nr   _get_current_dispatch_modec                 ^    t         j                  j                  |       j                  d      S )NrL   )r<   r=   _dispatch_keysr?   )tensors    r"   has_python_keyz4HigherOrderOperator.dispatch.<locals>.has_python_key  s"    xx..v6::8DDr/   c                 p    t        | t        j                        r |       rj                  |        y y y r'   )rK   r<   rI   append)r   r   overloaded_args_lists    r"   check_overloadedz6HigherOrderOperator.dispatch.<locals>.check_overloaded  s/    c5<<0^C5H(//4 6I0r/   )_pop_mode_temporarilyz%There was no rule registered for HOP z
 and mode z. We recommend filing an issue.z and subclass zMultiple dispatch failed for zl. There was no registered that did not return NotImplemented. Use HOP.py_impl to register some. Tried mode: z) and subclasses: zIIllegal invocation of dispatch on DispatchKey.PreDispatch without a mode.zCurrent active mode z not registeredz.could not find kernel for HigherOrderOperator rj   z (resolved from ))"torch.utils._python_dispatchr   r(   rK   r   FuncTorchDynamicLayerFrontModer   rL   valueslisttupler   rg   r*   r2   r   NotImplemented__torch_dispatch__r<   r=   _disabled_torch_dispatch_impl_subclassesfake_tensor
FakeTensorFakeTensorMode	fake_mode	TypeError_to_functionality_keyPreDispatch&_len_torch_dispatch_stack_pre_dispatch&_dispatch_tls_is_dispatch_key_excluded'_get_current_dispatch_mode_pre_dispatchry   r)   )r-   r   r4   r5   r   kernelr   r   aoverloaded_argsr   	curr_modehandlerrY   resultsubclass_typefunctionality_key	final_keyr   r   s                     @@r"   dispatchzHigherOrderOperator.dispatchv  sm   K4///)),7F!&+6664*6**;EEE%dD&99;--- $& E5 100 , %cD%=1  ,(+,, $$89O K24I$	?d&;&;;"33DODG.0 @D ")!?!?!?@ @
 .?

|:V_U` a8 9  /!M ' " $S	!44xx==>  !E$5$5$A$A$L$LL$)$5$5$A$A$P$PM"33MBG$S]]DTDVDF!M D$9$99"33MBG %d5f5F-?

|>ZgYh i8 9  /!M="B /

| <(k);%45DG568  "HH::<H 7 77J
 781<hhEE"" DE	 , _, I$*?*?? *9+_E? //Y@*+<= :"49$9&9: :  l3	 DOO+%@ M##,+-=l^1N  ;222151KD  .+ fk222t&v&&@ @d 6,: :s   O1(O>
P1O;Pc                $      fd} |       S )Nc                     t              } t        j                  j                  |       r$t        j                  j                  | gi S t        j                        } j                  |j                         gi S r'   )	_to_flat_tupler<   	overrideshas_torch_functionhandle_torch_function_compute_keysetr   r   highestPriorityTypeId)	flat_argsdispatch_key_setr4   r5   r-   s     r"   wrapperz-HigherOrderOperator.__call__.<locals>.wrapper   s    &tV4I11)<<<)&*.4   /tVT=V=VW 4== 668;?CI r/   rW   )r-   r4   r5   r   s   ``` r"   r6   zHigherOrderOperator.__call__  s    
	 yr/   c                 4    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$    !"4::, // 0
 	
r/   c                 $    | j                          S r'   )rN   r,   s    r"   __str__zHigherOrderOperator.__str__"  s    ))+r/   c                     | j                   S r'   r   r,   s    r"   rN   zHigherOrderOperator.name%      zzr/   )rc   rd   re   r.   r   rg   r   r<   rI   r   r   r   r   r   rP   r   propertyr   r   boolr}   r   r   abcabstractmethodr6   r   r   rN   __classcell__r   s   @r"   rz   rz     s     +0 +8""#
" 
8BF#$hr2v&66	7"RV 
"b&	>   
4 
 
S
F'P 	 6
 r/   c                 ,    t        j                  | i |S r'   )r   arg_tree_leavesr4   r5   s     r"   r   r   )  s    !!42622r/   c                 2    t        | |      }t        ||      S r'   )_get_tensorskey_extractor)r4   r5   r   tensorss       r"   r   r   -  s    4(G"677r/   c                     t        | |      }|D cg c]  }t        |t        j                        s|! }}t	        |      S c c}w r'   )r   rK   r<   rI   r   )r4   r5   flat_allr   tensor_argss        r"   r   r   2  s?    dF+H&F*Q*E1FKF Gs
   AAc                     t         j                  j                         }| D ]$  }|t         j                  j                  |      z  }& |t         j                  j	                         z
  }||z  }|S r'   )r<   r=   _dispatch_tls_local_include_setr   _dispatch_tls_local_exclude_set)r   key_maskkey_setr   s       r"   r   r   :  sb    hh668G <EHH33F;;<@@BBG GNr/   c                   $    e Zd Zd Zd Zd Zd Zy)_ModeStackStateForPreDispatchc                 $    d d g| _         d | _        y r'   )*_ModeStackStateForPreDispatch__infra_modes_schema_check_moder,   s    r"   r.   z&_ModeStackStateForPreDispatch.__init__Q  s    "D\"&r/   c                 V    |t        | j                        k  sJ || j                  |<   y r'   lenr  )r-   indexrY   s      r"   setz!_ModeStackStateForPreDispatch.setU  s+    s4--....$(5!r/   c                 T    |t        | j                        k  sJ | j                  |   S r'   r
  )r-   r  s     r"   getz!_ModeStackStateForPreDispatch.getY  s,    s4--....!!%((r/   c                     t        | j                  D cg c]  }||	 c}      t        | j                  d u      z   S c c}w r'   )r  r  intr  )r-   is     r"   countz#_ModeStackStateForPreDispatch.count]  sB    t11C!Q]ACDs##4/H
 
 	
Cs   ??N)rc   rd   re   r.   r  r  r  rW   r/   r"   r  r  P  s    '))
r/   r  c                 Z    t                L t        j                  j                  j                  t        j                  j                  j
                  fv sJ |r J  fd} |       }t               }|dk(  r.t        j                  j                  t        j                  d       |S )Nc                     t         j                  j                  j                  k(  r-j	                  d      } t               j                  dd        | S t         j                  j                  j                  k(  r-j	                  d      } t               j                  dd        | S t               j                  } d t               _        | S Nr      )	r<   r=   _TorchDispatchModeKeyPROXYr  !mode_stack_state_for_pre_dispatchr  
FUNCTIONALr  )current_modecurrent_mode_stack_pre_dispatchmode_keys    r"   _unset_modez,unset_mode_pre_dispatch.<locals>._unset_modeo  s    uxx55;;;:>>qAL-/33At<77BBB:>>qAL-/33At<<>Q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#  f  s    &G&I#x&&,,&&11,       =LAC
 q 889P9PRWXr/   c                 <   ddl m} ddlm} ddlm} t        | |||f      sJ t               }t        | |      r4t               j                  }|dkD  rt        d      | t               _	        n{t        | |      r8t               j                  d      }|J t               j                  d|        n7t               j                  d      }|J t               j                  d|        |dk(  r/t        j                  j                  t         j"                  d       y y )Nr   )rS   )SchemaCheckMode)ProxyTorchDispatchModezYSchemaCheckMode for pre-dispatch must be used exclusively, found other modes on the stackr  T)r_   rS   #torch._subclasses.schema_check_moder%  "torch.fx.experimental.proxy_tensorr&  rK   r   r  r  AssertionErrorr  r  r<   r=   r   r   r   )rY   rS   r%  r&  previous_mode_stack_lenr  s         r"   _set_mode_pre_dispatchr+    s   HCI "	
   EF$(8:MM"Q& k  BF)+>	D.	/8:>>qA###)+//488:>>qA###)+//48 !#889P9PRVW $r/   c                  v   t               } t               }|dk(  rt        d      | j                  t	        d d      S | j                  d      -t	        t        j                  j                  j                        S | j                  d      -t	        t        j                  j                  j                        S y )Nr   zTrying to pop empty mode stackT)r!  r  )r  r   r)  r  r#  r  r<   r=   r  r  r  )
mode_stackpre_dispatch_lens     r"   _pop_mode_from_pre_dispatchr/    s    24J=?1=>>$$0&t$??~~a$&uxx'E'E'P'PQQ~~a$&uxx'E'E'K'KLL %r/   c                  2    t               j                         S r'   )r  r  rW   r/   r"   r   r     s    ,.4466r/   c                 L   | t         j                  j                  j                  t         j                  j                  j                  fv sJ | t         j                  j                  j                  k(  rt               j                  d      S t               j                  d      S r  )r<   r=   r  r  r  r  r  )r  s    r"   _get_dispatch_mode_pre_dispatchr2    s    &&,,&&11    588117770266q990266q99r/   c                  `   t               j                  t               j                  S t               j                         } | dk(  rt               j                  d      S | dk(  rKt               j                  d      t               j                  d      S t               j                  d      S y )N   r  r   )r  r  r  r  )	stack_lens    r"   r   r     s    (*==I02EEE57==?	>46::1==> 56::1=I 2377: 78<<Q?
 r/   c                      t         S r'   )"_mode_stack_state_for_pre_dispatchrW   r/   r"   r  r    s    --r/   
OpOverload
cached_opsc                 .    t         j                  |        y r'   )r9  r   )op_overloads    r"   add_cached_opr<    s    NN;r/   c                  ,    t         j                          y r'   )r9  rJ   rW   r/   r"   reset_cached_opsr>    s    r/   c                      t         S r'   )r9  rW   r/   r"   get_cached_opsr@    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                  j2                  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                  j2                  def fdZe defd       Z!defdZ"dej,                  dej.                  defdZ#deddfdZ$dede%eeeef   f   fdZ&d  Z'e d!        Z(e d"        Z)e d#        Z* xZ+S )%r8  overloadpacketOpOverloadPacketrh   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                  j                  d      d    d| j                   | _        |j"                  | _        |j"                  |_        | j                  | _        i | _        | j$                  t        j(                  j*                  v | _        d }| j                  j.                  D ]B  }|j0                  ||j0                  j2                  })|j0                  j2                  xs |}D |d uxr | | _        y )N r   r   ::r  )r   r.   _op_op_dk_schema_overloadpacket_tagsoverload_name_overloadnamer<   Tagnondeterministic_seeded_nondeterministic_seededrN   r   splitrc   rd   re   __annotations__library_defs_defined_in_pythonr   
alias_infor   is_view)	r-   rB  rh   rD  r   rE  r   r   r   s	           r"   r.   zOpOverload.__init__  s    	-
--3I9M9M 	 ,1II,M,MQU,UD)\\&&
JJ# 4 444J<<,,2248;<Ad>P>P=QR(33&11 JJ! #'"3"3u}}7J7J"J '' 	=A||#<<00 <<00<H	=  t+<Hr/   c                 V    | j                   j                  j                  dd      d   S )NrH  r  maxsplitr   rK  rN   rS  r,   s    r"   
_namespacezOpOverload._namespace%  '    ||  &&ta&8;;r/   c                 V    | j                   j                  j                  dd      d   S )NrH  r  r[  r]  r,   s    r"   _opnamezOpOverload._opname)  r_  r/   c                     t         j                  j                  | j                  j                  | j                  j
                        S r'   )r<   r=   _dispatch_find_schema_or_throwrK  rN   rN  r,   s    r"   _handlezOpOverload._handle-  s2    xx66LLt||99
 	
r/   c                     | S r'   rW   r-   memos     r"   __deepcopy__zOpOverload.__deepcopy__4      r/   c                 V    d| j                    d| j                   d| j                   dS )Nz<OpOverload(op='r   z', overload='z')>)r^  ra  rO  r,   s    r"   __repr__zOpOverload.__repr__7  s.    !$//!2!DLL>tOaOaNbbeffr/   r4   r5   c                &     | j                   |i |S r'   rI  r3   s      r"   r6   zOpOverload.__call__<  s    txx(((r/   keysetc                B     | j                   j                  |g|i |S r'   )rd  redispatch_boxed)r-   rn  r4   r5   s       r"   
redispatchzOpOverload.redispatchA  s%     -t||,,VEdEfEEr/   c                 ,    t        | j                        S r'   hashrI  r,   s    r"   __hash__zOpOverload.__hash__F      DHH~r/   c                      dj                   g | j                  j                  j                  d      | j                   S )Nz{}.{}.{}rH  )formatrK  rN   rS  rO  r,   s    r"   r   zOpOverload.__str__J  s8     z  T$,,"3"3"9"9$"?TASASTTr/   r9   c                     t         |   |      xs. t        j                  j	                  | j                         |      S r'   )r   r:   r<   r=   %_dispatch_has_kernel_for_dispatch_keyrN   r   s     r"   r:   z&OpOverload.has_kernel_for_dispatch_keyM  s9    w2
 LXX;;DIIKK	Lr/   r@   c                     t         j                  j                  | j                         |      xs t        |   |      S r'   )r<   r=   )_dispatch_has_kernel_for_any_dispatch_keyrN   r   rA   )r-   r@   r   s     r"   rA   z*OpOverload.has_kernel_for_any_dispatch_keyR  s7    xxAAIIK
 9W4R8	9r/   c                     | j                   S r'   )r^  r,   s    r"   r   zOpOverload.namespaceW  s    r/   c                     t         j                  }|| j                  v xs. t        j                  j                  | j                         |      S r'   )r   rq   r)   r<   r=   rz  rN   )r-   dks     r"   _can_decomposezOpOverload._can_decompose[  s?    22T__$ 
(V(VIIK)
 	
r/   c                     t         j                  }|| j                  v r | j                  |   |i |S t        j                  j                  | j                         |      r | j                  |g|i |S t        S r'   )	r   rq   r)   r<   r=   rz  rN   rJ  r   )r-   r4   r5   r  s       r"   	decomposezOpOverload.decomposea  sq    22 
 '4??2&777XX;;DIIKL4;;r3D3F33!!r/   keyc                 <    | j                   j                  |d        y r'   )r(   pop)r-   r  s     r"   _uncache_dispatchzOpOverload._uncache_dispatchv  s      d+r/   c                      j                   vsJ   d        t        j                  k(  rt         t              s( j
                  s j                   <   t                S dt        j                  dt        j                  dt        f fd}| j                   <   t                |S t        j                  j                        }|t        j                  k(  rjt               }|dkD  r[t        j                  j!                  t        j                        s.dt        j                  dt        j                  dt        f fd}|S t#               }t        j                  k7  }t        j$                  k(  rEdd lmc m} |j,                  r0|j/                   |      }|r| j                   <   t                |S  j0                  j3                  ||      }|r| j                   <   t                |S )N r4   r5   rB   c                  0   ddl m} t         |             }|J d       |j                  vrt	        t
              r`t        j                  j                  j                         5 }t        j                  j                  j                  |g| i |cd d d        S  j                  g| i |S t        j                  j                  j                         5 } j                  |   |g| i |cd d d        S # 1 sw Y   TxY w# 1 sw Y   y xY w)Nr   r   zDIllegal invocation of dispatch on DispatchKey.Python without a mode.)r   r   rg   r*   rK   TorchBindOpOverloadr<   utils_python_dispatchr   _libraryhandle_dispatch_moderJ  )r4   r5   r   r   rY   r  r-   s        r"   r   z)OpOverload._get_dispatch.<locals>.handler  s   S !!;!=>	 , Z, D$9$99!$(;<!KK88NNPTX#(>>#7#7#L#L $d$-1$5;$   +t{{3@@@@[[11GGI ST;400;DR4R6RS S S Ss   '.D D D	Dr   c                      t         j                  d        } |       5 }t        j                  j                  j
                  |g| i |cd d d        S # 1 sw Y   y xY w)Nc               3   `   K   t               } 	 |  t        |        y # t        |        w xY wwr'   )r/  r+  )top_modes    r"   (_temporarily_pop_modes_from_pre_dispatchz[OpOverload._get_dispatch.<locals>.handler.<locals>._temporarily_pop_modes_from_pre_dispatch  s)     #>#@="*N28<28<s   . .+.)
contextlibcontextmanagerr<   r  r  r  )r4   r5   r  r   r-   s       r"   r   z)OpOverload._get_dispatch.<locals>.handler  sh    ..= /= BC y$~~33HH%t .2 6<   s   .AA )r(   r   rL   rK   r  r*   r<  r   r4   r5   r   r<   r=   r   r   r   r   ry   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_dispatchz  s   $...?4&#?.+$$$d$78AVAV,/$$S)d#
Srww S")) S S0 )0D  %$N!HH::3? 7 77CEN "GG&&
277 bii B & c*	 k555
 ++++7700$@@yQ07D((-!$'OO	95()D  %$r/   c                     | j                   S r'   r   r,   s    r"   rN   zOpOverload.name  r   r/   c                     | j                   S r'   )rL  r,   s    r"   rB  zOpOverload.overloadpacket  s    ###r/   c                     | j                   S r'   rm  r,   s    r"   rh   zOpOverload.op  r   r/   c                     | j                   S r'   )rM  r,   s    r"   rE  zOpOverload.tags  s    zzr/   r'   ),rc   rd   re   r   r   r   r   r   r<   r=   FunctionSchemar   r   r.   r   strr^  ra  _DispatchOperatorHandlerd  rh  rk  r4   r5   r6   DispatchKeySetrq  ru  r   r   r:   rA   r   r   r  r  r  r   r  rN   rB  rh   rE  r   r   s   @r"   r8  r8    s7   *=**= RV*= KO4b89	*=
 ''*= 3i*= 
*=X <C < < < < < 
99 
 
g
) )BII )" )
F00F9;FLNIIF	F
UL[ LT L
9%((2I2I 9d 9
 3  
 
"rww "")) " "*,[ ,T ,] ]{HRQSVDT7T1U ]~ $ $    r/   c                       e Zd Zdee   fdZej                  d        Zde	j                  de	j                  defdZdee   de	j                  de	j                  defdZy	)
r  rB   c                 ,    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  g}dt         f fd}|D cg c]  } ||      r| c}S c c}w )Nr  c                 .   t         j                  j                  j                         |       r.t         j                  j	                  j                         |       S | j
                  vxs) j
                  |    t         j                  j                  u S r'   )r<   r=   rz  rN   0_dispatch_kernel_for_dispatch_key_is_fallthroughr)   rU  fallthrough_kernel)r  r-   s    r"   (_may_use_fallthrough_instead_of_fallbackzWTorchBindOpOverload._fallthrough_keys.<locals>._may_use_fallthrough_instead_of_fallback  ss    xx==diik3OxxPPIIK 
 4??* L??3'5==+K+KKr/   )r   rt   AutogradCPUAutogradCUDAADInplaceOrViewBackendSelectPythonTLSSnapshotPythonDispatcher)r-   _DEFAULT_FALLTHROUGH_KEYSr  r  s   `   r"   _fallthrough_keysz%TorchBindOpOverload._fallthrough_keys  s       ##$$''%%))((%
!		+ 		 1
7< 
 	
 
s   =Bc              #      K   ddl m}m}m} 	 | |vr || |j                         d  | |v r|| = y y # | |v r|| = w w xY ww)Nr   )_EffectType_register_effectful_opSIDE_EFFECTS)torch._higher_order_ops.effectsr  r  r  ORDERED)r-   r  r  r  s       r"   %_register_as_effectful_op_temporarilyz9TorchBindOpOverload._register_as_effectful_op_temporarily  sZ     	
 	
	'<'&t[-@-@A|# & $t|# & $s   ?2 	?
<?r4   r5   c                    t        ||      r>| j                         5   | j                  | j                         g|i |cd d d        S  | j                  |i |S # 1 sw Y   xY wr'   )_must_dispatch_in_pythonr  _dispatch_in_pythonr  rI  r3   s      r"   r6   zTorchBindOpOverload.__call__   sx    #D&1 ;;= /t//**,/37=  txx(((	 s   $AA&fallthrough_keysc           	         t         j                  j                         }|D ]  }|j                  |      } t	        |||      }|j                         }|| j                  vr| j                  |      n| j                  |   }t        |t              r]t         j                  j                  | j                         |      r | j                  ||gz   g|i |S t        d|  d| d| d      t        |t              sJ  ||i |S )NzTorchbind op z4 received a FakeScriptObject input when dispatching z. but no python implementation is found. Please file an issue on this when you encounter this error. This error can happen when you export or compile the model. It can still happpen even if a C++ implementation for zz.  has been registered. That's because FakeScriptObject purely lives in python and cannot work  with a C++ implementation.)r<   r=   r   r   r   r   r(   r  rK   r   r  rN   r  rM   r   )	r-   r  r4   r5   r   r  r   r   r   s	            r"   r  z'TorchBindOpOverload._dispatch_in_python2  sF     %xx==?# 	DC#7#>#>s#C 	D +49MN'==? 4#7#77 |,%%l3 	 g{+ xxHH		\ 0t//$~5   v%YZaYb cJ KW X.	/  '8,,,'''r/   N)rc   rd   re   r   r   r  r  r  r  r   r4   r5   r   r6   r  rW   r/   r"   r  r    s    
4#4 
< ' '") )BII )" )$'( $[ 1'(:<'''(MOYY'(	'(r/   r  c                 4    t        j                  d | |f      S )Nc                 ^    t        | t        j                  j                  j                        S r'   )rK   r<   r  fake_class_registryFakeScriptObject)objs    r"   r   z*_must_dispatch_in_python.<locals>.<lambda>^  s     J33DD
 r/   )r   tree_anyr   s     r"   r  r  \  s!    ??	
 
v	 r/   r   rB   c                 :    t        d | j                  D              S )Nc              3   d   K   | ](  }t        |j                  t        j                         * y wr'   )rK   rg   r<   	ClassTyper   s     r"   r   z)_has_script_object_arg.<locals>.<genexpr>f  s     Qz#((EOO4Qs   .0)r   r   )r   s    r"   _has_script_object_argr  e  s    Q@P@P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j0                  de	fdZd Zy)rC  	torch.ops__file__qualified_op_nameop_namerh   overload_namesrB   Nc                     || _         || _        || _        || _        g | _        t        d | j                  j                         D              | _        y )Nc              3   2   K   | ]  }t        |        y wr'   )r  )r   r   s     r"   r   z,OpOverloadPacket.__init__.<locals>.<genexpr>|  s      .
/5"6*.
s   )	_qualified_op_namerc   rI  _overload_names_dirr   _schemasr   _has_torchbind_op_overload)r-   r  r  rh   r  s        r"   r.   zOpOverloadPacket.__init__n  sP     #4-!	*- .
9=9M9M9O.
 +
'r/   c                     | S r'   rW   rf  s     r"   rh  zOpOverloadPacket.__deepcopy__  ri  r/   c                 R     dj                   | j                  j                  d       S )Nz<OpOverloadPacket(op='{}.{}')>rH  rx  r  rS  r,   s    r"   rk  zOpOverloadPacket.__repr__  s,    6/66$$**40
 	
r/   c                 ,    t        | j                        S r'   rs  r,   s    r"   ru  zOpOverloadPacket.__hash__  rv  r/   c                 R     dj                   | j                  j                  d       S )Nz{}.{}rH  r  r,   s    r"   r   zOpOverloadPacket.__str__  s$    w~~t66<<TBCCr/   c                     | j                   S r'   rm  r,   s    r"   rh   zOpOverloadPacket.op  r   r/   c                     | j                   D ci c]-  }|t        j                  j                  | j                  |      / c}S c c}w r'   )r  r<   r=   _get_schemar  )r-   rN  s     r"   r  zOpOverloadPacket._schemas  sF     "&!5!5
 588//0G0GWW
 	
 
s   2Ar  c           
         	 |j                  d      rt        | j                  |      S 	 	 |dk(  rdn|}t
        j                  j                  | j                  |      }|t        dt	        |        d	| d      |\  }}}t
        j                  j                  | j                  |      }t        |      st        | ||||      nt        | ||||      }t        | ||       | j                  j                  |       |S # t        $ r3 t        dt	        |        dt	        | j                         d| d      d w xY w# t         $ r t        dt	        |        d	| d      d w xY w)
N__'zH' can't have an overload name beginning with '__' and the underlying op z has no attribute z either.r   rG  zThe underlying op of 'z' has no overload name ')
startswithgetattrrI  AttributeErrorr  r<   r=   _get_operation_overloadr  r  r  r8  r  setattrr  r   rM   )	r-   r  use_key
op_dk_tagsop_op_dk_rE  r   overloads	            r"   __getattr__zOpOverloadPacket.__getattr__  s   	~~d#txx-- $	9,b#G99''J !$,SYK7OPSuTUV  !+CXX))$*A*A7KF .f5 4ffd;(sFFDI  D#x(IIS!OA  	
 !CI; !!$TXX/A#hP 	B  	 (T3KC5PQR	s   &C> CD= ><D:=&E#c                 ,    t        | j                        S r'   iterr  r,   s    r"   __iter__zOpOverloadPacket.__iter__      DIIr/   r4   r5   c                t    | j                   rt        ||      rt        | g|i |S  | j                  |i |S r'   )r  r  !_call_overload_packet_from_pythonrI  r3   s      r"   r6   zOpOverloadPacket.__call__  sB     **/Gf/U4TKDKFKKtxx(((r/   c                 H    | j                   D cg c]  }|r|nd
 c}S c c}w )Nr   )r  )r-   ns     r"   	overloadszOpOverloadPacket.overloads  s#    /3/C/CD!QI%DDDs   r'   )rc   rd   re   r  r   r  rT  r   r   r   r   r.   rh  rk  ru  r   r   rh   r  r8  r  r   r  r4   r5   r6   r  rW   r/   r"   rC  rC  k  s    )Hhsm)

 
 RV	

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

D   
 
/s /z"b&'9 /b(3- 
) )BII )" )Er/   rC  r4   r5   c                    t        j                  j                  | g|i |\  }}|r|S i }d }| j                         D ]?  }t	        | |      }	 t        j                  j
                  |j                  g|i |}	|} n |r ||i |S d|  d}|j                         D ]  \  }}|d| d| dz  } t        |      # t        $ r}
|
||<   Y d }
~
d }
~
ww xY w)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_objectrK  rM   items)rh   r4   r5   torch_function_calledret
exceptionsfound_oprN  r;  _eerr_msgr  msgs                 r"   r  r    s+    "'!R!R
"""3 
 JH 	*b-0	*??##&*.4A #H	* ((( 2"5RS  $$& 5S^C5SE445
w
  	*()J}%	*s   /C  	C	CCc                   R     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  rN   rB   Nc                 F    t         |   d|z          || _        g | _        y )Nz
torch.ops.)r   r.   rN   r  )r-   rN   r   s     r"   r.   z_OpNamespace.__init__2  s#    ,-	!	r/   c                 ,    t        | j                        S r'   r  r,   s    r"   r  z_OpNamespace.__iter__7  r  r/   r  c                    |dv rt        d| d| j                   d      | j                  }| d| }| j                  dz   |z   }	 t        ||      \  }}|t        d| j                   d| d      	 ||_        t        ||||      }| j                  dz   |z   |_        t        | ||       | j                  j                  |       |S # t        $ r"}t        d| j                   d| d      |d }~ww xY w)	N)
__origin____self__zInvalid attribute 'z' for '_OpNamespace' 'r  rH  r   z'_OpNamespace' 'z' object has no attribute ')	r  rN   rd   _get_packetrM   rC  r  r  r   )	r-   r  namespace_namer  module_namerh   r  r  opoverloadpackets	            r"   r  z_OpNamespace.__getattr__:  s>   00 %gY.DTYYKqQ  -.b	:oo+n<	!,->!LBz$&tyyk1LWIUVW   $+wN
 '+oo&;n&L# 	g/0		!!  	 !"499+-H	QRS	s   -C 	C6C11C6)rc   rd   re   rf   r  r  r.   r   r  rC  r  r   r   s   @r"   r  r    sF    ( H"S "T "
(3- " 3 " +; " r/   r  c                     t         j                  j                  |       \  }}|1t         j                  j                  j                  ||        ||_        ||fS r'   )r<   r=   _jit_get_operationjit	_builtins_register_builtinrd   )qualname	op_modulerh   r  s       r"   r  r  _  sN    44X>B	~ 			--b(;!~r/   c                     t        | j                  | j                  j                        \  }}|J || _        || _        y r'   )r  r  rI  rd   r  )packetrh   r  s      r"   _refresh_packetr  i  s<    $V%>%>

@U@UVB>>FJ+Fr/   c                   F     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   c                 2    t         |   d       g | _        y )Nr   )r   r.   r  r-   r   s    r"   r.   z_HigherOrderNamespace.__init__s  s    12!	r/   c                 ,    t        | j                        S r'   r  r,   s    r"   r  z_HigherOrderNamespace.__iter__w  r  r/   rN   c                     t         j                  |d       }|t        d| d      t        | ||       | j                  j                  |       |S )NzJ'_HigherOrderNamespace' 'torch.ops.higher_order' object has no attribute 'r  )r{   r  r  r  r  r   )r-   rN   rh   s      r"   r  z!_HigherOrderNamespace.__getattr__z  sZ    ""4.: \]a\bbcd  	dB			r/   )rB   N)rc   rd   re   r  r.   r   r  r  rz   r  r   r   s   @r"   r  r  p  s1    H"(3- 	 	(; 	r/   r  c                   P     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                 n    t         |   d       t               | _        t	               | _        g | _        y )Nr  )r   r.   r  loaded_librariesr  r   r  r  s    r"   r.   z_Ops.__init__  s,    % #13	r/   rN   rB   c                 l    t        |      }t        | ||       | j                  j                  |       |S r'   )r  r  r  r   )r-   rN   r   s      r"   r  z_Ops.__getattr__  s0     &	dI&		r/   c                 ,    t        | j                        S r'   r  r,   s    r"   r  z_Ops.__iter__  r  r/   c                 .    t        j                  |       y)a{  
        Imports a Python module that has torch.library registrations.

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

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

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

        N)	importlibimport_module)r-   modules     r"   r(  z_Ops.import_module  s    " 	'r/   c                     t        j                         ryt        j                  |      }t	               5  t        j                  |       ddd       | j                  j                  |       y# 1 sw Y   %xY w)a  
        Loads a shared library from the given path into the current process.

        The library being loaded may run global initialization code to register
        custom operators with the PyTorch JIT runtime. This allows dynamically
        loading custom operators. For this, you should compile your operator
        and the static registration code into a shared library object, and then
        call ``torch.ops.load_library('path/to/libcustom.so')`` to load the
        shared object.

        After the library is loaded, it is added to the
        ``torch.ops.loaded_libraries`` attribute, a set that may be inspected
        for the paths of all libraries loaded using this function.

        Args:
            path (str): A path to a shared library to load.
        N)	r<   _running_with_deployr   resolve_library_pathr#   r   CDLLr#  r   )r-   paths     r"   load_libraryz_Ops.load_library  sa    $ %%'33D9_ 	 KK		
 	!!$'	 	s   A//A8)rc   rd   re   r  r.   r  r  r  r   r  r(  r/  r   r   s   @r"   r!  r!    s:    H  (3- (&(r/   r!  ops)F)ar   r  r   r'  rF   r   typescollections.abcr   	functoolsr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   r<   torch.utils._pytreer  _pytreer   r   torch._Cr   rm   r   torch._functorch.pyfunctorchr   r   r   r   r_   r   r   r   hasattrr   r  r#   r%   ry   r{   dictr  rT  r  r  r  r  AutocastCPUAutocastCUDAr   ABCrz   r   r   r   r   r  r7  r#  r+  r/  r   r2  r   r  r  r9  r<  r>  r@  r8  r  r  r  r   r  rC  r4   r5   r  
ModuleTyper  r  r  r  r!  r0  rW   r/   r"   <module>r@     s   
     
  $ %	 	 	 > =  $ $ ! X J : H T3tS! C!12UwsDT7U  & & P" P"h2UL 2U[ 2Uj 79 4223 8   !!6 2U, Up38
,
 
& &C%D "!H$XNM7: .
 !$
C % 

nwr2v nnj(*RV, j(ZR5#7#7 RD RtEwr2v tEr% R % )+% <>II% % nA 5## A H,E,, ,A(5 A(J FT r/   