@@ -78,6 +78,45 @@ PYBIND11_MODULE(dsf_cpp, m) {
7878
7979 m.def (" get_log_level" , &spdlog::get_level, " Get the current global log level" );
8080
81+ // Bind Street class to mobility submodule
82+ pybind11::class_<dsf::mobility::Street>(mobility, " Street" )
83+ .def (
84+ " id" , &dsf::mobility::Street::id, dsf::g_docstrings.at (" dsf::Edge::id" ).c_str ())
85+ .def (" source" ,
86+ &dsf::mobility::Street::source,
87+ dsf::g_docstrings.at (" dsf::Edge::source" ).c_str ())
88+ .def (" target" ,
89+ &dsf::mobility::Street::target,
90+ dsf::g_docstrings.at (" dsf::Edge::target" ).c_str ())
91+ .def (" geometry" ,
92+ &dsf::mobility::Street::geometry,
93+ dsf::g_docstrings.at (" dsf::Edge::geometry" ).c_str ())
94+ .def (" name" ,
95+ &dsf::mobility::Street::name,
96+ dsf::g_docstrings.at (" dsf::mobility::Road::name" ).c_str ())
97+ .def (" length" ,
98+ &dsf::mobility::Street::length,
99+ dsf::g_docstrings.at (" dsf::mobility::Road::length" ).c_str ())
100+ .def (" maxSpeed" ,
101+ &dsf::mobility::Street::maxSpeed,
102+ dsf::g_docstrings.at (" dsf::mobility::Road::maxSpeed" ).c_str ());
103+
104+ // Bind RoadJunction class to mobility submodule
105+ pybind11::class_<dsf::mobility::RoadJunction>(mobility, " RoadJunction" )
106+ .def (" id" ,
107+ &dsf::mobility::RoadJunction::id,
108+ dsf::g_docstrings.at (" dsf::Node::id" ).c_str ())
109+ .def (" geometry" ,
110+ &dsf::mobility::RoadJunction::geometry,
111+ dsf::g_docstrings.at (" dsf::Node::geometry" ).c_str ())
112+ .def (" capacity" ,
113+ &dsf::mobility::RoadJunction::capacity,
114+ dsf::g_docstrings.at (" dsf::mobility::RoadJunction::capacity" ).c_str ())
115+ .def (
116+ " transportCapacity" ,
117+ &dsf::mobility::RoadJunction::transportCapacity,
118+ dsf::g_docstrings.at (" dsf::mobility::RoadJunction::transportCapacity" ).c_str ());
119+
81120 // Bind Measurement to main module (can be used across different contexts)
82121 pybind11::class_<dsf::Measurement<double >>(m, " Measurement" )
83122 .def (pybind11::init<double , double , std::size_t >(),
@@ -120,6 +159,21 @@ PYBIND11_MODULE(dsf_cpp, m) {
120159 .def (" nTrafficLights" ,
121160 &dsf::mobility::RoadNetwork::nTrafficLights,
122161 dsf::g_docstrings.at (" dsf::mobility::RoadNetwork::nTrafficLights" ).c_str ())
162+ // Bind node and edge Network accessors, which return a ref or a cost ref
163+ // node should return a RoadJunction and edge should return a Street
164+ .def (
165+ " node" ,
166+ static_cast <dsf::mobility::RoadJunction& (
167+ dsf::mobility::RoadNetwork::*)(dsf::Id)>(&dsf::mobility::RoadNetwork::node),
168+ pybind11::arg (" nodeId" ),
169+ pybind11::return_value_policy::reference_internal,
170+ dsf::g_docstrings.at (" dsf::Network::node" ).c_str ())
171+ .def (" edge" ,
172+ static_cast <dsf::mobility::Street& (dsf::mobility::RoadNetwork::*)(dsf::Id)>(
173+ &dsf::mobility::RoadNetwork::edge),
174+ pybind11::arg (" edgeId" ),
175+ pybind11::return_value_policy::reference_internal,
176+ dsf::g_docstrings.at (" dsf::Network::edge" ).c_str ())
123177 .def (" capacity" ,
124178 &dsf::mobility::RoadNetwork::capacity,
125179 dsf::g_docstrings.at (" dsf::mobility::RoadNetwork::capacity" ).c_str ())
@@ -470,7 +524,6 @@ PYBIND11_MODULE(dsf_cpp, m) {
470524 self.setSpeedFunction (
471525 dsf::SpeedFunction::CUSTOM,
472526 [func_ptr](dsf::mobility::Street const & street) -> double {
473- // No GIL needed — this is pure C
474527 return func_ptr (street.maxSpeed (), street.density (true ));
475528 });
476529 break ;
@@ -499,9 +552,9 @@ PYBIND11_MODULE(dsf_cpp, m) {
499552 .def (
500553 " setInitTime" ,
501554 [](dsf::mobility::FirstOrderDynamics& self, pybind11::object datetime_obj) {
502- auto const epoch =
503- pybind11::cast<std:: time_t >(datetime_obj.attr (" timestamp" )());
504- self.setInitTime (epoch );
555+ auto const epoch_seconds =
556+ pybind11::cast<double >(datetime_obj.attr (" timestamp" )());
557+ self.setInitTime (static_cast <std:: time_t >(epoch_seconds) );
505558 },
506559 pybind11::arg (" datetime" ),
507560 dsf::g_docstrings.at (" dsf::Dynamics::setInitTime" ).c_str ())
0 commit comments