
    `i                       d dl mZ d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d dlmc mZ d dlmc mZ d dlmc 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mZmZmZm Z  d dl!m"Z"m#Z# d d	l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d d
l/m0Z0m1Z1 erd dl2m3Z3 d!dZ4d"dZ5d#dZ6d#dZ7d#dZ8d#dZ9d#dZ: ed           G d d                      Z; ed           G d d e;                      Z<dS )$    )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)SelectiveBuilderbackend_indexr   per_operator_headersboolrocmreturn	list[str]c                r   |rdg}ndg}| j         t          j        t          j        fv r|                    d           n| j         t          j        k    r.|r|                    d           n|                    d           n| j         t          j        k    r|                    d           nu| j         t          j        k    r|                    d           nJ| j         t          j        k    r|                    d           n|r|g d	z  }n|                    d
           |                    d           |S )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)r$   r%   r'   headerss       w/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchgen/dest/register_dispatch_key.pygen_registration_headersr5   /   sU   
  8<=67!ko{7G%HHH67777		#{'7	7	7 	ANN>????NN?@@@@		#{	6	6:;;;;		#{	6	6:;;;;		#{'7	7	7BCCCC	 6 
 
 
 	
 	4555NN3444N    tuple[str | None, str | None]c                |   d }d }| j         t          j        t          j        t          j        t          j        t          j        t          j        fv r1t          | j                   	                                }d| }d| }n9| j         t          j
        t          j        t          j        t          j        fv rd}d}||fS )Nzat::detail::empty_zat::detail::empty_strided_z	at::emptyzat::empty_strided)r+   r   r-   r,   r/   r0   r1   r2   strlower&CompositeExplicitAutogradNonFunctionalQuantizedCPUQuantizedCUDA)r$   
empty_implempty_strided_impldispatchs       r4   gen_empty_impl_namesrA   U   s     J!&   }12288::4(44
D(DD		#: !	( 
 
 !
0)))r6   c           	         | j         t          j        k    rd}nd}t          |           \  }}|g S d| d| d| d| d	gS )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-   rA   )r$   empty_optionsr>   r?   s       r4   gen_create_out_helperrE   r   s    ![%5553!%9-%H%H"J"		 	 	 #0	 	
 !	 	
 4A	 	 	
 
r6   c                <    t          |           \  }}|g nd| dgS )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;
}
)rA   )r$   _r?   s      r4   gen_maybe_create_proxy_helperrH      sG    0??A % 	   	
r6   c                6    | j         t          j        k    rg S dg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   r;   r$   s    r4   gen_resize_out_helperrK      s)    ![%WWW 		 r6   c                    dg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");
}
 rJ   s    r4   gen_check_inplace_helperrN      s    	 r6   c                    dgt          |           t          |           t          |           t          |           dS )Nz?C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED("-Wunused-function")zC10_DIAGNOSTIC_POP())rE   rK   rN   rH   rJ   s    r4   gen_registration_helpersrP      s_    I	}	-	- 
}	-	- 
"-	0	0	
 
'}	5	5 	 r6   T)frozenc                      e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ed#d            Zed$d            Zd%dZd&dZ	d'd Z
	 d(d&d"Zd!S ))RegisterDispatchKeyr   r$   zvLiteral[Target.ANONYMOUS_DEFINITION, Target.NAMESPACED_DEFINITION, Target.NAMESPACED_DECLARATION, Target.REGISTRATION]targetr#   selectorr&   r'   symint
str | Noneclass_method_nameskip_dispatcher_op_registrationtyper   argslist[Argument]method_namer9   r(   c           	         | t           j        k    rdS d}|dz  }|D ]4}|j                                        r|d|j         d| d|j         dz  }5|S )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   NoCheckrZ   is_tensor_likename)rZ   r[   r]   device_checkargs        r4   gen_device_checkz$RegisterDispatchKey.gen_device_check  s     ?***++NTT 	j 	jCx&&(( j !j<?H!j !jIT!j !jZ]Zb!j !j !j jr6   f%NativeFunctionsGroup | NativeFunctionr)   c                V    t          |t                    rQ|j        r                               S t	          t           fd                                                    S t          |t                    r                     |          }|g n|gS t          |           d S )Nc                0                         |           S Ngen_unstructuredrf   gselfs    r4   <lambda>z.RegisterDispatchKey.__call__.<locals>.<lambda>*  s    t'<'<Q'B'B r6   )

isinstancer   
structuredgen_structuredlistr!   	functionsr   rl   r   )ro   rf   rrn   s   `  @r4   __call__zRegisterDispatchKey.__call__   s    a-.. 	&'A | **1---BBBBBAKKMMRR   >** 	%%a((A22+OOOOOr6   r   %NativeSignature | DispatcherSignaturec                    t          j        |j        d| j        j         d|j        j        j         d| j                  S )Nwrapper_rG   prefixrV   )r   from_schemafuncr$   r+   rb   overload_namerV   )ro   rf   s     r4   wrapper_kernel_sigz&RegisterDispatchKey.wrapper_kernel_sig2  sK     #.F\d0=\\@Y\\\;
 
 
 	
