// todo ? void define_gspn_builder(py::module& m) {
// GSPN_Builder class
py::class_<GSPNBuilder,std::shared_ptr<GSPNBuilder>>(m,"GSPNBuilder","Generalized Stochastic Petri Net Builder")
.def(py::init(),"Constructor")
.def("set_name",&GSPNBuilder::setGspnName,"Set name of GSPN",py::arg("name"))
// todo: boost::optional
//.def("add_place", &GSPNBuilder::addPlace, "Add a place to the GSPN", py::arg("capacity") = 1, py::arg("initialTokens") = 0, py::arg("name") = std::string(""))
// todo: boost::optional<uint64_t> capacity
//.def("add_place", &GSPNBuilder::addPlace, "Add a place to the GSPN", py::arg("capacity") = boost::optional<uint64_t>(1), py::arg("initialTokens") = uint_fast64_t(0), py::arg("name") = std::string(""))
//.def("set_place_layout_info", &GSPNBuilder::setPlaceLayoutInfo, "Set place layout information", py::arg("placeId"), py::arg("layoutInfo"))
// todo GSPNBuilder::RateType(0) ?
.def("add_immediate_transition",&GSPNBuilder::addImmediateTransition,"Adds an immediate transition to the GSPN",py::arg("priority")=uint_fast64_t(0),py::arg("weight")=double(0),py::arg("name")=std::string(""))
// todo: boost::optional<uint64_t>
.def("add_timed_transition",py::overload_cast<uint_fast64_tconst&,doubleconst&,std::stringconst&>(&GSPNBuilder::addTimedTransition),"Adds an timed transition to the GSPN",py::arg("priority"),py::arg("rate"),py::arg("name")=std::string(""))
.def("add_timed_transition",py::overload_cast<uint_fast64_tconst&,doubleconst&,boost::optional<uint64_t>,std::stringconst&>(&GSPNBuilder::addTimedTransition),"Adds an timed transition to the GSPN",py::arg("priority"),py::arg("rate"),py::arg("numServers"),py::arg("name")="")