a
    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rd dlmZ e Zded	< d
ddddZe dZ!dddddZ"dddddZ#e dZ$e dZ%dddddZ&ddddd Z'e d!Z(e d"Z)dd#dd$d%Z*d&Z+e,e+Z-d'ed(< dddd)d*Z.dd#ddd+d,d-Z/d.d#dd/d0d1Z0d.d#dd/d2d3Z1ej2d4ej3d#ej4d5ej5dej6d#ej7d#ej8diZ9d.d6d7d8d9Z:d.dd7d:d;Z;d<d=dd>d?d@Z<d<d=dd>dAdBZ=d<d=dd>dCdDZ>dEd=dd>dFdGZ?d<d=dd>dHdIZ@e dJZAd.dd7dKdLZBd<dddMdNZCG dOdP dPZDG dQdR dRZEdS )S    )annotationsN)TYPE_CHECKING)native_function_manager)ArgumentBackendIndexBaseTyBaseTypeFunctionSchemaNativeFunctionsGroupNativeFunctionsViewGroupOptionalTypeSelfArgumentTensorOptionsArgumentsType)config)Sequencezlogging.Loggerloggerz:Sequence[Argument | SelfArgument | TensorOptionsArguments]bool)	argumentsreturnc                 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   O/var/www/auris/lib/python3.9/site-packages/torchgen/static_runtime/generator.py	has_alias!   s    r   )Zsparse_sampled_addmmZhspmmZlinalg_svdvalsZsspaddmmZcoalesceZ_indicesindicesZ_valuesvaluesZcrow_indicesZcol_indicesZfloor_dividegerZconj_physicalZbinary_cross_entropyZarccoshZcholeskyZlu_solveZlinalg_choleskyZlinalg_householder_productZlinalg_ldl_solveZ_compute_linear_combinationZ
_make_dualZ
_fw_primalZ_index_reduceZ!_new_zeros_with_same_feature_metaZ_conj_physicalZ binary_cross_entropy_with_logitsZbincountZconv_tbccopy
_copy_fromZ_copy_from_and_resizeZcount_nonzeroZcudnn_affine_grid_generatorZ$cudnn_affine_grid_generator_backwardZcudnn_grid_samplerZ
diag_embedZ	embeddingZembedding_dense_backwardZ_embedding_bag_dense_backwardZ*_embedding_bag_per_sample_weights_backwardZgrid_sampler_2dZ_grid_sampler_2d_cpu_fallbackZgrid_sampler_3disnanZmkldnn_linearZmedianZ	nanmedianZ_sparse_sparse_matmulZbatch_norm_backward_elemtZ_euclidean_distZpixel_shuffleZpixel_unshuffleZchannel_shuffleZ_reshape_nested_backwardZreluZpreluZceluZslice_scatterZselect_scatterZdiagonal_scattersumZ_mkldnn_transposeZ_nested_tensor_from_maskZ_nested_from_paddedZ_nested_tensor_sizeZ&_nested_from_padded_and_nested_exampleZ_standard_gamma_gradZ_dirichlet_gradZnative_normZ_sparse_softmaxZ_sparse_softmax_backward_dataZ_sparse_log_softmaxZ!_sparse_log_softmax_backward_dataZzeroZ_sparse_addmmZsparse_maskZ_sparse_mask_projectionZ	_to_denseZ	_coalesceZ
_coalescedZcopy_sparse_to_sparseZ	to_sparseZto_sparse_csrZto_sparse_cscZ	to_mkldnnZquantize_per_tensor_dynamicZquantize_per_channelZq_per_channel_scalesZq_per_channel_zero_pointsZint_reprZ"_make_per_channel_quantized_tensorsetZliftZ
lift_freshZlift_fresh_copyZmasked_scatterZ_masked_softmaxZ_masked_softmax_backwardputZindex_reducetraceZ_cholesky_solve_helperdistmaxZ_torch_cuda_cu_linker_symbol_opZglu_jvpZglu_backward_jvpZhardswish_backwardZrrelu_with_noise_backwardZ#mkldnn_adaptive_avg_pool2d_backwardZ_adaptive_avg_pool2d_backwardZ_adaptive_avg_pool3d_backwardisinfZlinalg_lu_solveZlinalg_vecdotZlinalg_matrix_expZlinalg_eigvalshZ_test_warn_in_autogradZ%_test_autograd_multiple_dispatch_viewZ*_test_autograd_multiple_dispatch_view_copyZ_segment_reduceZ_segment_reduce_backwardZ_fw_primal_copyZ_make_dual_copyZview_as_real_copyZview_as_complex_copyZ
_conj_copyZ_neg_view_copyZdiagonal_copyZdetach_copyZsqueeze_copyZt_copyZunsqueeze_copyZ_indices_copyZ_values_copyZindices_copyZvalues_copyZcrow_indices_copyZcol_indices_copyZccol_indicesZccol_indices_copyZrow_indicesZrow_indices_copyZunfold_copyZ
alias_copyZ_triton_multi_head_attentionZspecial_airy_aiZspecial_bessel_j0Zspecial_bessel_j1Zspecial_bessel_y0Zspecial_bessel_y1Zspecial_chebyshev_polynomial_tZspecial_chebyshev_polynomial_uZspecial_chebyshev_polynomial_vZspecial_chebyshev_polynomial_wZspecial_hermite_polynomial_hZspecial_hermite_polynomial_heZspecial_laguerre_polynomial_lZspecial_legendre_polynomial_pZspecial_modified_bessel_i0Zspecial_modified_bessel_i1Zspecial_modified_bessel_k0Zspecial_modified_bessel_k1Z!special_scaled_modified_bessel_k0Z!special_scaled_modified_bessel_k1Z&special_shifted_chebyshev_polynomial_tZ&special_shifted_chebyshev_polynomial_uZ&special_shifted_chebyshev_polynomial_vZ&special_shifted_chebyshev_polynomial_wZspecial_spherical_bessel_j0Z_foobarZ_nested_tensor_stridesZ_nested_tensor_storage_offsetsZ_nested_get_valuesZ_nested_get_values_copyZ_nested_view_from_jaggedZ_nested_view_from_jagged_copyZ_nested_view_from_bufferZ_nested_view_from_buffer_copyZ_int_mmZ_to_sparse_cscZ_to_sparse_csrZsegment_reducez/NativeFunctionsGroup | NativeFunctionsViewGroupgr   c                 C  s  d}d }t | tr$| jj}| jj}n| jjjjj}| jj}t	| rTt
d| dS |tv rlt
d| dS | D ]$}t|j}|stt
d|  dS qtt | trdtj|jdd krt
dt| dS d	S | jj D ](}t|j}|st
d| jj  dS q| jsDt| d
r@t|dr@t|jdsDdS dtj|jdd krnt
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)Z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   Zis_hand_writtenr   infoBLOCKED_OPSschema_order_argumentsivalue_type_conversion_methodtypecppZreturns_typereturnsZcpp_typestr
functional
structuredhasattrendswithr   r   non_out)r+   Zbase_op_namer1   r   maybe_methodr   r   r   is_supported   sV    





