Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Minimal change to support host on-off and permanent mailboxes
[simgrid.git] / src / bindings / python / simgrid_python.cpp
index 1153a25..e6a3e8e 100644 (file)
@@ -84,12 +84,13 @@ PYBIND11_MODULE(simgrid, m)
   // Swapped contexts are broken, starting from pybind11 v2.8.0.  Use thread contexts by default.
   simgrid::s4u::Engine::set_config("contexts/factory:thread");
 
-  // Internal exception used to kill actors and sweep the RAII chimney (free objects living on the stack)
-  static py::object pyForcefulKillEx(py::register_exception<simgrid::ForcefulKillException>(m, "ActorKilled"));
-
   py::register_exception<simgrid::NetworkFailureException>(m, "NetworkFailureException");
   py::register_exception<simgrid::TimeoutException>(m, "TimeoutException");
-
+  py::register_exception<simgrid::HostFailureException>(m, "HostFailureException");
+  py::register_exception<simgrid::StorageFailureException>(m, "StorageFailureException");
+  py::register_exception<simgrid::VmFailureException>(m, "VmFailureException");
+  py::register_exception<simgrid::CancelException>(m, "CancelException");
+  
   /* this_actor namespace */
   m.def_submodule("this_actor", "Bindings of the s4u::this_actor namespace. See the C++ documentation for details.")
       .def(
@@ -147,11 +148,11 @@ PYBIND11_MODULE(simgrid, m)
            }),
            "The constructor should take the parameters from the command line, as is ")
       .def_static("get_clock",
-                  [](pybind11::object& self) // XBT_ATTRIB_DEPRECATED_v334
+                  []() // XBT_ATTRIB_DEPRECATED_v334
                   {
                     PyErr_WarnEx(PyExc_DeprecationWarning,
-                                 "get_clock() is deprecated and  will be dropped after v3.33, use clock() instead.", 1);
-                    return self.attr("clock");
+                                 "get_clock() is deprecated and  will be dropped after v3.33, use clock instead.", 1);
+                    return Engine::get_clock();
                   })
       .def_property_readonly_static(
           "clock", [](py::object /* self */) { return Engine::get_clock(); },
@@ -159,37 +160,36 @@ PYBIND11_MODULE(simgrid, m)
       .def_property_readonly_static(
           "instance", [](py::object /* self */) { return Engine::get_instance(); }, "Retrieve the simulation engine")
       .def("get_all_hosts",
-           [](pybind11::object& self) // XBT_ATTRIB_DEPRECATED_v334
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
            {
              PyErr_WarnEx(PyExc_DeprecationWarning,
-                          "get_all_hosts() is deprecated and  will be dropped after v3.33, use all_host() instead.", 1);
+                          "get_all_hosts() is deprecated and  will be dropped after v3.33, use all_hosts instead.", 1);
              return self.attr("all_hosts");
            })
       .def_property_readonly("all_hosts", &Engine::get_all_hosts, "Returns the list of all hosts found in the platform")
       .def("get_all_links",
-           [](pybind11::object& self) // XBT_ATTRIB_DEPRECATED_v334
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
            {
              PyErr_WarnEx(PyExc_DeprecationWarning,
-                          "get_all_links() is deprecated and  will be dropped after v3.33, use all_links() instead.",
-                          1);
+                          "get_all_links() is deprecated and  will be dropped after v3.33, use all_links instead.", 1);
              return self.attr("all_links");
            })
       .def_property_readonly("all_links", &Engine::get_all_links, "Returns the list of all links found in the platform")
       .def("get_all_netpoints",
-           [](pybind11::object& self) // XBT_ATTRIB_DEPRECATED_v334
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
            {
              PyErr_WarnEx(
                  PyExc_DeprecationWarning,
-                 "get_all_netpoints() is deprecated and  will be dropped after v3.33, use all_netpoints() instead.", 1);
+                 "get_all_netpoints() is deprecated and  will be dropped after v3.33, use all_netpoints instead.", 1);
              return self.attr("all_netpoints");
            })
       .def_property_readonly("all_netpoints", &Engine::get_all_netpoints)
       .def("get_netzone_root",
-           [](pybind11::object& self) // XBT_ATTRIB_DEPRECATED_v334
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
            {
-             PyErr_WarnEx(
-                 PyExc_DeprecationWarning,
-                 "get_netzone_root() is deprecated and  will be dropped after v3.3, use netzone_root() instead.", 1);
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "get_netzone_root() is deprecated and  will be dropped after v3.3, use netzone_root instead.",
+                          1);
              return self.attr("netzone_root");
            })
       .def_property_readonly("netzone_root", &Engine::get_netzone_root,
@@ -218,10 +218,8 @@ PYBIND11_MODULE(simgrid, m)
                 if (py::isinstance<py::function>(res))
                   res();
               } catch (const py::error_already_set& ex) {
-                if (ex.matches(pyForcefulKillEx)) {
-                  XBT_VERB("Actor killed");
-                  simgrid::ForcefulKillException::do_throw(); // Forward that ForcefulKill exception
-                }
+                XBT_VERB("Actor killed");
+                simgrid::ForcefulKillException::do_throw(); // Forward that ForcefulKill exception
                 throw;
               }
             });
@@ -277,7 +275,15 @@ PYBIND11_MODULE(simgrid, m)
       .def("create_router", &simgrid::s4u::NetZone::create_router, "Create a router")
       .def("set_parent", &simgrid::s4u::NetZone::set_parent, "Set the parent of this zone")
       .def("set_property", &simgrid::s4u::NetZone::set_property, "Add a property to this zone")
