o
    0hi                     @  s  U d dl mZ d dlZd dlZd dlZd dlmZ d dlm  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 d dlmZ erPd dlmZ e Zded	< dSddZe dZ!dTddZ"dUddZ#e dZ$e dZ%dVddZ&dVd d!Z'e d"Z(e d#Z)dWd%d&Z*d'Z+e,e+Z-d(ed)< dXd*d+Z.dYd-d.Z/dZd1d2Z0dZd3d4Z1ej2d5ej3d$ej4d6ej5dej6d$ej7d$ej8diZ9d[d8d9Z:d\d:d;Z;d]d?d@Z<d]dAdBZ=d]dCdDZ>d^dFdGZ?d]dHdIZ@e dJZAd_dKdLZBd`dMdNZCG dOdP dPZDG dQdR dRZEdS )a    )annotationsN)TYPE_CHECKING)native_function_manager)ArgumentBackendIndexBaseTyBaseTypeFunctionSchemaNativeFunctionsGroupNativeFunctionsViewGroupOptionalTypeSelfArgumentTensorOptionsArgumentsType)config)Sequencezlogging.Loggerlogger	arguments:Sequence[Argument | SelfArgument | TensorOptionsArguments]returnboolc                 C  s6   | D ]}t |dd }|sqt |dd}|r dS qdS )N
annotation	alias_set TF)getattr)r   argr   r   r   r   U/var/www/vscode/kcb/lib/python3.10/site-packages/torchgen/static_runtime/generator.py	has_alias!   s   r   )sparse_sampled_addmmhspmmlinalg_svdvalssspaddmmcoalesce_indicesindices_valuesvaluescrow_indicescol_indicesfloor_dividegerconj_physicalbinary_cross_entropyarccoshcholeskylu_solvelinalg_choleskylinalg_householder_productlinalg_ldl_solve_compute_linear_combination
_make_dual
_fw_primal_index_reduce!_new_zeros_with_same_feature_meta_conj_physical binary_cross_entropy_with_logitsbincountconv_tbccopy
_copy_from_copy_from_and_resizecount_nonzerocudnn_affine_grid_generator$cudnn_affine_grid_generator_backwardcudnn_grid_sampler
diag_embed	embeddingembedding_dense_backward_embedding_bag_dense_backward*_embedding_bag_per_sample_weights_backwardgrid_sampler_2d_grid_sampler_2d_cpu_fallbackgrid_sampler_3disnanmkldnn_linearmedian	nanmedian_sparse_sparse_matmulbatch_norm_backward_elemt_euclidean_distpixel_shufflepixel_unshufflechannel_shuffle_reshape_nested_backwardrelupreluceluslice_scatterselect_scatterdiagonal_scattersum_mkldnn_transpose_nested_tensor_from_mask_nested_from_padded_nested_tensor_size&_nested_from_padded_and_nested_example_standard_gamma_grad_dirichlet_gradnative_norm_sparse_softmax_sparse_softmax_backward_data_sparse_log_softmax!_sparse_log_softmax_backward_datazero_sparse_addmmsparse_mask_sparse_mask_projection	_to_dense	_coalesce
_coalescedcopy_sparse_to_sparse	to_sparseto_sparse_csrto_sparse_csc	to_mkldnnquantize_per_tensor_dynamicquantize_per_channelq_per_channel_scalesq_per_channel_zero_pointsint_repr"_make_per_channel_quantized_tensorsetlift
lift_freshlift_fresh_copymasked_scatter_masked_softmax_masked_softmax_backwardputindex_reducetrace_cholesky_solve_helperdistmax_torch_cuda_cu_linker_symbol_opglu_jvpglu_backward_jvphardswish_backwardrrelu_with_noise_backward#mkldnn_adaptive_avg_pool2d_backward_adaptive_avg_pool2d_backward_adaptive_avg_pool3d_backwardisinflinalg_lu_solvelinalg_vecdotlinalg_matrix_explinalg_eigvalsh_test_warn_in_autograd%_test_autograd_multiple_dispatch_view*_test_autograd_multiple_dispatch_view_copy_segment_reduce_segment_reduce_backward_fw_primal_copy_make_dual_copyview_as_real_copyview_as_complex_copy
_conj_copy_neg_view_copydiagonal_copydetach_copysqueeze_copyt_copyunsqueeze_copy_indices_copy_values_copyindices_copyvalues_copycrow_indices_copycol_indices_copyccol_indicesccol_indices_copyrow_indicesrow_indices_copyunfold_copy
alias_copy_triton_multi_head_attentionspecial_airy_aispecial_bessel_j0special_bessel_j1special_bessel_y0special_bessel_y1special_chebyshev_polynomial_tspecial_chebyshev_polynomial_uspecial_chebyshev_polynomial_vspecial_chebyshev_polynomial_wspecial_hermite_polynomial_hspecial_hermite_polynomial_hespecial_laguerre_polynomial_lspecial_legendre_polynomial_pspecial_modified_bessel_i0special_modified_bessel_i1special_modified_bessel_k0special_modified_bessel_k1!special_scaled_modified_bessel_k0!special_scaled_modified_bessel_k1&special_shifted_chebyshev_polynomial_t&special_shifted_chebyshev_polynomial_u&special_shifted_chebyshev_polynomial_v&special_shifted_chebyshev_polynomial_wspecial_spherical_bessel_j0_foobar_nested_tensor_strides_nested_tensor_storage_offsets_nested_get_values_nested_get_values_copy_nested_view_from_jagged_nested_view_from_jagged_copy_nested_view_from_buffer_nested_view_from_buffer_copy_int_mm_to_sparse_csc_to_sparse_csrsegment_reduceg/NativeFunctionsGroup | NativeFunctionsViewGroupc                 C  s  d}d }t | tr| jj}| jj}n| jjjjj}| jj}t	| r*t
d| dS |tv r6t
d| dS | D ]}t|j}|sLt
d|  dS q:t | trjdtj|jdd krht
dt| dS d	S | jj D ]}t|j}|st
d| jj  dS qp| jst| d
rt|drt|jdsdS dtj|jdd krt
d| dS t|jjrt
d| dS d	S )N zHAND WRITTEN: %sFzBLOCKED: %sz!NOT SUPPORTED TYPE CONVERTING: %sz
at::Tensor)symintzNON-TENSOR RET TYPE: %sToutzTensor(a!) out) -> Tensor(a!)z.outzat::Tensor &zNON_TENSOR RET TYPE: %szINPUTS ALIAS: %s)
isinstancer   view	root_namefuncr   namebaser   is_hand_writtenr   infoBLOCKED_OPSschema_order_argumentsivalue_type_conversion_methodtypecppreturns_typereturnscpp_typestr
functional
structuredhasattrendswithr   r   non_out)r   base_op_namer   r   maybe_methodr   r   r   is_supported   sZ   





