Tensorflow Common new (#15192)

* Moved files to another directory

* Rename header op_table.hpp to common_op_table.hpp for all files in src/frontends/tensorflow_common/src/op/

* Removed visability macroses

* CMake changes

* Unit-test execution in .ci

* Update labeler.yml

* Codeowners

* Style check and fix

* Static Build arrangement

* Addressing the comments

* install common headers to previous place

* New approach with public decoder and graph_iterator

* New approach with public decoder and graph_iterator

* Move GraphIterator back

* Comments addressed

* Comments adressed

* Preliminary TF FE README.md changes

* Added target_compile_definitions OPENVINO_STATIC_LIBRARY for static build
This commit is contained in:
Evgenya Stepyreva 2023-01-23 19:33:21 +04:00 committed by GitHub
parent 66c0dcc742
commit e2a1bd78a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
141 changed files with 412 additions and 332 deletions

View File

@ -394,6 +394,9 @@ jobs:
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-Tensorflow.xml
displayName: 'TensorFlow Frontend Unit Tests'
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-TensorflowCommon.xml
displayName: 'TensorFlow Common Unit Tests'
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-LpTransformations.xml
displayName: 'Low Precision Transformations Tests'

View File

@ -320,6 +320,12 @@ jobs:
LD_LIBRARY_PATH: $(INSTALL_TEST_DIR)
displayName: 'TensorFlow Frontend Unit Tests'
- script: |
$(INSTALL_TEST_DIR)/ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-TensorflowCommon.xml
env:
LD_LIBRARY_PATH: $(INSTALL_TEST_DIR)
displayName: 'TensorFlow Common Unit Tests'
# python3 $(WORK_DIR)/gtest-parallel/gtest_parallel.py $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --workers=16 --dump_json_test_results=InferenceEngineUnitTests.json --gtest_filter=*smoke* -- --gtest_print_time=1
- script: $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-InferenceEngineUnitTests.xml
displayName: 'IE UT old'

View File

@ -278,6 +278,9 @@ jobs:
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\TEST-Tensorflow.xml
displayName: 'TensorFlow Frontend Unit Tests'
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\TEST-TensorflowCommon.xml
displayName: 'TensorFlow Common Unit Tests'
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\LpTransformations.xml
displayName: 'Low Precision Transformations Tests'

1
.github/CODEOWNERS vendored
View File

@ -80,6 +80,7 @@
/src/frontends/ir/ @openvinotoolkit/openvino-ir-frontend-maintainers
/src/frontends/paddle/ @openvinotoolkit/openvino-ie-paddle-maintainers
/src/frontends/tensorflow/ @openvinotoolkit/openvino-tf-frontend-maintainers
/src/frontends/tensorflow_common/ @openvinotoolkit/openvino-tf-frontend-maintainers
/src/frontends/pytorch/ @openvinotoolkit/openvino-pytorch-frontend-maintainers
# OpenVINO ONNX Frontend:

1
.github/labeler.yml vendored
View File

@ -119,6 +119,7 @@
'category: TF FE':
- 'src/frontends/tensorflow/**/*'
- 'src/frontends/tensorflow_common/**/*'
- 'tests/layer_tests/tensorflow_tests/**/*'
'category: PyTorch FE':

View File

@ -25,5 +25,6 @@ if(ENABLE_OV_IR_FRONTEND)
endif()
if(ENABLE_OV_TF_FRONTEND)
add_subdirectory(tensorflow_common)
add_subdirectory(tensorflow)
endif()

View File

@ -5,6 +5,8 @@
#pragma once
#include "openvino/core/any.hpp"
#include "openvino/frontend/exception.hpp"
#include "openvino/frontend/visibility.hpp"
namespace ov {
namespace frontend {
@ -44,5 +46,35 @@ public:
virtual ~IDecoder() = default;
};
class FRONTEND_API DecoderBase {
public:
/// \brief Get attribute value by name
///
/// \param name Attribute name
/// \return Shared pointer to appropriate value converted to openvino data type if it exists, 'nullptr' otherwise
virtual ov::Any get_attribute(const std::string& name) const = 0;
/// \brief Get a number of inputs
virtual size_t get_input_size() const = 0;
/// \brief Get a producer name and its output port index
///
/// \param input_port_idx Input port index by which data is consumed
/// \param producer_name A producer name
/// \return producer_output_port_index Output port index from which data is generated
virtual void get_input_node(size_t input_port_idx,
std::string& producer_name,
size_t& producer_output_port_index) const = 0;
/// \brief Get operation type
virtual const std::string& get_op_type() const = 0;
/// \brief Get node name
virtual const std::string& get_op_name() const = 0;
/// \brief Destructor
virtual ~DecoderBase();
};
} // namespace frontend
} // namespace ov

