From c08bd2bd87c9af2d1260be418ede1b66e1fe7346 Mon Sep 17 00:00:00 2001 From: Mavo Date: Tue, 19 Jan 2016 16:17:25 +0100 Subject: [PATCH 1/2] Typo Former-commit-id: aa3b88835303a04092d0c73cf5cc03e296e5db64 --- src/python/storm-core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/python/storm-core.cpp b/src/python/storm-core.cpp index b7ecebbd6..bd0182c2b 100644 --- a/src/python/storm-core.cpp +++ b/src/python/storm-core.cpp @@ -82,7 +82,7 @@ BOOST_PYTHON_MODULE(_core) ; class_, std::shared_ptr >, boost::noncopyable, bases>("SparseParametricModel", no_init); class_, std::shared_ptr>, boost::noncopyable, bases>("SparseModel", no_init); - class_, std::shared_ptr>, boost::noncopyable, bases>("SparseParamtricMc", no_init); + class_, std::shared_ptr>, boost::noncopyable, bases>("SparseParametricMc", no_init); register_ptr_to_python>(); register_ptr_to_python>>(); From 5f99e86c38646210d9cae9bbb5225adbadce16a1 Mon Sep 17 00:00:00 2001 From: Mavo Date: Tue, 19 Jan 2016 17:40:36 +0100 Subject: [PATCH 2/2] Next step toward success Former-commit-id: 4ca8e78e36c0451545234405ba420cb0b643e331 --- src/python/storm-core.cpp | 41 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/python/storm-core.cpp b/src/python/storm-core.cpp index bd0182c2b..03dfcc4db 100644 --- a/src/python/storm-core.cpp +++ b/src/python/storm-core.cpp @@ -21,6 +21,32 @@ namespace boost { namespace python { namespace converter { return converter::registered const&>::converters.to_python(&x); } + /// @brief Adapter a non-member function that returns a unique_ptr to + /// a python function object that returns a raw pointer but + /// explicitly passes ownership to Python. + template + object adapt_unique(std::unique_ptr (*fn)(Args...)) + { + return make_function( + [fn](Args... args) { return fn(args...).release(); }, + return_value_policy(), + boost::mpl::vector() + ); + } + + /// @brief Adapter a member function that returns a unique_ptr to + /// a python function object that returns a raw pointer but + /// explicitly passes ownership to Python. + template + object adapt_unique(std::unique_ptr (C::*fn)(Args...)) + { + return make_function( + [fn](C& self, Args... args) { return (self.*fn)(args...).release(); }, + python::return_value_policy(), + boost::mpl::vector() + ); + } + }}} // namespace boost::python::converter @@ -30,6 +56,10 @@ std::shared_ptr buildModel(storm::prism::Program const return storm::buildSymbolicModel(program, std::vector>(1,formula)).model; } +void printResult(std::shared_ptr result) { + result->writeToStream(std::cout); +} + BOOST_PYTHON_MODULE(_core) { using namespace boost::python; @@ -60,7 +90,11 @@ BOOST_PYTHON_MODULE(_core) //////////////////////////////////////////// // Checkresult //////////////////////////////////////////// - class_, boost::noncopyable>("CheckResult", no_init); + class_, boost::noncopyable>("CheckResult", no_init) + ; + register_ptr_to_python>(); + + def("printResult", printResult); //////////////////////////////////////////// @@ -82,10 +116,11 @@ BOOST_PYTHON_MODULE(_core) ; class_, std::shared_ptr >, boost::noncopyable, bases>("SparseParametricModel", no_init); class_, std::shared_ptr>, boost::noncopyable, bases>("SparseModel", no_init); - class_, std::shared_ptr>, boost::noncopyable, bases>("SparseParametricMc", no_init); + class_, std::shared_ptr>, boost::noncopyable, bases>>("SparseParametricMc", no_init); register_ptr_to_python>(); register_ptr_to_python>>(); + implicitly_convertible>, std::shared_ptr>>(); register_ptr_to_python>>(); def("parseFormulae", storm::parseFormulasForProgram); @@ -105,5 +140,5 @@ BOOST_PYTHON_MODULE(_core) ; - def("performStateElimination", storm::verifySparseModel); + def("performStateElimination", boost::python::converter::adapt_unique(storm::verifySparseModel)); }