Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/********************************************************************************
* 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());
}