def partition_by_ratio_of_lengths(self, ratio): r'''Partitions sequence by `ratio` of lengths. .. container:: example **Example 1.** Partitions sequence by ``1:1:1`` ratio: :: >>> numbers = Sequence(range(10)) >>> ratio = mathtools.Ratio((1, 1, 1)) >>> numbers.partition_by_ratio_of_lengths(ratio) Sequence((Sequence((0, 1, 2)), Sequence((3, 4, 5, 6)), Sequence((7, 8, 9)))) .. container:: example **Example 2.** Partitions sequence by ``1:1:2`` ratio: :: >>> numbers = Sequence(range(10)) >>> ratio = mathtools.Ratio((1, 1, 2)) >>> numbers.partition_by_ratio_of_lengths(ratio) Sequence((Sequence((0, 1, 2)), Sequence((3, 4)), Sequence((5, 6, 7, 8, 9)))) Returns a sequence of sequences. ''' from abjad.tools import sequencetools parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.items, ratio=ratio, ) parts = [type(self)(_) for _ in parts] return type(self)(parts)
def partition_by_ratio(self, ratio): r'''Partition payload expression by ratio. :: >>> result = payload_expression.partition_by_ratio((1, 1)) :: >>> for element in result: ... print(format(element)) musicexpressiontools.IterablePayloadExpression( payload=( (4, 16), ), ) musicexpressiontools.IterablePayloadExpression( payload=( (2, 16), ), ) Returns list of newly constructed payload expressions. ''' parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.payload, ratio) result = [] for part in parts: part = new(self, payload=part) result.append(part) return result
def partition_by_ratio_of_lengths(self, ratio): r'''Partitions sequence by `ratio` of lengths. .. container:: example **Example 1.** Partitions sequence by ``1:1:1`` ratio: :: >>> numbers = Sequence(range(10)) >>> ratio = mathtools.Ratio((1, 1, 1)) >>> numbers.partition_by_ratio_of_lengths(ratio) Sequence((Sequence((0, 1, 2)), Sequence((3, 4, 5, 6)), Sequence((7, 8, 9)))) .. container:: example **Example 2.** Partitions sequence by ``1:1:2`` ratio: :: >>> numbers = Sequence(range(10)) >>> ratio = mathtools.Ratio((1, 1, 2)) >>> numbers.partition_by_ratio_of_lengths(ratio) Sequence((Sequence((0, 1, 2)), Sequence((3, 4)), Sequence((5, 6, 7, 8, 9)))) Returns a sequence of sequences. ''' from abjad.tools import sequencetools parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.items, ratio=ratio, ) parts = [type(self)(_) for _ in parts] return type(self)(parts)
def partition_by_ratio(self, ratio): r'''Partition payload expression by ratio. :: >>> result = payload_expression.partition_by_ratio((1, 1)) :: >>> for element in result: ... print(format(element)) musicexpressiontools.IterablePayloadExpression( payload=( (4, 16), ), ) musicexpressiontools.IterablePayloadExpression( payload=( (2, 16), ), ) Returns list of newly constructed payload expressions. ''' parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.payload, ratio) result = [] for part in parts: part = new(self, payload=part) result.append(part) return result
def partition_by_ratio(self, ratio): r'''Partition start-positioned payload expression by ratio. Operates in place and returns newly constructed inventory. ''' from experimental.tools import musicexpressiontools parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.elements, ratio) durations = [self._get_duration_of_list(part) for part in parts] payload_parts = self._split_payload_at_offsets(durations) start_offsets = mathtools.cumulative_sums(durations)[:-1] start_offsets = [ self.start_offset + start_offset for start_offset in start_offsets] payload_expressions = \ musicexpressiontools.TimespanScopedSingleContextSetExpressionInventory() for payload_part, start_offset in zip(payload_parts, start_offsets): timespan = timespantools.Timespan(start_offset) payload_expression = type(self)( [], start_offset=timespan.start_offset, voice_name=self.voice_name, ) payload_expression._payload = payload_part payload_expressions.append(payload_expression) return payload_expressions
def partition_by_ratio(self, ratio): r'''Partition start-positioned payload expression by ratio. Operates in place and returns newly constructed inventory. ''' from experimental.tools import musicexpressiontools parts = sequencetools.partition_sequence_by_ratio_of_lengths( self.elements, ratio) durations = [self._get_duration_of_list(part) for part in parts] payload_parts = self._split_payload_at_offsets(durations) start_offsets = mathtools.cumulative_sums(durations)[:-1] start_offsets = [ self.start_offset + start_offset for start_offset in start_offsets ] payload_expressions = \ musicexpressiontools.TimespanScopedSingleContextSetExpressionInventory() for payload_part, start_offset in zip(payload_parts, start_offsets): timespan = timespantools.Timespan(start_offset) payload_expression = type(self)( [], start_offset=timespan.start_offset, voice_name=self.voice_name, ) payload_expression._payload = payload_part payload_expressions.append(payload_expression) return payload_expressions
def get_indices(cls, pessimistic=False): indices = [] if not pessimistic: maximum_id = cls.select( peewee.fn.Max(cls.id)).scalar() step = maximum_id // multiprocessing.cpu_count() for start in range(0, maximum_id, step): stop = start + step indices.append(range(start, stop)) else: query = cls.select(cls.id) query = query.order_by(cls.id) query = query.tuples() all_ids = tuple(_[0] for _ in query) ratio = [1] * (multiprocessing.cpu_count() * 2) for chunk in sequencetools.partition_sequence_by_ratio_of_lengths( all_ids, ratio): indices.append(chunk) return indices
def test_sequencetools_partition_sequence_by_ratio_of_lengths_01(): parts = sequencetools.partition_sequence_by_ratio_of_lengths(range(10), [1, 1, 2]) assert parts == [[0, 1, 2], [3, 4], [5, 6, 7, 8, 9]]