namespace ov::op::v6

namespace v6 {

// classes

class Assign;
class CTCGreedyDecoderSeqLen;
class ExperimentalDetectronDetectionOutput;
class ExperimentalDetectronGenerateProposalsSingleImage;
class ExperimentalDetectronPriorGridGenerator;
class ExperimentalDetectronROIFeatureExtractor;
class ExperimentalDetectronTopKROIs;
class GatherElements;
class MVN;
class ReadValue;

// global functions

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

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

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

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

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

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

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

} // namespace v6