View File

@ -52,6 +52,10 @@ public:
return m_op_type;
}
virtual const std::string& get_name() const {
FRONT_END_NOT_IMPLEMENTED(get_name);
}
/// \brief Returns node attribute by name.
template <class T>
T get_attribute(const std::string& name) const {

View File

@ -0,0 +1,9 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "openvino/frontend/decoder.hpp"
using namespace ov::frontend;
DecoderBase::~DecoderBase() = default;

View File

@ -45,6 +45,9 @@ The structure of OpenVINO TensorFlow Frontend sources includes the following dir
* [src](./src/) folder contains the sources of the component.
* [tests](./tests) cover internal transformations.
Additionally, there is a shared [tensorflow common](../tensorflow_common) directory with same structure and purposes.
Its content depend only on common FrontEnd APIs thus is free to use in other FrontEnds.
## Architecture
OpenVINO TensorFlow Frontend uses [TensorFlow Protobuf files](./src/proto) to read and parse different TensorFlow model formats.
@ -97,9 +100,9 @@ The next extension types are supported:
## How to implement support of a new TensorFlow operation
TensorFlow conversion into the OpenVINO opset operation requires one pass or two passes:
* One pass using [Loaders](./src/op/) directly transforms TF operation into a sub-graph of OpenVINO opset.
* Two passes consist of [Loaders](./src/op/) and [Internal Transformations](./src/helper_transforms),
where the first pass transforms a TF operation into a sub-graph with [Internal Operations](./src/helper_ops),
* One pass using [Loaders](../tensorflow_common/src/op/) directly transforms TF operation into a sub-graph of OpenVINO opset.
* Two passes consist of [Loaders](../tensorflow_common/src/op/) and [Internal Transformations](../tensorflow_common/include/helper_transforms),
where the first pass transforms a TF operation into a sub-graph with [Internal Operations](../tensorflow_common/include/src/helper_ops),
and the second pass avoids internal operations. Two transformation passes are used when a TensorFlow operation
cannot be mapped into a sub-graph of the OpenVINO opset, and the conversion depends on the succeeding operations in the graph.
@ -108,7 +111,7 @@ In most cases, it is sufficient to use just one pass for TensorFlow operation co
### One transformation pass using Loader
Most TensorFlow operations can be converted by one transformation pass using `Loader`.
The dictionary of `Loaders` is placed in the [op_table.cpp](./src/op_table.cpp) file and loaders are in the [op](./src/op) directory:
The dictionary of `Loaders` is placed in the [op_table.cpp](./src/op_table.cpp) file and loaders are in the [op](../tensorflow_common/src/op/) directory:
https://github.com/openvinotoolkit/openvino/blob/7f3c95c161bc78ab2aefa6eab8b008142fb945bc/src/frontends/tensorflow/src/op_table.cpp#L129-L134
@ -119,7 +122,7 @@ https://github.com/openvinotoolkit/openvino/blob/7f3c95c161bc78ab2aefa6eab8b0081
In this example, the loader checks the consistency of the operation by using `default_op_checks` and retrieves an attribute of the equation by using the `NodeContext::get_attribute()` method.
The loader uses [OpenVINO Core API](../../core/README.md) for building the OpenVINO sub-graph to replace the TensorFlow operation.
The support of a new TensorFlow operation requires implementing a new `Loader` in a separate file in the [op](./src/op) directory and registering it into the dictionary of `Loaders`.
The support of a new TensorFlow operation requires implementing a new `Loader` in a separate file in the [op](../tensorflow_common/src/op/) directory and registering it into the dictionary of `Loaders`.
The main rules for loaders implementation:
1. Support dynamic shapes and ranks, undefined types, including for the future support of new types, such as strings and complex numbers.
@ -132,7 +135,7 @@ The main rules for loaders implementation:
### Two transformation passes using Loader and Internal Transformation
In rare cases, TensorFlow operation conversion requires two transformations (`Loader` and `Internal Transformation`).
In the first step, `Loader` must convert a TF operation into [Internal Operation](./src/helper_ops) that is used temporarily by the conversion pipeline.
In the first step, `Loader` must convert a TF operation into [Internal Operation](../tensorflow_common/helper_ops) that is used temporarily by the conversion pipeline.
The internal operation implementation must also contain the `validate_and_infer_types()` method as similar to [OpenVINO Core](https://docs.openvino.ai/nightly/groupov_ops_cpp_api.html) operations.
Here is an example of an implementation for the internal operation `SparseFillEmptyRows` used to convert Wide and Deep models.

View File

@ -1,45 +1,15 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include "openvino/core/any.hpp"
#include "openvino/frontend/tensorflow/visibility.hpp"
#include "openvino/frontend/decoder.hpp"
namespace ov {
namespace frontend {
namespace tensorflow {
class TENSORFLOW_API DecoderBase {
public:
/// \brief Get attribute value by name
///
/// \param name Attribute name
/// \return Shared pointer to appropriate value converted to openvino data type if it exists, 'nullptr' otherwise
virtual ov::Any get_attribute(const std::string& name) const = 0;
/// \brief Get a number of inputs
virtual size_t get_input_size() const = 0;
/// \brief Get a producer name and its output port index
///
/// \param input_port_idx Input port index by which data is consumed
/// \param producer_name A producer name
/// \return producer_output_port_index Output port index from which data is generated
virtual void get_input_node(size_t input_port_idx,
std::string& producer_name,
size_t& producer_output_port_index) const = 0;
/// \brief Get operation type
virtual const std::string& get_op_type() const = 0;
/// \brief Get node name
virtual const std::string& get_op_name() const = 0;
/// \brief Destructor
virtual ~DecoderBase() = default;
};
using DecoderBase = ov::frontend::DecoderBase;
} // namespace tensorflow
} // namespace frontend

View File

@ -6,22 +6,6 @@
#include "openvino/frontend/exception.hpp"
namespace ov {
namespace frontend {
namespace tensorflow {
class NodeContext;
class OpValidationFailure : public ov::frontend::OpValidationFailure {
public:
OpValidationFailure(const CheckLocInfo& check_loc_info, const NodeContext& node, const std::string& explanation)
: ov::frontend::OpValidationFailure(check_loc_info, get_error_msg_prefix_tf(node), explanation) {}
private:
static std::string get_error_msg_prefix_tf(const NodeContext& node);
};
} // namespace tensorflow
} // namespace frontend
/// \brief Macro to check whether a boolean condition holds.
/// \param node_context Object of NodeContext class
/// \param cond Condition to check
@ -29,6 +13,11 @@ private:
/// stream-insertion operator. Note that the expressions here will be evaluated lazily,
/// i.e., only if the `cond` evalutes to `false`.
/// \throws ::ov::OpValidationFailure if `cond` is false.
#define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::tensorflow::OpValidationFailure, (node_context), __VA_ARGS__)
#ifndef TENSORFLOW_OP_VALIDATION
# define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
#endif
} // namespace ov

View File

@ -6,7 +6,7 @@
#include "openvino/core/any.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp"
#include "openvino/frontend/visibility.hpp"
#include "openvino/frontend/tensorflow/visibility.hpp"
namespace ov {
namespace frontend {

View File

@ -41,7 +41,7 @@ public:
}
/// \brief Get a node name
std::string get_name() const {
const std::string& get_name() const override {
return m_decoder->get_op_name();
}

View File

@ -7,20 +7,5 @@ ov_add_frontend(NAME tensorflow
FILEDESCRIPTION "FrontEnd to load and convert TensorFlow file format"
LINK_LIBRARIES openvino::util openvino::runtime::dev)
# add object library used in tests for private transformations
add_library(openvino_tensorflow_frontend_static_tests STATIC EXCLUDE_FROM_ALL
helper_transforms/block_lstm_replacer.cpp
helper_transforms/embedding_segments_feature_fusing.cpp
helper_transforms/gru_block_cell_replacer.cpp
pass/transpose_sinking.cpp
exception.cpp
openvino_conversions.cpp
utils.cpp)
target_include_directories(openvino_tensorflow_frontend_static_tests
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE
$<TARGET_PROPERTY:openvino::runtime::dev,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:openvino::frontend::tensorflow,INTERFACE_INCLUDE_DIRECTORIES>)
set(TARGET_NAME "${FRONTEND_NAME_PREFIX}tensorflow${FRONTEND_NAME_SUFFIX}")
target_link_libraries(${TARGET_NAME} PRIVATE openvino::frontend::tensorflow_common)

View File

@ -1,19 +0,0 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "openvino/frontend/tensorflow/exception.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
namespace ov {
namespace frontend {
namespace tensorflow {
std::string OpValidationFailure::get_error_msg_prefix_tf(const NodeContext& node) {
std::stringstream ss;
ss << "While validating node '" << node.get_op_type() << '\'';
return ss.str();
}
} // namespace tensorflow
} // namespace frontend
} // namespace ov

View File

@ -4,9 +4,10 @@
#include "helper_ops/block_lstm.hpp"
#include "common_op_table.hpp"
#include "ngraph/validation_util.hpp"
#include "op_table.hpp"
#include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
using namespace std;
@ -14,7 +15,7 @@ namespace ov {
namespace frontend {
namespace tensorflow {
namespace op {
OutputVector translate_block_lstm_op(const NodeContext& node) {
OutputVector translate_block_lstm_op(const ov::frontend::tensorflow::NodeContext& node) {
default_op_checks(node, 9, {"BlockLSTM"});
auto seq_len_max = node.get_input(0);
auto x = node.get_input(1);

View File

@ -4,7 +4,8 @@
#include "helper_ops/gru_block_cell.hpp"
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
using namespace std;
using namespace ov;
@ -15,7 +16,7 @@ namespace frontend {
namespace tensorflow {
namespace op {
OutputVector translate_gru_block_cell_op(const NodeContext& node) {
OutputVector translate_gru_block_cell_op(const ov::frontend::tensorflow::NodeContext& node) {
// GRUBlockCell computes the GRU cell forward propagation for 1 time step
// Inputs:
// 0) x: Input to the GRU cell

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "common_op_table.hpp"
#include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "common_op_table.hpp"
#include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,11 +2,12 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "common_op_table.hpp"
#include "helper_ops/sparse_fill_empty_rows.hpp"
#include "helper_ops/sparse_segment_ops.hpp"
#include "ngraph/validation_util.hpp"
#include "op_table.hpp"
#include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;
@ -17,7 +18,7 @@ namespace ov {
namespace frontend {
namespace tensorflow {
namespace op {
OutputVector translate_sparse_reshape_op(const NodeContext& node) {
OutputVector translate_sparse_reshape_op(const ov::frontend::tensorflow::NodeContext& node) {
// Currently, the translation for SparseReshape is possible only if new shape value is the same as the input shape
// value or it is different just by one dynamic dimension of the new shape that can be replace with the
// corresponding static dimension of the input shape.
@ -71,7 +72,7 @@ OutputVector translate_sparse_reshape_op(const NodeContext& node) {
return {input_indices, input_shape};
}
OutputVector translate_sparse_fill_empty_rows_op(const NodeContext& node) {
OutputVector translate_sparse_fill_empty_rows_op(const ov::frontend::tensorflow::NodeContext& node) {
default_op_checks(node, 3, {"SparseFillEmptyRows"});
auto input_indices = node.get_input(0);
auto input_values = node.get_input(1);
@ -87,7 +88,7 @@ OutputVector translate_sparse_fill_empty_rows_op(const NodeContext& node) {
return sparse_fill_empty_rows->outputs();
}
OutputVector translate_sparse_segment_sum_op(const NodeContext& node) {
OutputVector translate_sparse_segment_sum_op(const ov::frontend::tensorflow::NodeContext& node) {
auto input_size = node.get_input_size();
TENSORFLOW_OP_VALIDATION(node,
input_size == 3 || input_size == 4,

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "common_op_table.hpp"
#include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -4,6 +4,7 @@
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
#include "openvino/opsets/opset9.hpp"
@ -15,131 +16,17 @@ namespace ov {
namespace frontend {
namespace tensorflow {
namespace op {
#define OP_CONVERTER(op) OutputVector op(const NodeContext& node)
#define OP_T_CONVERTER(op) \
template <class T> \
OutputVector op(const NodeContext& node)
OP_T_CONVERTER(translate_unary_op);
OP_T_CONVERTER(translate_binary_op);
OP_T_CONVERTER(translate_direct_reduce_op);
#define TF_OP_CONVERTER(op) OutputVector op(const ov::frontend::tensorflow::NodeContext& node)
OP_CONVERTER(translate_add_n_op);
OP_CONVERTER(translate_arg_max_op);
OP_CONVERTER(translate_arg_min_op);
OP_CONVERTER(translate_assert_op);
OP_CONVERTER(translate_avg_pool_op);
OP_CONVERTER(translate_batch_mat_mul_op);
OP_CONVERTER(translate_batch_to_space_nd_op);
OP_CONVERTER(translate_bias_add_op);
OP_CONVERTER(translate_block_lstm_op);
OP_CONVERTER(translate_broadcast_args_op);
OP_CONVERTER(translate_broadcast_to_op);
OP_CONVERTER(translate_bucketize_op);
OP_CONVERTER(translate_cast_op);
OP_CONVERTER(translate_clip_by_value_op);
OP_CONVERTER(translate_concat_op);
OP_CONVERTER(translate_const_op);
OP_CONVERTER(translate_conv_2d_op);
OP_CONVERTER(translate_conv_2d_backprop_input_op);
OP_CONVERTER(translate_conv_3d_op);
OP_CONVERTER(translate_conv_3d_backprop_input_v2_op);
OP_CONVERTER(translate_ctc_greedy_decoder_op);
OP_CONVERTER(translate_ctc_loss_op);
OP_CONVERTER(translate_cumsum_op);
OP_CONVERTER(translate_crop_and_resize_op);
OP_CONVERTER(translate_depth_to_space_op);
OP_CONVERTER(translate_depthwise_conv_2d_native_op);
OP_CONVERTER(translate_dynamic_partition_op);
OP_CONVERTER(translate_einsum_op);
OP_CONVERTER(translate_elu_op);
OP_CONVERTER(translate_expand_dims_op);
OP_CONVERTER(translate_extract_image_patches_op);
OP_CONVERTER(translate_fake_quant_op);
OP_CONVERTER(translate_fill_op);
OP_CONVERTER(translate_floor_div_op);
OP_CONVERTER(translate_fused_batch_norm_op);
OP_CONVERTER(translate_gather_op);
OP_CONVERTER(translate_gather_v2_op);
OP_CONVERTER(translate_gather_nd_op);
OP_CONVERTER(translate_gru_block_cell_op);
OP_CONVERTER(translate_identity_op);
OP_CONVERTER(translate_identity_n_op);
OP_CONVERTER(translate_input_arg_op);
OP_CONVERTER(translate_output_arg_op);
OP_CONVERTER(translate_if_op);
OP_CONVERTER(translate_interpolate_op);
OP_CONVERTER(translate_is_finite_op);
OP_CONVERTER(translate_is_inf_op);
OP_CONVERTER(translate_is_nan_op);
OP_CONVERTER(translate_l2_loss_op);
OP_CONVERTER(translate_linspace_op);
OP_CONVERTER(translate_list_diff_op);
OP_CONVERTER(translate_leaky_relu_op);
OP_CONVERTER(translate_log_softmax_op);
OP_CONVERTER(translate_log_1p_op);
OP_CONVERTER(translate_lrn_op);
OP_CONVERTER(translate_mat_mul_op);
OP_CONVERTER(translate_matrix_diag_op);
OP_CONVERTER(translate_max_pool_op);
OP_CONVERTER(translate_mirror_pad_op);
OP_CONVERTER(translate_non_max_suppression_op);
OP_CONVERTER(translate_normalize_l2_op);
OP_CONVERTER(translate_parallel_dynamic_stitch_op);
OP_CONVERTER(translate_partitioned_call_op);
OP_CONVERTER(translate_placeholder_op);
OP_CONVERTER(translate_placeholder_with_default_op);
OP_CONVERTER(translate_no_op);
OP_CONVERTER(translate_one_hot_op);
OP_CONVERTER(translate_pack_op);
OP_CONVERTER(translate_pad_op);
OP_CONVERTER(translate_padv2_op);
OP_CONVERTER(translate_range_op);
OP_CONVERTER(translate_rank_op);
OP_CONVERTER(translate_random_uniform_op);
OP_CONVERTER(translate_random_uniform_int_op);
OP_CONVERTER(translate_relu_6_op);
OP_CONVERTER(translate_reciprocal_op);
OP_CONVERTER(translate_reshape_op);
OP_CONVERTER(translate_resource_gather_op);
OP_CONVERTER(translate_reverse_op);
OP_CONVERTER(translate_reverse_v2_op);
OP_CONVERTER(translate_reverse_sequence_op);
OP_CONVERTER(translate_roll_op);
OP_CONVERTER(translate_round_op);
OP_CONVERTER(translate_rsqrt_op);
OP_CONVERTER(translate_scatter_nd_op);
OP_CONVERTER(translate_segment_sum_op);
OP_CONVERTER(translate_space_to_batch_nd_op);
OP_CONVERTER(translate_sparse_to_dense_op);
OP_CONVERTER(translate_select_op);
OP_CONVERTER(translate_select_v2_op);
OP_CONVERTER(translate_shape_op);
OP_CONVERTER(translate_size_op);
OP_CONVERTER(translate_slice_op);
OP_CONVERTER(translate_softmax_op);
OP_CONVERTER(translate_space_to_depth_op);
OP_CONVERTER(translate_sparse_reshape_op);
OP_CONVERTER(translate_split_op);
OP_CONVERTER(translate_split_v_op);
OP_CONVERTER(translate_square_op);
OP_CONVERTER(translate_squeeze_op);
OP_CONVERTER(translate_strided_slice_op);
OP_CONVERTER(translate_sqrt_op);
OP_CONVERTER(translate_tile_op);
OP_CONVERTER(translate_top_k_op);
OP_CONVERTER(translate_top_k_v2_op);
OP_CONVERTER(translate_transpose_op);
OP_CONVERTER(translate_unpack_op);
OP_CONVERTER(translate_where_op);
OP_CONVERTER(translate_while_op);
OP_CONVERTER(translate_x_div_y_op);
OP_CONVERTER(translate_zeros_like_op);
// Translators for internal operations
OP_CONVERTER(translate_sparse_fill_empty_rows_op);
OP_CONVERTER(translate_sparse_segment_sum_op);
OP_CONVERTER(translate_unique_op);
TF_OP_CONVERTER(translate_if_op);
TF_OP_CONVERTER(translate_block_lstm_op);
TF_OP_CONVERTER(translate_gru_block_cell_op);
TF_OP_CONVERTER(translate_partitioned_call_op);
TF_OP_CONVERTER(translate_sparse_fill_empty_rows_op);
TF_OP_CONVERTER(translate_sparse_reshape_op);
TF_OP_CONVERTER(translate_sparse_segment_sum_op);
TF_OP_CONVERTER(translate_while_op);
const std::map<std::string, CreatorFunction> get_supported_ops() {
return {

View File

@ -14,7 +14,7 @@ ov_add_test_target(
gtest_main_manifest
frontend_shared_test_classes
openvino_tensorflow_frontend
openvino_tensorflow_frontend_static_tests
openvino_tensorflow_common
ADD_CLANG_FORMAT
LABELS
OV

View File

@ -0,0 +1,9 @@
# Copyright (C) 2018-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
add_subdirectory(src)
if(ENABLE_TESTS)
add_subdirectory(tests)
endif()

View File

@ -0,0 +1,146 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include <functional>
#include <map>
#include <string>
#include "openvino/core/node_vector.hpp"
#include "openvino/frontend/node_context.hpp"
#include "openvino_conversions.hpp"
#include "utils.hpp"
#define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
namespace ov {
namespace frontend {
namespace tensorflow {
namespace op {
#define OP_CONVERTER(op) OutputVector op(const ov::frontend::NodeContext& node)
#define OP_T_CONVERTER(op) \
template <class T> \
OutputVector op(const ov::frontend::NodeContext& node)
OP_T_CONVERTER(translate_unary_op);
OP_T_CONVERTER(translate_binary_op);
OP_T_CONVERTER(translate_direct_reduce_op);
OP_CONVERTER(translate_add_n_op);
OP_CONVERTER(translate_arg_max_op);
OP_CONVERTER(translate_arg_min_op);
OP_CONVERTER(translate_assert_op);
OP_CONVERTER(translate_avg_pool_op);
OP_CONVERTER(translate_batch_mat_mul_op);
OP_CONVERTER(translate_batch_to_space_nd_op);
OP_CONVERTER(translate_bias_add_op);
OP_CONVERTER(translate_broadcast_args_op);
OP_CONVERTER(translate_broadcast_to_op);
OP_CONVERTER(translate_bucketize_op);
OP_CONVERTER(translate_cast_op);
OP_CONVERTER(translate_clip_by_value_op);
OP_CONVERTER(translate_concat_op);
OP_CONVERTER(translate_const_op);
OP_CONVERTER(translate_conv_2d_op);
OP_CONVERTER(translate_conv_2d_backprop_input_op);
OP_CONVERTER(translate_conv_3d_op);
OP_CONVERTER(translate_conv_3d_backprop_input_v2_op);
OP_CONVERTER(translate_ctc_greedy_decoder_op);
OP_CONVERTER(translate_ctc_loss_op);
OP_CONVERTER(translate_cumsum_op);
OP_CONVERTER(translate_crop_and_resize_op);
OP_CONVERTER(translate_depth_to_space_op);
OP_CONVERTER(translate_depthwise_conv_2d_native_op);
OP_CONVERTER(translate_dynamic_partition_op);
OP_CONVERTER(translate_einsum_op);
OP_CONVERTER(translate_elu_op);
OP_CONVERTER(translate_expand_dims_op);
OP_CONVERTER(translate_extract_image_patches_op);
OP_CONVERTER(translate_fake_quant_op);
OP_CONVERTER(translate_fill_op);
OP_CONVERTER(translate_floor_div_op);
OP_CONVERTER(translate_fused_batch_norm_op);
OP_CONVERTER(translate_gather_op);
OP_CONVERTER(translate_gather_v2_op);
OP_CONVERTER(translate_gather_nd_op);
OP_CONVERTER(translate_identity_op);
OP_CONVERTER(translate_identity_n_op);
OP_CONVERTER(translate_input_arg_op);
OP_CONVERTER(translate_output_arg_op);
OP_CONVERTER(translate_interpolate_op);
OP_CONVERTER(translate_is_finite_op);
OP_CONVERTER(translate_is_inf_op);
OP_CONVERTER(translate_is_nan_op);
OP_CONVERTER(translate_l2_loss_op);
OP_CONVERTER(translate_linspace_op);
OP_CONVERTER(translate_list_diff_op);
OP_CONVERTER(translate_leaky_relu_op);
OP_CONVERTER(translate_log_softmax_op);
OP_CONVERTER(translate_log_1p_op);
OP_CONVERTER(translate_lrn_op);
OP_CONVERTER(translate_mat_mul_op);
OP_CONVERTER(translate_matrix_diag_op);
OP_CONVERTER(translate_max_pool_op);
OP_CONVERTER(translate_mirror_pad_op);
OP_CONVERTER(translate_non_max_suppression_op);
OP_CONVERTER(translate_normalize_l2_op);
OP_CONVERTER(translate_parallel_dynamic_stitch_op);
OP_CONVERTER(translate_placeholder_op);
OP_CONVERTER(translate_placeholder_with_default_op);
OP_CONVERTER(translate_no_op);
OP_CONVERTER(translate_one_hot_op);
OP_CONVERTER(translate_pack_op);
OP_CONVERTER(translate_pad_op);
OP_CONVERTER(translate_padv2_op);
OP_CONVERTER(translate_range_op);
OP_CONVERTER(translate_rank_op);
OP_CONVERTER(translate_random_uniform_op);
OP_CONVERTER(translate_random_uniform_int_op);
OP_CONVERTER(translate_relu_6_op);
OP_CONVERTER(translate_reciprocal_op);
OP_CONVERTER(translate_reshape_op);
OP_CONVERTER(translate_resource_gather_op);
OP_CONVERTER(translate_reverse_op);
OP_CONVERTER(translate_reverse_v2_op);
OP_CONVERTER(translate_reverse_sequence_op);
OP_CONVERTER(translate_roll_op);
OP_CONVERTER(translate_round_op);
OP_CONVERTER(translate_rsqrt_op);
OP_CONVERTER(translate_scatter_nd_op);
OP_CONVERTER(translate_segment_sum_op);
OP_CONVERTER(translate_space_to_batch_nd_op);
OP_CONVERTER(translate_sparse_to_dense_op);
OP_CONVERTER(translate_select_op);
OP_CONVERTER(translate_select_v2_op);
OP_CONVERTER(translate_shape_op);
OP_CONVERTER(translate_size_op);
OP_CONVERTER(translate_slice_op);
OP_CONVERTER(translate_softmax_op);
OP_CONVERTER(translate_space_to_depth_op);
OP_CONVERTER(translate_split_op);
OP_CONVERTER(translate_split_v_op);
OP_CONVERTER(translate_square_op);
OP_CONVERTER(translate_squeeze_op);
OP_CONVERTER(translate_strided_slice_op);
OP_CONVERTER(translate_sqrt_op);
OP_CONVERTER(translate_tile_op);
OP_CONVERTER(translate_top_k_op);
OP_CONVERTER(translate_top_k_v2_op);
OP_CONVERTER(translate_transpose_op);
OP_CONVERTER(translate_unpack_op);
OP_CONVERTER(translate_where_op);
OP_CONVERTER(translate_x_div_y_op);
OP_CONVERTER(translate_zeros_like_op);
// Translators for internal operations
OP_CONVERTER(translate_unique_op);
} // namespace op
} // namespace tensorflow
} // namespace frontend
} // namespace ov

View File

@ -7,14 +7,14 @@
#include <string>
#include <vector>
#include "openvino/frontend/tensorflow/decoder.hpp"
#include "openvino/frontend/decoder.hpp"
#include "tf_framework_node.hpp"
namespace ov {
namespace frontend {
namespace tensorflow {
class DecoderFake : public ov::frontend::tensorflow::DecoderBase {
class DecoderFake : public ov::frontend::DecoderBase {
public:
explicit DecoderFake() {}

View File

@ -8,7 +8,7 @@
#include <vector>
#include "helper_ops/internal_operation.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp"
#include "openvino/frontend/decoder.hpp"
namespace ov {
namespace frontend {

View File

@ -7,7 +7,6 @@
#include <memory>
#include <utility>
#include "openvino/frontend/tensorflow/visibility.hpp"
#include "openvino/pass/graph_rewrite.hpp"
#include "openvino/pass/pass.hpp"

View File

@ -7,7 +7,6 @@
#include <memory>
#include <utility>
#include "openvino/frontend/tensorflow/visibility.hpp"
#include "openvino/pass/graph_rewrite.hpp"
#include "openvino/pass/pass.hpp"

View File

@ -4,8 +4,8 @@
#pragma once
#include "openvino/frontend/decoder.hpp"
#include "openvino/frontend/frontend.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp"
namespace ov {
namespace frontend {

View File

@ -6,7 +6,7 @@
#include <algorithm>
#include "openvino/frontend/tensorflow/decoder.hpp"
#include "openvino/frontend/decoder.hpp"
#include "openvino/op/util/framework_node.hpp"
namespace ov {

View File

@ -5,10 +5,17 @@
#pragma once
#include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
#include "openvino/frontend/node_context.hpp"
#include "openvino/opsets/opset8.hpp"
#include "openvino/pass/graph_rewrite.hpp"
#ifndef TENSORFLOW_OP_VALIDATION
# define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
#endif
namespace ov {
namespace frontend {
namespace tensorflow {

View File

@ -0,0 +1,26 @@
# Copyright (C) 2018-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
set(TARGET_NAME "openvino_tensorflow_common")
get_filename_component(root_dir "${CMAKE_CURRENT_SOURCE_DIR}" DIRECTORY)
file(GLOB_RECURSE LIBRARY_SRC ${root_dir}/src/*.cpp)
file(GLOB_RECURSE LIBRARY_HEADERS ${root_dir}/include/*.hpp)
add_library(${TARGET_NAME} STATIC ${LIBRARY_SRC} ${LIBRARY_HEADERS})
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(${TARGET_NAME} PRIVATE OPENVINO_STATIC_LIBRARY)
endif()
target_link_libraries(${TARGET_NAME} PRIVATE openvino::util)
add_library(openvino::frontend::tensorflow_common ALIAS ${TARGET_NAME})
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${root_dir}/include>
PRIVATE
${root_dir}/src
$<TARGET_PROPERTY:openvino::runtime::dev,INTERFACE_INCLUDE_DIRECTORIES>)
add_clang_format_target(${TARGET_NAME}_clang FOR_TARGETS ${TARGET_NAME})
ov_install_static_lib(${TARGET_NAME} ${OV_CPACK_COMP_CORE})

View File

@ -4,7 +4,7 @@
#include <numeric>
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -4,7 +4,7 @@
#include <numeric>
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/core/validation_util.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "common_op_table.hpp"
#include "helper_ops/unsupported_constant.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -4,7 +4,7 @@
#include <limits>
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,8 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
#include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp"
using namespace std;

Some files were not shown because too many files have changed in this diff Show More