-      .def("get_netpoint", &simgrid::s4u::NetZone::get_netpoint, "Retrieve the netpoint associated to this zone")
+      .def("get_netpoint",
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "get_netpoint() is deprecated and  will be dropped after v3.33, use netpoint instead.", 1);
+             return self.attr("netpoint");
+           })
+      .def_property_readonly("netpoint", &simgrid::s4u::NetZone::get_netpoint,
+                             "Retrieve the netpoint associated to this zone")
       .def("seal", &simgrid::s4u::NetZone::seal, "Seal this NetZone")
       .def_property_readonly(
           "name", [](const simgrid::s4u::NetZone* self) { return self->get_name(); },
@@ -348,12 +354,49 @@ PYBIND11_MODULE(simgrid, m)
           "   \"\"\"\n\n"
           "The second function parameter is the periodicity: the time to wait after the last event to start again over "
           "the list. Set it to -1 to not loop over.")
-      .def("get_pstate_count", &Host::get_pstate_count, "Retrieve the count of defined pstate levels")
-      .def("get_pstate_speed", &Host::get_pstate_speed, "Retrieve the maximal speed at the given pstate")
-      .def("get_netpoint", &Host::get_netpoint, "Retrieve the netpoint associated to this host")
+      .def("get_pstate_count",
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(
+                 PyExc_DeprecationWarning,
+                 "get_pstate_count() is deprecated and  will be dropped after v3.33, use pstate_count instead.", 1);
+             return self.attr("pstate_count");
+           })
+      .def_property_readonly("pstate_count", &Host::get_pstate_count, "Retrieve the count of defined pstate levels")
+      .def("get_pstate_speed",
+           [](py::object self, int state) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(
+                 PyExc_DeprecationWarning,
+                 "get_pstate_speed() is deprecated and  will be dropped after v3.33, use pstate_speed instead.", 1);
+             return self.attr("pstate_speed")(state);
+           })
+      .def("pstate_speed", &Host::get_pstate_speed, py::call_guard<py::gil_scoped_release>(),
+           "Retrieve the maximal speed at the given pstate")
+      .def("get_netpoint",
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "get_netpoint() is deprecated and  will be dropped after v3.33, use netpoint instead.", 1);
+             return self.attr("netpoint");
+           })
+      .def_property_readonly("netpoint", &Host::get_netpoint, "Retrieve the netpoint associated to this zone")
       .def("get_disks", &Host::get_disks, "Retrieve the list of disks in this host")
-      .def("set_core_count", &Host::set_core_count, py::call_guard<py::gil_scoped_release>(),
-           "Set the number of cores in the CPU")
+      .def("set_core_count",
+           [](py::object self, double count) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "set_core_count() is deprecated and  will be dropped after v3.33, use core_count instead.",
+                          1);
+             self.attr("core_count")(count);
+           })
+      .def_property(
+          "core_count", &Host::get_core_count,
+          [](Host* h, int count) {
+            py::gil_scoped_release gil_guard;
+            return h->set_core_count(count);
+          },
+          "Manage the number of cores in the CPU")
       .def("set_coordinates", &Host::set_coordinates, py::call_guard<py::gil_scoped_release>(),
            "Set the coordinates of this host")
       .def("set_sharing_policy", &simgrid::s4u::Host::set_sharing_policy, py::call_guard<py::gil_scoped_release>(),
@@ -551,8 +594,22 @@ PYBIND11_MODULE(simgrid, m)
   /* Class Split-Duplex Link */
   py::class_<simgrid::s4u::SplitDuplexLink, Link, std::unique_ptr<simgrid::s4u::SplitDuplexLink, py::nodelete>>(
       m, "SplitDuplexLink", "Network split-duplex link")
-      .def("get_link_up", &simgrid::s4u::SplitDuplexLink::get_link_up, "Get link direction up")
-      .def("get_link_down", &simgrid::s4u::SplitDuplexLink::get_link_down, "Get link direction down");
+      .def("get_link_up",
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "get_link_up() is deprecated and  will be dropped after v3.33, use link_up instead.", 1);
+             return self.attr("link_up");
+           })
+      .def_property_readonly("link_up", &simgrid::s4u::SplitDuplexLink::get_link_up, "Get link direction up")
+      .def("get_link_down",
+           [](py::object self) // XBT_ATTRIB_DEPRECATED_v334
+           {
+             PyErr_WarnEx(PyExc_DeprecationWarning,
+                          "get_link_down() is deprecated and  will be dropped after v3.33, use link_down instead.", 1);
+             return self.attr("link_down");
+           })
+      .def_property_readonly("link_down", &simgrid::s4u::SplitDuplexLink::get_link_down, "Get link direction down");
 
   /* Class Mailbox */
   py::class_<simgrid::s4u::Mailbox, std::unique_ptr<Mailbox, py::nodelete>>(
@@ -591,7 +648,7 @@ PYBIND11_MODULE(simgrid, m)
       .def(
           "get",
           [](Mailbox* self) {
-            py::object data = pybind11::reinterpret_steal<py::object>(self->get<PyObject>());
+            py::object data = py::reinterpret_steal<py::object>(self->get<PyObject>());
             // data.dec_ref(); // FIXME: why does it break python-actor-create?
             return data;
           },
@@ -685,10 +742,8 @@ PYBIND11_MODULE(simgrid, m)
                 py::gil_scoped_acquire py_context;
                 fun(*args);
               } catch (const py::error_already_set& ex) {
-                if (ex.matches(pyForcefulKillEx)) {
-                  XBT_VERB("Actor killed");
-                  simgrid::ForcefulKillException::do_throw(); // Forward that ForcefulKill exception
-                }
+                XBT_VERB("Actor killed");
+                simgrid::ForcefulKillException::do_throw(); // Forward that ForcefulKill exception
                 throw;
               }
             });