3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-07-24 21:27:00 +00:00

Added frequent subcircuit miner to subcircuit library

This commit is contained in:
Clifford Wolf 2013-03-02 13:53:59 +01:00
parent a338d1a082
commit 84cdfa55fc
7 changed files with 368 additions and 13 deletions

View file

@ -26,6 +26,7 @@ int main()
SubCircuit::Solver solver;
std::map<std::string, std::set<std::string>> initialMappings;
std::vector<SubCircuit::Solver::Result> results;
std::vector<SubCircuit::Solver::MineResult> mineResults;
std::vector<std::string> cmdBuffer;
bool lastCommandExpect = false;
@ -162,6 +163,12 @@ int main()
continue;
}
if (cmdBuffer[0] == "mine" && 4 <= cmdBuffer.size() && cmdBuffer.size() <= 5) {
solver.mine(mineResults, atoi(cmdBuffer[1].c_str()), atoi(cmdBuffer[2].c_str()),
atoi(cmdBuffer[3].c_str()), cmdBuffer.size() == 5 ? atoi(cmdBuffer[4].c_str()) : -1);
continue;
}
if (cmdBuffer[0] == "clearoverlap" && cmdBuffer.size() == 1) {
solver.clearOverlapHistory();
continue;
@ -179,7 +186,7 @@ int main()
if (cmdBuffer[0] == "expect" && cmdBuffer.size() == 2) {
int expected = atoi(cmdBuffer[1].c_str());
printf("\n-- Expected %d, Got %d --\n", expected, int(results.size()));
printf("\n-- Expected %d, Got %d --\n", expected, int(results.size()) + int(mineResults.size()));
for (int i = 0; i < int(results.size()); i++) {
printf("\nMatch #%d: (%s in %s)\n", i, results[i].needleGraphId.c_str(), results[i].haystackGraphId.c_str());
for (const auto &it : results[i].mappings) {
@ -189,9 +196,18 @@ int main()
printf("\n");
}
}
for (auto &result : mineResults) {
printf("\nFrequent SubCircuit with %d nodes and %d matches:\n", int(result.nodes.size()), result.totalMatchesAfterLimits);
printf(" primary match in %s:", result.graphId.c_str());
for (auto &node : result.nodes)
printf(" %s", node.nodeId.c_str());
printf("\n");
for (auto &it : result.matchesPerGraph)
printf(" matches in %s: %d\n", it.first.c_str(), it.second);
}
printf("\n");
if (expected != int(results.size())) {
printf("^^ expected %d, Got %d ^^\n\n", expected, int(results.size()));
if (expected != int(results.size()) + int(mineResults.size())) {
printf("^^ expected %d, Got %d ^^\n\n", expected, int(results.size()) + int(mineResults.size()));
printf(" +----------------+\n");
printf(" | \\|/ ____ \\|/ |\n");
printf(" | \"@'/ ,. \\`@\" |\n");
@ -202,6 +218,7 @@ int main()
return 1;
}
results.clear();
mineResults.clear();
lastCommandExpect = true;
continue;
}
@ -215,7 +232,7 @@ int main()
delete graph;
if (!lastCommandExpect) {
printf("\n-- Got %d --\n", int(results.size()));
printf("\n-- Got %d --\n", int(results.size()) + int(mineResults.size()));
for (int i = 0; i < int(results.size()); i++) {
printf("\nMatch #%d: (%s in %s)\n", i, results[i].needleGraphId.c_str(), results[i].haystackGraphId.c_str());
for (const auto &it : results[i].mappings) {
@ -225,6 +242,15 @@ int main()
printf("\n");
}
}
for (auto &result : mineResults) {
printf("\nFrequent SubCircuit with %d nodes and %d matches:\n", int(result.nodes.size()), result.totalMatchesAfterLimits);
printf(" primary match in %s:", result.graphId.c_str());
for (auto &node : result.nodes)
printf(" %s", node.nodeId.c_str());
printf("\n");
for (auto &it : result.matchesPerGraph)
printf(" matches in %s: %d\n", it.first.c_str(), it.second);
}
} else
printf("PASSED.\n");