Files

98 lines
2.7 KiB
C++

// Copyright (C) 2018-2025 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include "openvino/core/any.hpp"
#include "openvino/frontend/exception.hpp"
#include "openvino/frontend/visibility.hpp"
namespace ov {
namespace frontend {
// Extendable type system which reflects Framework data types
// Type nestings are built with the help of ov::Any
namespace type {
struct Tensor {
Tensor() = default;
explicit Tensor(const Any& _element_type) : element_type(_element_type) {}
Any element_type;
};
struct Complex {
Complex() = default;
explicit Complex(const Any& _element_type) : element_type(_element_type) {}
Any element_type;
};
struct Tuple;
struct List {
List() = default;
// Specifies list of elements of element_type type, all elements have the same given type
explicit List(const Any& _element_type) : element_type(_element_type) {}
Any element_type;
};
struct Str {};
struct PyNone {};
struct PyScalar {
PyScalar() = default;
explicit PyScalar(const Any& _element_type) : element_type(_element_type) {}
Any element_type;
};
struct Optional;
struct Dict;
struct NamedTuple;
struct Union;
} // namespace type
/// Plays a role of node, block and module decoder
class FRONTEND_API IDecoder {
public:
virtual ~IDecoder();
};
class FRONTEND_API DecoderBase : public IDecoder {
public:
using OpTypeByName = std::unordered_map<std::string, std::string>;
/// \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
/// \param producer_output_port_name Output port name if exists
/// \param 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,
std::string& producer_output_port_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