namespace ov::op::v5

namespace v5 {

// classes

class BatchNormInference;
class GRUSequence;
class GatherND;
class HSigmoid;
class LSTMSequence;
class LogSoftmax;
class Loop;
class NonMaxSuppression;
class RNNSequence;
class Round;

// global functions

template <class TShape, class TRShape = result_shape_t<TShape>>
std::vector<TRShape> shape_infer(
    const GatherND \* op,
    const std::vector<TShape>& input_shapes
    );

template <class TShape, class TRShape = result_shape_t<TShape>>
std::vector<TRShape> shape_infer(
    const ov::op::v5::GRUSequence \* op,
    const std::vector<TShape>& input_shapes
    );

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

template <class T, class TRShape = result_shape_t<T>>
std::vector<TRShape> shape_infer(
    const NonMaxSuppression \* op,
    const std::vector<T>& input_shapes,
    const ITensorAccessor& ta = make_tensor_accessor(),
    const bool static_output = !std::is_same<T, PartialShape>::value
    );

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

} // namespace v5