Browse Source

Removed old python bindings

Former-commit-id: 1901030769
tempestpy_adaptions
Mavo 9 years ago
parent
commit
f500600ee6
  1. 122
      setup.py
  2. 4
      src/CMakeLists.txt
  3. 26
      src/python/CMakeLists.txt
  4. 44
      src/python/boostPyExtension.h
  5. 57
      src/python/helpers.h
  6. 130
      src/python/storm-core.cpp
  7. 104
      src/python/storm-logic.cpp
  8. 0
      stormpy_old/__init__.py
  9. 20
      stormpy_old/core/__init__.py
  10. 1
      stormpy_old/expressions/__init__.py
  11. 1
      stormpy_old/info/__init__.py
  12. 1
      stormpy_old/logic/__init__.py

122
setup.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)

4
src/CMakeLists.txt

@ -8,7 +8,6 @@ file(GLOB_RECURSE STORM_HEADERS ${PROJECT_SOURCE_DIR}/src/*.h)
file(GLOB_RECURSE STORM_HEADERS_CLI ${PROJECT_SOURCE_DIR}/src/cli/*.h)
file(GLOB_RECURSE STORM_SOURCES_WITHOUT_MAIN ${PROJECT_SOURCE_DIR}/src/*/*.cpp)
file(GLOB_RECURSE STORM_SOURCES_CLI ${PROJECT_SOURCE_DIR}/src/cli/*.cpp)
file(GLOB_RECURSE STORM_SOURCES_PYTHON ${PROJECT_SOURCE_DIR}/src/python/*.cpp)
file(GLOB_RECURSE STORM_MAIN_FILE ${PROJECT_SOURCE_DIR}/src/storm.cpp)
file(GLOB_RECURSE STORM_ADAPTERS_FILES ${PROJECT_SOURCE_DIR}/src/adapters/*.h ${PROJECT_SOURCE_DIR}/src/adapters/*.cpp)
file(GLOB_RECURSE STORM_BUILDER_FILES ${PROJECT_SOURCE_DIR}/src/builder/*.h ${PROJECT_SOURCE_DIR}/src/builder/*.cpp)
@ -51,7 +50,6 @@ file(GLOB_RECURSE STORM_BUILD_HEADERS ${PROJECT_BINARY_DIR}/include/*.h)
set(STORM_LIB_SOURCES ${STORM_SOURCES_WITHOUT_MAIN})
list(REMOVE_ITEM STORM_LIB_SOURCES ${STORM_SOURCES_CLI})
list(REMOVE_ITEM STORM_LIB_SOURCES ${STORM_SOURCES_PYTHON})
set(STORM_LIB_HEADERS ${STORM_HEADERS})
list(REMOVE_ITEM STORM_LIB_HEADERS ${STORM_HEADERS_CLI})
set(STORM_MAIN_SOURCES ${STORM_SOURCES_CLI} ${STORM_MAIN_FILE})
@ -129,5 +127,3 @@ INSTALL(TARGETS storm-main
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
add_subdirectory(python EXCLUDE_FROM_ALL)

26
src/python/CMakeLists.txt

@ -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()

44
src/python/boostPyExtension.h

@ -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

57
src/python/helpers.h

@ -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;
};

130
src/python/storm-core.cpp

@ -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);
}

104
src/python/storm-logic.cpp

@ -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",
"");
}

0
stormpy_old/__init__.py

20
stormpy_old/core/__init__.py

@ -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
stormpy_old/expressions/__init__.py

@ -1 +0,0 @@
from stormpy.expressions._expressions import *

1
stormpy_old/info/__init__.py

@ -1 +0,0 @@
from stormpy.info._info import *

1
stormpy_old/logic/__init__.py

@ -1 +0,0 @@
from stormpy.logic._logic import *
Loading…
Cancel
Save