diff env/lib/python3.7/site-packages/galaxy/util/permutations.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/galaxy/util/permutations.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-""" There is some shared logic between matching/multiplying inputs in workflows
-and tools. This module is meant to capture some general permutation logic that
-can be applicable for both cases but will only be used in the newer tools case
-first.
-
-Maybe this doesn't make sense and maybe much of this stuff could be replaced
-with itertools product and permutations. These are open questions.
-"""
-from collections import OrderedDict
-
-from galaxy.exceptions import MessageException
-from galaxy.util.bunch import Bunch
-
-input_classification = Bunch(
-    SINGLE="single",
-    MATCHED="matched",
-    MULTIPLIED="multiplied",
-)
-
-
-class InputMatchedException(MessageException):
-    """ Indicates problem matching inputs while building up inputs
-    permutations. """
-
-
-def expand_multi_inputs(inputs, classifier, key_filter=None):
-    key_filter = key_filter or (lambda x: True)
-
-    single_inputs, matched_multi_inputs, multiplied_multi_inputs = __split_inputs(
-        inputs,
-        classifier,
-        key_filter
-    )
-
-    # Build up every combination of inputs to be run together.
-    input_combos = __extend_with_matched_combos(single_inputs, matched_multi_inputs)
-    input_combos = __extend_with_multiplied_combos(input_combos, multiplied_multi_inputs)
-
-    return input_combos
-
-
-def __split_inputs(inputs, classifier, key_filter):
-    key_filter = key_filter or (lambda x: True)
-
-    single_inputs = OrderedDict()
-    matched_multi_inputs = OrderedDict()
-    multiplied_multi_inputs = OrderedDict()
-
-    for input_key in filter(key_filter, inputs):
-        input_type, expanded_val = classifier(input_key)
-        if input_type == input_classification.SINGLE:
-            single_inputs[input_key] = expanded_val
-        elif input_type == input_classification.MATCHED:
-            matched_multi_inputs[input_key] = expanded_val
-        elif input_type == input_classification.MULTIPLIED:
-            multiplied_multi_inputs[input_key] = expanded_val
-
-    return (single_inputs, matched_multi_inputs, multiplied_multi_inputs)
-
-
-def __extend_with_matched_combos(single_inputs, multi_inputs):
-    """
-
-    {a => 1, b => 2} and {c => {3, 4}, d => {5, 6}}
-
-    Becomes
-
-    [ {a => 1, b => 2, c => 3, d => 5}, {a => 1, b => 2, c => 4, d => 6}, ]
-
-    """
-
-    if len(multi_inputs) == 0:
-        return [single_inputs]
-
-    matched_multi_inputs = []
-
-    first_multi_input_key = next(iter(multi_inputs.keys()))
-    first_multi_value = multi_inputs.get(first_multi_input_key)
-
-    for value in first_multi_value:
-        new_inputs = __copy_and_extend_inputs(single_inputs, first_multi_input_key, value)
-        matched_multi_inputs.append(new_inputs)
-
-    for multi_input_key, multi_input_values in multi_inputs.items():
-        if multi_input_key == first_multi_input_key:
-            continue
-        if len(multi_input_values) != len(first_multi_value):
-            raise InputMatchedException("Received %d inputs for '%s' and %d inputs for '%s', these should be of equal length" %
-                                        (len(multi_input_values), multi_input_key, len(first_multi_value), first_multi_input_key))
-
-        for index, value in enumerate(multi_input_values):
-            matched_multi_inputs[index][multi_input_key] = value
-
-    return matched_multi_inputs
-
-
-def __extend_with_multiplied_combos(input_combos, multi_inputs):
-    combos = input_combos
-
-    for multi_input_key, multi_input_value in multi_inputs.items():
-        iter_combos = []
-
-        for combo in combos:
-            for input_value in multi_input_value:
-                iter_combo = __copy_and_extend_inputs(combo, multi_input_key, input_value)
-                iter_combos.append(iter_combo)
-
-        combos = iter_combos
-
-    return combos
-
-
-def __copy_and_extend_inputs(inputs, key, value):
-    new_inputs = dict(inputs)
-    new_inputs[key] = value
-    return new_inputs