
    Th                       S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
  S SKJs  Jr  S SKJs  Jr  S SKJs  Jr  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJ r   S SK!J"r"J#r#  S S	K$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.  S S
K/J0r0J1r1  \(       a  S SK2J3r3          SS jr4    SS jr5SS jr6SS jr7SS jr8SS jr9SS jr:\" SS9 " S S5      5       r;\" SS9 " S S\;5      5       r<g)    )annotationsN)	dataclass)LiteralTYPE_CHECKING)assert_never)	translate)	BaseCTypeBindingConstRefCTypeCppSignatureCppSignatureGroupDispatcherSignatureExprkernel_signatureMutRefCType
NamedCTypeNativeSignaturetensorT)method_with_native_functionnative_function_manager)
ArgumentBackendIndexDeviceCheckTypeDispatchKey"gets_generated_out_inplace_wrapperis_cuda_dispatch_keyNativeFunctionNativeFunctionsGroup
SchemaKindTensorOptionsArguments)mapMaybeTarget)SelectiveBuilderc                   U(       a  S/nOS/nU R                   [        R                  [        R                  4;   a  UR	                  S5        OU R                   [        R
                  :X  a+  U(       a  UR	                  S5        OUR	                  S5        OU R                   [        R                  :X  a  UR	                  S5        OU R                   [        R                  :X  a  UR	                  S5        OPU R                   [        R                  :X  a  UR	                  S5        O U(       a  U/ S	Q-  nOUR	                  S
5        UR	                  S5        U$ )Nz'#include <ATen/ops/as_strided_native.h>z!#include <ATen/NativeFunctions.h>z#include <ATen/EmptyTensor.h>z!#include <ATen/hip/EmptyTensor.h>z"#include <ATen/cuda/EmptyTensor.h>z!#include <ATen/mps/EmptyTensor.h>z!#include <ATen/xpu/EmptyTensor.h>z)#include <ATen/native/mtia/EmptyTensor.h>)z#include <ATen/ops/empty.h>z##include <ATen/ops/empty_strided.h>z+#include <ATen/ops/_copy_from_and_resize.h>z #include <ATen/ops/_copy_from.h>z#include <ATen/Functions.h>z#include <c10/macros/Macros.h>)	dispatch_keyr   CPUMetaappendCUDAMPSXPUMTIA)backend_indexper_operator_headersrocmheaderss       ]/var/www/fran/franai/venv/lib/python3.13/site-packages/torchgen/dest/register_dispatch_key.pygen_registration_headersr2   /   s   
 <=67!!koo{7G7G%HH67		#	#{'7'7	7NN>?NN?@		#	#{	6:;		#	#{	6:;		#	#{'7'7	7BC	 
 	
 	45NN34N    c                   S nS nU R                   [        R                  [        R                  [        R                  [        R
                  [        R                  [        R                  4;   a0  [        U R                   5      R                  5       nSU 3nSU 3nX4$ U R                   [        R                  [        R                  [        R                  [        R                  4;   a  SnSnX4$ )Nzat::detail::empty_zat::detail::empty_strided_z	at::emptyzat::empty_strided)r%   r   r'   r&   r)   r*   r+   r,   strlower&CompositeExplicitAutogradNonFunctionalQuantizedCPUQuantizedCUDA)r-   
empty_implempty_strided_impldispatchs       r1   gen_empty_impl_namesr=   U   s     J!!&  }11288:)(4
9(D )) 
	#	#::  !!	( 
 !
0))r3   c           	         U R                   [        R                  :X  a  SnOSn[        U 5      u  p#Uc  / $ SU SU SU SU S3	/$ )Nzoptions.device(at::kMeta)optionsz
Tensor create_out(IntArrayRef sizes, IntArrayRef strides, const TensorOptions &options) {
  if (strides.empty()) {
      return z(sizes, z);
  } else {
      return z(sizes, strides, z	);
  }
}
)r%   r   r'   r=   )r-   empty_optionsr:   r;   s       r1   gen_create_out_helperrA   r   sq    !![%5%553!%9-%H"J	 \- 1 !!2=/ B	
 
r3   c                4    [        U 5      u  pUc  / $ SU S3/$ )Nz
std::optional<Tensor> maybe_create_proxy(const Tensor &out, IntArrayRef sizes, IntArrayRef strides, const TensorOptions &options) {
  if (out.strides() != strides) {
    return z8(sizes, strides, options);
  }
  return std::nullopt;
}
)r=   )r-   _r;   s      r1   gen_maybe_create_proxy_helperrD      sB    0?A % 	   	
r3   c                H    U R                   [        R                  :X  a  / $ S/$ )Na  
void resize_out(const Tensor &out, IntArrayRef sizes, IntArrayRef strides, const TensorOptions &options) {
  TORCH_CHECK(options.dtype() == out.dtype(),
      "Expected out tensor to have dtype ", options.dtype(), ", but got ", out.dtype(), " instead");
  TORCH_CHECK(options.device() == out.device(),
      "Expected out tensor to have device ", options.device(), ", but got ", out.device(), " instead");
  const bool resized = at::native::resize_output(out, sizes);
  // Only restride if a resize occurred; otherwise we ignore the (advisory)
  // strides from the meta function and directly use the output tensor's
  // preexisting strides
  if (resized) {
    if (!strides.empty()) {
      TORCH_INTERNAL_ASSERT(!options.memory_format_opt().has_value());
      // TODO: avoid the redispatch here
      out.as_strided_(sizes, strides);
    } else if (options.memory_format_opt().has_value()) {
      out.unsafeGetTensorImpl()->empty_tensor_restride(*options.memory_format_opt());
    }
  }
}
)r%   r   r7   r-   s    r1   gen_resize_out_helperrG      s,    !![%W%WW 		 r3   c                    S/$ )Na  
void check_inplace(const Tensor &self, IntArrayRef sizes, const TensorOptions &options) {
  // These checks are needed on those operators that:
  //   1) don't use 'TensorIterator' (e.g. 'addmm' and 'baddbmm')
  //   2) have particular typing rules (e.g. 'cumsum' and 'cumprod')
  // For other operators (e.g. 'add'), 'TensorIterator' already checks
  // these things separately.
  TORCH_CHECK(options.dtype() == self.dtype(),
      "Bad in-place call: ",
      "input tensor dtype ", self.dtype(), " and output tensor dtype ", options.dtype(), " should match");
  TORCH_CHECK(options.device() == self.device(),
      "Bad in-place call: ",
      "input tensor device ", self.device(), " and output tensor device ", options.device(), " should match");
  TORCH_CHECK(sizes == self.sizes(),
      "Bad in-place call: ",
      "input tensor size ", self.sizes(), " and output tensor size ", sizes, " should match");
}
 rF   s    r1   gen_check_inplace_helperrJ      s    	 r3   c                d    S/[        U 5      Q[        U 5      Q[        U 5      Q[        U 5      QSP$ )Nz?C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED("-Wunused-function")zC10_DIAGNOSTIC_POP())rA   rG   rJ   rD   rF   s    r1   gen_registration_helpersrL      sS    I	}	- 
}	- 
"-	0	
 
'}	5 	 r3   T)frozenc                      \ rS rSr% S\S'   S\S'   S\S'   S\S	'   S\S
'   S\S'   S\S'   \        SS j5       r\SS j5       r    SS jr	      SS jr
SS jr S     SS jjrSrg)RegisterDispatchKey   r   r-   zvLiteral[Target.ANONYMOUS_DEFINITION, Target.NAMESPACED_DEFINITION, Target.NAMESPACED_DECLARATION, Target.REGISTRATION]targetr#   selectorboolr/   symint
str | Noneclass_method_nameskip_dispatcher_op_registrationc           	         U [         R                  :X  a  gSnUS-  nU HG  nUR                  R                  5       (       d  M$  USUR                   SU SUR                   S3-  nMI     U$ )N  // No device check
z4std::optional<Device> common_device = std::nullopt;
z9(void)common_device; // Suppress unused variable warning
z<
  c10::impl::check_and_update_common_device(common_device, z, "z", "z");)r   NoChecktypeis_tensor_likename)r[   argsmethod_namedevice_checkargs        r1   gen_device_check$RegisterDispatchKey.gen_device_check  s     ?***+NTTCxx&&(( %<<?HH:SUYZ]ZbZbYccf!j j 
 r3   c                <  ^ ^ [        U[        5      (       aL  UmTR                  (       a  T R                  T5      $ [	        [        UU 4S jTR                  5       5      5      $ [        U[        5      (       a  T R                  U5      nUc  / $ U/$ [        U5        g )Nc                (   > TR                  U T5      $ Ngen_unstructuredfgselfs    r1   <lambda>.RegisterDispatchKey.__call__.<locals>.<lambda>*  s    t'<'<Q'Br3   )

isinstancer   
structuredgen_structuredlistr!   	functionsr   rh   r   )rl   rj   rrk   s   `  @r1   __call__RegisterDispatchKey.__call__   s    a-..&'A ||**1--BAKKMR  >**%%a(A2++Or3   c                    [         R                  " UR                  SU R                  R                   SUR                  R
                  R                   S3U R                  S9$ )Nwrapper_rC   prefixrT   )r   from_schemafuncr-   r%   r]   overload_namerT   )rl   rj   s     r1   wrapper_kernel_sig&RegisterDispatchKey.wrapper_kernel_sig2  sT     #..FFd00==>a@Y@Y?ZZ[\;;
 	
r3   c                  ^^ Uc  g UR                   R                  5       nU[        R                  L a  SmO!U[        R                  L a  SmO[        S5      eU R                  U5      nUR                  5       nU S3m[        R                  " U5      n[        U5      S:  aY  SR                  UU4S j[        U5       5       5      nUR                  5       R                  5        SS	R                  U5       S
3nO[        U5      S:X  a  US   n	T ST S	U	 S3nU	nO[        UR                   R                  R                  5      S:X  d   eSnUR                   R                  R                  S   n
U
R                   R#                  5       (       a  ST ST ST SU
R                   S3	nOT ST S	U
R                   S3nU R                  UR$                  5      nUR                  5       nUR'                  US9 ST SUR                  5        SS	R                  S [)        UR                  5       UR                  5       5       5       5       SU SU S3$ )Nzat::_copy_fromzat::_copy_from_and_resizez1gen_out_inplace_wrapper called on a functional op_tmp   z
  c           	   3  D   >#    U  H  u  pT S U ST SU S3v   M     g7f)z
(std::get<z>(z), );NrI   ).0iret_namecopy_opfunc_ress      r1   	<genexpr>>RegisterDispatchKey.gen_out_inplace_wrapper.<locals>.<genexpr>O  s3      "#:KA ):aS8*CzD#:s    (, )r   r    z    for (int64_t i = 0; i < z.size(); ++i) {
        z[i], z[i]);
    }r]   z
 {
  auto z = c              3  8   #    U  H  oR                   v   M     g 7frf   exprr   es     r1   r   r   i  s     6~G}!vvG}   z);
  

  return ;
}
)r|   kindr   inplaceoutAssertionErrorr~   r]   cppreturn_nameslenjoin	enumeratereturns_typecpp_type	argumentsr[   is_list_like
functionaldefnr   )rl   rj   rk   ksigr]   r   updatesreturnsr   out_argfunctional_sigwrapper_namer   r   s                @@r1   gen_out_inplace_wrapper+RegisterDispatchKey.gen_out_inplace_wrapper<  sX    9FFKKM
"""&G*.. 1G !TUU%%a(xxzV4=''*|q kk "#,\#:" G ))+4467q<9P8QQRSG!##AH 	8*Bxj;GGqvv''++,111Gff&&**1-G||((**%J '			8*E',, 0

 %IQxj7<<.C00>xxz |  z^((*+1TYY6~yQTQ^Q^Q`bpbzbzb|G}6~-~, @
) 

 	 	r3   c           
     &  ^ ^ T R                   R                  T5      nT R                   R                  [        R                  :X  a2  T R                   R                  TR                  5      (       a   S5       eOT R                   R                  [        R                  :X  a2  T R                   R                  TR                  5      (       a   S5       eO<Ub  UR                  (       d(  [        [        UU 4S jTR                  5       5      5      $ [        T R                   T R                  T R                  T R                  T R                   T R"                  T R$                  T5      n[        [        UR&                  TR                  5       5      5      $ )NzqDo not explicitly specify Meta dispatch key on structured functions, they will be automatically generated for youzDo not explicitly specify CompositeExplicitAutograd dispatch key on structured functions, they will be automatically generated for youc                (   > TR                  U T5      $ rf   rg   ri   s    r1   rm   4RegisterDispatchKey.gen_structured.<locals>.<lambda>  s    4+@+@A+Fr3   )r-   
get_kernelr%   r   r'   
has_kernelr   r7   rp   rr   r!   rs   StructuredRegisterDispatchKeyrQ   rR   r/   rT   rV   rW   gen_one)rl   rk   metadatastructured_gens   ``  r1   rq   "RegisterDispatchKey.gen_structuredo  sD   %%003**k.>.>>))44QUU;; J;;
 ++AAB ))44QUU;; J;; X%8%8!FVWW6KKMMIIKK""00	
 H^33Q[[]CDDr3   Nc                  ^ [        U5         SnSnU R                  R                  U5      (       d  U R                  R                  [        R
                  :X  ab  UR                  R                  5       [        R                  L a7  UR                  (       d&  [        UR                  R                  5      S:X  a  SnOFU R                  R                  (       d!  Ub  [        XU R                  5      (       a  SnO
 S S S 5        g UR                  (       a
   S S S 5        g U R                   ["        R$                  L a*  U R&                  R)                  U5      (       d
   S S S 5        g U R+                  U5      mTR-                  5       nTR/                  5       R1                  5       nTR3                  5       nSR5                  S U 5       5      n[6        R8                  " USSS9n	U R                   ["        R:                  L aD  Sn
U	R=                  U R>                  S9 H  nU
S	URA                  5        S
3-  n
M     U
sS S S 5        $ U R                   ["        RB                  L a?  S'U4S jjnSn
U	R=                  U R>                  S9 H  nX" U5      -  n
M     U
sS S S 5        $ U R                   ["        RD                  L Gaq  U(       ar  UR                  R2                  RF                  c   eUR                  R2                  RF                  RH                  R,                  nSU SU SU SU SU S3sS S S 5        $ U(       a  U RK                  X5      sS S S 5        $ U R                  RM                  U5      nUc
   S S S 5        g U RN                  c  URP                   SURR                   3nO(URP                   SU RN                   SURR                   3n[U        XR                  5      nSR5                  S [W        TR3                  5       UR3                  5       SS9 5       5      nSnU R                  RX                  (       a}  [Z        R\                  " UR                  R2                  R^                  UR                  R2                  R`                  5      n[b        Re                  URf                  [i        U5      U5      nSnURX                  (       Ga=  U R                  RX                  (       Ga!  [k        S UR                  R2                  Rl                   5       5      nU(       a,  Sn[o        U R                  R                  5      (       a  SU 3nOUR                  R2                  RF                  b+  UR                  R2                  RF                  RH                  /O/ n[Z        R\                  " UUR                  R2                  R^                  UR                  R2                  R`                  5      n[q        S U 5       S 5      nUb  SU S3nSU SU SU SU SU S U SU S!3sS S S 5        $ U R                   ["        R$                  L aX  UR                  (       d  U Rr                  (       a
   S S S 5        g S"U S#3nS$UR                  R,                   S%U S&3sS S S 5        $ [u        U R                   5         S S S 5        g ! , (       d  f       g = f)(NFr   Tr   c              3  @   #    U  H  oR                  5       v   M     g 7frf   )r   r   as     r1   r   7RegisterDispatchKey.gen_unstructured.<locals>.<genexpr>  s      84a4s   methodfallback_bindingr   rT   
TORCH_API ;
c                   > SU R                  5        STR                  5        SSR                  S [        U R	                  5       TR	                  5       5       5       5       S3$ )N

 {
return r   r   c              3  8   #    U  H  oR                   v   M     g 7frf   r   r   s     r1   r   NRegisterDispatchKey.gen_unstructured.<locals>.generate_defn.<locals>.<genexpr>       _/^!vv/^r   );
}
r   r]   r   r   r   cpp_sigr   s    r1   generate_defn;RegisterDispatchKey.gen_unstructured.<locals>.generate_defn  s`       
|1TYY_y9J9J9Lcmmo/^__` a r3   r    r   z") {
  TORCH_CHECK_NOT_IMPLEMENTED(z[.is_meta(),
    "Cannot inplace into non-meta tensor with meta tensor argument");
  return r   z::c              3  :   #    U  H  nUR                   v   M     g 7frf   r   r   s     r1   r   r     s      + FF   r   rY   z// DeviceGuard omittedc              3  B   #    U  H  n[        U[        5      v   M     g 7frf   )ro   r    r   s     r1   r   r     s"      -!9A #1&<==!9s   z=
  const DeviceGuard device_guard(device_or_default(device));z7globalContext().lazyInitDevice(c10::DeviceType::CUDA);
c              3  ~   #    U  H3  nUR                   R                  5       (       d  M$  UR                   v   M5     g 7frf   )r[   r\   r]   r   s     r1   r   r     s1      )7A#$66#8#8#: !,166()7s   #==z1const OptionalDeviceGuard device_guard(device_of());znamespace {

z) {
  z

  r   z);
}

} // anonymous namespace
z	TORCH_FN(r   m.impl("z",
z);
r   r   returnr5   );r   r-   r   r%   r   r'   r|   r   r   r   has_composite_kernelr   r   use_out_as_primaryr   manual_kernel_registrationrQ   r"   REGISTRATIONrR   is_native_function_selectedr~   r]   r   r   r   r   r   from_native_functionNAMESPACED_DECLARATION
signaturesrT   declNAMESPACED_DEFINITIONANONYMOUS_DEFINITIONself_argargumentr   r   rV   cpp_namespacekernelr   r   device_guard	itertoolschainr   flat_positionalrO   rb   r`   rr   anynon_outr   nextrW   r   )rl   rj   rk   inplace_metagets_out_inplace_wrapperr]   r   r^   args_strcpp_sig_groupresultr   r   self_arg_namer   	impl_name
kernel_sigargs_exprs_strr`   device_check_argsr   has_tensor_optionsr   candidate_args	device_ofpayloadr   s                             @r1   rh   $RegisterDispatchKey.gen_unstructured  s    %Q' L',$%%0033&&33{7G7GG););; .. '1,#'L**==:1ASASTT 04,/ ('0 ++3 ('8 v222AA!DD? ('B ))!,C88:D++-668L==?Dyy 84 88H .BB%%M
 {{f;;;,77t{{7KG
7<<>*:#>>F  Le ('f  < << ,77t{{7KGmG44F  L ('B  ; ;;66++44@@@$%FF$4$4$=$=$F$F$K$KM avQxj !,o .

 	O ('` ,77=c ('f  --88;#k ('l ))1#+#9#9":"X__<M NI#+#9#9":"T=S=S<TTVW_WfWfVg hI-a1C1CD
!% +&)=)=)?+ "  8%%22(1((,,aff.>.>.N.N)% $7#G#G->(?$L  8>>>d&8&8&E&E&E), -!"!1!1!9!9- *& *(@ 00B0B0O0OPP-efres+tL  !vv//88D VV--66??@!# !
 *3$FF,,00FF,,<<* %))7
 !%	 %0-^_h^iil+mL avQxj !. . 

An% &q ('J  3 33//43W3WO ('R !*$q1G%affkk]$witDU ('X T[[)Y (''sS   C,[[>[$C[A[B[5[[>J%[-A [6"["[
[rI   )r[   r   r^   zlist[Argument]r_   r5   r   r5   )rj   z%NativeFunctionsGroup | NativeFunctionr   	list[str])rj   r   r   z%NativeSignature | DispatcherSignature)rj   r   rk   zNativeFunctionsGroup | Noner   rU   )rk   r   r   r  rf   )__name__
__module____qualname____firstlineno____annotations__staticmethodrb   r   ru   r~   r   rq   rh   __static_attributes__rI   r3   r1   rO   rO      s       J
 L "! &*)%3BE	  ! !"

	.
11$?1	1fE< CGo*o*$?o*	o* o*r3   rO   c                      \ rS rSr% S\S'           SS jrSS jrSS jr            SS jr\	SS j5       r
S	rg
)r   iE  r   rk   c                `   ^ ^^ U(       a  U S3mOSmS
UU U4S jjnSU" SSS9 SU" SS	S9 S3$ )NzE::set_output_raw_strided(output_idx, sizes, strides, options, names);r   c           	        > SU  S[         R                  " TR                  TU5      S5       S[         R                  " TS5       S3$ )Nz
void set_output_z|(
    int64_t output_idx, IntArrayRef sizes, IntArrayRef strides,
    TensorOptions options, DimnameList names
) override {
    z
    if (!names.empty()) {
      namedinference::propagate_names(outputs_[output_idx], names);
    }
    // super must happen after, so that downstream can use maybe_get_output
    // to retrieve the output

}
)textwrapindentgen_class_set_output_body)r]   maybe_create_proxyr   rl   set_output_supers     r1   gen_set_output_function]StructuredRegisterDispatchKey.gen_class_set_output_functions.<locals>.gen_set_output_functionQ  s\      
//3EFO P Q 
!6* + , r3   r   stridedT)r  raw_stridedF)r]   r5   r  rS   r   r5   rI   )rl   r   parent_classgenerate_superr  r  s   ``   @r1   gen_class_set_output_functions<StructuredRegisterDispatchKey.gen_class_set_output_functionsI  sZ     "./tu!	 	 t< = >5A B C 	r3   c                   U R                   R                  [        R                  [        R                  [        R
                  [        R                  4;   a  SnUS-   nOS=pCU(       a  SnOSnU[        R                  L a  U R                   R                  [        R                  [        R                  [        R                  [        R                  [        R
                  [        R                  [        R                  4;   d   eU S3$ U[        R                  L a  U SU 3$ U[        R                  L a  U SU 3$ U[        R                  L d  U[        R                  L a  [!        U S35      e[#        U5        g )	Na  
auto current_device = guard_.current_device();
if (C10_UNLIKELY(current_device.has_value())) {
  TORCH_INTERNAL_ASSERT(*current_device == options.device(),
    "structured kernels don't support multi-device outputs");
} else {
  guard_.reset_device(options.device());
}
r   r   z
auto maybe_proxy = maybe_create_proxy(out, sizes, strides, options);
if (C10_UNLIKELY(maybe_proxy.has_value())) {
    proxy_outputs_[output_idx] = std::move(maybe_proxy).value();
}
z<
outputs_[output_idx] = create_out(sizes, strides, options);zS
const auto& out = outputs_[output_idx].get();
check_inplace(out, sizes, options);
zY
const auto& out = outputs_[output_idx].get();
resize_out(out, sizes, strides, options);
1 structured operators are currently not supported)r-   r%   r   r)   r*   r+   r7   r   r   r'   r&   r,   r   r   mutablescratchr   r   )rl   r   r  maybe_set_guardmaybe_set_guard_linecreate_proxys         r1   r  7StructuredRegisterDispatchKey.gen_class_set_output_bodyf  s|   **OOOO>>	/
 
O $3T#9 577 L L
%%%%%22      BB7    -- .< ? ?*$$$,- .   *.. ,- .   *$$$Z-?-?(? #FG  Or3   c                   U[         R                  L a  gU[         R                  L a  U S3$ U[         R                  L aM  SR	                  S [        U5       5       5      nSR	                  S [        U5       5       5      nU SU SU S3$ U[         R                  L d  U[         R                  L a  [        U S	35      e[        U5        g )
Nr   z,(Tensor& self) : outputs_{std::ref(self)} {}r   c              3  ,   #    U  H
  nS U 3v   M     g7f)zTensor& outNrI   r   r   s     r1   r   ?StructuredRegisterDispatchKey.gen_class_ctor.<locals>.<genexpr>  s      KNq;qc!2Ns   c              3  .   #    U  H  nS U S3v   M     g7f)zstd::ref(outr   NrI   r%  s     r1   r   r&    s      Mn<s!!4n   r   z) : outputs_{ z } {}r  )
r   r   r   r   r   ranger  r  r   r   )rl   r   
class_namer   out_argsout_refss         r1   gen_class_ctor,StructuredRegisterDispatchKey.gen_class_ctor  s    
%%%*$$$ \!QRR*.. yy KE'N KKHyy MeGn MMH \8*OH:XNN*$$$Z-?-?(? #FG  Or3   c                  U[         R                  L a  SnSnSnOU[         R                  L a(  SnSnS[        UR                  R
                  5       S3nOIU[         R                  L a(  SnSnS[        UR                  R
                  5       S3nO[        SU 35      eU R                  R                  [        R                  :X  a  U R                  (       a  S	n	OS
n	OU R                  R                  [        R                  :X  a  Sn	OU R                  R                  [        R                  :X  a  Sn	OXU R                  R                  [        R                  :X  a  Sn	O-U R                  R                  [        R                   :X  a  Sn	OSn	Sn
U R#                  X#[        UR                  R
                  5      5      nSU SU S3[$        R&                  " X5       [$        R&                  " U R)                  X$U5      U
5       SSU S3SSU S[        UR                  R
                  5       S3[$        R&                  " X5       [$        R&                  " X5       S4
nSR+                  S U 5       5      $ )NTensorzoutputs_[output_idx]r   zstd::reference_wrapper<Tensor>zaproxy_outputs_[output_idx].has_value() ? *proxy_outputs_[output_idx] : outputs_[output_idx].get()z$std::array<::std::optional<Tensor>, z> proxy_outputs_;zUnsupported SchemaKind z4c10::hip::OptionalHIPGuardMasqueradingAsCUDA guard_;z$c10::cuda::OptionalCUDAGuard guard_;z c10::OptionalDeviceGuard guard_;r  zstruct z final : public z {zA    const Tensor& maybe_get_output(int64_t output_idx) override {z      return r   z    }z    std::array<r   z> outputs_;z};r   c              3  6   #    U  H  o(       d  M  Uv   M     g 7frf   rI   )r   lines     r1   r   :StructuredRegisterDispatchKey.gen_class.<locals>.<genexpr>  s     8%$4%s   
	)r   r   r   r   r|   r   r   RuntimeErrorr-   r%   r   r)   r/   r7   r*   r+   r,   r-  r  r  r  r   )rl   rj   r   r*  r  r  output_typeoutput_valueproxy_fieldguard_fieldr  class_ctor_strliness                r1   	gen_class'StructuredRegisterDispatchKey.gen_class  s!    
%%%"K1LK*$$$:K~L@QVV^^AT@UUfgK*.. :K~L@QVV^^AT@UUfgK!8<==**k.>.>>yyTD++AAB =K,,?<K,,?<K,,0@0@@<KK,,QC<OPj\!1,sC~67tBB1TbceklmOL>-k]"S-@,AM{34{34
 yy8%888r3   c                  ^ UR                   (       a   eU R                  [        R                  L a!  U R                  R                  U5      (       d  g U R                  R                  [        R                  :X  a,  UR                  R                  5       [        R                  L a  g [        R                  " USSS9nU R                  R!                  U5      n[#        UR                  SU R                  R                   S3US L=(       a    UR%                  5       S9mU R                  [        R&                  L a;  SnUR)                  U R*                  S9 H  nUSUR-                  5        S	3-  nM     U$ U R                  [        R.                  L a6  S<U4S
 jjnSnUR)                  U R*                  S9 H  nXF" U5      -  nM     U$ U R                  [        R0                  L Ga>  UR                  R                  5       n/ n[3        TR5                  5       5      n	U R                  R                  [        R6                  L aT  S[8        R:                  " U R<                  5       SUR:                   3n
S[8        R:                  " U R<                  5       3nOU R                  R                  [        R                  L aT  S[8        R:                  " U R<                  5       SUR:                   3n
S[8        R:                  " U R<                  5       3nOaU R                  R!                  U R<                  5      nUc   eSUR>                   SUR:                   3n
UR@                   SUR>                   3nU R                  RB                  (       a  [D        RF                  " UR                  R4                  R                  UR                  R4                  RH                  5      nURK                  [L        RO                  URP                  [3        U5      TR;                  5       5      5        U[        RR                  L a  URK                  U
 S35        OU[        RT                  L a  URK                  U
 S35        O`U[        R                  L aM  SRW                  S UR                  R4                  R                   5       5      nURK                  U
 SU S35        SRW                  S [Y        U	[Z        R\                  " U R<                  5      SS9 5       5      nU R<                  R                  R^                  (       a  URK                  SU S35        / U R<                  R                  R^                  R`                  Rc                  5       QU R<                  R                  R^                  Rd                  PnU H  nU	Rg                  S U 5       5        M     URK                  S5        OURK                  SU S35        [Z        Rh                  " U R<                  5      n[k        U5       H  u  nn[m        [o        [p        5      5      URr                  Rt                  :X  d   eU[        R                  L a  SU S3nOSU S3nU	RK                  [w        U[y        URr                  R:                  [{        [o        [p        5      5      5      S 95        M     U R                  R                  [        R                  :X  a  [        R                  " U R<                  R                  SUR|                  S9nUR                  5       nUR;                  5       nSRW                  S! [Y        U	UR5                  5       SS9 5       5      nURK                  S"U S#U S35        O|U R                  R                  [        R6                  :w  aT  SRW                  S$ [Y        U	[Z        R                  " U R<                  5      SS9 5       5      nURK                  S%U S35        U[        R                  L d  U[        RT                  L aJ  [        [        UR                  R                  5      5       H  nURK                  S&U S'U S(U S)35        M      U[        RR                  L ak  [        UR                  R                  5      S*:X  a  S+nOSRW                  S, [        [        UR                  R                  5      5       5       5      nS-U S3nOU[        RT                  L a  S.nOU[        R                  L a  [        UR                  R                  5      S*:X  a.  UR                  R4                  R                  S/   R:                  nO<SRW                  S0 UR                  R4                  R                   5       5      nS1U S3nURK                  S2W S335        S4RW                  U5      nU R                  UUU
UU R<                  R                  R                  S LS59 S6TR                  5        S7U S83$ U R                  [        R                  L a+  S9UR                  R:                   S:TR;                  5        S;3$ [        U R                  5        g )=NFr   rx   rC   ry   r   r   r   r   c                   > SU R                  5        STR                  5        SSR                  S [        U R	                  5       TR	                  5       5       5       5       S3$ )Nr   r   r   r   c              3  8   #    U  H  oR                   v   M     g 7frf   r   r   s     r1   r   OStructuredRegisterDispatchKey.gen_one.<locals>.generate_defn.<locals>.<genexpr>,  r   r   r   r   r   s    r1   r   <StructuredRegisterDispatchKey.gen_one.<locals>.generate_defn)  s`      
|1TYY_y9J9J9Lcmmo/^__` a r3   structured__meta_zat::meta::structured__default_backend_z::structured_z op;z
 op(self);r   c              3  8   #    U  H  oR                   v   M     g 7frf   r   r   s     r1   r   8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>_  s     (N9MA9Mr   z op(r   c              3  :   #    U  H  nUR                   v   M     g 7frf   r   r   s     r1   r   rF  d  s      #A r   r   zauto precompute = op.meta(c           	   3     #    U  H8  n[        S UR                   3[        R                  " XR                  S9S9v   M:     g7f)zprecompute.)bindsr   r[   N)r   r]   rp   argument_type)r   ra   s     r1   r   rF  y  s@      #
 $5C	 #.sxxj!9!+!9!9#XX!N $5s   A Az(void)precompute;zop.meta(zop.maybe_get_output(r   zop.outputs_[]rJ  c              3  :   #    U  H  nUR                   v   M     g 7frf   r   r   s     r1   r   rF    s      &R FFRr   zat::r   c              3  :   #    U  H  nUR                   v   M     g 7frf   r   r   s     r1   r   rF    s      ' FFr   zop.impl(zif (op.proxy_outputs_[z].has_value()) op.outputs_[z!].get().copy_(*op.proxy_outputs_[z]);r   zstd::move(op.outputs_[0])c              3  .   #    U  H  nS U S3v   M     g7f)zstd::move(op.outputs_[z])NrI   r%  s     r1   r   rF    s       &!;A 126!;r(  zstd::make_tuple(rl   r   c              3  8   #    U  H  oR                   v   M     g 7frf   r   r   s     r1   r   rF    s     $J5IVV5Ir   zstd::forward_as_tuple(zreturn ;r   )r*  r  r  z

z {
r  r   z", TORCH_FN(r   r   )Hr   rQ   r"   r   rR   r   r-   r%   r   r7   r|   r   r   r   r   r   r   r   supports_symintr   r   rT   r   r   r   rr   r   r'   metar]   rk   r   r   r   r   r   r   r(   rO   rb   r`   r   r   r   r   rp   meta_argumentsprecomputedreplacevaluesaddextendout_argumentsr   r   r	   r   nctyper[   r   r   r   manual_cpp_bindingmost_faithful_signatureimpl_argumentsr)  r   r   r;  structured_inheritsr   r   ) rl   rj   r   kernr   r   r   r   sig_bodycontextr*  r  r   r   out_args_str
meta_exprsprecomputed_valuesprecomputed_elemsr+  r   r   r   out_sig_groupout_sigapi_name	out_exprs
impl_exprsret_exprmovedrefssig_body_strr   s                                   @r1   r   %StructuredRegisterDispatchKey.gen_one  s   //// KK6...MM==a@@ ++AAB/  *>>ee

 !!,,Q/FFd00==>a@t#>(<(<(>
 ;;&777F(334;;3GJw||~&6c:: HM[[F888 F(334;;3G-00 HM[[F777A H -1,AG !!..+2B2BB*499TVV+<*=VAFF8L
!6tyy7H6IJ""//EEF  +499TVV+<*==NqvvhW
!6tyy7H6IJ--88@+++*8??*;1QVVHE
"*"8"8!9xFWX!!..$-OOFF$$((!&&*:*:*J*J%! '88->(? J))):,d 34j(((:,j 9:jnn$#yy(N9I9I9M9M(NN:,d<. CD  #"Z66tvv>u# J vvzz%% "<ZL KL
&VVZZ++33::<&FFJJ**..&" *<%NN #
 $5#  *<  34(:,b 9: "//7H'1
7$Yw%78GNN<O<OOOO
&1!A6D)!A.D! (#NN//Yw=O1P
 2. ""//EEF !2 F FFFJJuq?S?S! (??A"<<> II &&w0A0A0CER& 	 $xj)B ?@##00K4D4DD!YY '&!:!:466!B5' 
 (:,b 9: JNN"a:+=+=&=s166>>23AOO03NqcQrstruuxy 4 J)))qvv~~&!+:H II &!&s166>>':!;& E "2%:Hj(((!jnn$qvv~~&!+ vv//33A6;;H99$JQVV5E5E5I5I$JJD!7vQ?HOOghZq1299X.L )!-#'66::#A#A#M       [[F///affkk],sxxzl#FF%r3   rI   N)r   r   r  r5   r  rS   r   r5   )r   r   r  rS   r   r5   )r   r   r*  r5   r   intr   r5   )rj   r   r   r   r*  r5   r  r5   r  rS   r   r5   )rj   r   r   rU   )r  r  r  r  r  r  r  r-  r;  r   r   r  rI   r3   r1   r   r   E  s    +.@D	:9z";9;9 ;9
 ;9 ;9 ;9 
;9z !F !Fr3   r   )r-   r   r.   rS   r/   rS   r   r  )r-   r   r   ztuple[str | None, str | None])r-   r   r   r  )=
__future__r   r   r  dataclassesr   typingr   r   typing_extensionsr   torchgen.api.cppapir   torchgen.api.metarS  torchgen.api.structuredrp   torchgen.api.translater   torchgen.api.typesr	   r
   r   r   r   r   r   r   r   r   r   r   torchgen.contextr   r   torchgen.modelr   r   r   r   r   r   r   r   r   r    torchgen.utilsr!   r"   !torchgen.selective_build.selectorr#   r2   r=   rA   rD   rG   rJ   rL   rO   r   rI   r3   r1   <module>r     s    "   ! ) *       , , ,    R   , B### # 	#L**"*:.$<.: $M* M* M*n
 $r$7 r rr3   