rB   zBaseType | OptionalType | Typeztuple[bool, str] | None)arg_typer   c                 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
rbt| jtsXdS | jj	}ndS ||vrrdS || }t| tr|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>())Fz toOptional<::std::string_view>()Nr      )r   Tensorintr   Scalar
ScalarTyper;   r.   r   r2   r   elem)rC   Ztype_conversion_methodsbase_ty_objectmethodsr   r   r   r7   2  s*    




r7   )Zbitwise_notZbitwise_andZ
bitwise_orZbitwise_xorZbitwise_left_shiftZbitwise_right_shiftgcdlcmZscatterZgather _convert_indices_from_coo_to_csr _convert_indices_from_csr_to_coo)Zview_as_realimagZ_conjr;   )op_namer   c                 C  s   | t v S N)should_use_int_tensor_ops_rQ   r   r   r   should_use_int_tensorq  s    rU   c                 C  s   | t v S rR   )should_use_complex_tensor_ops_rT   r   r   r   should_use_complex_tensoru  s    rW   )	Zaddmv	index_addrN   rO   Znll_loss_backwarddotvdotouterr   )Zaddmmmmnuclear_normZdiagZ_addmm_activationZmatrix_HtrF   c                 C  s   | t v rdS | tv rdS dS )NrD         )test_tensor_dim_ops_1_test_tensor_dim_ops_2_rT   r   r   r   test_tensor_dim  s
    rc   z{"view_as_complex": "{2, 2}"}zdict[str, str]test_tensor_shape_jsonc                 C  s   | t v rt |  S dS d S )Nr,   )rd   rT   r   r   r   test_tensor_shape  s    re   )rC   indexrQ   r   c                 C  s  t |}|dkr^|dkrdnd}t|}t|t| }||d 7 }dd| g| }t|rtd| d	}n"t|rd
