Forked from
Eclipse Projects / aidge / aidge_core
1226 commits behind the upstream repository.
-
Olivier BICHLER authoredOlivier BICHLER authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FuseToMetaOps.cpp 1.52 KiB
/********************************************************************************
* Copyright (c) 2023 CEA-List
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
#include <memory>
#include "aidge/graph/Node.hpp"
#include "aidge/graph/GraphView.hpp"
#include "aidge/operator/MetaOperator.hpp"
#include "aidge/recipes/Recipes.hpp"
//Graph Regex
#include "aidge/graphRegex/GraphRegex.hpp"
void Aidge::fuseToMetaOps(std::shared_ptr<GraphView> graphView, const std::string& query, const std::string& name) {
std::shared_ptr<GraphRegex> regex = std::make_shared<GraphRegex>();
regex->setKeyFromGraph(graphView);
regex->addQuery(query);
size_t nbReplaced = 0;
const auto matches = regex->match(graphView);
for (const auto& solution : matches) {
auto microGraph = std::make_shared<GraphView>();
microGraph->add(solution->getAll());
auto metaOp = MetaOperator(query.c_str(), microGraph, name);
const auto success = GraphView::replace(solution->getAll(), {metaOp});
if (!success) {
Log::notice("Could not replace sub-graph with meta operator");
}
else {
++nbReplaced;
}
}
Log::info("Replaced {} (out of {}) matching sub-graph with meta operators", nbReplaced, matches.size());
}