r   arg_typeBaseType | OptionalType | Typetuple[bool, str] | Nonec                 C  s   t jdt jdt jdt jdt jdt jdi}d}t| tr| j	}nt| t
r1t| jts,dS | jj	}ndS ||vr9dS || }t| trF|d S |d	 S )
aD  
    Return the method call expression of `c10::ivalue' to convert its contained value to
    the expected value of `arg_type` type. For example, for `arg_type` == BaseTy.Tensor,
    this function returns ".toTensor()", so that it can be appended to the ivalue's
    variable name to get the value of the expected type.
    ))Tz
toTensor())FztoOptional<at::Tensor>()))FztoInt())FztoOptional<int64_t>()))FztoBool())FztoOptional<bool>()))Fz
toScalar())FztoOptional<at::Scalar>()))FztoScalarType())FztoOptional<at::ScalarType>()))FztoStringView())FztoOptional<c10::string_view>()Nr      )r   Tensorintr   Scalar
ScalarTyper   r   r   r   r   elem)r   type_conversion_methodsbase_ty_objectmethodsr   r   r   r   2  s*   




r   )bitwise_notbitwise_and
bitwise_orbitwise_xorbitwise_left_shiftbitwise_right_shiftgcdlcmscattergather _convert_indices_from_coo_to_csr _convert_indices_from_csr_to_coo)view_as_realimag_conjop_namer   c                 C     | t v S N)should_use_int_tensor_ops_r  r   r   r   should_use_int_tensorp     r  c                 C  r  r  )should_use_complex_tensor_ops_r  r   r   r   should_use_complex_tensort  r  r  )	addmv	index_addr  r  nll_loss_backwarddotvdotouterr*   )addmmmmnuclear_normdiag_addmm_activationmatrix_Htr   c                 C  s   | t v rdS | tv rdS dS )Nr         )test_tensor_dim_ops_1_test_tensor_dim_ops_2_r  r   r   r   test_tensor_dim  s
   r*  z{"view_as_complex": "{2, 2}"}zdict[str, str]test_tensor_shape_jsonc                 C  s   | t v rt |  S dS )Nr   )r+  r  r   r   r   test_tensor_shape  s   r,  indexc                 C  s  t |}|dkr/|dkrdnd}t|}t|t| }||d 7 }dd| g| }t|r:d| d	}nt|rEd
| d}nd| d}t	j
|t	jdt	jdt	jdt	jdt	jdi}d }	t| trj| j}	nt| trut| jtswJ | jj}	|	|v sJ d||	 }
|
S )Nr   r      @   r&  z{{{}}},zat::randint(1, 100, z, at::kInt)z
at::randn(z, at::kComplexFloat)z	at::rand()1false2zat::ScalarType::Floatz"floor"znot expected type)r,  r*  mathceilfloatformatjoinr  r  r   r   r   r   r   r   r   r   r   r   r   r   )r   r-  r  tensor_size_exnum_tensorsnum_dimsize_per_dimtensor_expressionvalue_expressionsr   value_expressionr   r   r   test_value_expression  s:   	
rA  schemar	   c           	      C  s   |   rJ | jjj}i }|  D ]}t|j||}|||j< qt||| g }| D ]\}}|	d| | d|  q-d
|d S )Nzauto z = ;
    ;)	is_out_fnr   r   r   rA  r   r   override_test_valuesitemsappendr9  )	rB  r-  schema_namearg_mapr   test_value_exparg_populationsarg_name	arg_valuer   r   r   generate_test_value_definitions  s   
rO  c                   s(   |   rJ d fdd|  D S )Nr0  c                 3  s    | ]
}|j    V  qd S r  r   .0r   r-  r   r   	<genexpr>  s    z,generate_test_value_names.<locals>.<genexpr>)rE  r9  r   )rB  r-  r   rS  r   generate_test_value_names  s   rU  r   r7  list[tuple[str, str | None]]c                   s    d	dd  fdd|   D S )
Nr   r   r   tuple[str, str | None]c                 S  sd   | j }d}t|tr|j}d}t|tsJ d }|jtv r"t|j }|r+|r+| d}d| j |fS )NFT?%)r   r   r   r   r   r   /generate_test_ir_arguments_base_ty_to_type_str_)r   r%  add_optionaltype_strr   r   r   ir_argument  s   



z/generate_test_ir_arguments.<locals>.ir_argumentc                   s   g | ]} |qS r   r   rQ  r]  r   r   
<listcomp>  s    z.generate_test_ir_arguments.<locals>.<listcomp>)r   r   r   rW  )r   )rB  r   r^  r   generate_test_ir_arguments  s   
r`  c                 C  sr   g }t |  D ])\}}t|j}|sJ |\}}|rdnd}|d| d|j d| d|  qd|d S )	N&r   z
const auto z = p_node->Input(z).rC  rD  )	enumerater   r   r   rH  r   r9  )rB  rL  ir   r   is_referencetype_conversion_method	referencer   r   r   generate_arg_extraction  s   
rh  r
   backend_indexr   c                 C  .   | | j}| js|d u rt| jjS |jS r  )
