@ -22,6 +22,8 @@ void define_formulae(py::module& m) {
py::class_<storm::logic::EventuallyFormula,std::shared_ptr<storm::logic::EventuallyFormula>>(m,"EventuallyFormula","Formula for eventually",unaryPathFormula);
py::class_<storm::logic::GloballyFormula,std::shared_ptr<storm::logic::GloballyFormula>>(m,"GloballyFormula","Formula for globally",unaryPathFormula);
py::class_<storm::logic::BinaryPathFormula,std::shared_ptr<storm::logic::BinaryPathFormula>>binaryPathFormula(m,"BinaryPathFormula","Path formula with two operands",pathFormula);
py::class_<storm::logic::BoundedUntilFormula,std::shared_ptr<storm::logic::BoundedUntilFormula>>(m,"BoundedUntilFormula","Until Formula with either a step or a time bound.",binaryPathFormula);
py::class_<storm::logic::ConditionalFormula,std::shared_ptr<storm::logic::ConditionalFormula>>(m,"ConditionalFormula","Formula with the right hand side being a condition.",formula);
py::class_<storm::logic::UntilFormula,std::shared_ptr<storm::logic::UntilFormula>>(m,"UntilFormula","Path Formula for unbounded until",binaryPathFormula);
@ -56,10 +58,8 @@ void define_formulae(py::module& m) {
//.def_property_readonly("_threshold_as_rational", &storm::logic::OperatorFormula::getThresholdAs<storm::RationalNumber>, "Rational threshold of bound, if applicable")
//.def_property_readonly("_threshold_expression_has_rational_type", [](storm::logic::OperatorFormula const& f) { return f.getThreshold().hasRationalType(); } , "Check expression type [without needing a Python expression object]")
.def_property_readonly("has_optimality_type",&storm::logic::OperatorFormula::hasOptimalityType,"Flag if an optimality type is present")
.def_property_readonly("optimality_type",&storm::logic::OperatorFormula::getOptimalityType,"Flag for the optimality type")
;
py::class_<storm::logic::TimeOperatorFormula,std::shared_ptr<storm::logic::TimeOperatorFormula>>(m,"TimeOperator","The time operator",operatorFormula);
py::class_<storm::logic::LongRunAverageOperatorFormula,std::shared_ptr<storm::logic::LongRunAverageOperatorFormula>>(m,"LongRunAvarageOperator","Long run average operator",operatorFormula);
py::class_<RegionModelChecker,std::shared_ptr<RegionModelChecker>>regionModelChecker(m,"RegionModelChecker","Region model checker via paramater lifting");
m.def("create_region_checker",&createRegionChecker,"Create region checker",py::arg("environment"),py::arg("model"),py::arg("formula"));
py::class_<DtmcParameterLiftingModelChecker,std::shared_ptr<DtmcParameterLiftingModelChecker>>(m,"DtmcParameterLiftingModelChecker","Region model checker for DTMCs",regionModelChecker)
py::class_<MdpParameterLiftingModelChecker,std::shared_ptr<MdpParameterLiftingModelChecker>>(m,"MdpParameterLiftingModelChecker","Region model checker for MPDs",regionModelChecker)
m.def("create_region_checker",&createRegionChecker,"Create region checker",py::arg("environment"),py::arg("model"),py::arg("formula"),py::arg("generate_splitting_estimate")=false,py::arg("allow_model_simplification")=true);
//m.def("is_parameter_lifting_sound", &storm::utility::parameterlifting::validateParameterLiftingSound, "Check if parameter lifting is sound", py::arg("model"), py::arg("formula"));
m.def("gather_derivatives",&gatherDerivatives,"Gather all derivatives of transition probabilities",py::arg("model"),py::arg("var"));
.def("reduce_to_state_based_rewards",[](RewardModel<double>&rewardModel,SparseMatrix<double>const&transitions,boolonlyStateRewards){returnrewardModel.reduceToStateBasedRewards(transitions,onlyStateRewards);},py::arg("transition_matrix"),py::arg("only_state_rewards"),"Reduce to state-based rewards")
;
@ -201,6 +203,9 @@ void define_model(py::module& m) {
.def("reduce_to_state_based_rewards",[](RewardModel<storm::RationalFunction>&rewardModel,SparseMatrix<storm::RationalFunction>const&transitions,boolonlyStateRewards){returnrewardModel.reduceToStateBasedRewards(transitions,onlyStateRewards);},py::arg("transition_matrix"),py::arg("only_state_rewards"),"Reduce to state-based rewards")