hannah
5 years ago
committed by
Matthias Volk
No known key found for this signature in database
GPG Key ID: 83A57678F739FCD3
6 changed files with 76 additions and 72 deletions
-
4src/mod_storage.cpp
-
3src/storage/model.cpp
-
6src/storage/model_components.cpp
-
2src/storage/model_components.h
-
66tests/storage/test_model_components.py
-
65tests/storage/test_modelcomponents.py
@ -0,0 +1,66 @@ |
|||
import stormpy |
|||
import stormpy.logic |
|||
from helpers.helper import get_example_path |
|||
import pytest |
|||
|
|||
|
|||
class TestSparseModelComponents: |
|||
def test_init_default(self): |
|||
components = stormpy.SparseModelComponents() |
|||
|
|||
assert components.state_labeling.get_labels() == set() |
|||
assert components.reward_models == {} |
|||
assert components.transition_matrix.nr_rows == 0 |
|||
assert components.transition_matrix.nr_columns == 0 |
|||
assert components.markovian_states is None |
|||
assert components.player1_matrix is None |
|||
assert not components.rate_transitions |
|||
|
|||
def test_build_dtmc_from_model_components(self): |
|||
program = stormpy.parse_prism_program(get_example_path("dtmc", "die.pm")) |
|||
options = stormpy.BuilderOptions(True, True) |
|||
options.set_build_with_choice_origins() |
|||
options.set_build_state_valuations() |
|||
options.set_build_all_labels() |
|||
model = stormpy.build_sparse_model_with_options(program, options) |
|||
|
|||
components = stormpy.SparseModelComponents(transition_matrix=model.transition_matrix, |
|||
state_labeling=model.labeling, |
|||
reward_models=model.reward_models) |
|||
components.choice_origins = model.choice_origins |
|||
components.state_valuations = model.state_valuations |
|||
|
|||
dtmc = stormpy.storage.SparseDtmc(components) |
|||
|
|||
assert type(dtmc) is stormpy.SparseDtmc |
|||
assert not dtmc.supports_parameters |
|||
|
|||
# test transition matrix |
|||
assert dtmc.nr_choices == 13 |
|||
assert dtmc.nr_states == 13 |
|||
assert dtmc.nr_transitions == 20 |
|||
assert dtmc.transition_matrix.nr_entries == 20 |
|||
assert dtmc.transition_matrix.nr_entries == model.nr_transitions |
|||
for e in dtmc.transition_matrix: |
|||
assert e.value() == 0.5 or e.value() == 0 or (e.value() == 1 and e.column > 6) |
|||
for state in dtmc.states: |
|||
assert len(state.actions) <= 1 |
|||
|
|||
# test state_labeling |
|||
assert dtmc.labeling.get_labels() == {'init', 'deadlock', 'done', 'one', 'two', 'three', 'four', 'five', 'six'} |
|||
|
|||
# test reward_models |
|||
assert len(model.reward_models) == 1 |
|||
assert not model.reward_models["coin_flips"].has_state_rewards |
|||
assert model.reward_models["coin_flips"].has_state_action_rewards |
|||
for reward in model.reward_models["coin_flips"].state_action_rewards: |
|||
assert reward == 1.0 or reward == 0.0 |
|||
assert not model.reward_models["coin_flips"].has_transition_rewards |
|||
|
|||
# choice_labeling |
|||
assert not dtmc.has_choice_labeling() |
|||
# state_valuations |
|||
assert dtmc.has_state_valuations() |
|||
# choice_origins |
|||
assert dtmc.has_choice_origins() |
|||
assert dtmc.choice_origins is components.choice_origins # todo correct? |
@ -1,65 +0,0 @@ |
|||
import stormpy |
|||
import stormpy.logic |
|||
from helpers.helper import get_example_path |
|||
import pytest |
|||
|
|||
|
|||
class TestSparseModel: |
|||
def test_init_default(self): |
|||
components = stormpy.SparseModelComponents() |
|||
|
|||
assert components.state_labeling.get_labels() == set() |
|||
assert components.reward_models == {} |
|||
assert components.transition_matrix.nr_rows == 0 |
|||
assert components.transition_matrix.nr_columns == 0 |
|||
assert components.markovian_states is None |
|||
assert components.player1_matrix is None |
|||
assert not components.rate_transitions |
|||
|
|||
# def test_init(self): |
|||
# todo Build simple transition matrix etc |
|||
# transition_matrix = |
|||
|
|||
|
|||
def test_dtmc_modelcomponents(self): |
|||
program = stormpy.parse_prism_program(get_example_path("dtmc", "die.pm")) |
|||
model = stormpy.build_model(program) |
|||
|
|||
components = stormpy.SparseModelComponents(transition_matrix=model.transition_matrix, |
|||
state_labeling=model.labeling, |
|||
reward_models=model.reward_models) |
|||
|
|||
dtmc = stormpy.storage.SparseDtmc(components) |
|||
|
|||
assert dtmc.model_type == stormpy.ModelType.DTMC |
|||
assert dtmc.initial_states == [0] |
|||
assert dtmc.nr_states == 13 |
|||
for state in dtmc.states: |
|||
assert len(state.actions) <= 1 |
|||
assert dtmc.labeling.get_labels() == {'init', 'deadlock', 'done', 'one', 'two', 'three', 'four', 'five', 'six'} |
|||
assert dtmc.nr_transitions == 20 |
|||
assert len(dtmc.reward_models) == 1 |
|||
assert not dtmc.reward_models["coin_flips"].has_state_rewards |
|||
assert dtmc.reward_models["coin_flips"].has_state_action_rewards |
|||
for reward in dtmc.reward_models["coin_flips"].state_action_rewards: |
|||
assert reward == 1.0 or reward == 0.0 |
|||
assert not dtmc.reward_models["coin_flips"].has_transition_rewards |
|||
assert not dtmc.supports_parameters |
|||
|
|||
|
|||
def test_pmdp_modelcomponents(self): |
|||
program = stormpy.parse_prism_program(get_example_path("pmdp", "two_dice.nm")) |
|||
model = stormpy.build_parametric_model(program) |
|||
|
|||
|
|||
def test_ma_modelcomponents(self): |
|||
program = stormpy.parse_prism_program(get_example_path("ma", "simple.ma"), False, True) |
|||
formulas = stormpy.parse_properties_for_prism_program("Pmax=? [ F<=2 s=2 ]", program) |
|||
model = stormpy.build_model(program, formulas) |
|||
#todo create mc |
|||
|
|||
assert model.nr_states == 4 |
|||
assert model.nr_transitions == 7 |
|||
assert model.model_type == stormpy.ModelType.MA |
|||
assert not model.supports_parameters |
|||
assert type(model) is stormpy.SparseMA |
Write
Preview
Loading…
Cancel
Save
Reference in new issue