Mavo
9 years ago
12 changed files with 0 additions and 510 deletions
-
122setup.py
-
4src/CMakeLists.txt
-
26src/python/CMakeLists.txt
-
44src/python/boostPyExtension.h
-
57src/python/helpers.h
-
130src/python/storm-core.cpp
-
104src/python/storm-logic.cpp
-
0stormpy_old/__init__.py
-
20stormpy_old/core/__init__.py
-
1stormpy_old/expressions/__init__.py
-
1stormpy_old/info/__init__.py
-
1stormpy_old/logic/__init__.py
@ -1,122 +0,0 @@ |
|||
from setuptools import setup, find_packages |
|||
from setuptools.command.install import install |
|||
from setuptools.command.develop import develop |
|||
from setuptools.command.egg_info import egg_info |
|||
from subprocess import call, STDOUT |
|||
import distutils.sysconfig |
|||
import os |
|||
import os.path |
|||
import tempfile |
|||
import glob |
|||
import shutil |
|||
import distutils |
|||
import multiprocessing |
|||
print(os.getcwd()) |
|||
|
|||
|
|||
PYTHONINC = distutils.sysconfig.get_python_inc() |
|||
PYTHONLIB = distutils.sysconfig.get_python_lib(plat_specific=True, standard_lib=True) |
|||
PYTHONLIBDIR = distutils.sysconfig.get_config_var("LIBDIR") |
|||
PYTHONLIBS = glob.glob(os.path.join(PYTHONLIBDIR, "*.dylib")) |
|||
PYTHONLIBS.extend(glob.glob(os.path.join(PYTHONLIBDIR, "*.so"))) |
|||
PYTHONLIB = PYTHONLIBS[0] |
|||
|
|||
NO_COMPILE_CORES = multiprocessing.cpu_count() |
|||
#print(os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))) |
|||
#print(PYTHONINC) |
|||
#print(PYTHONLIB) |
|||
|
|||
d = "setuppy_build" |
|||
|
|||
PROJECT_PYTHON_DIR = "stormpy" |
|||
PROJECT_PYTHON_FILES = os.path.join(os.path.dirname(os.path.realpath(__file__)), PROJECT_PYTHON_DIR) |
|||
PROJECT_PYTHON_TMP_DESTINATION = os.path.join(os.path.realpath(d), PROJECT_PYTHON_DIR) |
|||
|
|||
print(d) |
|||
if not os.path.exists(d): |
|||
os.makedirs(d) |
|||
|
|||
class MyEggInfo(egg_info): |
|||
def run(self): |
|||
try: |
|||
src = PROJECT_PYTHON_FILES |
|||
print(src) |
|||
dst = PROJECT_PYTHON_TMP_DESTINATION |
|||
print(dst) |
|||
distutils.dir_util.copy_tree(src, dst) |
|||
egg_info.run(self) |
|||
except: |
|||
print("Exception occurred") |
|||
egg_info.run(self) |
|||
|
|||
|
|||
class MyInstall(install): |
|||
user_options = install.user_options + [ |
|||
('cmake=', None, 'Additional cmake arguments'), |
|||
('make=', None, 'Additional make arguments'), |
|||
] |
|||
|
|||
def initialize_options(self): |
|||
install.initialize_options(self) |
|||
self.cmake = "" |
|||
self.make = "" |
|||
|
|||
def run(self): |
|||
# Call cmake |
|||
cmake_args = ["cmake", "-DSTORM_PYTHON=ON", "-DUSE_BOOST_STATIC_LIBRARIES=OFF", "-DPYTHON_LIBRARY="+PYTHONLIB, "-DPYTHON_INCLUDE_DIR="+PYTHONINC] |
|||
cmake_args.extend(self.cmake.split()) |
|||
cmake_args.append(os.path.abspath(os.path.dirname(os.path.realpath(__file__)))) |
|||
ret = call(cmake_args, cwd=d) |
|||
if ret != 0: |
|||
raise RuntimeError("Cmake exited with return code {}".format(ret)) |
|||
|
|||
# Call make |
|||
make_args = ["make", "stormpy", "-j"+str(NO_COMPILE_CORES)] |
|||
make_args.extend(self.make.split()) |
|||
ret = call(make_args, cwd=d) |
|||
if ret != 0: |
|||
raise RuntimeError("Make exited with return code {}".format(ret)) |
|||
install.run(self) |
|||
|
|||
class MyDevelop(develop): |
|||
user_options = develop.user_options + [ |
|||
('cmake=', None, 'Additional cmake arguments'), |
|||
('make=', None, 'Additional make arguments'), |
|||
] |
|||
|
|||
def initialize_options(self): |
|||
develop.initialize_options(self) |
|||
self.cmake = "" |
|||
self.make = "" |
|||
|
|||
def run(self): |
|||
# Call cmake |
|||
cmake_args = ["cmake", "-DSTORM_PYTHON=ON", "-DUSE_BOOST_STATIC_LIBRARIES=OFF", "-DPYTHON_LIBRARY="+PYTHONLIB, "-DPYTHON_INCLUDE_DIR="+PYTHONINC] |
|||
cmake_args.extend(self.cmake.split()) |
|||
cmake_args.append(os.path.abspath(os.path.dirname(os.path.realpath(__file__)))) |
|||
ret = call(cmake_args, cwd=d) |
|||
if ret != 0: |
|||
raise RuntimeError("Cmake exited with return code {}".format(ret)) |
|||
|
|||
# Call make |
|||
make_args = ["make", "stormpy", "-j"+str(NO_COMPILE_CORES)] |
|||
make_args.extend(self.make.split()) |
|||
ret = call(make_args, cwd=d) |
|||
if ret != 0: |
|||
raise RuntimeError("Make exited with return code {}".format(ret)) |
|||
develop.run(self) |
|||
|
|||
|
|||
setup(cmdclass={'install': MyInstall, 'develop': MyDevelop, 'egg_info': MyEggInfo}, |
|||
name="stormpy", |
|||
version="0.2", |
|||
description="Stormpy - Python Bindings for Storm", |
|||
package_dir={'':d}, |
|||
packages=['stormpy', 'stormpy.core', 'stormpy.info', 'stormpy.logic', 'stormpy.expressions'], |
|||
package_data={'stormpy.core': ['_core.so'], |
|||
'stormpy.logic': ['_logic.so'], |
|||
'stormpy.info' : ['_info.so'] , |
|||
'stormpy.expressions' : ['_expressions.so'], |
|||
'stormpy': ['*.so', '*.dylib', '*.a']}, |
|||
|
|||
include_package_data=True) |
@ -1,26 +0,0 @@ |
|||
############################################################# |
|||
## |
|||
## STORM PYTHON |
|||
## |
|||
############################################################# |
|||
|
|||
function (add_python_module _libname _modulename _sources) |
|||
add_library(${_libname} SHARED ${_sources}) |
|||
target_link_libraries(${_libname} storm ${BOOST_PYTHON_LIB} ${PYTHON_LIBRARIES}) |
|||
set_target_properties(${_libname} PROPERTIES |
|||
OUTPUT_NAME "_${_modulename}" |
|||
LIBRARY_OUTPUT_DIRECTORY "${STORMPY_OUTPUT_DIR}/${_modulename}" |
|||
PREFIX "" |
|||
SUFFIX ".so" |
|||
) |
|||
endfunction() |
|||
|
|||
|
|||
|
|||
if(STORM_PYTHON) |
|||
add_python_module(stormpy-info info ${CMAKE_CURRENT_SOURCE_DIR}/storm-info.cpp) |
|||
add_python_module(stormpy-core core ${CMAKE_CURRENT_SOURCE_DIR}/storm-core.cpp) |
|||
add_python_module(stormpy-logic logic ${CMAKE_CURRENT_SOURCE_DIR}/storm-logic.cpp) |
|||
add_python_module(stormpy-expression expressions ${CMAKE_CURRENT_SOURCE_DIR}/storm-expression.cpp) |
|||
add_custom_target(stormpy DEPENDS stormpy-info stormpy-core stormpy-logic stormpy-expression) |
|||
endif() |
@ -1,44 +0,0 @@ |
|||
#pragma once |
|||
#include <boost/python.hpp> |
|||
|
|||
|
|||
namespace boost { namespace python { namespace converter { |
|||
|
|||
template <class T> |
|||
PyObject* shared_ptr_to_python(std::shared_ptr<T> const& x) |
|||
{ |
|||
if (!x) |
|||
return python::detail::none(); |
|||
else if (shared_ptr_deleter* d = std::get_deleter<shared_ptr_deleter>(x)) |
|||
return incref( d->owner.get() ); |
|||
else |
|||
return converter::registered<std::shared_ptr<T> 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<typename T, typename ...Args> |
|||
object adapt_unique(std::unique_ptr<T> (*fn)(Args...)) |
|||
{ |
|||
return make_function( |
|||
[fn](Args... args) { return fn(args...).release(); }, |
|||
return_value_policy<manage_new_object>(), |
|||
boost::mpl::vector<T*, Args...>() |
|||
); |
|||
} |
|||
|
|||
/// @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<typename T, typename C, typename ...Args> |
|||
object adapt_unique(std::unique_ptr<T> (C::*fn)(Args...)) |
|||
{ |
|||
return make_function( |
|||
[fn](C& self, Args... args) { return (self.*fn)(args...).release(); }, |
|||
python::return_value_policy<manage_new_object>(), |
|||
boost::mpl::vector<T*, C&, Args...>() |
|||
); |
|||
} |
|||
|
|||
}}} // namespace boost::python::converter |
@ -1,57 +0,0 @@ |
|||
#pragma once |
|||
|
|||
#include <boost/python.hpp> |
|||
|
|||
template<typename Source, typename Target> |
|||
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>>(); |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
namespace dtl{ |
|||
// primary class template |
|||
template<typename S, typename T, typename Enable = void> |
|||
struct ImplConversionSharedPtr { |
|||
void c() { shared_ptr_implicitly_convertible<S, T>(); } |
|||
}; |
|||
|
|||
// specialized class template |
|||
template<typename S, typename T> |
|||
struct ImplConversionSharedPtr<S, T, typename std::enable_if<std::is_same<T, void>::value>::type> { |
|||
void c() { } |
|||
}; |
|||
|
|||
template<typename B> |
|||
struct bases_holder { |
|||
typedef boost::python::bases<B> Type; |
|||
}; |
|||
|
|||
template<> |
|||
struct bases_holder<void> { |
|||
typedef boost::python::bases<> Type; |
|||
}; |
|||
} |
|||
|
|||
template<typename C, typename B=void, typename NC=void> |
|||
boost::python::class_<C, std::shared_ptr<C>, typename dtl::bases_holder<B>::Type, NC> defineClass(char const* name, char const* docstring, typename std::enable_if_t<std::is_default_constructible<C>::value>::type* = 0) { |
|||
auto inst = boost::python::class_<C, std::shared_ptr<C>, typename dtl::bases_holder<B>::Type, NC>(name, docstring); |
|||
register_shared_ptr<C>(); |
|||
dtl::ImplConversionSharedPtr<C,B>().c(); |
|||
return inst; |
|||
}; |
|||
|
|||
template<typename C, typename B=void, typename NC=void> |
|||
boost::python::class_<C, std::shared_ptr<C>, typename dtl::bases_holder<B>::Type, NC> defineClass(char const* name, char const* docstring) { |
|||
auto inst = boost::python::class_<C, std::shared_ptr<C>, typename dtl::bases_holder<B>::Type, NC>(name, docstring, boost::python::no_init); |
|||
register_shared_ptr<C>(); |
|||
dtl::ImplConversionSharedPtr<C,B>().c(); |
|||
return inst; |
|||
}; |
@ -1,130 +0,0 @@ |
|||
#include <boost/python.hpp>
|
|||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
|||
#include "../utility/storm.h"
|
|||
#include "../logic/Formulas.h"
|
|||
|
|||
#include <type_traits>
|
|||
|
|||
#include "helpers.h"
|
|||
#include "boostPyExtension.h"
|
|||
|
|||
// Holds the rational function and constraints after parametric model checking
|
|||
class PmcResult { |
|||
public: |
|||
storm::RationalFunction resultFunction; |
|||
std::unordered_set<storm::ArithConstraint<storm::RationalFunction>> constraintsWellFormed; |
|||
std::unordered_set<storm::ArithConstraint<storm::RationalFunction>> constraintsGraphPreserving; |
|||
}; |
|||
|
|||
// Thin wrapper for model building
|
|||
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<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()]); |
|||
storm::models::sparse::Dtmc<storm::RationalFunction>::ConstraintCollector constraintCollector(*(model->template as<storm::models::sparse::Dtmc<storm::RationalFunction>>())); |
|||
result->constraintsWellFormed = constraintCollector.getWellformedConstraints(); |
|||
result->constraintsGraphPreserving = constraintCollector.getGraphPreservingConstraints(); |
|||
return result; |
|||
} |
|||
|
|||
// Thin wrapper for initializing
|
|||
void setupStormLib(std::string const& args) { |
|||
storm::utility::setUp(); |
|||
storm::settings::SettingsManager::manager().setFromString(args); |
|||
} |
|||
|
|||
BOOST_PYTHON_MODULE(_core) |
|||
{ |
|||
using namespace boost::python; |
|||
def("set_up", setupStormLib); |
|||
|
|||
|
|||
////////////////////////////////////////////
|
|||
// Program
|
|||
////////////////////////////////////////////
|
|||
|
|||
defineClass<storm::prism::Program>("Program", "") |
|||
.add_property("nr_modules", &storm::prism::Program::getNumberOfModules) |
|||
; |
|||
|
|||
|
|||
////////////////////////////////////////////
|
|||
// PmcResult
|
|||
////////////////////////////////////////////
|
|||
class_<PmcResult, std::shared_ptr<PmcResult>, boost::noncopyable>("PmcResult", "Holds the results after parametric model checking") |
|||
.add_property("result_function", &PmcResult::resultFunction) |
|||
.add_property("constraints_well_formed", &PmcResult::constraintsWellFormed) |
|||
.add_property("constraints_graph_preserving", &PmcResult::constraintsGraphPreserving) |
|||
; |
|||
register_ptr_to_python<std::shared_ptr<PmcResult>>(); |
|||
|
|||
|
|||
////////////////////////////////////////////
|
|||
// Models
|
|||
////////////////////////////////////////////
|
|||
|
|||
enum_<storm::models::ModelType>("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) |
|||
; |
|||
|
|||
defineClass<storm::models::ModelBase, void, boost::noncopyable>("ModelBase", "") |
|||
.add_property("nr_states", &storm::models::ModelBase::getNumberOfStates) |
|||
.add_property("nr_transitions", &storm::models::ModelBase::getNumberOfTransitions) |
|||
.add_property("model_type", &storm::models::ModelBase::getType) |
|||
.add_property("parametric", &storm::models::ModelBase::isParametric) |
|||
.def("as_dtmc", &storm::models::ModelBase::as<storm::models::sparse::Dtmc<double>>) |
|||
.def("as_pdtmc", &storm::models::ModelBase::as<storm::models::sparse::Dtmc<storm::RationalFunction>>) |
|||
.def("as_mdp", &storm::models::ModelBase::as<storm::models::sparse::Mdp<double>>) |
|||
.def("as_pmdp", &storm::models::ModelBase::as<storm::models::sparse::Mdp<storm::RationalFunction>>) |
|||
; |
|||
|
|||
|
|||
defineClass<storm::models::sparse::Model<double>, storm::models::ModelBase, boost::noncopyable>("SparseModel", |
|||
"A probabilistic model where transitions are represented by doubles and saved in a sparse matrix"); |
|||
defineClass<storm::models::sparse::Dtmc<double>, storm::models::sparse::Model<double>, boost::noncopyable>("SparseDtmc", ""); |
|||
defineClass<storm::models::sparse::Mdp<double>, storm::models::sparse::Model<double>>("SparseMdp", ""); |
|||
|
|||
defineClass<storm::models::sparse::Model<storm::RationalFunction>, storm::models::ModelBase, boost::noncopyable>("SparseParametricModel", "") |
|||
.def("collect_probability_parameters", &storm::models::sparse::getProbabilityParameters) |
|||
; |
|||
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", ""); |
|||
|
|||
|
|||
////////////////////////////////////////////
|
|||
// Bisimulation
|
|||
////////////////////////////////////////////
|
|||
enum_<storm::storage::BisimulationType>("BisimulationType") |
|||
.value("STRONG", storm::storage::BisimulationType::Strong) |
|||
.value("WEAK", storm::storage::BisimulationType::Weak) |
|||
; |
|||
def("perform_bisimulation_parametric", static_cast<std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> (*)(std::shared_ptr<storm::models::sparse::Model<storm::RationalFunction>> const&, std::shared_ptr<const storm::logic::Formula> const&, storm::storage::BisimulationType)>(&storm::performBisimulationMinimization<storm::models::sparse::Model<storm::RationalFunction>>)); |
|||
|
|||
|
|||
|
|||
def("parse_formulae", storm::parseFormulasForProgram); |
|||
def("parse_program", storm::parseProgram); |
|||
|
|||
def("build_model", buildModel, return_value_policy<return_by_value>()); |
|||
|
|||
def("build_model_from_prism_program", storm::buildSymbolicModel<double>); |
|||
def("build_parametric_model_from_prism_program", storm::buildSymbolicModel<storm::RationalFunction>); |
|||
|
|||
//////////////////////////////////////////////
|
|||
// Model Checking
|
|||
//////////////////////////////////////////////
|
|||
class_<storm::storage::ModelFormulasPair>("ModelProgramPair", no_init) |
|||
.add_property("model", &storm::storage::ModelFormulasPair::model) |
|||
.add_property("program", &storm::storage::ModelFormulasPair::formulas) |
|||
; |
|||
|
|||
def("perform_state_elimination", performStateElimination); |
|||
} |
@ -1,104 +0,0 @@ |
|||
#include <boost/python.hpp>
|
|||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
|||
#include "../logic/Formulas.h"
|
|||
|
|||
|
|||
#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
|
|||
////////////////////////////////////////////
|
|||
defineClass<storm::logic::Formula, void, boost::noncopyable>("Formula", |
|||
"Generic Storm Formula") |
|||
.def("__str__", &storm::logic::Formula::toString) |
|||
; |
|||
|
|||
//
|
|||
// Path Formulae
|
|||
//
|
|||
defineClass<storm::logic::PathFormula, storm::logic::Formula, boost::noncopyable>("PathFormula", |
|||
"Formula about the probability of a set of paths in an automaton"); |
|||
defineClass<storm::logic::UnaryPathFormula, storm::logic::PathFormula, boost::noncopyable>("UnaryPathFormula", |
|||
"Path formula with one operand"); |
|||
defineClass<storm::logic::EventuallyFormula, storm::logic::UnaryPathFormula>("EventuallyFormula", |
|||
"Formula for eventually"); |
|||
defineClass<storm::logic::GloballyFormula, storm::logic::UnaryPathFormula>("GloballyFormula", |
|||
"Formula for globally"); |
|||
defineClass<storm::logic::BinaryPathFormula, storm::logic::PathFormula, boost::noncopyable>("BinaryPathFormula", |
|||
"Path formula with two operands"); |
|||
defineClass<storm::logic::BoundedUntilFormula, storm::logic::BinaryPathFormula, boost::noncopyable>("BoundedUntilFormula", |
|||
"Until Formula with either a step or a time bound."); |
|||
defineClass<storm::logic::ConditionalPathFormula, storm::logic::BinaryPathFormula>("ConditionalPathFormula", |
|||
"Path Formula with the right hand side being a condition."); |
|||
defineClass<storm::logic::UntilFormula, storm::logic::BinaryPathFormula>("UntilFormula", |
|||
"Path Formula for unbounded until"); |
|||
|
|||
|
|||
//
|
|||
// Reward Path Formulae
|
|||
//
|
|||
defineClass<storm::logic::RewardPathFormula, storm::logic::Formula, boost::noncopyable>("RewardPathFormula", |
|||
"Formula about the rewards of a set of paths in an automaton"); |
|||
defineClass<storm::logic::CumulativeRewardFormula, storm::logic::RewardPathFormula>("CumulativeRewardFormula", |
|||
"Summed rewards over a the paths"); |
|||
defineClass<storm::logic::InstantaneousRewardFormula, storm::logic::RewardPathFormula>("InstanteneousRewardFormula", |
|||
""); |
|||
defineClass<storm::logic::LongRunAverageRewardFormula, storm::logic::RewardPathFormula>("LongRunAverageRewardFormula", |
|||
""); |
|||
defineClass<storm::logic::ReachabilityRewardFormula, storm::logic::RewardPathFormula>("ReachabilityRewardFormula", |
|||
""); |
|||
|
|||
|
|||
//
|
|||
// State Formulae
|
|||
//
|
|||
defineClass<storm::logic::StateFormula, storm::logic::Formula, boost::noncopyable>("StateFormula", |
|||
"Formula about a state of an automaton"); |
|||
defineClass<storm::logic::AtomicExpressionFormula, storm::logic::StateFormula>("AtomicExpressionFormula", |
|||
""); |
|||
defineClass<storm::logic::AtomicLabelFormula, storm::logic::StateFormula>("AtomicLabelFormula", |
|||
""); |
|||
defineClass<storm::logic::BooleanLiteralFormula, storm::logic::StateFormula>("BooleanLiteralFormula", |
|||
""); |
|||
defineClass<storm::logic::UnaryStateFormula, storm::logic::StateFormula, boost::noncopyable>("UnaryStateFormula", |
|||
"State formula with one operand"); |
|||
defineClass<storm::logic::UnaryBooleanStateFormula, storm::logic::UnaryStateFormula>("UnaryBooleanStateFormula", |
|||
""); |
|||
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, &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", |
|||
""); |
|||
defineClass<storm::logic::ProbabilityOperatorFormula, storm::logic::OperatorFormula>("ProbabilityOperator", |
|||
""); |
|||
defineClass<storm::logic::RewardOperatorFormula, storm::logic::OperatorFormula>("RewardOperatorFormula", |
|||
""); |
|||
defineClass<storm::logic::BinaryStateFormula, storm::logic::StateFormula, boost::noncopyable>("BinaryStateFormula", |
|||
"State formula with two operands"); |
|||
defineClass<storm::logic::BinaryBooleanStateFormula, storm::logic::BinaryStateFormula>("BooleanBinaryStateFormula", |
|||
""); |
|||
|
|||
} |
@ -1,20 +0,0 @@ |
|||
from stormpy.core._core import * |
|||
|
|||
def _build_model(program, formulae): |
|||
intermediate = _core.build_model(program, formulae) |
|||
if intermediate.parametric: |
|||
if intermediate.model_type == ModelType.DTMC: |
|||
return intermediate.as_pdtmc() |
|||
elif intermediate.model_type == ModelType.MDP: |
|||
return intermediate.as_pmdp() |
|||
else: |
|||
raise RuntimeError("Not supported parametric model constructed") |
|||
else: |
|||
if intermediate.model_type == ModelType.DTMC: |
|||
return intermediate.as_pdtmc() |
|||
elif intermediate.model_type == ModelType.MDP: |
|||
return intermediate.as_pmdp() |
|||
else: |
|||
raise RuntimeError("Not supported non-parametric model constructed") |
|||
|
|||
build_model = _build_model |
@ -1 +0,0 @@ |
|||
from stormpy.expressions._expressions import * |
@ -1 +0,0 @@ |
|||
from stormpy.info._info import * |
@ -1 +0,0 @@ |
|||
from stormpy.logic._logic import * |
Write
Preview
Loading…
Cancel
Save
Reference in new issue