o
    <&i"j                     @   s  U d dl Z d dlZd dlZd dlmZmZmZmZmZ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 Zeje d< dee	eeef  de!fd	d
Z"e#dZ$de	eef de!fddZ%de	eeef deee!e&f  fddZ'e#dZ(e#dZ)de&de!fddZ*de&de!fddZ+e#dZ,e#dZ-de&de.fddZ/dZ0e 1e0Z2ee&e&f e d< de&de&fdd Z3de	eeef d!e.de&de&fd"d#Z4d$ed!e.de&fd%d&Z5d$ed!e.de&fd'd(Z6ej7d)ej.d*ej8d+ej&d,ej9d*ej:d*ej!d-iZ;d$edeee&ee& f  fd.d/Z<d$ede&fd0d1Z=ded2ede&fd3d4Z>ded2ede&fd5d6Z?ded2ede&fd7d8Z@ded2ede&fd9d:ZAded2ede&fd;d<ZBe#d=ZCd$ede!fd>d?ZDdede&fd@dAZEG dBdC dCZFG dDdE dEZGdS )F    N)DictListOptionalSequenceTupleUnion)native_function_manager)ArgumentBackendIndexBaseTyBaseTypeFunctionSchemaNativeFunctionsGroupNativeFunctionsViewGroupOptionalTypeSelfArgumentTensorOptionsArgumentsType)configlogger	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   LC:\wamp64\www\opt\env\Lib\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_data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_stridesgc                 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)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_namer3   r   maybe_methodr   r   r   is_supported   sZ   





rD   arg_typec                 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intboolScalar
ScalarTyper=   r0   r   r4   r   elem)rE   Ztype_conversion_methodsbase_ty_objectmethodsr   r   r   r9   !  s*   




r9   )Zbitwise_notZbitwise_andZ
bitwise_orZbitwise_xorZbitwise_left_shiftZbitwise_right_shiftgcdlcmZscattergather _convert_indices_from_coo_to_csr _convert_indices_from_csr_to_coo)Zview_as_realimagZ_conjop_namec                 C      | t v S N)should_use_int_tensor_ops_rU   r   r   r   should_use_int_tensor_     rZ   c                 C   rV   rW   )should_use_complex_tensor_ops_rY   r   r   r   should_use_complex_tensorc  r[   r]   )	Zaddmv	index_addrR   rS   Znll_loss_backwarddotvdotouterr!   )Zaddmmmmnuclear_normZdiagZ_addmm_activationZmatrix_Htc                 C   s   | t v rdS | tv rdS dS )NrF         )test_tensor_dim_ops_1_test_tensor_dim_ops_2_rY   r   r   r   test_tensor_dimy  s
   ri   z{"view_as_complex": "{2, 2}"}test_tensor_shape_jsonc                 C   s   | t v rt |  S dS )Nr.   )rj   rY   r   r   r   test_tensor_shape  s   rk   indexc                 C   s  t |}|dkr.|dkrdnd}t|}t|t| }||d 7 }dd| g|  }t|r9d| d	}nt|rDd
| 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ri| j}	nt| trtt| jtsvJ | jj}	|	|v sJ d||	 }
|
S )Nr.   r      @   re   z{%s},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)rk   ri   mathceilfloatjoinrZ   r]   r   rG   rH   rI   rJ   rK   r=   r0   r   r4   r   rL   )rE   rl   rU   Ztensor_size_exZnum_tensorsZnum_dimZsize_per_dimZtensor_expressionZvalue_expressionsrM   Zvalue_expressionr   r   r   test_value_expression  s:   	
rx   schemac           	      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_fnr4   r5   r8   rx   r:   r   Zoverride_test_valuesitemsappendrw   )	ry   rl   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 )Nro   c                 3   s    | ]
}|j    V  qd S rW   r4   .0r   rl   r   r   	<genexpr>  s    z,generate_test_value_names.<locals>.<genexpr>)r|   rw   r8   )ry   rl   r   r   r   generate_test_value_names  s   r   rG   rH   rv   r=   rI   c                    s4   dt dtttt f fdd  fdd|  D S )Nr   r   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:   r0   r   rL   r   r4   /generate_test_ir_arguments_base_ty_to_type_str_)r   rd   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>  s    z.generate_test_ir_arguments.<locals>.<listcomp>)r	   r   r=   r   r8   )ry   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).rz   r{   )	enumerater8   r9   r:   r~   r4   rw   )ry   r   ir   rC   Zis_referenceZtype_conversion_method	referencer   r   r   generate_arg_extraction  s   
r   backend_indexc                 C   .   | | j}| js|d u rt| jjS |jS rW   )
get_kernelr>   r?   r;   r4   r3   kernelr-   r   r   r   r   r   get_kernel_name     r   c                 C   r   rW   )r   r/   r?   r;   r4   r3   r   r   r   r   r   get_out_kernel_name  r   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       | ]}|j V  qd S rW   r   r   r   r   r   r         z0generate_non_out_variant_call.<locals>.<genexpr>cpunativeat::::(ro   rp   )r>   r3   r|   r   r8   r?   rw   )r-   r   ry   kernel_name	arg_namesnamespace_namer   r   r   generate_non_out_variant_call   s   
r   c                 C   s\   | j j}t|}|| j }|r|j}dd | D }d}d| d| dd| dS )	Nc                 s   r   rW   r   r   r   r   r   r     r   z,generate_call_to_view_ops.<locals>.<genexpr>r   r   r   r   ro   rp   )r1   r3   r;   r4   r   r   r8   rw   )r-   r   ry   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 ]}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   r   )r   Zout_argr   r   r   r   !  s    z-generate_out_variant_call.<locals>.<listcomp>rF   r   ro   r   r   r   r   r   rp   )r/   r3   r|   r   r?   r   rB   r0   r   r~   Zargumentr4   r	   lenrw   )r-   r   ry   r   r   r   Zcpp_arg_namesr   r   r   r   generate_out_variant_call  s$   


