namespace ov::op::v9

namespace v9 {

// classes

class Eye;
class GenerateProposals;
class GridSample;
class IRDFT;
class MulticlassNms;
class NonMaxSuppression;
class RDFT;
class ROIAlign;
class SoftSign;

// global functions

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

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

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

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

} // namespace v9