Source code for spinetoolbox.spine_db_editor.scenario_generation

######################################################################################################################
# Copyright (C) 2017-2022 Spine project consortium
# Copyright Spine Toolbox contributors
# This file is part of Spine Toolbox.
# Spine Toolbox is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General
# Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option)
# any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
# Public License for more details. You should have received a copy of the GNU Lesser General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>.
######################################################################################################################

"""Contains functions for automatically generating scenarios from a set of alternatives."""
from itertools import compress, permutations


[docs]def all_combinations(alternatives): """Creates all possible combinations of alternatives. Args: alternatives (Iterable of Any): alternatives Returns: list of list: lists containing alternatives for each scenario """ count = len(alternatives) proto_selection = count * [False] scenarios = [] for i in range(count): proto_selection[i] = True if i != count - 1: selections = set(permutations(proto_selection, count)) else: selections = (proto_selection,) for selection in selections: scenarios.append(list(compress(alternatives, selection))) return scenarios
[docs]def unique_alternatives(alternatives): """Creates all possible single-alternative scenarios. Args: alternatives (Iterable of Any): alternatives Returns: list of list: tuples containing alternatives for each scenario """ return [[alternative] for alternative in alternatives]