r   )zisin.Scalar_Tensorr^   r_   r`   rc   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)ry   
schema_strtype_variant_op_namer   r   r   should_check_resizeD  s   r   c                 C   s   | j jjjjS rW   )r>   r3   r4   r5   )r-   r   r   r   op_name_from_groupJ  s   r   c                   @   sl   e Zd Zdee dedefddZdee dedefddZ	dededefd	d
Z
dededefddZdS )GenOpDispatchergroupsr   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 {
      :
      LogAndDumpSchema(n);
      return nullptr;
    });
)r   rD   r0   r   out_variant_op_generatorr~   r   rw   	selfr   r   generated_type_variantsr-   generated_type_variantrU   body	generatedr   r   r   out_variantO  s*   


zGenOpDispatcher.out_variantc           	   	   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   r   )	r   rD   r0   r   view_op_generatorr~   r   Zfunc_name_base_strrw   r   r   r   r   r1   i  s*   


zGenOpDispatcher.viewr-   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 )
NrF   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=   r3   r   r   r   r/   r   r4   r   )
r   r-   r   r>   ry   populated_argumentfunctional_variant_callZout_variable_nameZout_variant_callr   r   r   r   r     s*   


	
z(GenOpDispatcher.out_variant_op_generatorc                 C   s>   t |jj}t|jj}t||}d| d| d| d}|S )Nr   r   z!
            p_node->Output(0) = r   )r=   r1   r3   r   r   )r   r-   r   ry   r   r   r   r   r   r   r     s   
z!GenOpDispatcher.view_op_generatorN)__name__
__module____qualname__r   r   r
   r=   r   r   r1   r   r   r   r   r   r   r   N  s:    


r   c                   @   s\   e Zd Zdee defddZdee defddZdedefdd	Z	dedefd
dZ
dS )GenOpTestCaser   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   rD   r0   r   "out_variant_op_test_case_generatorr~   rw   r   r   r   r-   r   r   r   r   r        


zGenOpTestCase.out_variantc              	   C   r   r   )r   rD   r0   r   view_op_test_case_generatorr~   rw   r   r   r   r   r1     r   zGenOpTestCase.viewr-   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 )Nr   r   ._, c                 s   .    | ]\}}|d u r|n| d| V  qd S Nz: r   r   r   rE   r   r   r   r     
    
zCGenOpTestCase.out_variant_op_test_case_generator.<locals>.<genexpr>c                 s       | ]\}}|V  qd S rW   r   r   r   r   r   r   r   r         rF   truerr   
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>   r3   r=   r   replacer   
startswithr   rw   r   r<   r0   r:   r   r4   r   rG   r   r   r   )r   r-   ry   r   r   rU   	arg_typesarg_declarationsr   test_value_definitionstest_value_namesZtest_value_definitions2Ztest_value_names2Zcheck_resizer   r   r   r   r     sX   




z0GenOpTestCase.out_variant_op_test_case_generatorc                 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 )Nr   r   r   r   r   c                 s   r   r   r   r   r   r   r   r     r   z<GenOpTestCase.view_op_test_case_generator.<locals>.<genexpr>c                 s   r   rW   r   r   r   r   r   r     r   rF   r   r   r   r   r   z(};
  testStaticRuntime(script, args);
}
)r1   r3   r=   r   r   r2   r   r   rw   r   r<   r0   r:   r   r4   r   rG   r   r   )r   r-   ry   r   r   rU   r   r   r   r   r   r   r   r   r   r     sB   


z)GenOpTestCase.view_op_test_case_generatorN)r   r   r   r   r   r=   r   r   r1   r   r   r   r   r   r   r     s
    0r   )Hjsonloggingrt   typingr   r   r   r   r   r   Ztorchgen.api.cppapir;   Ztorchgen.contextr   Ztorchgen.modelr	   r
   r   r   r   r   r   r   r   r   r   Ztorchgen.static_runtimer   	getLoggerr   Logger__annotations__rI   r   	frozensetr7   rD   r=   r9   rX   r\   rZ   r]   rg   rh   rH   ri   Ztest_tensor_shapes_stringloadsrj   rk   rx   r   r   rG   rv   rJ   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   
  4
 ><
+
'



^