diff --git a/src/python/helpers.h b/src/python/helpers.h index 9e96700e0..f37d350d9 100644 --- a/src/python/helpers.h +++ b/src/python/helpers.h @@ -7,10 +7,11 @@ void shared_ptr_implicitly_convertible() { boost::python::implicitly_convertible<std::shared_ptr<Source>, std::shared_ptr<Target>>(); } - template<typename T> void register_shared_ptr() { boost::python::register_ptr_to_python<std::shared_ptr<T>>(); + boost::python::register_ptr_to_python<std::shared_ptr<const T>>(); + } diff --git a/src/python/storm-core.cpp b/src/python/storm-core.cpp index 7b740bf1a..4bde9ca91 100644 --- a/src/python/storm-core.cpp +++ b/src/python/storm-core.cpp @@ -17,12 +17,12 @@ public: }; // Thin wrapper for model building -std::shared_ptr<storm::models::ModelBase> buildModel(storm::prism::Program const& program, std::shared_ptr<const storm::logic::Formula> const& formula) { +std::shared_ptr<storm::models::ModelBase> buildModel(storm::prism::Program const& program, std::shared_ptr<storm::logic::Formula> const& formula) { return storm::buildSymbolicModel<storm::RationalFunction>(program, std::vector<std::shared_ptr<const storm::logic::Formula>>(1,formula)).model; } // Thin wrapper for parametric state elimination -std::shared_ptr<PmcResult> performStateElimination(std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> model, std::shared_ptr<const storm::logic::Formula> const& formula) { +std::shared_ptr<PmcResult> performStateElimination(std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> model, std::shared_ptr<storm::logic::Formula> const& formula) { std::unique_ptr<storm::modelchecker::CheckResult> checkResult = storm::verifySparseModel<storm::RationalFunction>(model, formula); std::shared_ptr<PmcResult> result = std::make_shared<PmcResult>(); result->resultFunction = (checkResult->asExplicitQuantitativeCheckResult<storm::RationalFunction>()[*model->getInitialStates().begin()]); @@ -98,9 +98,6 @@ BOOST_PYTHON_MODULE(_core) defineClass<storm::models::sparse::Dtmc<storm::RationalFunction>, storm::models::sparse::Model<storm::RationalFunction>>("SparseParametricDtmc", ""); defineClass<storm::models::sparse::Mdp<storm::RationalFunction>, storm::models::sparse::Model<storm::RationalFunction>>("SparseParametricMdp", ""); - defineClass<std::vector<std::shared_ptr<const storm::logic::Formula>>, void, void>("FormulaVec", "Vector of formulas") - .def(vector_indexing_suite<std::vector<std::shared_ptr<const storm::logic::Formula>>, true>()) - ; //////////////////////////////////////////// // Bisimulation diff --git a/src/python/storm-logic.cpp b/src/python/storm-logic.cpp index bdf4954df..e2934859c 100644 --- a/src/python/storm-logic.cpp +++ b/src/python/storm-logic.cpp @@ -5,13 +5,24 @@ #include "helpers.h" #include "boostPyExtension.h" - +// Less, LessEqual, Greater, GreaterEqual BOOST_PYTHON_MODULE(_logic) { using namespace boost::python; + enum_<storm::logic::ComparisonType>("ComparisonType") + .value("LESS", storm::logic::ComparisonType::Less) + .value("LEQ", storm::logic::ComparisonType::LessEqual) + .value("GREATER", storm::logic::ComparisonType::Greater) + .value("GEQ", storm::logic::ComparisonType::GreaterEqual) + ; + + defineClass<std::vector<std::shared_ptr<storm::logic::Formula>>, void, void>("FormulaVec", "Vector of formulas") + .def(vector_indexing_suite<std::vector<std::shared_ptr<storm::logic::Formula>>, true>()) + ; + //////////////////////////////////////////// // Formula //////////////////////////////////////////// @@ -74,7 +85,9 @@ BOOST_PYTHON_MODULE(_logic) defineClass<storm::logic::OperatorFormula, storm::logic::UnaryStateFormula, boost::noncopyable>("OperatorFormula", "") .add_property("has_bound", &storm::logic::OperatorFormula::hasBound) - .add_property("bound", &storm::logic::OperatorFormula::getBound) + .add_property("bound", &storm::logic::OperatorFormula::getBound, &storm::logic::OperatorFormula::setBound) + .add_property("comparison_type", &storm::logic::OperatorFormula::getComparisonType, &storm::logic::OperatorFormula::setComparisonType) + ; defineClass<storm::logic::ExpectedTimeOperatorFormula, storm::logic::OperatorFormula>("ExpectedTimeOperator", "The expected time between two events"); defineClass<storm::logic::LongRunAverageOperatorFormula, storm::logic::OperatorFormula>("LongRunAvarageOperator",