get_kernelr   r   r   r   r   kernelr   ri  rl  r   r   r   get_kernel_name     rn  c                 C  rj  r  )rk  r   r   r   r   r   rl  rm  r   r   r   get_out_kernel_name
  ro  rp  c                 C  s\   | j j}| r
J t| |}dd | D }| jrdnd}d| d| dd| d	S )
Nc                 s      | ]}|j V  qd S r  rP  rQ  r   r   r   rT        z0generate_non_out_variant_call.<locals>.<genexpr>cpunativeat::::(r0  r1  )r   r   rE  rn  r   r   r9  )r   ri  rB  kernel_name	arg_namesnamespace_namer   r   r   generate_non_out_variant_call  s   
r{  r   c                 C  s\   | j j}t|}|| j }|r|j}dd | D }d}d| d| dd| dS )	Nc                 s  rq  r  rP  rQ  r   r   r   rT  $  rr  z,generate_call_to_view_ops.<locals>.<genexpr>rt  ru  rv  rw  r0  r1  )r   r   r   r   rk  rl  r   r9  )r   ri  rB  rx  rl  ry  rz  r   r   r   generate_call_to_view_ops  s   
r|  c                 C  s   | j j}| s
J g }t| |}| jrdd |jj D }ng }|jjD ]}t|tr3|	|j
j q$t|ts:J |	|j q$| jsXt|jj dksNJ |	|jj d j d|}| jrbdnd}d| d	| d
| dS )Nc                 S  s   g | ]}|j qS r   rP  )rR  out_argr   r   r   r_  2  s    z-generate_out_variant_call.<locals>.<listcomp>r   r   r0  rs  rt  ru  rv  rw  r1  )r   r   rE  rp  r   r   r   r   r   rH  argumentr   r   lenr9  )r   ri  rB  ry  rx  r   cpp_arg_namesrz  r   r   r   generate_out_variant_call)  s$   


