20 std::vector<Interval>
const& originalVector) {
23 bool hasNonTrivialMEC =
false;
24 for (
auto const& group : decomposition) {
25 if (!group.isTrivial()) {
26 hasNonTrivialMEC =
true;
35 if (!hasNonTrivialMEC) {
45 for (uint64_t row = 0; row < originalMatrix.
getRowCount(); row++) {
46 if (indexMap.at(row) >= decomposition.
size() || decomposition.
getBlock(indexMap.at(row)).
isTrivial()) {
48 for (
auto const& entry : originalMatrix.
getRow(row)) {
50 builder.addNextValue(row, entry.getColumn(), entry.getValue());
53 auto const& group = decomposition.
getBlock(indexMap.at(row));
55 uint64_t smallestInGroup = *group.
begin();
56 if (row != smallestInGroup) {
62 boost::container::flat_set<uint64_t> groupSet;
63 for (
auto const& state : group) {
64 for (
auto const& entry : originalMatrix.
getRow(state)) {
65 if (group.getStates().contains(entry.getColumn()) ||
utility::isZero(entry.getValue())) {
69 uint64_t groupIndex = indexMap.at(entry.getColumn());
70 uint64_t stateRepresentingGroup = groupIndex >= decomposition.
size() ? entry.getColumn() : *decomposition.
getBlock(groupIndex).
begin();
71 groupSet.insert(stateRepresentingGroup);
74 STORM_LOG_DEBUG(
"Transformed group of size " << groupSet.size() <<
" for state " << row);
76 for (
auto const& state : groupSet) {