| 118 | const std::unique_ptr<mgb::OprFootprint> _imperative_sm_opr_footprint_ptr{ |
| 119 | std::make_unique<mgb::OprFootprint>()}; |
| 120 | void init_graph_rt(py::module m) { |
| 121 | def_rendezvous<DeviceTensorND>(m, "DeviceTensorNDRendezvous"); |
| 122 | |
| 123 | def_rendezvous<HostNDWithEvent>(m, "HostTensorNDRendezvous"); |
| 124 | |
| 125 | def_rendezvous<TensorAttr>(m, "TensorAttrRendezvous"); |
| 126 | |
| 127 | Py_Varnode = |
| 128 | py::class_<cg::VarNode, GraphNodePtr<cg::VarNode>>(m, "VarNode") |
| 129 | .def_property_readonly( |
| 130 | "owner", [](cg::VarNode* v) { return v->owner_opr(); }) |
| 131 | .def_property_readonly( |
| 132 | "graph", [](cg::VarNode* v) { return v->owner_graph(); }) |
| 133 | .def_property( |
| 134 | "name", py::overload_cast<>(&VarNode::name, py::const_), |
| 135 | py::overload_cast<std::string>(&VarNode::name)) |
| 136 | .def_property_readonly( |
| 137 | "dtype", [](cg::VarNode* v) { return v->dtype(); }) |
| 138 | .def_property_readonly( |
| 139 | "comp_node", [](cg::VarNode* v) { return v->comp_node(); }) |
| 140 | .def_property_readonly( |
| 141 | "shape", |
| 142 | [](cg::VarNode* v) -> const TensorShape* { |
| 143 | auto&& mgr = v->owner_graph()->static_infer_manager(); |
| 144 | return mgr.infer_shape_fallible(v); |
| 145 | }) |
| 146 | .def_property_readonly( |
| 147 | "value", |
| 148 | [](cg::VarNode* v) -> py::object { |
| 149 | auto&& mgr = v->owner_graph()->static_infer_manager(); |
| 150 | auto&& type = mgr.get_infer_type(v); |
| 151 | using InferType = cg::static_infer::InferType; |
| 152 | if (!(type.value & |
| 153 | (InferType::CONST | InferType::RT_STATIC))) { |
| 154 | return py::none(); |
| 155 | } |
| 156 | auto* val = mgr.infer_value_fallible(v); |
| 157 | if (!val) { |
| 158 | return py::none(); |
| 159 | } |
| 160 | return py::cast(*val).attr("numpy")(); |
| 161 | }) |
| 162 | .def_property_readonly( |
| 163 | "id", [](cg::VarNode* v) { return (v->id()); }) |
| 164 | .def("__repr__", [](cg::VarNode* v) { return "Var:" + v->name(); }); |
| 165 | |
| 166 | py::class_<cg::OperatorNodeBase, GraphNodePtr<cg::OperatorNodeBase>>( |
| 167 | m, "OperatorNode") |
| 168 | .def_property_readonly( |
| 169 | "graph", |
| 170 | [](cg::OperatorNodeBase* opr) { return opr->owner_graph(); }) |
| 171 | .def_property( |
| 172 | "name", |
| 173 | py::overload_cast<>(&cg::OperatorNodeBase::name, py::const_), |
| 174 | py::overload_cast<std::string>(&cg::OperatorNodeBase::name)) |
| 175 | .def_property_readonly( |
| 176 | "inputs", |
| 177 | [](cg::OperatorNodeBase* opr) { return to_tuple(opr->input()); }) |
no test coverage detected