| 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r| j}	n"t| trt| jtsJ | jj}	|	|v sJ 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)re   rc   mathceilfloatformatjoinrU   rW   r   rE   rF   r   rG   rH   r;   r.   r   r2   r   rI   )rC   rf   rQ   Ztensor_size_exZnum_tensorsZnum_dimZsize_per_dimZtensor_expressionZvalue_expressionsrJ   Zvalue_expressionr   r   r   test_value_expression  s:    	
rs   r	   )schemarf   r   c           	      C  s   |   rJ | jjj}i }|  D ]}t|j||}|||j< q"t||| g }| D ]"\}}|	d| | d|  qZd
|d S )Nzauto z = ;
    ;)	is_out_fnr2   r3   r6   rs   r8   r   Zoverride_test_valuesitemsappendrr   )	rt   rf   Zschema_nameZarg_mapr   Ztest_value_exparg_populationsarg_name	arg_valuer   r   r   generate_test_value_definitions  s    
r}   c                   s(   |   rJ d fdd|  D S )Nri   c                 3  s   | ]}|j    V  qd S rR   r2   .0r   rf   r   r   	<genexpr>      z,generate_test_value_names.<locals>.<genexpr>)rw   rr   r6   )rt   rf   r   r   r   generate_test_value_names  s    r   rE   rp   zlist[tuple[str, str | None]])rt   r   c                   s&   ddddd  fdd|   D S )Nr   ztuple[str, str | None])r   r   c                 S  sd   | j }d}t|tr|j}d}t|ts,J d }|jtv rDt|j }|rV|rV| d}d| j |fS )NFT?%)r8   r.   r   rI   r   r2   /generate_test_ir_arguments_base_ty_to_type_str_)r   r^   Zadd_optionalZtype_strr   r   r   ir_argument  s    



z/generate_test_ir_arguments.<locals>.ir_argumentc                   s   g | ]} |qS r   r   r   r   r   r   
<listcomp>  r   z.generate_test_ir_arguments.<locals>.<listcomp>)r6   )rt   r   r   r   generate_test_ir_arguments  s    r   c                 C  sr   g }t |  D ]R\}}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).ru   rv   )	enumerater6   r7   r8   ry   r2   rr   )rt   rz   ir   rA   Zis_referenceZtype_conversion_method	referencer   r   r   generate_arg_extraction  s    
r   r
   r   r+   backend_indexr   c                 C  s.   | | j}| js|d u r(t| jjS |jS rR   )
get_kernelr<   r=   r9   r2   r1   kernelr+   r   r   r   r   r   get_kernel_name  s    r   c                 C  s.   | | j}| js|d u r(t| jjS |jS rR   )r   r-   r=   r9   r2   r1   r   r   r   r   r   get_out_kernel_name  s    r   c                 C  s\   | j j}| rJ t| |}dd | D }| jr:dnd}d| d| dd| d	S )
Nc                 s  s   | ]}|j V  qd S rR   r~   r   r   r   r   r     r   z0generate_non_out_variant_call.<locals>.<genexpr>cpunativeat::::(ri   rj   )r<   r1   rw   r   r6   r=   rr   )r+   r   rt   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  s   | ]}|j V  qd S rR   r~   r   r   r   r   r   %  r   z,generate_call_to_view_ops.<locals>.<genexpr>r   r   r   r   ri   rj   )r/   r1   r9   r2   r   r   r6   rr   )r+   r   rt   r   r   r   r   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 ]8}t|trf|	|j
j qHt|tstJ |	|j qH| jst|jj dksJ |	|jj d j d|}| jrdnd}d| d	| d
| dS )Nc                 S  s   g | ]
}|j qS r   r~   )r   Zout_argr   r   r   r   3  r   z-generate_out_variant_call.<locals>.<listcomp>rD   r   ri   r   r   r   r   r   rj   )r-   r1   rw   r   r=   r   r@   r.   r   ry   argumentr2   r   lenrr   )r+   r   rt   r   r   r   Zcpp_arg_namesr   r   r   r   generate_out_variant_call*  s$    


r   )zisin.Scalar_TensorrX   rY   rZ   r]   ZhistcZl1_lossZmulti_margin_lossZmultilabel_margin_lossZnll_lossZ
nll_loss2dprodc                 C  s"   t | }|d |d }|tvS )Nr   )r;   findno_memory_resize_ops)rt   
schema_strtype_variant_op_namer   r   r   should_check_resizeV  s    r   c                 C  s   | j jjjjS rR   )r<   r1   r2   r3   )r+   r   r   r   op_name_from_group\  s    r   c                   @  sT   e Zd ZddddddZdddddd	Zd
dddddZddddddZdS )GenOpDispatcherSequence[NativeFunctionsGroup]r   r;   )groupsr   r   c           	   	   C  s   |sdS g }|D ]\}t |@ t|s*J t|ts8J | ||}|| W d    q1 sb0    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   rB   r.   r
   out_variant_op_generatorry   r   rr   	selfr   r   generated_type_variantsr+   generated_type_variantrQ   body	generatedr   r   r   out_varianta  s&    