r  )zisin.Scalar_Tensorr  r  r  r!  histcl1_lossmulti_margin_lossmultilabel_margin_lossnll_loss
nll_loss2dprodc                 C  s"   t | }|d |d }|tvS )Nrw  )r   findno_memory_resize_ops)rB  
schema_strtype_variant_op_namer   r   r   should_check_resizeU  s   r  c                 C  s   | j jjjjS r  )r   r   r   r   )r   r   r   r   op_name_from_group[  s   r  c                   @  s4   e Zd ZdddZdd
dZdddZdddZdS )GenOpDispatchergroupsSequence[NativeFunctionsGroup]ri  r   r   r   c           	   	   C  s   |sdS g }|D ].}t |  t|sJ t|tsJ | ||}|| W d    n1 s1w   Y  qt|d }d|}d| d| d| d}|S )Nr   r   
z&
REGISTER_OPERATOR_FUNCTOR(
    aten::,
    aten_(,
    [](Node* n) -> SROperator {
      z9
      LogAndDumpSchema(n);
      return nullptr;
    })
)r   r   r   r
   out_variant_op_generatorrH  r  r9  	selfr  ri  generated_type_variantsr   generated_type_variantr  body	generatedr   r   r   out_variant`  s*   


zGenOpDispatcher.out_variant"Sequence[NativeFunctionsViewGroup]c           	   	   C  s   |sdS g }|D ].}t |  t|sJ t|tsJ | ||}|| W d    n1 s1w   Y  qt|d }d|}d| d| d| d}|S )Nr   r   r  z-
REGISTER_NATIVE_OPERATOR_FUNCTOR(
    aten::r  r  z:
      LogAndDumpSchema(n);
      return nullptr;
    });
)	r   r   r   r   view_op_generatorrH  r   func_name_base_strr9  r  r   r   r   r   z  s*   


zGenOpDispatcher.viewr   r
   c           
      C  s   |j }t|j}t|j j}t||}t|jjjjdksJ t|jjjjd j}t	||}d| d| d| d| d| d| d	}	|	S )
Nr   r   +
      if (n->matches(torch::schema("aten::<"))) {
        return [](ProcessedNode* p_node) {
          zM
          if (p_node->Output(0).isNone()) {
            p_node->Output(0) = z2;
            return;
          }
          auto& z< = p_node->Output(0).toTensor();
          fastResizeToZero(z);
          ;
        };
      })
r   r   r   rh  r{  r  r   r   r   r  )
r  r   ri  r   rB  populated_argumentfunctional_variant_callout_variable_nameout_variant_callr  r   r   r   r    s*   


	
z(GenOpDispatcher.out_variant_op_generatorr   c                 C  s>   t |jj}t|jj}t||}d| d| d| d}|S )Nr  r  z!
            p_node->Output(0) = r  )r   r   r   rh  r|  )r  r   ri  rB  r  r  r  r   r   r   r    s   
z!GenOpDispatcher.view_op_generatorN)r  r  ri  r   r   r   )r  r  ri  r   r   r   r   r
   ri  r   r   r   r   r   ri  r   r   r   )__name__
__module____qualname__r  r   r  r  r   r   r   r   r  _  s
    


r  c                   @  s4   e Zd ZdddZddd	ZdddZdddZdS )GenOpTestCaser  r  r   r   c              	   C  v   |sdS g }|D ]-}t | t|sJ t|tsJ | |}|| W d    n1 s0w   Y  qd|S Nr   r  )r   r   r   r
   "out_variant_op_test_case_generatorrH  r9  r  r  r  r   r  r   r   r   r       


zGenOpTestCase.out_variantr  c              	   C  r  r  )r   r   r   r   view_op_test_case_generatorrH  r9  r  r   r   r   r     r  zGenOpTestCase.viewr   r
   c                 C  s8  |j j}t|}|ddksJ |d |d dd}t|}||s)J t|}ddd |D }ddd |D }t	|j
d	kr[t|j
d jtr[|j
d jjtju s]J t|d}	t|d}
t|d	}t|d	}t|rwd
nd}d| d| d| d| d|	 d|
 d| d| d| d| d}|S )Nrw  r   ._, c                 s  .    | ]\}}|d u r|n| d| V  qd S Nz: r   rR  rM  r   r   r   r   rT    
    
zCGenOpTestCase.out_variant_op_test_case_generator.<locals>.<genexpr>c                 s      | ]\}}|V  qd S r  r   rR  rM  r  r   r   r   rT        r   truer3  
TEST(StaticRuntime, autogen_1) {
  const std::string script = R"IR(
    graph(?):
        %bias: None = prim::Constant()
        %ret = aten::Q)
        %cloned = aten::clone(%ret, %bias)
        return (%cloned)
  )IR";

  
  std::vector<IValue> args{zj};
  testStaticRuntime(script, args, {}, /*use_allclose=*/false, /*use_equalnan=*/false, /*check_resize=*/z);

  z
  std::vector<IValue> args2{zm};
  testStaticRuntime(script, args, args2, /*use_allclose=*/false, /*use_equalnan=*/false, /*check_resize=*/z);

}
)r   r   r   r  replacer  
startswithr`  r9  r  r   r   r   r   r   r   r   rO  rU  r  )r  r   rB  r  r  r  	arg_typesarg_declarationsry  test_value_definitionstest_value_namestest_value_definitions2test_value_names2check_resizer  r   r   r   r    sX   




