// Copyright (C) 2018-2025 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // #pragma once #include #include #include #include #include "openvino/pass/pass.hpp" #include "openvino/pass/validate.hpp" namespace ov { namespace pass { /** * @brief Manager class allows to manage transformation passes * @ingroup ov_pass_cpp_api */ class OPENVINO_API Manager { public: Manager(); virtual ~Manager(); //// \brief Construct Manager with a provided name. explicit Manager(std::string name); //// \brief Construct Manager with shared PassConfig instance explicit Manager(std::shared_ptr pass_config, std::string name = "UnnamedManager"); /// \brief Register given transformation class type to execution list /// Example below show the basic usage of pass::Manager /// /// pass::Manager manager; /// manager.register_pass(/* transformation constructor args */); /// manager.run_passes(f); /// /// For some purposes transformation can be registered and disabled by default. /// /// manager.register_pass(); /// /// \return shared_ptr to the transformation instance template std::shared_ptr register_pass(Args&&... args) { auto rc = push_pass(std::forward(args)...); rc->set_pass_config(m_pass_config); if (m_per_pass_validation) { push_pass(); } if (!Enable && !m_pass_config->is_enabled()) { m_pass_config->disable(); } return rc; } std::shared_ptr register_pass_instance(std::shared_ptr pass) { pass->set_pass_config(m_pass_config); m_pass_list.push_back(pass); if (m_per_pass_validation) { push_pass(); } return pass; } /// \brief Runs registered transformations on a given model /// /// \param model Input model /// /// \return Returns true if the model was changed by transformations, /// false otherwise. bool run_passes(const std::shared_ptr& model); /// \brief Set flag to enable/disable running Validate pass after executing /// each registered pass /// \param new_state Value "true" enables Validate pass run; "false", otherwise void set_per_pass_validation(bool new_state); /// \return PassConfig shared object. This object is used for transformations pipeline /// configuration. /// This object allows to disable/enable transformations execution, set callback to /// particular /// transformation. For more details see PassConfig class. std::shared_ptr get_pass_config() { return m_pass_config; } protected: template std::shared_ptr push_pass(Args&&... args) { static_assert(std::is_base_of::value, "pass not derived from pass base"); auto pass = std::make_shared(std::forward(args)...); m_pass_list.push_back(pass); return pass; } std::shared_ptr m_pass_config; std::vector> m_pass_list; bool m_per_pass_validation = true; std::string m_name = "UnnamedManager"; private: bool run_pass(const std::shared_ptr& pass, const std::shared_ptr& model, bool needs_validate); }; } // namespace pass } // namespace ov