Skip to content

Conversation

@NeiroYT
Copy link
Collaborator

@NeiroYT NeiroYT commented Nov 17, 2025

Closes #219

Additional changes:

Currently replacing subgraph to single node EWLayer("relu")

NeiroYT added 2 commits November 17, 2025 12:24
@codecov
Copy link

codecov bot commented Nov 17, 2025

Codecov Report

❌ Patch coverage is 86.11111% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 84.02%. Comparing base (fd6e3d6) to head (24f81c2).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...rc/graph_transformations/graph_transformations.cpp 84.70% 6 Missing and 7 partials ⚠️
include/graph/graph.hpp 87.93% 3 Missing and 4 partials ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #233      +/-   ##
==========================================
+ Coverage   83.97%   84.02%   +0.04%     
==========================================
  Files          44       44              
  Lines        2665     2786     +121     
  Branches     1466     1544      +78     
==========================================
+ Hits         2238     2341     +103     
- Misses        219      229      +10     
- Partials      208      216       +8     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

NeiroYT added 2 commits November 17, 2025 12:52
@aobolensk
Copy link
Member

evaluate-model failure can be fixed by updating the branch

res_graph.makeConnection(lay, fcLayer3);

Graph res = changed_subgraphs(graph, subgraph);
// ASSERT_EQ(res, res_graph);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, restore disabled checks in the tests (here and in other places )

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we don't have operator== for graphs, which is why i can't uncomment this without creating it.
by the way i can use find_subgraphs to check isomorphism of these graphs

throw std::out_of_range("Layer ID out of range");
}
// remove inputs
for (int i = 0; i < V_; i++) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removeSingleLayer удаляет сам узел и его ребра, но не удаляет id из in_edges_ всех соседей и не сдвигает хранящиеся там индексы после пере‑индексации. Уже после первого удаления граф остаётся с «висячими» id, поэтому areLayerNext, обход и трансформации начинают работать с мусорными индексами. Нужно чистить in_edges_ у всех вершин и декрементировать значения >id.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тот же removeSingleLayer не корректирует start_/end_. При удалении вершины с id меньше входа/выхода вы оставляете указатели на неверный слой; при удалении самого входа/ выхода они вообще становятся висячими. Нужно обновлять start_/end_ (или запрещать удаление этих вершин) после смещения индексов.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removeConnection вычищает все связи с другими вершинами, так что там все представление графа чинится на каждом шаге, чтобы избежать замусоривания в процессе.
start_ и end_ действительно скорректирую

}

Graph changed_subgraphs(const Graph& graph, const Graph& subgraph_from) {
Graph new_graph = graph;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

копия Graph new_graph = graph; переносит сырое поле outtenres_ на внешний буфер исходного графа. Возвращённый граф будет писать вывод в старый тензор или в dangling‑указатель, что ломает требуемую «новую» граф‑структуру. Нужен свой выходной тензор и вызов setOutput для new_graph.

for (size_t i = 0; i < subs.size(); i++) {
bool flag = false;
// don't change already changed subgraph
for (size_t j = 0; j < i; j++) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

для проверки пересечений используется subs_c, но после каждого удаления сдвигаются id только в subs; subs_c остаётся со старыми номерами. В результате пересекающиеся подграфы могут быть признаны «непересекающимися» и удалены/заменены повторно. Обновляйте subs_c синхронно или считайте пересечения по актуальным данным.

Copy link
Collaborator Author

@NeiroYT NeiroYT Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

subs_c нужен, чтобы проверять пересечения в изначальном графе, потому что удаление подграфа делает id в предыдущих subs невалидными. Нельзя будет адекватно поймать пересечения, если этих вершин не существует или они были заменены другими.
К тому же я не смог найти пример, когда замена подграфа порождает новое пересечение подграфов

if (flag) {
continue;
}
std::shared_ptr<Layer> layer = std::make_shared<EWLayer>("relu");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

«особые» корни (имеющие внешние выходы) вы оставляете в графе, но всё равно подключаете их входы к новому узлу (roots_inps_final). Это дублирует путь: исходный корень остаётся и параллельно появляется новый EW‑узел с теми же входами. Для корней, которые вы сохраняете, не должно происходить переподключения их входов к новой вершине.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если не переподключать к новой вершине, мы же потеряем один из путей в подграфе, оставив лишь внешнюю ветвь. Новая вершина очевидно должна не иметь внешних ветвей, однако обрабатывать их как-то надо, поэтому они остаются

NeiroYT added 3 commits November 26, 2025 17:37
This reverts commit 10e19cf, reversing
changes made to 0f3ac42.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement mechanism for subgraph replacement

4 participants