z0GenOpTestCase.out_variant_op_test_case_generatorr   c                 C  s   |j j}t|}|ddksJ |d |d dd}|j j}||s)J t|}ddd |D }ddd |D }t	|j
d	kr[t|j
d jtr[|j
d jjtju s]J t|d}	t|d}
d
| d| d| d| d|	 d|
 d}|S )Nrw  r   r  r  r  c                 s  r  r  r   r  r   r   r   rT    r  z<GenOpTestCase.view_op_test_case_generator.<locals>.<genexpr>c                 s  r  r  r   r  r   r   r   rT    r  r   r  r  r  r  r  z(};
  testStaticRuntime(script, args);
}
)r   r   r   r  r  r   r  r`  r9  r  r   r   r   r   r   r   r   rO  rU  )r  r   rB  r  r  r  r  r  ry  r  r  r  r   r   r   r    sB   


z)GenOpTestCase.view_op_test_case_generatorN)r  r  r   r   )r  r  r   r   r   r
   r   r   )r   r   r   r   )r  r  r  r  r   r  r  r   r   r   r   r    s
    


0r  )r   r   r   r   )r   r   r   r   )r   r   r   r   )r  r   r   r   )r  r   r   r   )r  r   r   r   )r   r   r-  r   r  r   r   r   )rB  r	   r-  r   r   r   )rB  r	   r   rV  )rB  r	   r   r   r  r  )rB  r	   r   r   r  )F
__future__r   jsonloggingr5  typingr   torchgen.api.cppapir   torchgen.contextr   torchgen.modelr   r   r   r   r	   r
   r   r   r   r   r   torchgen.static_runtimer   collections.abcr   	getLoggerr   __annotations__r   	frozensetr   r   r   r  r  r  r  r(  r)  r*  test_tensor_shapes_stringloadsr+  r,  rA  rO  rU  r   r   r7  r   r   r   r   rZ  r`  rh  rn  rp  r{  r|  r  r  r  r  r  r  r   r   r   r   <module>   sx    4
 
I
<+





'









^