*

zGenOpDispatcher.out_variant"Sequence[NativeFunctionsViewGroup]c           	   	   C  s   |sdS g }|D ]\}t |@ t|s*J t|ts8J | ||}|| W d    q1 sb0    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   rB   r.   r   view_op_generatorry   r   Zfunc_name_base_strrr   r   r   r   r   r/   {  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 )
NrD   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;   r1   r   r   r   r-   r   r2   r   )
r   r+   r   r<   rt   populated_argumentfunctional_variant_callZout_variable_nameZ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/   r1   r   r   )r   r+   r   rt   r   r   r   r   r   r   r     s    
z!GenOpDispatcher.view_op_generatorN)__name__
__module____qualname__r   r/   r   r   r   r   r   r   r   `  s   r   c                   @  sL   e Zd ZdddddZdddddZd	dd
ddZddd
ddZdS )GenOpTestCaser   r;   )r   r   c              	   C  sv   |sdS g }|D ]Z}t |> t|s*J t|ts8J | |}|| W d    q1 s`0    Y  qd|S Nr,   r   )r   rB   r.   r
   "out_variant_op_test_case_generatorry   rr   r   r   r   r+   r   r   r   r   r     s    

*zGenOpTestCase.out_variantr   c              	   C  sv   |sdS g }|D ]Z}t |> t|s*J t|ts8J | |}|| W d    q1 s`0    Y  qd|S r   )r   rB   r.   r   view_op_test_case_generatorry   rr   r   r   r   r   r/     s    

*zGenOpTestCase.viewr
   r*   c                 C  s8  |j j}t|}|ddks"J |d |d dd}t|}||sRJ t|}ddd |D }ddd |D }t	|j
d	krt|j
d jtr|j
d jjtju sJ t|d}	t|d}
t|d	}t|d	}t|rd
nd}d| d| d| d| d|	 d|
 d| d| d| d| d}|S )Nr   r   ._, c                 s  s,   | ]$\}}|d u r|n| d| V  qd S Nz: r   r   r{   rC   r   r   r   r     s   zCGenOpTestCase.out_variant_op_test_case_generator.<locals>.<genexpr>c                 s  s   | ]\}}|V  qd S rR   r   r   r{   r   r   r   r   r     r   rD   truerl   
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<   r1   r;   r   replacer   
startswithr   rr   r   r:   r.   r8   r   r2   r   rE   r}   r   r   )r   r+   rt   r   r   rQ   	arg_typesarg_declarationsr   test_value_definitionstest_value_namesZtest_value_definitions2Ztest_value_names2Zcheck_resizer   r   r   r   r     s\    




z0GenOpTestCase.out_variant_op_test_case_generatorr   c                 C  s   |j j}t|}|ddks"J |d |d dd}|j j}||sRJ t|}ddd |D }ddd |D }t	|j
d	krt|j
d jtr|j
d jjtju sJ t|d}	t|d}
d
| d| d| d| d|	 d|
 d}|S )Nr   r   r   r   r   c                 s  s,   | ]$\}}|d u r|n| d| V  qd S r   r   r   r   r   r   r     s   z<GenOpTestCase.view_op_test_case_generator.<locals>.<genexpr>c                 s  s   | ]\}}|V  qd S rR   r   r   r   r   r   r     r   rD   r   r   r   r   r   z(};
  testStaticRuntime(script, args);
}
)r/   r1   r;   r   r   r0   r   r   rr   r   r:   r.   r8   r   r2   r   rE   r}   r   )r   r+   rt   r   r   rQ   r   r   r   r   r   r   r   r   r   r     sF    


z)GenOpTestCase.view_op_test_case_generatorN)r   r   r   r   r/   r   r   r   r   r   r   r     s   0r   )F
__future__r   jsonloggingrn   typingr   Ztorchgen.api.cppapir9   Ztorchgen.contextr   Ztorchgen.modelr   r   r   r   r	   r
   r   r   r   r   r   Ztorchgen.static_runtimer   collections.abcr   	getLoggerr   __annotations__r   	frozensetr5   rB   r7   rS   rV   rU   rW   ra   rb   rc   Ztest_tensor_shapes_stringloadsrd   re   rs   r}   r   rE   rF   rp   r;   rG   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sv   4 I<,'^