예제 #1
0
파일: Sequence.py 프로젝트: DnMllr/abjad
    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
예제 #3
0
    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)
예제 #4
0
    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
예제 #6
0
    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
예제 #7
0
 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]]