r6   rn   NativeFunctionsGroup | Nonec                   |d S |j                                         }|t          j        u rdn |t          j        u rdnt          d          |                     |          }|                                }| dt          j	        |          }t          |          dk    rod                    fdt          |          D                       }|                                                                 dd	                    |           d
}nt          |          dk    r|d         }	 d d	|	 d}|	}n{t          |j         j        j                  dk    sJ d}|j         j        j        d         }
|
j                                        rd d d d|
j         d	}n d d	|
j         d}|                     |j                  }|                                }|                    |           d d|                                 dd	                    d t)          |                                |                                          D                        d| d| dS )Nzat::_copy_fromzat::_copy_from_and_resizez1gen_out_inplace_wrapper called on a functional op_tmp   z
  c           	   3  :   K   | ]\  }} d | d d| dV  dS )z
(std::get<z>(z), );NrM   ).0iret_namecopy_opfunc_ress      r4   	<genexpr>z>RegisterDispatchKey.gen_out_inplace_wrapper.<locals>.<genexpr>O  s\       " "Ax DDaDD8DDDDD" " " " " "r6   (, )r   r    z    for (int64_t i = 0; i < z.size(); ++i) {
        z[i], z[i]);
    }rb   z
 {
  auto z = c              3  $   K   | ]}|j         V  d S rj   exprr   es     r4   r   z>RegisterDispatchKey.gen_out_inplace_wrapper.<locals>.<genexpr>i  s$      6~6~!qv6~6~6~6~6~6~r6   z);
  

  return ;
}
)r~   kindr   inplaceoutAssertionErrorr   rb   cppreturn_nameslenjoin	enumeratereturns_typecpp_type	argumentsrZ   is_list_like
functionaldefnr   )ro   rf   rn   ksigrb   r   updatesreturnsr   out_argfunctional_sigwrapper_namer   r   s                @@r4   gen_out_inplace_wrapperz+RegisterDispatchKey.gen_out_inplace_wrapper<  s    94FKKMM
"""&GG*.  1GG !TUUU%%a((xxzz==='**|q  kk " " " " "#,\#:#:" " "  G ))++4466SS<9P9PSSSGG!###AH ;;8;;x;;;GGGqv'+,,1111Gf&*1-G|((** D
%
 
	
 

 
"),
 
 

 %CCxCC7<CCC00>>xxzz |  #((** -1YY6~6~yQTQ^Q^Q`Q`bpbzbzb|b|G}G}6~6~6~-~-~    	   	r6   r   c           
          j                                       } j         j        t          j        k    r* j                             j                  r
J d            n j         j        t          j        k    r* j                             j                  r
J d            n<||j        s3t          t           fd                                                    S t           j          j         j         j         j         j         j                  }t          t          |j                                                            S )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                0                         |           S rj   rk   rm   s    r4   rp   z4RegisterDispatchKey.gen_structured.<locals>.<lambda>  s    4+@+@A+F+F r6   )r$   
get_kernelr+   r   r-   
has_kernelr   r;   rr   rt   r!   ru   StructuredRegisterDispatchKeyrT   rU   r'   rV   rX   rY   gen_one)ro   rn   metadatastructured_gens   ``  r4   rs   z"RegisterDispatchKey.gen_structuredo  sW   %0033*k.>>>)44QU;;  J ; 
 +AB B )44QU;;  J ;  X%8!F!F!F!F!FVVWWW6KMIK"0	
 	
 H^3Q[[]]CCDDDr6   Nc                J   t          |          5  d}d}| j                            |          s| j        j        t          j        k    rL|j                                        t          j	        u r'|j
        s t          |j        j                  dk    rd}n5| j        j        s|t          ||| j                  rd}n	 d d d            d S |j        r	 d d d            d S | j        t"          j        u r(| j                            |          s	 d d d            d S |                     |                                          }                                                                }                                }d                    d |D                       }t7          j        |dd          }	| j        t"          j        u rId}
|	                    | j                  D ]}|
d	|                                  d
z  }
|
cd d d            S | j        t"          j!        u rBd+fd}d}
|	                    | j                  D ]}|
 ||          z  }
|
cd d d            S | j        t"          j"        u r|rL|j        j        j#        J |j        j        j#        j$        j        }d| d| d| d| d| dcd d d            S |r"| %                    ||          cd d d            S | j        &                    |          }|	 d d d            d S | j'        |j(         d|j)         }n|j(         d| j'         d|j)         }tU          || j                  }d                    d tW                                          |                                d          D                       }d}| j        j,        rat[          j.        |j        j        j/        |j        j        j0                  }tb          2                    |j3        ti          |          |          }d}|j,        r| j        j,        rtk          d |j        j        j6        D                       }|r!d}to          | j        j                  rd| }n|j        j        j#        |j        j        j#        j$        gng }t[          j.        ||j        j        j/        |j        j        j0                  }tq          d |D             d           }|d| d }d!| d| d| d"| d#| d$| d| d%cd d d            S | j        t"          j        u rA|j        s| j9        r	 d d d            d S d&| d'}d(|j        j         d)| d*cd d d            S tu          | j                   	 d d d            d S # 1 swxY w Y   d S ),NFr   Tr   c              3  >   K   | ]}|                                 V  d S rj   )r   r   as     r4   r   z7RegisterDispatchKey.gen_unstructured.<locals>.<genexpr>  s*       8 8a 8 8 8 8 8 8r6   methodfallback_bindingr   rV   
TORCH_API ;
cpp_sigr   r(   r9   c                   d|                                   d                                 dd                    d t          |                                                                           D                        dS )N

 {
return r   r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   zNRegisterDispatchKey.gen_unstructured.<locals>.generate_defn.<locals>.<genexpr>  $      __!qv______r6   );
}
r   rb   r   r   r   r   r   s    r4   generate_defnz;RegisterDispatchKey.gen_unstructured.<locals>.generate_defn  s     

 YY__y9J9J9L9Lcmmoo/^/^_____   r6   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  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z7RegisterDispatchKey.gen_unstructured.<locals>.<genexpr>  s8       + + F+ + + + + +r6   r   r_   z// DeviceGuard omittedc              3  @   K   | ]}t          |t                    V  d S rj   )rq   r    r   s     r4   r   z7RegisterDispatchKey.gen_unstructured.<locals>.<genexpr>  sA       - - #1&<==- - - - - -r6   z=
  const DeviceGuard device_guard(device_or_default(device));z7globalContext().lazyInitDevice(c10::DeviceType::CUDA);
c              3  X   K   | ]%}|j                                         |j         V  &d S rj   )rZ   ra   rb   r   s     r4   r   z7RegisterDispatchKey.gen_unstructured.<locals>.<genexpr>  sN        $%#$6#8#8#:#:#$6     r6   z1const OptionalDeviceGuard device_guard(device_of());znamespace {

z) {
  z

  r   z);
}

} // anonymous namespace
z	TORCH_FN(r   m.impl("z",
z);
r   r   r(   r9   );r   r$   r   r+   r   r-   r~   r   r   r   has_composite_kernelr   r   use_out_as_primaryr   manual_kernel_registrationrT   r"   REGISTRATIONrU   is_native_function_selectedr   rb   r   r   r   r   r   from_native_functionNAMESPACED_DECLARATION
signaturesrV   declNAMESPACED_DEFINITIONANONYMOUS_DEFINITIONself_argargumentr   r   rX   cpp_namespacekernelr   r   device_guard	itertoolschainr   flat_positionalrS   re   rc   rt   anynon_outr   nextrY   r   )ro   rf   rn   inplace_metagets_out_inplace_wrapperrb   r   r[   args_strcpp_sig_groupresultr   r   self_arg_namer   	impl_name
kernel_sigargs_exprs_strrc   device_check_argsr   has_tensor_optionsr   candidate_args	device_ofpayloadr   s                             @r4   rl   z$RegisterDispatchKey.gen_unstructured  s    %Q'' l	* l	* L',$%0033  &3{7GGG);;; . < ''1,,#'LL*= :1aASTT & 04,,/l	* l	* l	* l	* l	* l	* l	* l	*0 + 3l	* l	* l	* l	* l	* l	* l	* l	*8 v222AA!DD 3 ?l	* l	* l	* l	* l	* l	* l	* l	*B ))!,,C88::D++--6688L==??Dyy 8 84 8 8 888H .B%%  M
 {f;;;,77t{7KK ? ?G>7<<>>>>>>FFel	* l	* l	* l	* l	* l	* l	* l	*f  <<<      ,77t{7KK 5 5GmmG444FFl	* l	* l	* l	* l	* l	* l	* l	*B  ;;; 
6+4@@@$%F$4$=$F$KM   ,  	  Ol	* l	* l	* l	* l	* l	* l	* l	*` , >771==cl	* l	* l	* l	* l	* l	* l	* l	*f  -88;;#kl	* l	* l	* l	* l	* l	* l	* l	*l )1#+#9 N NX_ N NII#+#9 h hT=S h hW_Wf h hI-a1CDD
!% + +&)=)=)?)?  + + + " "  8%2 (1(,af.>.N) )% $7#G#G->(?(?$ $L  8> 'nd&8&E 'n), - -!"!1!9- - - * *& * "n(@ 00B0OPP u+tfr+t+tL  !v/8D V-6?@@!# !
 *3$F,0F,<* * %) )7  
 !% %	 %0+m_h+m+m+mL        	      %  ql	* l	* l	* l	* l	* l	* l	* l	*J  333/ E43W EOl	* l	* l	* l	* l	* l	* l	* l	*R 2$111GDafkDDwDDDUl	* l	* l	* l	* l	* l	* l	* l	*X T[))))Yl	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	* l	*sX   B-VV .VC(VAV%AVV+VH V""VV6VVV)rZ   r   r[   r\   r]   r9   r(   r9   )rf   rg   r(   r)   )rf   r   r(   rx   )rf   r   rn   r   r(   rW   )rn   r   r(   r)   rj   )__name__
__module____qualname____annotations__staticmethodre   r   rw   r   r   rs   rl   rM   r6   r4   rS   rS      s             JJJ
 LLL "!!! *)))   \ !   ! "
 
 
 
1 1 1 1fE E E E< CGo* o* o* o* o* o* o*r6   rS   c                  R    e Zd ZU ded<   dd
ZddZddZddZedd            Z	dS )r   r   rn   r   r   parent_classr9   generate_superr&   r(   c                j     |r| dndd fd}d	 |d
d           d	 |dd           d	S )NzE::set_output_raw_strided(output_idx, sizes, strides, options, names);r   rb   r9   maybe_create_proxyr&   r(   c           	         d|  dt          j                            |          d           dt          j        d           dS )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)rb   r  r   ro   set_output_supers     r4   gen_set_output_functionz]StructuredRegisterDispatchKey.gen_class_set_output_functions.<locals>.gen_set_output_functionQ  sg     
 
//3EFFOO  
!6**   r6   r   stridedT)r  raw_stridedF)rb   r9   r  r&   r(   r9   rM   )ro   r   r   r   r	  r  s   ``   @r4   gen_class_set_output_functionsz<StructuredRegisterDispatchKey.gen_class_set_output_functionsI  s      	"".uuu!	 	 	 	 	 	 	 	 t<<< 5AAA   	r6   r  c                N   | j         j        t          j        t          j        t          j        t          j        fv rd}|dz   }ndx}}|rd}nd}|t          j        u rb| j         j        t          j	        t          j
        t          j        t          j        t          j        t          j        t          j        fv sJ | dS |t          j        u r| d| S |t          j        u r| d| S |t          j        u s|t          j        u rt!          | d          t#          |           d S )	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/   r0   r1   r;   r   r   r-   r,   r2   r   r   mutablescratchr   r   )ro   r   r  maybe_set_guardmaybe_set_guard_linecreate_proxys         r4   r  z7StructuredRegisterDispatchKey.gen_class_set_output_bodyf  s   *OO>	/
 
 
O $3T#9  577 ? 	LL L
%%%%2   B7     - ? ? ? ?*$$$,      *.  ,      *$$$Z-?(?(? GGG   OOOOOr6   
class_namer   intc                   |t           j        u rdS |t           j        u r| dS |t           j        u rcd                    d t          |          D                       }d                    d t          |          D                       }| d| d| dS |t           j        u s|t           j        u rt          | d	          t          |           d S )
Nr   z,(Tensor& self) : outputs_{std::ref(self)} {}r   c              3      K   | ]	}d | V  
dS )zTensor& outNrM   r   r   s     r4   r   z?StructuredRegisterDispatchKey.gen_class_ctor.<locals>.<genexpr>  s+       K Kq!2q!2!2 K K K K K Kr6   c              3  "   K   | ]
}d | dV  dS )zstd::ref(outr   NrM   r  s     r4   r   z?StructuredRegisterDispatchKey.gen_class_ctor.<locals>.<genexpr>  s.       M M!4!4!4!4 M M M M M Mr6   r   z) : outputs_{ z } {}r  )
r   r   r   r   r   ranger  r  r   r   )ro   r   r  r   out_argsout_refss         r4   gen_class_ctorz,StructuredRegisterDispatchKey.gen_class_ctor  s    
%%%2*$$$ RRRR*.  yy K KE'NN K K KKKHyy M MeGnn M M MMMH NN8NNHNNNN*$$$Z-?(?(? GGG   OOOOOr6   rf   r   c                  |t           j        u rd}d}d}nr|t           j        u r"d}d}dt          |j        j                   d}nB|t           j        u r"d}d}dt          |j        j                   d}nt          d|           | j        j	        t          j        k    r| j        rd	}	nyd
}	nv| j        j	        t          j        k    rd}	nY| j        j	        t          j        k    rd}	n<| j        j	        t          j        k    rd}	n| j        j	        t          j        k    rd}	nd}	d}
|                     ||t          |j        j                            }d| d| dt%          j        ||
           t%          j        |                     |||          |
           dd| ddd| dt          |j        j                   dt%          j        ||
           t%          j        |	|
           df
}d                    d |D                       S )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     K   | ]}||V  	d S rj   rM   )r   lines     r4   r   z:StructuredRegisterDispatchKey.gen_class.<locals>.<genexpr>  s'      88$48888888r6   )r   r   r   r   r~   r   r   RuntimeErrorr$   r+   r   r/   r'   r;   r0   r1   r2   r  r  r  r  r   )ro   rf   r   r  r   r   output_typeoutput_valueproxy_fieldguard_fieldr  class_ctor_strliness                r4   	gen_classz'StructuredRegisterDispatchKey.gen_class  sG    
%%%"K1LKK*$$$:K~LgQV^ATATgggKK*.  :K~LgQV^ATATgggKK<<<===*k.>>>y ETD+AB B =KK,??<KK,??<KK,0@@@<KKK,,Q
C<O<OPPCjCC,CCC~v668tBB1lTbccekllnO-L---MkMMS-@-@MMM{F335{F335
 yy88%888888r6   rW   c                   |j         rJ | j        t          j        u r| j                            |          sd S | j        j        t          j	        k    r'|j
                                        t          j        u rd S t          j        |dd          }| j                            |          }t#          |j
        d| j        j         d|d uo|                                          | j        t          j        u r=d}|                    | j                  D ]}|d|                                 d	z  }|S | j        t          j        u r6d@fd}d}|                    | j                  D ]}| ||          z  }|S | j        t          j        u r_|j
                                        }g }t3                                                    }	| j        j        t          j        u rAdt9          j        | j                   d|j         }
dt9          j        | j                   }n| j        j        t          j	        u rAdt9          j        | j                   d|j         }
dt9          j        | j                   }nF| j                            | j                  }|J d|j         d|j         }
|j          d|j         }| j        j!        rtE          j#        |j
        j        j        |j
        j        j$                  }|%                    tL          '                    |j(        t3          |                                                               |t          j)        u r|%                    |
 d           n~|t          j*        u r|%                    |
 d           nW|t          j        u rId+                    d |j
        j        j        D                       }|%                    |
 d| d           d+                    d tY          |	t[          j.        | j                  d          D                       }| j        j        j/        r|%                    d| d           g | j        j        j/        j0        1                                | j        j        j/        j2        }|D ]!}|	3                    d |D                        "|%                    d           n|%                    d| d           t[          j4        | j                  }tk          |          D ]\  }}tm          to          tp                              |j9        j:        k    sJ |t          j        u rd | d!}nd"| d#}|	%                    tw          |ty          |j9        j        t{          to          tp                                        $                     | j        j        t          j	        k    rt          j        | j        j        d|j>                  }|?                                }|                                }d+                    d% tY          |	|                                d          D                       }|%                    d&| d'| d           ny| j        j        t          j        k    r_d+                    d( tY          |	t[          j@        | j                  d          D                       }|%                    d)| d           |t          j        u s|t          j*        u rHt          t          |j
        jC                            D ]!}|%                    d*| d+| d,| d-           "|t          j)        u rjt          |j
        jC                  d.k    rd/}nd+                    d0 t          t          |j
        jC                            D                       }d1| d!}n|t          j*        u rd2}n||t          j        u rnt          |j
        jC                  d.k    r|j
        j        j        d3         j        }n4d+                    d4 |j
        j        j        D                       }d5| d!}|%                    d6| d7           d8+                    |          }| D                    |||
|| j        j        jE        d u9           d:F                                 d;| d<S | j        t          j        u r%d=|j
        j         d>                                 d?S t          | j                   d S )ANFr   rz   rG   r{   r   r   r   r   r   r   r(   r9   c                   d|                                   d                                 dd                    d t          |                                                                           D                        dS )Nr   r   r   r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   zOStructuredRegisterDispatchKey.gen_one.<locals>.generate_defn.<locals>.<genexpr>,  r   r6   r   r   r   s    r4   r   z<StructuredRegisterDispatchKey.gen_one.<locals>.generate_defn)  s     

 YY__y9J9J9L9Lcmmoo/^/^_____   r6   structured__meta_zat::meta::structured__default_backend_z::structured_z op;z
 op(self);r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>_  s$      (N(NA(N(N(N(N(N(Nr6   z op(r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>d  s8       # # # # # # # #r6   r   zauto precompute = op.meta(c              3  z   K   | ]6}t          d |j         t          j        ||j                            V  7dS )zprecompute.)bindsr   rZ   N)r   rb   rr   argument_type)r   rd   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>y  si       # #
  	 !9sx!9!9!+!9#SX!N!N!N  # # # # # #r6   z(void)precompute;zop.meta(zop.maybe_get_output(r   zop.outputs_[]r4  c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>  s8       & & F& & & & & &r6   zat::r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>  s8       ' ' F' ' ' ' ' 'r6   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  "   K   | ]
}d | dV  dS )zstd::move(op.outputs_[z])NrM   r  s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>  sA       & & 7666& & & & & &r6   zstd::make_tuple(ro   r   c              3  $   K   | ]}|j         V  d S rj   r   r   s     r4   r   z8StructuredRegisterDispatchKey.gen_one.<locals>.<genexpr>  s$      $J$JQV$J$J$J$J$J$Jr6   zstd::forward_as_tuple(zreturn ;r   )r  r   r   z

z {
r  r   z", TORCH_FN(r   r   )Hr   rT   r"   r   rU   r   r$   r+   r   r;   r~   r   r   r   r   r   r   r   supports_symintr   r   rV   r   r   r   rt   r   r-   metarb   rn   r   r   r   r   r   r   r.   rS   re   rc   r   r   r   r   rr   meta_argumentsprecomputedreplacevaluesaddextendout_argumentsr   r   r	   r   nctyperZ   r   r   r   manual_cpp_bindingmost_faithful_signatureimpl_argumentsr  r   r   r)  structured_inheritsr   r   ) ro   rf   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                                   @r4   r   z%StructuredRegisterDispatchKey.gen_one  s"
   //// K6...M==a@@ / 4 +AB B// 4 *>ee
 
 

 !,,Q//F@d0=@@@t#>(<(<(>(>
 
 
 ;&777F(334;3GG ; ;:w||~~::::M[F888      F(334;3GG 1 1--000M[F777A H -1,A,AG !.+2BBBL49TV+<+<LLAFLL
Jty7H7HJJ"/EF F X49TV+<+<WWqvWW
Jty7H7HJJ-88@@+++E8?EEQVEE
"*"8XXxXX!. $-OF$(!&*:*J% %! '88->(?(?    J))): 3 3 34444j(((: 9 9 9::::jn$$#yy(N(N9I9M(N(N(NNN: C C< C C CDDD  # #"Z6tv>>u  # # #  J vz% ;  KZ K K KLLL
&VZ+3::<<&FJ*.&" *<  %NN # #
 $5# # #      34444 9: 9 9 9::: "/77H'11  
7$Yw%7%788GN<OOOOO
&&6!666DD.!...D! (#N/Yw=O=O1P1P   
 
 
 
 "/EF F !2 FFJuq?S! ! ! (??AA"<<>> II & &&w0A0A0C0CERRR& & &  	  ?x ? ?) ? ? ?@@@@#0K4DDD!YY ' '&!:46!B!B5  ' ' '  
  9: 9 9 9::: JN""a:+=&=&=s16>2233  AOOyyyqyystyyy    J)))qv~&&!++:HH II & &!&s16>':':!;!;& & &  E  ;%:::HHj(((!jn$$qv~&&!++ v/3A6;HH99$J$JQV5E5I$J$J$JJJD????HOO1h11122299X..L )!-#'6:#A#M            [F///FafkFFsxxzzFFFF%%%4r6   N)r   r   r   r9   r   r&   r(   r9   )r   r   r  r&   r(   r9   )r   r   r  r9   r   r  r(   r9   )rf   r   r   r   r  r9   r   r9   r   r&   r(   r9   )rf   r   r(   rW   )
r   r   r   r   r  r  r  r)  r   r   rM   r6   r4   r   r   E  s            :9 9 9 9z   ";9 ;9 ;9 ;9z !F F F ! F F Fr6   r   )r$   r   r%   r&   r'   r&   r(   r)   )r$   r   r(   r7   )r$   r   r(   r)   )=
__future__r   r   r  dataclassesr   typingr   r   typing_extensionsr   torchgen.api.cppapir   torchgen.api.metar=  torchgen.api.structuredrr   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#   r5   rA   rE   rH   rK   rN   rP   rS   r   rM   r6   r4   <module>rh     sR   " " " " " "      ! ! ! ! ! ! ) ) ) ) ) ) ) ) * * * * * *                            , , , , , , , , , , , , , , ,                            R Q Q Q Q Q Q Q                        , + + + + + + +  CBBBBBB# # # #L* * * *:   .   $   <   .   : $M* M* M* M* M* M* M* M*n
 $r r r r r$7 r r r r rr6   