namespace ov::batch_util

namespace batch_util {

// global functions

void mark_batch(
    const std::shared_ptr<ov::opset1::Parameter>& parameter,
    P2Btype& map,
    const std::unordered_set<size_t>& batches
    );

void mark_no_batch(
    const std::shared_ptr<ov::opset1::Parameter>& parameter,
    P2Btype& map
    );

void mark_layout_independent_batch(
    const std::shared_ptr<ov::opset1::Parameter>& parameter,
    const std::shared_ptr<ov::Node>& result,
    P2Btype& map
    );

void mark_with_unique_dimension_labels(
    const std::shared_ptr<Model>& m,
    const ov::DimensionTracker& dt
    );

void restore_original_dimensions(
    const std::map<std::shared_ptr<ov::opset1::Parameter>, ov::PartialShape>& parameter_to_shape,
    bool leave_batch_dynamic = true
    );

bool check_batch_tracks_through_all_the_nodes(const std::shared_ptr<ov::Model>& m);
P2Btype find_batch(const std::shared_ptr<ov::Model>& m);
bool detach_detection_output(const std::shared_ptr<ov::Model>& f);

} // namespace batch_util