Conversation
Codecov Report❌ Patch coverage is
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. 🚀 New features to boost your workflow:
|
|
evaluate-model failure can be fixed by updating the branch |
test/graph/test_graph.cpp
Outdated
| res_graph.makeConnection(lay, fcLayer3); | ||
|
|
||
| Graph res = changed_subgraphs(graph, subgraph); | ||
| // ASSERT_EQ(res, res_graph); |
There was a problem hiding this comment.
Please, restore disabled checks in the tests (here and in other places )
There was a problem hiding this comment.
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++) { |
There was a problem hiding this comment.
removeSingleLayer удаляет сам узел и его ребра, но не удаляет id из in_edges_ всех соседей и не сдвигает хранящиеся там индексы после пере‑индексации. Уже после первого удаления граф остаётся с «висячими» id, поэтому areLayerNext, обход и трансформации начинают работать с мусорными индексами. Нужно чистить in_edges_ у всех вершин и декрементировать значения >id.
There was a problem hiding this comment.
тот же removeSingleLayer не корректирует start_/end_. При удалении вершины с id меньше входа/выхода вы оставляете указатели на неверный слой; при удалении самого входа/ выхода они вообще становятся висячими. Нужно обновлять start_/end_ (или запрещать удаление этих вершин) после смещения индексов.
There was a problem hiding this comment.
removeConnection вычищает все связи с другими вершинами, так что там все представление графа чинится на каждом шаге, чтобы избежать замусоривания в процессе.
start_ и end_ действительно скорректирую
| } | ||
|
|
||
| Graph changed_subgraphs(const Graph& graph, const Graph& subgraph_from) { | ||
| Graph new_graph = graph; |
There was a problem hiding this comment.
копия 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++) { |
There was a problem hiding this comment.
для проверки пересечений используется subs_c, но после каждого удаления сдвигаются id только в subs; subs_c остаётся со старыми номерами. В результате пересекающиеся подграфы могут быть признаны «непересекающимися» и удалены/заменены повторно. Обновляйте subs_c синхронно или считайте пересечения по актуальным данным.
There was a problem hiding this comment.
subs_c нужен, чтобы проверять пересечения в изначальном графе, потому что удаление подграфа делает id в предыдущих subs невалидными. Нельзя будет адекватно поймать пересечения, если этих вершин не существует или они были заменены другими.
К тому же я не смог найти пример, когда замена подграфа порождает новое пересечение подграфов
| if (flag) { | ||
| continue; | ||
| } | ||
| std::shared_ptr<Layer> layer = std::make_shared<EWLayer>("relu"); |
There was a problem hiding this comment.
«особые» корни (имеющие внешние выходы) вы оставляете в графе, но всё равно подключаете их входы к новому узлу (roots_inps_final). Это дублирует путь: исходный корень остаётся и параллельно появляется новый EW‑узел с теми же входами. Для корней, которые вы сохраняете, не должно происходить переподключения их входов к новой вершине.
There was a problem hiding this comment.
Если не переподключать к новой вершине, мы же потеряем один из путей в подграфе, оставив лишь внешнюю ветвь. Новая вершина очевидно должна не иметь внешних ветвей, однако обрабатывать их как-то надо, поэтому они остаются
Closes #219
Additional changes:
Currently replacing subgraph to single node EWLayer("relu")