#include #include #include "../utility/storm.h" #include "../logic/Formulas.h" //namespace boost { // template T* get_pointer(std::shared_ptr p) { return p.get(); } //} namespace boost { namespace python { namespace converter { template PyObject* shared_ptr_to_python(std::shared_ptr const& x) { if (!x) return python::detail::none(); else if (shared_ptr_deleter* d = std::get_deleter(x)) return incref( d->owner.get() ); else return converter::registered const&>::converters.to_python(&x); } }}} // namespace boost::python::converter std::shared_ptr buildModel(storm::prism::Program const& program, std::shared_ptr const& formula) { storm::settings::SettingsManager::manager().setFromString(""); return storm::buildSymbolicModel(program, std::vector>(1,formula)).model; } BOOST_PYTHON_MODULE(_core) { using namespace boost::python; def("setUp", storm::utility::setUp); //////////////////////////////////////////// // Formula //////////////////////////////////////////// class_, boost::noncopyable>("Formula", no_init) .def("toString", &storm::logic::Formula::toString); class_>>("FormulaVec") .def(vector_indexing_suite>, true>()) ; class_, bases>("ProbabilityOperatorFormula", no_init) .def("toString", &storm::logic::ProbabilityOperatorFormula::toString); register_ptr_to_python>(); //////////////////////////////////////////// // Program //////////////////////////////////////////// class_("Program") .add_property("nrModules", &storm::prism::Program::getNumberOfModules) ; //////////////////////////////////////////// // Checkresult //////////////////////////////////////////// class_, boost::noncopyable>("CheckResult", no_init); //////////////////////////////////////////// // Models //////////////////////////////////////////// enum_("ModelType") .value("dtmc", storm::models::ModelType::Dtmc) .value("mdp", storm::models::ModelType::Mdp) .value("ctmc", storm::models::ModelType::Ctmc) .value("ma", storm::models::ModelType::MarkovAutomaton) ; class_, boost::noncopyable>("ModelBase", no_init) .add_property("nrStates", &storm::models::ModelBase::getNumberOfStates) .add_property("nrTransitions", &storm::models::ModelBase::getNumberOfTransitions) .add_property("model_type", &storm::models::ModelBase::getType) .def("asPdtmc", &storm::models::ModelBase::as>) ; 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); register_ptr_to_python>(); register_ptr_to_python>>(); register_ptr_to_python>>(); def("parseFormulae", storm::parseFormulasForProgram); def("parseProgram", storm::parseProgram); def("buildModel", buildModel); def("buildModelFromPrismProgram", storm::buildSymbolicModel); def("buildParametricModelFromPrismProgram", storm::buildSymbolicModel); ////////////////////////////////////////////// // Model Checking ////////////////////////////////////////////// class_("ModelProgramPair", no_init) .add_property("model", &storm::storage::ModelFormulasPair::model) .add_property("program", &storm::storage::ModelFormulasPair::formulas) ; def("performStateElimination", storm::verifySparseModel); }