Skip to content
Snippets Groups Projects
Commit 57dd2c6c authored by Olivier BICHLER's avatar Olivier BICHLER
Browse files

Fixed binding issue and seg fault

parent 6fdf2ae6
No related branches found
No related tags found
2 merge requests!105version 0.2.0,!77Support for recurrent networks
Pipeline #40403 passed
...@@ -89,7 +89,19 @@ void init_GraphView(py::module& m) { ...@@ -89,7 +89,19 @@ void init_GraphView(py::module& m) {
:type to_tensor: int :type to_tensor: int
)mydelimiter") )mydelimiter")
.def_static("replace", &GraphView::replace, py::arg("old_nodes"), py::arg("new_nodes"), .def_static("replace", py::overload_cast<const std::shared_ptr<GraphView>&, const std::shared_ptr<GraphView>&>(&GraphView::replace), py::arg("old_graph"), py::arg("new_graph"),
R"mydelimiter(
Replace the old set of Nodes in a GraphView with the new set of given Nodes in a GraphView if possible in every GraphView.
:param old_graph: GraphView of Nodes actually connected in GraphViews.
:type old_graph: GraphView
:param new_graph: GraphView of Nodes with inner connections already taken care of.
:type new_graph: GraphView
:return: Whether any replacement has been made.
:rtype: bool
)mydelimiter")
.def_static("replace", py::overload_cast<const std::set<NodePtr>&, const std::set<NodePtr>&>(&GraphView::replace), py::arg("old_nodes"), py::arg("new_nodes"),
R"mydelimiter( R"mydelimiter(
Replace the old set of Nodes with the new set of given Nodes if possible in every GraphView. Replace the old set of Nodes with the new set of given Nodes if possible in every GraphView.
......
...@@ -47,18 +47,20 @@ void Aidge::fuseMulAdd(std::shared_ptr<Aidge::Node> matmulNode, std::shared_ptr< ...@@ -47,18 +47,20 @@ void Aidge::fuseMulAdd(std::shared_ptr<Aidge::Node> matmulNode, std::shared_ptr<
} }
std::shared_ptr<Node> weight = nullptr; std::shared_ptr<Node> weight = nullptr;
if (matmulNode->getParent(1)->getOperator()->type() == Producer_Op::Type if ((matmulNode->getParent(1) && !matmulNode->getParent(0))
&& matmulNode->getParent(0)->getOperator()->type() != Producer_Op::Type) || (matmulNode->getParent(1) && matmulNode->getParent(1)->getOperator()->type() == Producer_Op::Type
&& matmulNode->getParent(0) && matmulNode->getParent(0)->getOperator()->type() != Producer_Op::Type))
{ {
weight = matmulNode->getParent(1)->cloneSharedOperators(); weight = matmulNode->getParent(1)->cloneSharedOperators();
} }
else if (matmulNode->getParent(0)->getOperator()->type() == Producer_Op::Type else if ((matmulNode->getParent(0) && !matmulNode->getParent(1))
&& matmulNode->getParent(1)->getOperator()->type() != Producer_Op::Type) || (matmulNode->getParent(0) && matmulNode->getParent(0)->getOperator()->type() == Producer_Op::Type
&& matmulNode->getParent(1) && matmulNode->getParent(1)->getOperator()->type() != Producer_Op::Type))
{ {
weight = matmulNode->getParent(0)->cloneSharedOperators(); weight = matmulNode->getParent(0)->cloneSharedOperators();
} }
else if (matmulNode->getParent(0)->getOperator()->type() == Producer_Op::Type else if (matmulNode->getParent(0) && matmulNode->getParent(0)->getOperator()->type() == Producer_Op::Type
&& matmulNode->getParent(1)->getOperator()->type() == Producer_Op::Type) && matmulNode->getParent(1) && matmulNode->getParent(1)->getOperator()->type() == Producer_Op::Type)
{ {
// If both inputs are producers, there is an ambiguity, but both options // If both inputs are producers, there is an ambiguity, but both options
// result in a correct solution. // result in a correct solution.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment