namespace ov::op::v4

namespace v4 {

// namespaces

namespace ov::op::v4::ctc_loss;

// classes

class CTCLoss;
class HSwish;
class Interpolate;
class LSTMCell;
class Mish;
class NonMaxSuppression;
class Proposal;
class Range;
class ReduceL1;
class ReduceL2;
class SoftPlus;
class Swish;

// global functions

template <class TShape>
std::vector<TShape> shape_infer(
    const CTCLoss \* op,
    const std::vector<TShape>& input_shapes
    );

template <class TShape>
void shape_infer(
    const CTCLoss \* op,
    const std::vector<TShape>& input_shapes,
    std::vector<TShape>& output_shapes
    );

template <class T>
void shape_infer(
    const Interpolate \* op,
    std::vector<size_t>& pads_begin,
    std::vector<size_t>& pads_end,
    const std::vector<T>& input_shapes,
    std::vector<T>& output_shapes,
    const std::map<size_t, std::shared_ptr<ngraph::runtime::HostTensor>>& constant_data
    );

template <class T>
void shape_infer(
    const LSTMCell \* op,
    const std::vector<T>& input_shapes,
    std::vector<T>& output_shapes
    );

template <class T>
void shape_infer(
    const ov::op::v4::Proposal \* op,
    const std::vector<T>& input_shapes,
    std::vector<T>& output_shapes
    );

template <class T>
void shape_infer(
    const Range \* op,
    const std::vector<T>& input_shapes,
    std::vector<T>& output_shapes,
    const std::map<size_t, std::shared_ptr<ngraph::runtime::HostTensor>>& constant_data = {}
    );

} // namespace v4