def partition_sequence_by_restricted_growth_function( sequence, restricted_growth_function, ): '''Partition `sequence` by `restricted_growth_function`: :: >>> l = range(10) >>> rgf = [1, 1, 2, 2, 1, 2, 3, 3, 2, 4] :: >>> sequencetools.partition_sequence_by_restricted_growth_function( ... l, rgf) [[0, 1, 4], [2, 3, 5, 8], [6, 7], [9]] Raise value error when `sequence` length does not equal `restricted_growth_function` length. Returns list of lists. ''' from abjad.tools import sequencetools if not sequencetools.is_restricted_growth_function( restricted_growth_function): raise ValueError('must be restricted growth function.') if not len(sequence) == len(restricted_growth_function): raise ValueError('lengths must be equal.') partition = [] for part_index in range(max(restricted_growth_function)): part = [] partition.append(part) for n, part_number in zip(sequence, restricted_growth_function): part_index = part_number - 1 part = partition[part_index] part.append(n) return partition
def test_sequencetools_is_restricted_growth_function_01(): assert sequencetools.is_restricted_growth_function([1, 1, 1, 1]) assert sequencetools.is_restricted_growth_function([1, 1, 1, 2]) assert sequencetools.is_restricted_growth_function([1, 1, 2, 1]) assert sequencetools.is_restricted_growth_function([1, 1, 2, 2]) assert sequencetools.is_restricted_growth_function([1, 1, 2, 3]) assert sequencetools.is_restricted_growth_function([1, 2, 1, 1]) assert sequencetools.is_restricted_growth_function([1, 2, 1, 2]) assert sequencetools.is_restricted_growth_function([1, 2, 1, 3]) assert sequencetools.is_restricted_growth_function([1, 2, 2, 1]) assert sequencetools.is_restricted_growth_function([1, 2, 2, 2]) assert sequencetools.is_restricted_growth_function([1, 2, 2, 3]) assert sequencetools.is_restricted_growth_function([1, 2, 3, 1]) assert sequencetools.is_restricted_growth_function([1, 2, 3, 2]) assert sequencetools.is_restricted_growth_function([1, 2, 3, 3]) assert sequencetools.is_restricted_growth_function([1, 2, 3, 4])
def test_sequencetools_is_restricted_growth_function_02(): assert not sequencetools.is_restricted_growth_function([1, 1, 1, 3]) assert not sequencetools.is_restricted_growth_function([1, 1, 3, 3]) assert not sequencetools.is_restricted_growth_function([1, 3, 1, 3]) assert not sequencetools.is_restricted_growth_function([3, 1, 1, 3])