sequence¶
Sequence classes and functions.
Classes
Cyclic List |
|
Markov Chain |
|
- class evans.sequence.CyclicList(lst=None, forget=True, count=- 1)[source]¶
Cyclic List
>>> _cyc_count = -1 >>> _non_cyc_count = -1 >>> cyc_generator = evans.CyclicList(lst=[1, 2, 3], forget=False, count=_cyc_count) >>> non_cyc_generator = evans.CyclicList( ... lst=[1, 2, 3], forget=True, count=_non_cyc_count ... )
>>> cyc_generator(r=2) [1, 2]
>>> cyc_generator(r=7) [3, 1, 2, 3, 1, 2, 3]
>>> non_cyc_generator(r=2) [1, 2]
>>> non_cyc_generator(r=7) [1, 2, 3, 1, 2, 3, 1]
>>> print((cyc_generator.state(), non_cyc_generator.state())) (8, 6)
Attributes Summary
Call self as a function.
Return repr(self).
Return str(self).
Special methods
Methods
- class evans.sequence.MarkovChain(transition_prob, seed)[source]¶
Markov Chain
>>> prob = { ... "one": {"one": 0.8, "two": 0.19, "three": 0.01}, ... "two": {"one": 0.2, "two": 0.7, "three": 0.1}, ... "three": {"one": 0.1, "two": 0.2, "three": 0.7}, ... } >>> chain = evans.MarkovChain(transition_prob=prob, seed=7) >>> key_list = [x for x in chain.generate_states(current_state="one", no=14)] >>> key_list ['one', 'one', 'one', 'one', 'two', 'two', 'two', 'one', 'one', 'one', 'one', 'two', 'two', 'one']
Attributes Summary
Return repr(self).
Return str(self).
Special methods
Methods
- class evans.sequence.PitchClassSegment(pitch_classes)[source]¶
Attributes Summary
Special methods
-
(
PitchClassSegment
).__add__(argument)[source]¶ Concatenates Pitch Class Segment with iterable.
>>> pc_segment = microtones.PitchClassSegment(["0", "1/2", "5/4"]) >>> pc_segment += [0, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> print(abjad.storage(pc_segment)) microtones.PitchClassSegment( [ Fraction(0, 1), Fraction(1, 2), Fraction(5, 4), Fraction(0, 1), Fraction(11, 6), Fraction(3, 2), ] )
-
(
PitchClassSegment
).__contains__(argument)[source]¶ Returns boolean
>>> pc_segment = microtones.PitchClassSegment([0, 1, 6]) >>> 6 in pc_segment True
>>> 18 in pc_segment False
>>> pc_segment = microtones.PitchClassSegment([0, 1, 18]) >>> 6 in pc_segment True
>>> 18 in pc_segment False
-
(
PitchClassSegment
).__getitem__(index)[source]¶ Gets value at index
>>> microtones.PitchClassSegment([0, 1, 6])[0] Fraction(0, 1)
-
(
PitchClassSegment
).__iter__()[source]¶ Iterates contents.
>>> pc_set = microtones.PitchClassSegment([0, 1, 2]) >>> for item in pc_set: ... item ... Fraction(0, 1) Fraction(1, 1) Fraction(2, 1)
-
(
PitchClassSegment
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.PitchClassSegment([0, 1, 2])) 3
-
(
PitchClassSegment
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.PitchClassSegment([0, 1, 2]) PitchClassSegment([Fraction(0, 1), Fraction(1, 1), Fraction(2, 1)])
-
(
PitchClassSegment
).__str__()[source]¶ Gets string representation.
>>> str(microtones.PitchClassSegment([0, 1, 2])) '(0, 1, 2)'
Methods
- alpha(category)[source]¶
>>> s = evans.PitchClassSegment([_ for _ in range(12)]) >>> s.alpha(category=1) PitchClassSegment([Fraction(1, 1), Fraction(0, 1), Fraction(3, 1), Fraction(2, 1), Fraction(5, 1), Fraction(4, 1), Fraction(7, 1), Fraction(6, 1), Fraction(9, 1), Fraction(8, 1), Fraction(11, 1), Fraction(10, 1)])
>>> s = evans.PitchClassSegment([_ for _ in range(12)]) >>> s.alpha(category=2) PitchClassSegment([Fraction(11, 1), Fraction(2, 1), Fraction(1, 1), Fraction(4, 1), Fraction(3, 1), Fraction(6, 1), Fraction(5, 1), Fraction(8, 1), Fraction(7, 1), Fraction(10, 1), Fraction(9, 1), Fraction(0, 1)])
-
(
PitchClassSegment
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_set = microtones.PitchClassSegment([0, 1, 2]) >>> input_scale = [i for i in range(12)] >>> print(abjad.storage(pc_set.complement(input_scale))) microtones.PitchClassSegment( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
PitchClassSegment
).invert(axis=0)[source]¶ Gets inversion.
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 3]).invert())) microtones.PitchClassSegment( [ Fraction(0, 1), Fraction(11, 1), Fraction(9, 1), ] )
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 3]).invert(2))) microtones.PitchClassSegment( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), ] )
-
(
PitchClassSegment
).multiply(n)[source]¶ Gets multiplication.
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 3]).multiply(2))) microtones.PitchClassSegment( [ Fraction(0, 1), Fraction(2, 1), Fraction(6, 1), ] )
-
(
PitchClassSegment
).retrograde()[source]¶ Gets retrograde.
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 2]).retrograde())) microtones.PitchClassSegment( [ Fraction(2, 1), Fraction(1, 1), Fraction(0, 1), ] )
-
(
PitchClassSegment
).rotate(n)[source]¶ Gets rotation.
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 2]).rotate(1))) microtones.PitchClassSegment( [ Fraction(1, 1), Fraction(2, 1), Fraction(0, 1), ] )
-
(
PitchClassSegment
).sorted()[source]¶ Gets Pitch Class Segment sorted in ascending order.
>>> print(abjad.storage(microtones.PitchClassSegment([2, 1, 0]).sorted())) microtones.PitchClassSegment( [ Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), ] )
-
(
PitchClassSegment
).transpose(n)[source]¶ Gets transposition.
>>> print(abjad.storage(microtones.PitchClassSegment([0, 1, 2]).transpose(2))) microtones.PitchClassSegment( [ Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), ] )
>>> print( ... abjad.storage( ... microtones.PitchClassSegment([0, 1, 3, 4, 5]).invert().transpose(1 + 3) ... ) ... ) microtones.PitchClassSegment( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), Fraction(0, 1), Fraction(11, 1), ] )
-
(
- class evans.sequence.PitchClassSet(pitch_classes)[source]¶
Attributes Summary
Special methods
-
(
PitchClassSet
).__add__(argument)[source]¶ Concatenates Pitch Class Set with iterable.
>>> pc_set = microtones.PitchClassSet(["0", "1/2", "5/4"]) >>> pc_set += [0, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> print(abjad.storage(pc_set)) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(1, 2), Fraction(5, 4), Fraction(11, 6), Fraction(3, 2), ] )
-
(
PitchClassSet
).__contains__(argument)[source]¶ Returns boolean
>>> pc_set = microtones.PitchClassSet([0, 1, 6]) >>> 6 in pc_set True
>>> 18 in pc_set False
>>> pc_set = microtones.PitchClassSet([0, 1, 18]) >>> 6 in pc_set True
>>> 18 in pc_set False
-
(
PitchClassSet
).__getitem__(index)[source]¶ Gets value at index
>>> microtones.PitchClassSet([0, 1, 6])[0] Fraction(0, 1)
-
(
PitchClassSet
).__iter__()[source]¶ Iterates contents.
>>> pc_set = microtones.PitchClassSet([0, 1, 2]) >>> for item in pc_set: ... item ... Fraction(0, 1) Fraction(1, 1) Fraction(2, 1)
>>> for x in microtones.PitchClassSet( ... ["31/2", "10", "33/4", "-5", "36/10", "113/10"] ... ).prime_form(): ... print(x) ... 0 1/10 7/2 19/4 13/2 39/5
-
(
PitchClassSet
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.PitchClassSet([0, 1, 2])) 3
-
(
PitchClassSet
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.PitchClassSet([0, 1, 6]) PitchClassSet([Fraction(0, 1), Fraction(1, 1), Fraction(6, 1)])
-
(
PitchClassSet
).__str__()[source]¶ Gets string representation.
>>> str(microtones.PitchClassSet([0, 1, 6])) '{0, 1, 6}'
Methods
- alpha(category)[source]¶
>>> s = evans.PitchClassSet([_ for _ in range(12)]) >>> s.alpha(category=1) PitchClassSet([Fraction(1, 1), Fraction(0, 1), Fraction(3, 1), Fraction(2, 1), Fraction(5, 1), Fraction(4, 1), Fraction(7, 1), Fraction(6, 1), Fraction(9, 1), Fraction(8, 1), Fraction(11, 1), Fraction(10, 1)])
>>> s = evans.PitchClassSet([_ for _ in range(12)]) >>> s.alpha(category=2) PitchClassSet([Fraction(11, 1), Fraction(2, 1), Fraction(1, 1), Fraction(4, 1), Fraction(3, 1), Fraction(6, 1), Fraction(5, 1), Fraction(8, 1), Fraction(7, 1), Fraction(10, 1), Fraction(9, 1), Fraction(0, 1)])
-
(
PitchClassSet
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_set = microtones.PitchClassSet([0, 1, 2]) >>> input_scale = [i for i in range(12)] >>> print(abjad.storage(pc_set.complement(input_scale))) microtones.PitchClassSet( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
PitchClassSet
).invert(axis=0)[source]¶ Gets inversion.
>>> print(abjad.storage(microtones.PitchClassSet([0, 1, 3]).invert())) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(11, 1), Fraction(9, 1), ] )
>>> print(abjad.storage(microtones.PitchClassSet([0, 1, 3]).invert(3))) microtones.PitchClassSet( [ Fraction(6, 1), Fraction(5, 1), Fraction(3, 1), ] )
-
(
PitchClassSet
).multiply(n)[source]¶ Gets multiplication.
>>> print(abjad.storage(microtones.PitchClassSet([0, 1, 3]).multiply(2))) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(2, 1), Fraction(6, 1), ] )
-
(
PitchClassSet
).normal_order()[source]¶ Gets normal order.
>>> print(abjad.storage(microtones.PitchClassSet([0, 2, 1]).normal_order())) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), ] )
-
(
PitchClassSet
).prime_form()[source]¶ Gets prime form.
>>> print(abjad.storage(microtones.PitchClassSet([1, 3, 2]).prime_form())) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), ] )
-
(
PitchClassSet
).sorted()[source]¶ Gets Pitch Class Set sorted in ascending order.
>>> print(abjad.storage(microtones.PitchClassSet([2, 1, 0]).sorted())) microtones.PitchClassSet( [ Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), ] )
-
(
PitchClassSet
).transpose(n)[source]¶ Gets transposition.
>>> print(abjad.storage(microtones.PitchClassSet([0, 1, 2]).transpose(2))) microtones.PitchClassSet( [ Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), ] )
>>> print( ... abjad.storage( ... microtones.PitchClassSet([0, 1, 3, 4, 5]).invert().transpose(1 + 3) ... ) ... ) microtones.PitchClassSet( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), Fraction(0, 1), Fraction(11, 1), ] )
-
(
- class evans.sequence.PitchSegment(pitches)[source]¶
Attributes Summary
Special methods
-
(
PitchSegment
).__add__(argument)[source]¶ Concatenates Pitch Segment with iterable.
>>> p_segment = microtones.PitchSegment(["0", "1/2", "5/4"]) >>> p_segment += [0, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> print(abjad.storage(p_segment)) microtones.PitchSegment( [ Fraction(0, 1), Fraction(1, 2), Fraction(5, 4), Fraction(0, 1), Fraction(11, 6), Fraction(27, 2), ] )
-
(
PitchSegment
).__contains__(argument)[source]¶ Returns boolean
>>> p_segment = microtones.PitchSegment([0, 1, 6]) >>> 6 in p_segment True
>>> 18 in p_segment False
>>> p_segment = microtones.PitchSegment([0, 1, 18]) >>> 6 in p_segment False
>>> 18 in p_segment True
-
(
PitchSegment
).__getitem__(index)[source]¶ Gets value at index
>>> microtones.PitchSegment([0, 1, 6])[0] Fraction(0, 1)
-
(
PitchSegment
).__iter__()[source]¶ Iterates contents.
>>> pc_set = microtones.PitchSegment([0, 1, 2]) >>> for item in pc_set: ... item ... Fraction(0, 1) Fraction(1, 1) Fraction(2, 1)
-
(
PitchSegment
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.PitchSegment([0, 1, 2])) 3
-
(
PitchSegment
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.PitchSegment([0, 1, 2]) PitchSegment([Fraction(0, 1), Fraction(1, 1), Fraction(2, 1)])
-
(
PitchSegment
).__setitem__(index, data)[source]¶ Sets value at index
>>> s = microtones.PitchSegment([0, 1, 6]) >>> s[0] = 5 >>> print(abjad.storage(s)) microtones.PitchSegment( [ Fraction(5, 1), Fraction(1, 1), Fraction(6, 1), ] )
-
(
PitchSegment
).__str__()[source]¶ Gets string representation.
>>> str(microtones.PitchSegment([0, 1, 2])) '(0, 1, 2)'
Methods
- alpha(category)[source]¶
>>> s = evans.PitchSegment([_ for _ in range(12)]) >>> s.alpha(category=1) PitchSegment([Fraction(1, 1), Fraction(0, 1), Fraction(3, 1), Fraction(2, 1), Fraction(5, 1), Fraction(4, 1), Fraction(7, 1), Fraction(6, 1), Fraction(9, 1), Fraction(8, 1), Fraction(11, 1), Fraction(10, 1)])
>>> s = evans.PitchSegment([_ for _ in range(12)]) >>> s.alpha(category=2) PitchSegment([Fraction(-1, 1), Fraction(2, 1), Fraction(1, 1), Fraction(4, 1), Fraction(3, 1), Fraction(6, 1), Fraction(5, 1), Fraction(8, 1), Fraction(7, 1), Fraction(10, 1), Fraction(9, 1), Fraction(12, 1)])
-
(
PitchSegment
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_set = microtones.PitchSegment([0, 1, 2]) >>> input_scale = [i for i in range(12)] >>> print(abjad.storage(pc_set.complement(input_scale))) microtones.PitchSegment( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
PitchSegment
).invert(axis=0)[source]¶ Gets inversion.
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 3]).invert())) microtones.PitchSegment( [ Fraction(0, 1), Fraction(-1, 1), Fraction(-3, 1), ] )
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 3]).invert(2))) microtones.PitchSegment( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), ] )
-
(
PitchSegment
).multiply(n)[source]¶ Gets multiplication.
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 3]).multiply(2))) microtones.PitchSegment( [ Fraction(0, 1), Fraction(2, 1), Fraction(6, 1), ] )
-
(
PitchSegment
).retrograde()[source]¶ Gets retrograde.
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 2]).retrograde())) microtones.PitchSegment( [ Fraction(2, 1), Fraction(1, 1), Fraction(0, 1), ] )
-
(
PitchSegment
).rotate(n)[source]¶ Gets rotation.
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 2]).rotate(1))) microtones.PitchSegment( [ Fraction(1, 1), Fraction(2, 1), Fraction(0, 1), ] )
-
(
PitchSegment
).sorted()[source]¶ Gets Pitch Segment sorted in ascending order.
>>> print(abjad.storage(microtones.PitchSegment([2, 1, 0]).sorted())) microtones.PitchSegment( [ Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), ] )
-
(
PitchSegment
).transpose(n)[source]¶ Gets transposition.
>>> print(abjad.storage(microtones.PitchSegment([0, 1, 2]).transpose(2))) microtones.PitchSegment( [ Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), ] )
>>> print( ... abjad.storage( ... microtones.PitchSegment([0, 1, 3, 4, 5]).invert().transpose(1 + 3) ... ) ... ) microtones.PitchSegment( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), Fraction(0, 1), Fraction(-1, 1), ] )
-
(
- class evans.sequence.PitchSet(pitches)[source]¶
Attributes Summary
Special methods
-
(
PitchSet
).__add__(argument)[source]¶ Concatenates Pitch Set with iterable.
>>> p_set = microtones.PitchSet(["0", "1/2", "5/4"]) >>> p_set += [0, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> print(abjad.storage(p_set)) microtones.PitchSet( [ Fraction(0, 1), Fraction(1, 2), Fraction(5, 4), Fraction(11, 6), Fraction(27, 2), ] )
Methods
- alpha(category)[source]¶
>>> s = evans.PitchSet([_ for _ in range(12)]) >>> s.alpha(category=1) PitchSet([Fraction(1, 1), Fraction(0, 1), Fraction(3, 1), Fraction(2, 1), Fraction(5, 1), Fraction(4, 1), Fraction(7, 1), Fraction(6, 1), Fraction(9, 1), Fraction(8, 1), Fraction(11, 1), Fraction(10, 1)])
>>> s = evans.PitchSet([_ for _ in range(12)]) >>> s.alpha(category=2) PitchSet([Fraction(-1, 1), Fraction(2, 1), Fraction(1, 1), Fraction(4, 1), Fraction(3, 1), Fraction(6, 1), Fraction(5, 1), Fraction(8, 1), Fraction(7, 1), Fraction(10, 1), Fraction(9, 1), Fraction(12, 1)])
-
(
PitchSet
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_set = microtones.PitchSet([0, 1, 2]) >>> input_scale = [i for i in range(12)] >>> print(abjad.storage(pc_set.complement(input_scale))) microtones.PitchSet( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
PitchSet
).invert(axis=0)[source]¶ Gets inversion.
>>> print(abjad.storage(microtones.PitchSet([0, 1, 3]).invert())) microtones.PitchSet( [ Fraction(0, 1), Fraction(-1, 1), Fraction(-3, 1), ] )
>>> print(abjad.storage(microtones.PitchSet([0, 1, 3]).invert(2))) microtones.PitchSet( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), ] )
-
(
PitchSet
).transpose(n)[source]¶ Gets transposition.
>>> print(abjad.storage(microtones.PitchSet([0, 1, 2]).transpose(2))) microtones.PitchSet( [ Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), ] )
>>> print( ... abjad.storage( ... microtones.PitchSet([0, 1, 3, 4, 5]).invert().transpose(1 + 3) ... ) ... ) microtones.PitchSet( [ Fraction(4, 1), Fraction(3, 1), Fraction(1, 1), Fraction(0, 1), Fraction(-1, 1), ] )
-
(
- class evans.sequence.Ratio(numbers=(1, 1))[source]¶
Attributes Summary
Special methods
-
(
NonreducedRatio
).__contains__(argument)¶ Is true when ratio contains
argument
.Returns true or false.
-
(
Ratio
).__eq__(argument)[source]¶ Is true when
argument
equals ratio.>>> ratio_1 = abjad.Ratio((1, 2, 1)) >>> ratio_2 = abjad.Ratio((1, 2, 1)) >>> ratio_3 = abjad.Ratio((2, 3, 3))
>>> ratio_1 == ratio_1 True
>>> ratio_1 == ratio_2 True
>>> ratio_1 == ratio_3 False
>>> ratio_2 == ratio_1 True
>>> ratio_2 == ratio_2 True
>>> ratio_2 == ratio_3 False
>>> ratio_3 == ratio_1 False
>>> ratio_3 == ratio_2 False
>>> ratio_3 == ratio_3 True
-
(
NonreducedRatio
).__iter__()¶ Iterates ratio.
Returns generator.
-
(
NonreducedRatio
).__rdiv__(number)¶ Divides
number
by ratio.>>> 1 / abjad.Ratio((1, 1, 3)) [Fraction(1, 5), Fraction(1, 5), Fraction(3, 5)]
>>> 1 / abjad.Ratio((1, 1, 3)) [Fraction(1, 5), Fraction(1, 5), Fraction(3, 5)]
>>> 1.0 / abjad.Ratio((1, 1, 3)) [0.2, 0.2, 0.6]
Returns list of fractions or list of floats.
-
(
NonreducedRatio
).__reversed__()¶ Iterates ratio in reverse.
Returns generator.
-
(
NonreducedRatio
).__rtruediv__(number)¶ Divides
number
by ratio.>>> 1 / abjad.Ratio((1, 1, 3)) [Fraction(1, 5), Fraction(1, 5), Fraction(3, 5)]
>>> 1 / abjad.Ratio((1, 1, 3)) [Fraction(1, 5), Fraction(1, 5), Fraction(3, 5)]
>>> 1.0 / abjad.Ratio((1, 1, 3)) [0.2, 0.2, 0.6]
Returns list of fractions or list of floats.
Methods
-
(
NonreducedRatio
).count(argument)¶ Gets count of
argument
in ratio.Returns integer.
- extract_sub_ratios(reciprocal=False, as_fractions=False)[source]¶
>>> ratio = evans.Ratio("9:8:7:6:5:4:3:2") >>> ratio.extract_sub_ratios() Sequence([Ratio((1, 1)), Ratio((3, 2)), Ratio((2, 1)), Ratio((5, 2)), Ratio((3, 1)), Ratio((7, 2)), Ratio((4, 1)), Ratio((9, 2))])
>>> ratio = evans.Ratio("9:8:7:6:5:4:3:2") >>> ratio.extract_sub_ratios(reciprocal=True) Sequence([Ratio((1, 1)), Ratio((2, 3)), Ratio((1, 2)), Ratio((2, 5)), Ratio((1, 3)), Ratio((2, 7)), Ratio((1, 4)), Ratio((2, 9))])
>>> ratio = evans.Ratio("9:8:7:6:5:4:3:2") >>> ratio.extract_sub_ratios(as_fractions=True) Sequence([Fraction(1, 1), Fraction(3, 2), Fraction(2, 1), Fraction(5, 2), Fraction(3, 1), Fraction(7, 2), Fraction(4, 1), Fraction(9, 2)])
>>> ratio = evans.Ratio("9:8:7:6:5:4:3:2") >>> ratio.extract_sub_ratios(reciprocal=True, as_fractions=True) Sequence([Fraction(1, 1), Fraction(2, 3), Fraction(1, 2), Fraction(2, 5), Fraction(1, 3), Fraction(2, 7), Fraction(1, 4), Fraction(2, 9)])
-
(
NonreducedRatio
).index(argument)¶ Gets index of
argument
in ratio.Returns integer.
-
(
Ratio
).partition_integer(n)[source]¶ Partitions positive integer-equivalent
n
byratio
.>>> abjad.Ratio([1, 2]).partition_integer(10) [3, 7]
Partitions positive integer-equivalent
n
byratio
with negative parts:>>> abjad.Ratio([1, -2]).partition_integer(10) [3, -7]
Partitions negative integer-equivalent
n
byratio
:>>> abjad.Ratio([1, 2]).partition_integer(-10) [-3, -7]
Partitions negative integer-equivalent
n
byratio
with negative parts:>>> abjad.Ratio([1, -2]).partition_integer(-10) [-3, 7]
More examples:
>>> abjad.Ratio([1]).partition_integer(10) [10]
>>> abjad.Ratio([1, 1]).partition_integer(10) [5, 5]
>>> abjad.Ratio([1, -1, -1]).partition_integer(10) [3, -4, -3]
>>> abjad.Ratio([1, 1, 1, 1]).partition_integer(-10) [-3, -2, -3, -2]
>>> abjad.Ratio([1, 1, 1, 1, 1]).partition_integer(-10) [-2, -2, -2, -2, -2]
Returns result with weight equal to absolute value of
n
.
Read-only properties
-
(
Ratio
).multipliers¶ Gets multipliers of ratio.
Ratio of two numbers:
>>> ratio = abjad.Ratio((2, 4)) >>> ratio.multipliers (Multiplier(1, 3), Multiplier(2, 3))
Ratio of three numbers:
>>> ratio = abjad.Ratio((2, 4, 2)) >>> ratio.multipliers (Multiplier(1, 4), Multiplier(1, 2), Multiplier(1, 4))
Returns tuple of multipliers.
-
(
Ratio
).numbers¶ Gets numbers of ratio.
Ratio of two numbers:
>>> ratio = abjad.Ratio((2, 4)) >>> ratio.numbers (1, 2)
Ratio of three numbers:
>>> ratio = abjad.Ratio((2, 4, 2)) >>> ratio.numbers (1, 2, 1)
Set to tuple of two or more numbers.
Returns tuple of two or more numbers.
-
(
Ratio
).reciprocal¶ Gets reciprocal.
Gets reciprocal:
>>> abjad.Ratio((3, 2)).reciprocal Ratio((2, 3))
>>> abjad.Ratio((3, 2, 7)).reciprocal Ratio((7, 2, 3))
Returns new ratio.
-
(
- class evans.sequence.RatioClassSegment(ratio_classes)[source]¶
Attributes Summary
Special methods
-
(
RatioClassSegment
).__add__(argument)[source]¶ Concatenates Ratio Class Segment with iterable.
>>> rc_segment = microtones.RatioClassSegment(["1", "1/2", "5/4"]) >>> rc_segment += [1, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> s = rc_segment >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(1, 1), Fraction(1, 1), Fraction(5, 4), Fraction(1, 1), Fraction(11, 6), Fraction(27, 16), ] )
-
(
RatioClassSegment
).__contains__(argument)[source]¶ Returns boolean
>>> rc_segment = microtones.RatioClassSegment([1, 2, 6]) >>> 1 in rc_segment True
-
(
RatioClassSegment
).__getitem__(index)[source]¶ Gets item at index
>>> microtones.RatioClassSegment([1, 2, 3])[0] Fraction(1, 1)
-
(
RatioClassSegment
).__iter__()[source]¶ Iterates contents.
>>> pc_segment = microtones.RatioClassSegment([1, 2, 3, 3]) >>> for item in pc_segment: ... item ... Fraction(1, 1) Fraction(2, 1) Fraction(3, 2) Fraction(3, 2)
>>> for x in microtones.RatioClassSegment( ... ["31/2", "10", "33/4", "36/10", "113/10"] ... ): ... print(x) ... 31/16 5/4 33/32 9/5 113/80
-
(
RatioClassSegment
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.RatioClassSegment([1, 2, 3])) 3
-
(
RatioClassSegment
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.RatioClassSegment([1, 2, 3]) RatioClassSegment([Fraction(1, 1), Fraction(2, 1), Fraction(3, 2)])
-
(
RatioClassSegment
).__str__()[source]¶ Gets string representation.
>>> str(microtones.RatioClassSegment([1, 2, 3])) '(1, 2, 3/2)'
Methods
-
(
RatioClassSegment
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_segment = microtones.RatioClassSegment([1, 2, 3]) >>> input_scale = [i + 1 for i in range(11)] >>> s = pc_segment.complement(input_scale) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(3, 2), Fraction(2, 1), Fraction(5, 4), Fraction(3, 2), Fraction(7, 4), Fraction(2, 1), Fraction(9, 8), Fraction(5, 4), Fraction(11, 8), ] )
-
(
RatioClassSegment
).invert(axis=1)[source]¶ Gets inversion.
>>> s = microtones.RatioClassSegment([2, 4, 3]).invert() >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(1, 1), Fraction(1, 1), Fraction(4, 3), ] )
>>> s = microtones.RatioClassSegment([2, 4, 3]).invert(3) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(9, 8), Fraction(9, 8), Fraction(3, 2), ] )
-
(
RatioClassSegment
).multiply(n)[source]¶ Gets multiplication.
>>> s = microtones.RatioClassSegment([1, 2, 3]).multiply(2) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(2, 1), Fraction(2, 1), Fraction(3, 2), ] )
-
(
RatioClassSegment
).retrograde()[source]¶ Gets retrograde.
>>> s = microtones.RatioClassSegment([1, 2, 3, 3]).retrograde() >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(3, 2), Fraction(3, 2), Fraction(2, 1), Fraction(1, 1), ] )
-
(
RatioClassSegment
).rotate(n)[source]¶ Gets rotation.
>>> s = microtones.RatioClassSegment([1, 2, 3]).rotate(1) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(2, 1), Fraction(3, 2), Fraction(1, 1), ] )
-
(
RatioClassSegment
).sorted()[source]¶ Gets Ratio Class Segment sorted in ascending order.
>>> s = microtones.RatioClassSegment([5, 2, 3, "1/2", 1, "1/5"]).sorted() >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(1, 1), Fraction(1, 1), Fraction(5, 4), Fraction(3, 2), Fraction(8, 5), Fraction(2, 1), ] )
-
(
RatioClassSegment
).transpose(n)[source]¶ Gets transposition.
>>> s = microtones.RatioClassSegment([1, 2, 3]).transpose(2) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(3, 2), Fraction(2, 1), Fraction(7, 4), ] )
>>> s = microtones.RatioClassSegment([1, 2, 4, 5, 6]).invert().transpose(1 + 3) >>> print(abjad.storage(s)) microtones.RatioClassSegment( [ Fraction(5, 4), Fraction(5, 4), Fraction(5, 4), Fraction(7, 5), Fraction(4, 3), ] )
-
(
- class evans.sequence.RatioClassSet(ratio_classes)[source]¶
Attributes Summary
Special methods
-
(
RatioClassSet
).__add__(argument)[source]¶ Concatenates Ratio Class Set with iterable.
>>> rc_set = microtones.RatioClassSet(["1", "1/2", "5/4"]) >>> rc_set += [1, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> print(abjad.storage(rc_set)) microtones.RatioClassSet( [ Fraction(1, 1), Fraction(5, 4), Fraction(11, 6), Fraction(27, 16), ] )
-
(
RatioClassSet
).__contains__(argument)[source]¶ Returns boolean
>>> rc_set = microtones.RatioClassSet([1, 2, 6]) >>> 1 in rc_set True
-
(
RatioClassSet
).__getitem__(index)[source]¶ Gets item at index
>>> microtones.RatioClassSet([1, 2, 3])[0] Fraction(1, 1)
-
(
RatioClassSet
).__iter__()[source]¶ Iterates contents.
>>> pc_set = microtones.RatioClassSet([1, 2, 3]) >>> for item in pc_set: ... item ... Fraction(1, 1) Fraction(2, 1) Fraction(3, 2)
>>> for x in microtones.RatioClassSet(["31/2", "10", "33/4", "36/10", "113/10"]): ... print(x) ... 31/16 5/4 33/32 9/5 113/80
-
(
RatioClassSet
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.RatioClassSet([1, 2, 3])) 3
-
(
RatioClassSet
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.RatioClassSet([1, 2, 3]) RatioClassSet([Fraction(1, 1), Fraction(2, 1), Fraction(3, 2)])
-
(
RatioClassSet
).__str__()[source]¶ Gets string representation.
>>> str(microtones.RatioClassSet([1, 2, 3])) '{1, 2, 3/2}'
Methods
-
(
RatioClassSet
).complement(scale)[source]¶ Gets complement in scale.
>>> rc_set = microtones.RatioClassSet([1, 2, 3]) >>> input_scale = [i + 1 for i in range(11)] >>> s = rc_set.complement(input_scale) >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(3, 2), Fraction(2, 1), Fraction(5, 4), Fraction(7, 4), Fraction(9, 8), Fraction(11, 8), ] )
-
(
RatioClassSet
).invert(axis=1)[source]¶ Gets inversion.
>>> s = microtones.RatioClassSet([2, 4, 3]).invert() >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(1, 1), Fraction(4, 3), ] )
>>> s = microtones.RatioClassSet([2, 4, 3]).invert(3) >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(9, 8), Fraction(3, 2), ] )
-
(
RatioClassSet
).multiply(n)[source]¶ Gets multiplication.
>>> s = microtones.RatioClassSet([1, 2, 3]).multiply(2) >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(2, 1), Fraction(3, 2), ] )
-
(
RatioClassSet
).sorted()[source]¶ Gets Ratio Class Set sorted in ascending order.
>>> s = microtones.RatioClassSet([5, 2, 3, "1/2", 1, "1/5"]).sorted() >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(1, 1), Fraction(5, 4), Fraction(3, 2), Fraction(8, 5), Fraction(2, 1), ] )
-
(
RatioClassSet
).transpose(n)[source]¶ Gets transposition.
>>> s = microtones.RatioClassSet([1, 2, 3]).transpose(2) >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(3, 2), Fraction(2, 1), Fraction(7, 4), ] )
>>> s = microtones.RatioClassSet([1, 2, 4, 5, 6]).invert().transpose(1 + 3) >>> print(abjad.storage(s)) microtones.RatioClassSet( [ Fraction(5, 4), Fraction(7, 5), Fraction(4, 3), ] )
-
(
- class evans.sequence.RatioSegment(ratios)[source]¶
Attributes Summary
Special methods
-
(
RatioSegment
).__add__(argument)[source]¶ Concatenates Ratio Segment with iterable.
>>> r_segment = microtones.RatioSegment(["1", "1/2", "5/4"]) >>> r_segment += [1, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> s = r_segment >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(1, 1), Fraction(1, 2), Fraction(5, 4), Fraction(1, 1), Fraction(11, 6), Fraction(27, 2), ] )
-
(
RatioSegment
).__contains__(argument)[source]¶ Returns boolean
>>> r_segment = microtones.RatioSegment([1, 2, 6]) >>> 1 in r_segment True
-
(
RatioSegment
).__getitem__(index)[source]¶ Gets item at index
>>> microtones.RatioSegment([1, 2, 3])[0] Fraction(1, 1)
-
(
RatioSegment
).__iter__()[source]¶ Iterates contents.
>>> pc_segment = microtones.RatioSegment([1, 2, 3, 3]) >>> for item in pc_segment: ... item ... Fraction(1, 1) Fraction(2, 1) Fraction(3, 1) Fraction(3, 1)
>>> for x in microtones.RatioSegment(["31/2", "10", "33/4", "36/10", "113/10"]): ... print(x) ... 31/2 10 33/4 18/5 113/10
-
(
RatioSegment
).__len__()[source]¶ Gets length of contents.
>>> len(microtones.RatioSegment([1, 2, 3])) 3
-
(
RatioSegment
).__repr__()[source]¶ Gets interpreter representation.
>>> microtones.RatioSegment([1, 2, 3]) RatioSegment([Fraction(1, 1), Fraction(2, 1), Fraction(3, 1)])
-
(
RatioSegment
).__setitem__(index, data)[source]¶ Sets item at index
>>> s = microtones.RatioSegment([1, 2, 3]) >>> s[1] = 5 >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(1, 1), Fraction(5, 1), Fraction(3, 1), ] )
-
(
RatioSegment
).__str__()[source]¶ Gets string representation.
>>> str(microtones.RatioSegment([1, 2, 3])) '(1, 2, 3)'
Methods
-
(
RatioSegment
).complement(scale)[source]¶ Gets complement in scale.
>>> pc_segment = microtones.RatioSegment([1, 2, 3]) >>> input_scale = [i + 1 for i in range(11)] >>> s = pc_segment.complement(input_scale) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
RatioSegment
).constrain_to_octave()[source]¶ Gets Ratio Segment constrained within an octave.
>>> str(microtones.RatioSegment([1, 3, "1/5"]).constrain_to_octave()) '(1, 3/2, 4/5)'
-
(
RatioSegment
).invert(axis=1)[source]¶ Gets inversion.
>>> s = microtones.RatioSegment([2, 4, 3]).invert() >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(1, 2), Fraction(1, 4), Fraction(1, 3), ] )
>>> s = microtones.RatioSegment([2, 4, 3]).invert(3) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(9, 2), Fraction(9, 4), Fraction(3, 1), ] )
-
(
RatioSegment
).multiply(n)[source]¶ Gets multiplication.
>>> s = microtones.RatioSegment([1, 2, 3]).multiply(2) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(2, 1), Fraction(4, 1), Fraction(6, 1), ] )
-
(
RatioSegment
).retrograde()[source]¶ Gets retrograde.
>>> s = microtones.RatioSegment([1, 2, 3, 3]).retrograde() >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(3, 1), Fraction(3, 1), Fraction(2, 1), Fraction(1, 1), ] )
-
(
RatioSegment
).rotate(n)[source]¶ Gets rotation.
>>> s = microtones.RatioSegment([1, 2, 3]).rotate(1) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(2, 1), Fraction(3, 1), Fraction(1, 1), ] )
-
(
RatioSegment
).sorted()[source]¶ Gets Ratio Segment sorted in ascending order.
>>> s = microtones.RatioSegment([5, 2, 3, "1/2", 1, "1/5"]).sorted() >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(1, 5), Fraction(1, 2), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(5, 1), ] )
-
(
RatioSegment
).transpose(n)[source]¶ Gets transposition.
>>> s = microtones.RatioSegment([1, 2, 3]).transpose(2) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), ] )
>>> s = microtones.RatioSegment([1, 2, 4, 5, 6]).invert().transpose(1 + 3) >>> print(abjad.storage(s)) microtones.RatioSegment( [ Fraction(5, 1), Fraction(9, 2), Fraction(17, 4), Fraction(21, 5), Fraction(25, 6), ] )
-
(
- class evans.sequence.RatioSet(ratios)[source]¶
Attributes Summary
Special methods
-
(
RatioSet
).__add__(argument)[source]¶ Concatenates Ratio Set with iterable.
>>> r_set = microtones.RatioSet(["1", "1/2", "5/4"]) >>> r_set += [1, quicktions.Fraction(11, 6), quicktions.Fraction(27, 2)] >>> s = r_set >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(1, 1), Fraction(1, 2), Fraction(5, 4), Fraction(11, 6), Fraction(27, 2), ] )
Methods
-
(
RatioSet
).complement(scale)[source]¶ Gets complement in scale.
>>> r_set = microtones.RatioSet([1, 2, 3]) >>> input_scale = [i + 1 for i in range(11)] >>> s = r_set.complement(input_scale) >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1), Fraction(10, 1), Fraction(11, 1), ] )
-
(
RatioSet
).invert(axis=1)[source]¶ Gets inversion.
>>> s = microtones.RatioSet([2, 4, 3]).invert() >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(1, 2), Fraction(1, 4), Fraction(1, 3), ] )
>>> s = microtones.RatioSet([2, 4, 3]).invert(3) >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(9, 2), Fraction(9, 4), Fraction(3, 1), ] )
-
(
RatioSet
).transpose(n)[source]¶ Gets transposition.
>>> s = microtones.RatioSet([1, 2, 3]).transpose(2) >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), ] )
>>> s = microtones.RatioSet([1, 2, 4, 5, 6]).invert().transpose(1 + 3) >>> print(abjad.storage(s)) microtones.RatioSet( [ Fraction(5, 1), Fraction(9, 2), Fraction(17, 4), Fraction(21, 5), Fraction(25, 6), ] )
-
(
- class evans.sequence.Sequence(items=None)[source]¶
Attributes Summary
Special methods
-
(
Sequence
).__add__(argument)[source]¶ Adds
argument
to sequence.Adds tuple to sequence:
>>> abjad.Sequence([1, 2, 3]) + (4, 5, 6) Sequence([1, 2, 3, 4, 5, 6])
Adds list to sequence:
>>> abjad.Sequence([1, 2, 3]) + [4, 5, 6] Sequence([1, 2, 3, 4, 5, 6])
Adds sequence to sequence:
>>> sequence_1 = abjad.Sequence([1, 2, 3]) >>> sequence_2 = abjad.Sequence([4, 5, 6]) >>> sequence_1 + sequence_2 Sequence([1, 2, 3, 4, 5, 6])
Reverses result:
>>> sequence_1 = abjad.Sequence([1, 2, 3]) >>> sequence_2 = abjad.Sequence([4, 5, 6]) >>> sequence = sequence_1 + sequence_2 >>> sequence.reverse() Sequence([6, 5, 4, 3, 2, 1])
- Return type
Sequence
-
(
Sequence
).__eq__(argument)[source]¶ Is true when
argument
is a sequence with items equal to those of this sequence.Is true when
argument
is a sequence with items equal to those of this sequence:>>> abjad.Sequence([1, 2, 3, 4, 5, 6]) == abjad.Sequence([1, 2, 3, 4, 5, 6]) True
Is false when
argument
is not a sequence with items equal to those of this sequence:>>> abjad.Sequence([1, 2, 3, 4, 5, 6]) == ([1, 2, 3, 4, 5, 6]) False
- Return type
-
(
Sequence
).__getitem__(argument)[source]¶ Gets item or slice identified by
argument
.Gets first item in sequence:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6])
>>> sequence[0] 1
Gets last item in sequence:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6])
>>> sequence[-1] 6
Gets slice from sequence:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6]) >>> sequence = sequence[:3]
>>> sequence Sequence([1, 2, 3])
Gets item in sequence and wraps result in new sequence:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6]) >>> sequence = abjad.Sequence(sequence[0])
>>> sequence Sequence([1])
Gets slice from sequence and flattens slice:
>>> sequence = abjad.Sequence([1, 2, [3, [4]], 5]) >>> sequence = sequence[:-1] >>> sequence = sequence.flatten(depth=-1)
>>> sequence Sequence([1, 2, 3, 4])
Returns item or new sequence.
- Return type
-
(
Sequence
).__radd__(argument)[source]¶ Adds sequence to
argument
.Adds sequence to tuple:
>>> (1, 2, 3) + abjad.Sequence([4, 5, 6]) Sequence([1, 2, 3, 4, 5, 6])
Adds sequence to list:
>>> [1, 2, 3] + abjad.Sequence([4, 5, 6]) Sequence([1, 2, 3, 4, 5, 6])
Adds sequence to sequence:
>>> abjad.Sequence([1, 2, 3]) + abjad.Sequence([4, 5, 6]) Sequence([1, 2, 3, 4, 5, 6])
- Return type
Sequence
Methods
-
(
Sequence
).accumulate(operands=None, count=None)[source]¶ Accumulates
operands
calls against sequence to identity.Accumulates identity operator:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate(): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
Accumulates alpha:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate([lambda _: _.alpha()]): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])]) Sequence([PitchClassSegment([1, 0, 3, 2]), PitchClassSegment([5, 4])])
Accumulates transposition:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate([lambda _: _.transpose(n=3)]): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])]) Sequence([PitchClassSegment([3, 4, 5, 6]), PitchClassSegment([7, 8])]) Sequence([PitchClassSegment([6, 7, 8, 9]), PitchClassSegment([10, 11])]) Sequence([PitchClassSegment([9, 10, 11, 0]), PitchClassSegment([1, 2])])
Accumulates alpha followed by transposition:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate( ... [lambda _: _.alpha(), lambda _: _.transpose(n=3)] ... ): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])]) Sequence([PitchClassSegment([1, 0, 3, 2]), PitchClassSegment([5, 4])]) Sequence([PitchClassSegment([4, 3, 6, 5]), PitchClassSegment([8, 7])]) Sequence([PitchClassSegment([5, 2, 7, 4]), PitchClassSegment([9, 6])]) Sequence([PitchClassSegment([8, 5, 10, 7]), PitchClassSegment([0, 9])]) Sequence([PitchClassSegment([9, 4, 11, 6]), PitchClassSegment([1, 8])]) Sequence([PitchClassSegment([0, 7, 2, 9]), PitchClassSegment([4, 11])]) Sequence([PitchClassSegment([1, 6, 3, 8]), PitchClassSegment([5, 10])]) Sequence([PitchClassSegment([4, 9, 6, 11]), PitchClassSegment([8, 1])]) Sequence([PitchClassSegment([5, 8, 7, 10]), PitchClassSegment([9, 0])]) Sequence([PitchClassSegment([8, 11, 10, 1]), PitchClassSegment([0, 3])]) Sequence([PitchClassSegment([9, 10, 11, 0]), PitchClassSegment([1, 2])])
Accumulates permutation:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> row = [10, 0, 2, 6, 8, 7, 5, 3, 1, 9, 4, 11] >>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate([lambda _: _.permute(row)]): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])]) Sequence([PitchClassSegment([10, 0, 2, 6]), PitchClassSegment([8, 7])]) Sequence([PitchClassSegment([4, 10, 2, 5]), PitchClassSegment([1, 3])]) Sequence([PitchClassSegment([8, 4, 2, 7]), PitchClassSegment([0, 6])]) Sequence([PitchClassSegment([1, 8, 2, 3]), PitchClassSegment([10, 5])]) Sequence([PitchClassSegment([0, 1, 2, 6]), PitchClassSegment([4, 7])]) Sequence([PitchClassSegment([10, 0, 2, 5]), PitchClassSegment([8, 3])]) Sequence([PitchClassSegment([4, 10, 2, 7]), PitchClassSegment([1, 6])]) Sequence([PitchClassSegment([8, 4, 2, 3]), PitchClassSegment([0, 5])]) Sequence([PitchClassSegment([1, 8, 2, 6]), PitchClassSegment([10, 7])]) Sequence([PitchClassSegment([0, 1, 2, 5]), PitchClassSegment([4, 3])]) Sequence([PitchClassSegment([10, 0, 2, 7]), PitchClassSegment([8, 6])]) Sequence([PitchClassSegment([4, 10, 2, 3]), PitchClassSegment([1, 5])]) Sequence([PitchClassSegment([8, 4, 2, 6]), PitchClassSegment([0, 7])]) Sequence([PitchClassSegment([1, 8, 2, 5]), PitchClassSegment([10, 3])]) Sequence([PitchClassSegment([0, 1, 2, 7]), PitchClassSegment([4, 6])]) Sequence([PitchClassSegment([10, 0, 2, 3]), PitchClassSegment([8, 5])]) Sequence([PitchClassSegment([4, 10, 2, 6]), PitchClassSegment([1, 7])]) Sequence([PitchClassSegment([8, 4, 2, 5]), PitchClassSegment([0, 3])]) Sequence([PitchClassSegment([1, 8, 2, 7]), PitchClassSegment([10, 6])])
Accumulates permutation followed by transposition:
>>> collection_1 = baca.PitchClassSegment([0, 1, 2, 3]) >>> collection_2 = baca.PitchClassSegment([4, 5]) >>> baca.Sequence([collection_1, collection_2]) Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])])
>>> row = [10, 0, 2, 6, 8, 7, 5, 3, 1, 9, 4, 11] >>> sequence = baca.Sequence([collection_1, collection_2]) >>> for item in sequence.accumulate( ... [lambda _: _.permute(row), lambda _: _.transpose(n=3)], ... ): ... item ... Sequence([PitchClassSegment([0, 1, 2, 3]), PitchClassSegment([4, 5])]) Sequence([PitchClassSegment([10, 0, 2, 6]), PitchClassSegment([8, 7])]) Sequence([PitchClassSegment([1, 3, 5, 9]), PitchClassSegment([11, 10])]) Sequence([PitchClassSegment([0, 6, 7, 9]), PitchClassSegment([11, 4])]) Sequence([PitchClassSegment([3, 9, 10, 0]), PitchClassSegment([2, 7])]) Sequence([PitchClassSegment([6, 9, 4, 10]), PitchClassSegment([2, 3])]) Sequence([PitchClassSegment([9, 0, 7, 1]), PitchClassSegment([5, 6])]) Sequence([PitchClassSegment([9, 10, 3, 0]), PitchClassSegment([7, 5])]) Sequence([PitchClassSegment([0, 1, 6, 3]), PitchClassSegment([10, 8])]) Sequence([PitchClassSegment([10, 0, 5, 6]), PitchClassSegment([4, 1])]) Sequence([PitchClassSegment([1, 3, 8, 9]), PitchClassSegment([7, 4])]) Sequence([PitchClassSegment([0, 6, 1, 9]), PitchClassSegment([3, 8])]) Sequence([PitchClassSegment([3, 9, 4, 0]), PitchClassSegment([6, 11])]) Sequence([PitchClassSegment([6, 9, 8, 10]), PitchClassSegment([5, 11])]) Sequence([PitchClassSegment([9, 0, 11, 1]), PitchClassSegment([8, 2])]) Sequence([PitchClassSegment([9, 10, 11, 0]), PitchClassSegment([1, 2])])
Returns sequence of accumulated sequences.
Returns sequence of length
count
+ 1 with integercount
.Returns sequence of orbit length with
count
set to identity.
- add_sequences(seq)[source]¶
>>> s = evans.Sequence([0, 1, 2, 3]) >>> s.add_sequences([4, 5, 6, 7, 8]) Sequence([4, 6, 8, 10])
>>> s = evans.Sequence([0, 1, 2, 3, 4]) >>> s.add_sequences([5, 6, 7, 8]) Sequence([5, 7, 9, 11, 9])
- alpha(category)[source]¶
>>> s = evans.Sequence([_ for _ in range(12)]) >>> s.alpha(category=1) Sequence([1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10])
>>> s = evans.Sequence([_ for _ in range(12)]) >>> s.alpha(category=2) Sequence([-1, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12])
-
(
Sequence
).boustrophedon(count=2)[source]¶ Iterates sequence boustrophedon.
Iterates atoms boustrophedon:
>>> sequence = baca.Sequence([1, 2, 3, 4, 5])
>>> sequence.boustrophedon(count=0) Sequence([])
>>> sequence.boustrophedon(count=1) Sequence([1, 2, 3, 4, 5])
>>> sequence.boustrophedon(count=2) Sequence([1, 2, 3, 4, 5, 4, 3, 2, 1])
>>> sequence.boustrophedon(count=3) Sequence([1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 4, 5])
Iterates collections boustrophedon:
>>> collections = [ ... baca.PitchClassSegment([1, 2, 3]), ... baca.PitchClassSegment([4, 5, 6]), ... ] >>> sequence = baca.Sequence(collections)
>>> sequence.boustrophedon(count=0) Sequence([])
>>> for collection in sequence.boustrophedon(count=1): ... collection ... PitchClassSegment([1, 2, 3]) PitchClassSegment([4, 5, 6])
>>> for collection in sequence.boustrophedon(count=2): ... collection ... PitchClassSegment([1, 2, 3]) PitchClassSegment([4, 5, 6]) PitchClassSegment([5, 4]) PitchClassSegment([3, 2, 1])
>>> for collection in sequence.boustrophedon(count=3): ... collection ... PitchClassSegment([1, 2, 3]) PitchClassSegment([4, 5, 6]) PitchClassSegment([5, 4]) PitchClassSegment([3, 2, 1]) PitchClassSegment([2, 3]) PitchClassSegment([4, 5, 6])
Iterates mixed items boustrophedon:
>>> collection = baca.PitchClassSegment([1, 2, 3]) >>> sequence = baca.Sequence([collection, 4, 5]) >>> for item in sequence.boustrophedon(count=3): ... item ... PitchClassSegment([1, 2, 3]) 4 5 4 PitchClassSegment([3, 2, 1]) PitchClassSegment([2, 3]) 4 5
Returns new sequence.
- combination_addition(size=2)[source]¶
>>> import quicktions >>> l = [2, 3, 4] >>> l = [quicktions.Fraction(_) for _ in l] >>> evans.Sequence(l).combination_addition(2) Sequence([Fraction(5, 4), Fraction(3, 2), Fraction(7, 4)])
- combination_division(size=2)[source]¶
>>> import quicktions >>> l = [2, 3, 4] >>> l = [quicktions.Fraction(_) for _ in l] >>> evans.Sequence(l).combination_division(2) Sequence([Fraction(1, 2), Fraction(2, 3), Fraction(3, 4)])
- combination_multiplication(size=2)[source]¶
>>> import quicktions >>> l = [2, 3, 4] >>> l = [quicktions.Fraction(_) for _ in l] >>> evans.Sequence(l).combination_multiplication(2) Sequence([Fraction(1, 1), Fraction(3, 2)])
- combination_subtraction(size=2)[source]¶
>>> import quicktions >>> l = [2, 3, 4] >>> l = [quicktions.Fraction(_) for _ in l] >>> evans.Sequence(l).combination_subtraction(2) Sequence([Fraction(10, 1), Fraction(11, 1)])
- combinations(size=2, as_set=False)[source]¶
>>> l = [2, 2, 3, 3, 4, 4] >>> evans.Sequence(l).combinations(2) Sequence([(2, 2), (2, 3), (2, 3), (2, 4), (2, 4), (2, 3), (2, 3), (2, 4), (2, 4), (3, 3), (3, 4), (3, 4), (3, 4), (3, 4), (4, 4)])
>>> l = [2, 2, 3, 3, 4, 4] >>> evans.Sequence(l).combinations(2, as_set=True) Sequence([(4, 4), (2, 4), (3, 4), (2, 3), (3, 3), (2, 2)])
-
(
Sequence
).degree_of_rotational_symmetry()[source]¶ Gets degree of rotational symmetry.
>>> baca.Sequence([1, 1, 1, 1, 1, 1]).degree_of_rotational_symmetry() 6
>>> baca.Sequence([1, 2, 1, 2, 1, 2]).degree_of_rotational_symmetry() 3
>>> baca.Sequence([1, 2, 3, 1, 2, 3]).degree_of_rotational_symmetry() 2
>>> baca.Sequence([1, 2, 3, 4, 5, 6]).degree_of_rotational_symmetry() 1
>>> baca.Sequence().degree_of_rotational_symmetry() 1
Returns positive integer.
- derive_added_sequences(seq, flat=False)[source]¶
>>> for _ in evans.Sequence([0, 1, 2, 3]).derive_added_sequences([4, 5, 6, 7, 8]): ... _ ... [4, 5, 6, 7] [5, 6, 7, 8] [6, 7, 8, 9] [7, 8, 9, 10] [8, 9, 10, 11]
>>> for _ in evans.Sequence([0, 1, 2, 3, 4]).derive_added_sequences([5, 6, 7, 8]): ... _ ... [5, 6, 7, 8, 9] [6, 7, 8, 9, 10] [7, 8, 9, 10, 11] [8, 9, 10, 11, 12]
>>> evans.Sequence([0, 1, 2, 3, 4]).derive_added_sequences([5, 6, 7, 8], flat=True) Sequence([5, 6, 7, 8, 9, 6, 7, 8, 9, 10, 7, 8, 9, 10, 11, 8, 9, 10, 11, 12])
- derive_multiplied_sequences(seq, flat=False)[source]¶
>>> for _ in evans.Sequence([0, 1, 2, 3]).derive_multiplied_sequences( ... [4, 5, 6, 7, 8] ... ): ... _ ... [0, 4, 8, 12] [0, 5, 10, 15] [0, 6, 12, 18] [0, 7, 14, 21] [0, 8, 16, 24]
>>> for _ in evans.Sequence([0, 1, 2, 3, 4]).derive_multiplied_sequences( ... [5, 6, 7, 8] ... ): ... _ ... [0, 5, 10, 15, 20] [0, 6, 12, 18, 24] [0, 7, 14, 21, 28] [0, 8, 16, 24, 32]
>>> evans.Sequence([0, 1, 2, 3, 4]).derive_multiplied_sequences( ... [5, 6, 7, 8], flat=True ... ) Sequence([0, 5, 10, 15, 20, 0, 6, 12, 18, 24, 0, 7, 14, 21, 28, 0, 8, 16, 24, 32])
- divide_all()[source]¶
>>> l = [1, 2, 3, 4] >>> evans.Sequence(l).divide_all() Sequence([0.041666666666666664])
-
(
Sequence
).filter(predicate=None)[source]¶ Filters sequence by
predicate
.By length:
With lambda:
>>> items = [[1], [2, 3, [4]], [5], [6, 7, [8]]] >>> sequence = abjad.Sequence(items)
>>> sequence.filter(lambda _: len(_) == 1) Sequence([[1], [5]])
With inequality:
>>> items = [[1], [2, 3, [4]], [5], [6, 7, [8]]] >>> sequence = abjad.Sequence(items)
>>> sequence.filter(abjad.LengthInequality("==", 1)) Sequence([[1], [5]])
By duration:
With inequality:
>>> staff = abjad.Staff("c'4. d'8 e'4. f'8 g'2") >>> sequence = abjad.Sequence(staff)
>>> sequence.filter(abjad.DurationInequality("==", (1, 8))) Sequence([Note("d'8"), Note("f'8")])
- Return type
Sequence
-
(
Sequence
).flatten(classes=None, depth=1)[source]¶ Flattens sequence.
Flattens sequence:
>>> items = [1, [2, 3, [4]], 5, [6, 7, [8]]] >>> sequence = abjad.Sequence(items)
>>> sequence.flatten() Sequence([1, 2, 3, [4], 5, 6, 7, [8]])
Flattens sequence to depth 2:
>>> items = [1, [2, 3, [4]], 5, [6, 7, [8]]] >>> sequence = abjad.Sequence(items)
>>> sequence.flatten(depth=2) Sequence([1, 2, 3, 4, 5, 6, 7, 8])
Flattens sequence to depth -1:
>>> items = [1, [2, 3, [4]], 5, [6, 7, [8]]] >>> sequence = abjad.Sequence(items)
>>> sequence.flatten(depth=-1) Sequence([1, 2, 3, 4, 5, 6, 7, 8])
Flattens tuples in sequence only:
>>> items = ["ab", "cd", ("ef", "gh"), ("ij", "kl")] >>> sequence = abjad.Sequence(items)
>>> sequence.flatten(classes=(tuple,)) Sequence(['ab', 'cd', 'ef', 'gh', 'ij', 'kl'])
- Return type
Sequence
-
(
Sequence
).fuse(counts=None, *, cyclic=None, indices=None)[source]¶ Fuses sequence by
counts
.Fuses items:
>>> divisions = baca.fractions([(7, 8), (3, 8), (5, 8)]) >>> divisions = baca.Sequence(divisions).fuse() >>> divisions = divisions.flatten(depth=-1) >>> divisions Sequence([NonreducedFraction(15, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, divisions) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Fuses first two items and then remaining items:
>>> divisions = baca.fractions([(2, 8), (2, 8), (4, 8), (4, 8), (2, 4)]) >>> divisions = baca.Sequence(divisions).fuse([2]) >>> for division in divisions: ... division ... NonreducedFraction(4, 8) NonreducedFraction(12, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Fuses items two at a time:
>>> divisions = baca.fractions([(2, 8), (2, 8), (4, 8), (4, 8), (2, 4)]) >>> divisions = baca.Sequence(divisions).fuse([2], cyclic=True) >>> for division in divisions: ... division ... NonreducedFraction(4, 8) NonreducedFraction(8, 8) NonreducedFraction(2, 4)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each item by
3/8
; then flattens; then fuses into differently sized groups:>>> divisions = baca.fractions([(7, 8), (3, 8), (5, 8)]) >>> divisions = baca.Sequence(divisions).map( ... lambda _: baca.Sequence(_).split_divisions([(3, 8)], cyclic=True) ... ) >>> divisions = divisions.flatten(depth=-1) >>> divisions = divisions.fuse([2, 3, 1]) >>> for division in divisions: ... division ... NonreducedFraction(6, 8) NonreducedFraction(7, 8) NonreducedFraction(2, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits into sixteenths; partitions; then fuses every other part:
>>> divisions = baca.fractions([(7, 8), (3, 8), (5, 8)]) >>> divisions = baca.Sequence(divisions) >>> divisions = divisions.fuse() >>> divisions = divisions.map( ... lambda _: baca.Sequence(_).split_divisions([(1, 16)], cyclic=True) ... ) >>> divisions = divisions.flatten(depth=-1) >>> divisions = divisions.partition_by_ratio_of_lengths((1, 1, 1, 1, 1, 1)) >>> divisions = divisions.fuse(indices=[1, 3, 5]) >>> divisions = divisions.flatten(depth=-1) >>> for division in divisions: ... division ... NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(5, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(5, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(1, 16) NonreducedFraction(5, 16)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
-
(
Sequence
).group_by(predicate=None)[source]¶ Groups sequence items by value of items.
>>> items = [0, 0, -1, -1, 2, 3, -5, 1, 1, 5, -5] >>> sequence = abjad.Sequence(items) >>> for item in sequence.group_by(): ... item ... Sequence([0, 0]) Sequence([-1, -1]) Sequence([2]) Sequence([3]) Sequence([-5]) Sequence([1, 1]) Sequence([5]) Sequence([-5])
>>> staff = abjad.Staff("c'8 d' d' e' e' e'") >>> predicate = lambda x: abjad.PitchSet.from_selection(abjad.select(x)) >>> for item in abjad.Sequence(staff).group_by(predicate): ... item ... Sequence([Note("c'8")]) Sequence([Note("d'8"), Note("d'8")]) Sequence([Note("e'8"), Note("e'8"), Note("e'8")])
Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).group_by_sign(sign=(- 1, 0, 1))[source]¶ Groups sequence by sign of items.
>>> sequence = baca.Sequence([0, 0, -1, -1, 2, 3, -5, 1, 2, 5, -5, -6])
>>> for item in sequence.group_by_sign(): ... item ... Sequence([0, 0]) Sequence([-1, -1]) Sequence([2, 3]) Sequence([-5]) Sequence([1, 2, 5]) Sequence([-5, -6])
>>> for item in sequence.group_by_sign([-1]): ... item ... Sequence([0]) Sequence([0]) Sequence([-1, -1]) Sequence([2]) Sequence([3]) Sequence([-5]) Sequence([1]) Sequence([2]) Sequence([5]) Sequence([-5, -6])
>>> for item in sequence.group_by_sign([0]): ... item ... Sequence([0, 0]) Sequence([-1]) Sequence([-1]) Sequence([2]) Sequence([3]) Sequence([-5]) Sequence([1]) Sequence([2]) Sequence([5]) Sequence([-5]) Sequence([-6])
>>> for item in sequence.group_by_sign([1]): ... item ... Sequence([0]) Sequence([0]) Sequence([-1]) Sequence([-1]) Sequence([2, 3]) Sequence([-5]) Sequence([1, 2, 5]) Sequence([-5]) Sequence([-6])
>>> for item in sequence.group_by_sign([-1, 0]): ... item ... Sequence([0, 0]) Sequence([-1, -1]) Sequence([2]) Sequence([3]) Sequence([-5]) Sequence([1]) Sequence([2]) Sequence([5]) Sequence([-5, -6])
>>> for item in sequence.group_by_sign([-1, 1]): ... item ... Sequence([0]) Sequence([0]) Sequence([-1, -1]) Sequence([2, 3]) Sequence([-5]) Sequence([1, 2, 5]) Sequence([-5, -6])
>>> for item in sequence.group_by_sign([0, 1]): ... item ... Sequence([0, 0]) Sequence([-1]) Sequence([-1]) Sequence([2, 3]) Sequence([-5]) Sequence([1, 2, 5]) Sequence([-5]) Sequence([-6])
>>> for item in sequence.group_by_sign([-1, 0, 1]): ... item ... Sequence([0, 0]) Sequence([-1, -1]) Sequence([2, 3]) Sequence([-5]) Sequence([1, 2, 5]) Sequence([-5, -6])
Groups negative elements when
-1
insign
.Groups zero-valued elements When
0
insign
.Groups positive elements when
1
insign
.Returns nested sequence.
- grouper(seq)[source]¶
>>> evans.Sequence([0, 1, 2, 3, 4, 5, 6, 7]).grouper([1, 1, 2, 1, 3]) Sequence([0, 1, [2, 3], 4, [5, 6, 7]])
- guerrero_morales(set_size=None)[source]¶
>>> g_m = evans.Sequence(["A", "B", "C", "D", "E", "F", "G"]).guerrero_morales(3) >>> for _ in g_m: ... _ ... ['A', 'B', 'C'] ['B', 'D', 'E'] ['C', 'D', 'F'] ['A', 'D', 'G'] ['A', 'E', 'F'] ['B', 'F', 'G'] ['C', 'E', 'G']
>>> for _ in evans.Sequence( ... ["A", "B", "C", "D", "E", "F", "G", "H", "I"] ... ).guerrero_morales(5): ... _ ... ['A', 'B', 'C', 'D', 'E'] ['B', 'F', 'G', 'H', 'I']
>>> for _ in evans.Sequence( ... ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O"] ... ).guerrero_morales(4): ... _ ... ['A', 'B', 'C', 'D'] ['B', 'E', 'F', 'G'] ['C', 'E', 'H', 'I'] ['D', 'E', 'J', 'K'] ['A', 'E', 'L', 'M'] ['A', 'F', 'H', 'J'] ['A', 'G', 'I', 'K'] ['B', 'H', 'K', 'L'] ['B', 'I', 'J', 'M'] ['C', 'G', 'J', 'L'] ['C', 'F', 'K', 'M'] ['D', 'F', 'I', 'L'] ['D', 'G', 'H', 'M']
>>> for _ in evans.Sequence( ... ["A", "B", "C", "D", "E", "F", "G", "H", "I"] ... ).guerrero_morales(3): ... _ ... ['A', 'B', 'C'] ['B', 'D', 'E'] ['C', 'D', 'F'] ['A', 'D', 'G'] ['A', 'E', 'F'] ['B', 'F', 'G'] ['C', 'E', 'G'] ['A', 'H', 'I']
-
(
Sequence
).helianthate(n=0, m=0)[source]¶ Helianthates sequence.
Helianthates list of lists:
>>> sequence = baca.Sequence([[1, 2, 3], [4, 5], [6, 7, 8]]) >>> sequence = sequence.helianthate(n=-1, m=1) >>> for item in sequence: ... item ... [1, 2, 3] [4, 5] [6, 7, 8] [5, 4] [8, 6, 7] [3, 1, 2] [7, 8, 6] [2, 3, 1] [4, 5] [1, 2, 3] [5, 4] [6, 7, 8] [4, 5] [8, 6, 7] [3, 1, 2] [7, 8, 6] [2, 3, 1] [5, 4]
Helianthates list of collections:
>>> J = baca.PitchClassSegment(items=[0, 2, 4]) >>> K = baca.PitchClassSegment(items=[5, 6]) >>> L = baca.PitchClassSegment(items=[7, 9, 11]) >>> sequence = baca.Sequence([J, K, L]) >>> sequence = sequence.helianthate(n=-1, m=1) >>> for collection in sequence: ... collection ... PitchClassSegment([0, 2, 4]) PitchClassSegment([5, 6]) PitchClassSegment([7, 9, 11]) PitchClassSegment([6, 5]) PitchClassSegment([11, 7, 9]) PitchClassSegment([4, 0, 2]) PitchClassSegment([9, 11, 7]) PitchClassSegment([2, 4, 0]) PitchClassSegment([5, 6]) PitchClassSegment([0, 2, 4]) PitchClassSegment([6, 5]) PitchClassSegment([7, 9, 11]) PitchClassSegment([5, 6]) PitchClassSegment([11, 7, 9]) PitchClassSegment([4, 0, 2]) PitchClassSegment([9, 11, 7]) PitchClassSegment([2, 4, 0]) PitchClassSegment([6, 5])
Trivial helianthation:
>>> items = [[1, 2, 3], [4, 5], [6, 7, 8]] >>> sequence = baca.Sequence(items) >>> sequence.helianthate() Sequence([[1, 2, 3], [4, 5], [6, 7, 8]])
- hexagonal_sequence()[source]¶
>>> seq = evans.Sequence([_ for _ in range(8)]).hexagonal_sequence() >>> seq Sequence([0, 1, 6, 15, 28, 45, 66, 91])
-
(
Sequence
).is_decreasing(strict=True)[source]¶ Is true when sequence decreases.
Is true when sequence is strictly decreasing:
>>> abjad.Sequence([5, 4, 3, 2, 1, 0]).is_decreasing(strict=True) True
>>> abjad.Sequence([3, 3, 3, 2, 1, 0]).is_decreasing(strict=True) False
>>> abjad.Sequence([3, 3, 3, 3, 3, 3]).is_decreasing(strict=True) False
>>> abjad.Sequence().is_decreasing(strict=True) True
Is true when sequence decreases monotonically:
>>> abjad.Sequence([5, 4, 3, 2, 1, 0]).is_decreasing(strict=False) True
>>> abjad.Sequence([3, 3, 3, 2, 1, 0]).is_decreasing(strict=False) True
>>> abjad.Sequence([3, 3, 3, 3, 3, 3]).is_decreasing(strict=False) True
>>> abjad.Sequence().is_decreasing(strict=False) True
- Return type
-
(
Sequence
).is_increasing(strict=True)[source]¶ Is true when sequence increases.
Is true when sequence is strictly increasing:
>>> abjad.Sequence([0, 1, 2, 3, 4, 5]).is_increasing(strict=True) True
>>> abjad.Sequence([0, 1, 2, 3, 3, 3]).is_increasing(strict=True) False
>>> abjad.Sequence([3, 3, 3, 3, 3, 3]).is_increasing(strict=True) False
>>> abjad.Sequence().is_increasing(strict=True) True
Is true when sequence increases monotonically:
>>> abjad.Sequence([0, 1, 2, 3, 4, 5]).is_increasing(strict=False) True
>>> abjad.Sequence([0, 1, 2, 3, 3, 3]).is_increasing(strict=False) True
>>> abjad.Sequence([3, 3, 3, 3, 3, 3]).is_increasing(strict=False) True
>>> abjad.Sequence().is_increasing(strict=False) True
- Return type
-
(
Sequence
).is_permutation(length=None)[source]¶ Is true when sequence is a permutation.
Is true when sequence is a permutation:
>>> abjad.Sequence([4, 5, 0, 3, 2, 1]).is_permutation() True
Is false when sequence is not a permutation:
>>> abjad.Sequence([1, 1, 5, 3, 2, 1]).is_permutation() False
- Return type
-
(
Sequence
).is_repetition_free()[source]¶ Is true when sequence is repetition-free.
Is true when sequence is repetition-free:
>>> abjad.Sequence([0, 1, 2, 6, 7, 8]).is_repetition_free() True
Is true when sequence is empty:
>>> abjad.Sequence().is_repetition_free() True
Is false when sequence contains repetitions:
>>> abjad.Sequence([0, 1, 2, 2, 7, 8]).is_repetition_free() False
- Return type
- josephus(k)[source]¶
>>> tone_row = [0, 1, 2, 3, 4] >>> for i in range(16): ... evans.Sequence(tone_row).josephus(i + 2) ... Sequence([[0, 1, 2, 3, 4], [0, 2, 3, 4], [0, 2, 4], [2, 4], [2]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 3, 4], [1, 3, 4], [1, 3], [3]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 4], [0, 1, 4], [0, 1], [0]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 3], [1, 2, 3], [1, 3], [1]]) Sequence([[0, 1, 2, 3, 4], [1, 2, 3, 4], [1, 3, 4], [3, 4], [3]]) Sequence([[0, 1, 2, 3, 4], [0, 2, 3, 4], [0, 2, 3], [2, 3], [3]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 3, 4], [0, 3, 4], [0, 3], [0]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 4], [0, 1, 2], [0, 1], [1]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 2, 3], [0, 3], [3]]) Sequence([[0, 1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 4], [2, 4], [4]]) Sequence([[0, 1, 2, 3, 4], [0, 2, 3, 4], [2, 3, 4], [2, 3], [2]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 3, 4], [0, 1, 4], [0, 1], [1]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 4], [1, 2, 4], [1, 4], [4]]) Sequence([[0, 1, 2, 3, 4], [0, 1, 2, 3], [0, 1, 3], [0, 3], [0]]) Sequence([[0, 1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3], [2, 3], [2]]) Sequence([[0, 1, 2, 3, 4], [0, 2, 3, 4], [0, 3, 4], [0, 3], [3]])
>>> tone_row = [0, 1, 2, 3, 4] >>> for i in range(16): ... evans.Sequence(tone_row).josephus(i + 2).flatten() ... Sequence([0, 1, 2, 3, 4, 0, 2, 3, 4, 0, 2, 4, 2, 4, 2]) Sequence([0, 1, 2, 3, 4, 0, 1, 3, 4, 1, 3, 4, 1, 3, 3]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 4, 0, 1, 4, 0, 1, 0]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 3, 1, 2, 3, 1, 3, 1]) Sequence([0, 1, 2, 3, 4, 1, 2, 3, 4, 1, 3, 4, 3, 4, 3]) Sequence([0, 1, 2, 3, 4, 0, 2, 3, 4, 0, 2, 3, 2, 3, 3]) Sequence([0, 1, 2, 3, 4, 0, 1, 3, 4, 0, 3, 4, 0, 3, 0]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 4, 0, 1, 2, 0, 1, 1]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 3, 0, 2, 3, 0, 3, 3]) Sequence([0, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 4, 2, 4, 4]) Sequence([0, 1, 2, 3, 4, 0, 2, 3, 4, 2, 3, 4, 2, 3, 2]) Sequence([0, 1, 2, 3, 4, 0, 1, 3, 4, 0, 1, 4, 0, 1, 1]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 4, 1, 2, 4, 1, 4, 4]) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 3, 0, 1, 3, 0, 3, 0]) Sequence([0, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 2, 3, 2]) Sequence([0, 1, 2, 3, 4, 0, 2, 3, 4, 0, 3, 4, 0, 3, 3])
- linear_asymmetric_inversion()[source]¶
>>> evans.Sequence([0, 3, 4, 7, 9]).linear_asymmetric_inversion() [-3, 2, 1, 5]
-
(
Sequence
).map(operand=None)[source]¶ Maps
operand
to sequence items.Partitions sequence and sums parts:
>>> sequence = abjad.Sequence(range(1, 10 + 1)) >>> sequence = sequence.partition_by_counts( ... [3], ... cyclic=True, ... ) >>> sequence = sequence.map(sum)
>>> sequence Sequence([6, 15, 24])
Maps identity:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6]) >>> sequence.map() Sequence([1, 2, 3, 4, 5, 6])
- Return type
Sequence
- map_dict(mapping_dict)[source]¶
>>> mapping_dict = { ... "A": 0, ... "B": 1, ... "C": 2, ... "D": 3, ... } >>> evans.Sequence(["A", "C", "B", "D"]).map_dict(mapping_dict) Sequence([0, 2, 1, 3])
- map_indices(index_list)[source]¶
>>> evans.Sequence([2, 3, 4, 5]).map_indices([0, 0, 1, 0, 2, 3, 2]) Sequence([2, 2, 3, 2, 4, 5, 4])
- matrix(padded=False)[source]¶
>>> evans.Sequence([0, [1, 2], 3, [4, 5, 6, 7], [7, 8], 9]).matrix() Sequence([[Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1), Fraction(7, 1), Fraction(8, 1), Fraction(9, 1)], [Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1), Fraction(6, 1), Fraction(7, 1), Fraction(8, 1)], [Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), Fraction(5, 1), Fraction(5, 1), Fraction(6, 1), Fraction(7, 1)], [Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1), Fraction(4, 1), Fraction(5, 1), Fraction(6, 1)], [Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1), Fraction(3, 1), Fraction(4, 1), Fraction(5, 1)], [Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1), Fraction(2, 1), Fraction(3, 1), Fraction(4, 1)], [Fraction(-6, 1), Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1), Fraction(1, 1), Fraction(2, 1), Fraction(3, 1)], [Fraction(-7, 1), Fraction(-6, 1), Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1)], [Fraction(-7, 1), Fraction(-6, 1), Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(0, 1), Fraction(1, 1), Fraction(2, 1)], [Fraction(-8, 1), Fraction(-7, 1), Fraction(-6, 1), Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(-1, 1), Fraction(0, 1), Fraction(1, 1)], [Fraction(-9, 1), Fraction(-8, 1), Fraction(-7, 1), Fraction(-6, 1), Fraction(-5, 1), Fraction(-4, 1), Fraction(-3, 1), Fraction(-2, 1), Fraction(-2, 1), Fraction(-1, 1), Fraction(0, 1)]])
>>> evans.Sequence([0, [1, 2], 3, [4, 5, 6, 7], [7, 8], 9]).matrix(padded=True) Sequence([[0, None, None, None], [1, 2, None, None], [3, None, None, None], [4, 5, 6, 7], [7, 8, None, None], [9, None, None, None]])
- mirror(sequential_duplicates)[source]¶
>>> print( ... evans.Sequence([0, 1, 2, 3]).mirror( ... sequential_duplicates=True, ... ) ... ) Sequence([0, 1, 2, 3, 3, 2, 1, 0])
>>> print( ... evans.Sequence([0, 1, 2, 3]).mirror( ... sequential_duplicates=False, ... ) ... ) Sequence([0, 1, 2, 3, 2, 1])
- mod(modulus, indices=False)[source]¶
>>> evans.Sequence([7, 8, 9, 10]).mod(7) Sequence([7, 1, 2, 3])
>>> evans.Sequence([7, 8, 9, 10]).mod(7, indices=True) Sequence([0, 1, 2, 3])
- multiply(x)[source]¶
>>> evans.Sequence([7, 8, 9, 10]).multiply(7) Sequence([49, 56, 63, 70])
>>> evans.Sequence([7, 8, 9, 10]).multiply((12 / 10)) Sequence([8.4, 9.6, 10.799999999999999, 12.0])
- multiply_sequences(seq)[source]¶
>>> evans.Sequence([0, 1, 2, 3]).multiply_sequences([4, 5, 6, 7, 8]) Sequence([0, 5, 12, 21])
>>> evans.Sequence([0, 1, 2, 3, 4]).multiply_sequences([5, 6, 7, 8]) Sequence([0, 6, 14, 24, 20])
- normalize_to_indices()[source]¶
>>> evans.Sequence([1, 0.24, -12, [-4, 0.7], -0.5]).normalize_to_indices() Sequence([4, 1, -50, Sequence([-5, 1]), -2])
- normalize_to_sum(desired_sum=1)[source]¶
>>> weights = [15, 6, 14, 4, 16, 6, 14, 4, 16, 5] >>> evans.Sequence(weights).normalize_to_sum(1) Sequence([0.15, 0.06, 0.14, 0.04, 0.16, 0.06, 0.14, 0.04, 0.16, 0.05])
-
(
Sequence
).nwise(n=2, cyclic=False, wrapped=False)[source]¶ Iterates sequence
n
at a time.Iterates iterable by pairs:
>>> sequence = abjad.Sequence(range(10)) >>> for item in sequence.nwise(): ... item ... Sequence([0, 1]) Sequence([1, 2]) Sequence([2, 3]) Sequence([3, 4]) Sequence([4, 5]) Sequence([5, 6]) Sequence([6, 7]) Sequence([7, 8]) Sequence([8, 9])
Iterates iterable by triples:
>>> sequence = abjad.Sequence(range(10)) >>> for item in sequence.nwise(n=3): ... item ... Sequence([0, 1, 2]) Sequence([1, 2, 3]) Sequence([2, 3, 4]) Sequence([3, 4, 5]) Sequence([4, 5, 6]) Sequence([5, 6, 7]) Sequence([6, 7, 8]) Sequence([7, 8, 9])
Iterates iterable by pairs. Wraps around at end:
>>> sequence = abjad.Sequence(range(10)) >>> for item in sequence.nwise(n=2, wrapped=True): ... item ... Sequence([0, 1]) Sequence([1, 2]) Sequence([2, 3]) Sequence([3, 4]) Sequence([4, 5]) Sequence([5, 6]) Sequence([6, 7]) Sequence([7, 8]) Sequence([8, 9]) Sequence([9, 0])
Iterates iterable by triples. Wraps around at end:
>>> sequence = abjad.Sequence(range(10)) >>> for item in sequence.nwise(n=3, wrapped=True): ... item ... Sequence([0, 1, 2]) Sequence([1, 2, 3]) Sequence([2, 3, 4]) Sequence([3, 4, 5]) Sequence([4, 5, 6]) Sequence([5, 6, 7]) Sequence([6, 7, 8]) Sequence([7, 8, 9]) Sequence([8, 9, 0]) Sequence([9, 0, 1])
Iterates iterable by pairs. Cycles indefinitely:
>>> sequence = abjad.Sequence(range(10)) >>> pairs = sequence.nwise(n=2, cyclic=True) >>> for _ in range(15): ... next(pairs) ... Sequence([0, 1]) Sequence([1, 2]) Sequence([2, 3]) Sequence([3, 4]) Sequence([4, 5]) Sequence([5, 6]) Sequence([6, 7]) Sequence([7, 8]) Sequence([8, 9]) Sequence([9, 0]) Sequence([0, 1]) Sequence([1, 2]) Sequence([2, 3]) Sequence([3, 4]) Sequence([4, 5])
Returns infinite generator.
Iterates iterable by triples. Cycles indefinitely:
>>> sequence = abjad.Sequence(range(10)) >>> triples = sequence.nwise(n=3, cyclic=True) >>> for _ in range(15): ... next(triples) ... Sequence([0, 1, 2]) Sequence([1, 2, 3]) Sequence([2, 3, 4]) Sequence([3, 4, 5]) Sequence([4, 5, 6]) Sequence([5, 6, 7]) Sequence([6, 7, 8]) Sequence([7, 8, 9]) Sequence([8, 9, 0]) Sequence([9, 0, 1]) Sequence([0, 1, 2]) Sequence([1, 2, 3]) Sequence([2, 3, 4]) Sequence([3, 4, 5]) Sequence([4, 5, 6])
Returns infinite generator.
Iterates items one at a time:
>>> sequence = abjad.Sequence(range(10)) >>> for item in sequence.nwise(n=1): ... item ... Sequence([0]) Sequence([1]) Sequence([2]) Sequence([3]) Sequence([4]) Sequence([5]) Sequence([6]) Sequence([7]) Sequence([8]) Sequence([9])
Ignores
wrapped
whencyclic
is true.- Return type
-
(
Sequence
).partition(counts=None)[source]¶ Partitions sequence cyclically by
counts
with overhang.>>> sequence = baca.Sequence(range(16)) >>> parts = sequence.partition([3])
>>> for part in parts: ... part ... Sequence([0, 1, 2]) Sequence([3, 4, 5]) Sequence([6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14]) Sequence([15])
Returns new sequence.
-
(
Sequence
).partition_by_counts(counts, cyclic=False, enchain=False, overhang=False, reversed_=False)[source]¶ Partitions sequence by
counts
.Partitions sequence once by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> sequence = sequence.partition_by_counts( ... [3], ... cyclic=False, ... overhang=False, ... )
>>> sequence Sequence([Sequence([0, 1, 2])])
>>> for part in sequence: ... part ... Sequence([0, 1, 2])
Partitions sequence once by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=False, ... overhang=False, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3]) Sequence([4, 5, 6])
Partitions sequence cyclically by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=True, ... overhang=False, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2]) Sequence([3, 4, 5]) Sequence([6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14])
Partitions sequence cyclically by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=True, ... overhang=False, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3]) Sequence([4, 5, 6]) Sequence([7, 8, 9, 10]) Sequence([11, 12, 13])
Partitions sequence once by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=False, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2]) Sequence([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
Partitions sequence once by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=False, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3]) Sequence([4, 5, 6]) Sequence([7, 8, 9, 10, 11, 12, 13, 14, 15])
Partitions sequence cyclically by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=True, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2]) Sequence([3, 4, 5]) Sequence([6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14]) Sequence([15])
Partitions sequence cyclically by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=True, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3]) Sequence([4, 5, 6]) Sequence([7, 8, 9, 10]) Sequence([11, 12, 13]) Sequence([14, 15])
Reverse-partitions sequence once by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=False, ... overhang=False, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([13, 14, 15])
Reverse-partitions sequence once by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=False, ... overhang=False, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([9, 10, 11]) Sequence([12, 13, 14, 15])
Reverse-partitions sequence cyclically by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=True, ... overhang=False, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([1, 2, 3]) Sequence([4, 5, 6]) Sequence([7, 8, 9]) Sequence([10, 11, 12]) Sequence([13, 14, 15])
Reverse-partitions sequence cyclically by counts without overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=True, ... overhang=False, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([2, 3, 4]) Sequence([5, 6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14, 15])
Reverse-partitions sequence once by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=False, ... overhang=True, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) Sequence([13, 14, 15])
Reverse-partitions sequence once by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=False, ... overhang=True, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14, 15])
Reverse-partitions sequence cyclically by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=True, ... overhang=True, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([0]) Sequence([1, 2, 3]) Sequence([4, 5, 6]) Sequence([7, 8, 9]) Sequence([10, 11, 12]) Sequence([13, 14, 15])
Reverse-partitions sequence cyclically by counts with overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [4, 3], ... cyclic=True, ... overhang=True, ... reversed_=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1]) Sequence([2, 3, 4]) Sequence([5, 6, 7, 8]) Sequence([9, 10, 11]) Sequence([12, 13, 14, 15])
Partitions sequence once by counts and asserts that sequence partitions exactly (with no overhang):
>>> sequence = abjad.Sequence(range(10)) >>> parts = sequence.partition_by_counts( ... [2, 3, 5], ... cyclic=False, ... overhang=abjad.Exact, ... )
>>> for part in parts: ... part ... Sequence([0, 1]) Sequence([2, 3, 4]) Sequence([5, 6, 7, 8, 9])
Partitions sequence cyclically by counts and asserts that sequence partitions exactly Exact partitioning means partitioning with no overhang:
>>> sequence = abjad.Sequence(range(10)) >>> parts = sequence.partition_by_counts( ... [2], ... cyclic=True, ... overhang=abjad.Exact, ... )
>>> for part in parts: ... part ... Sequence([0, 1]) Sequence([2, 3]) Sequence([4, 5]) Sequence([6, 7]) Sequence([8, 9])
Partitions string:
>>> sequence = abjad.Sequence("some text") >>> parts = sequence.partition_by_counts( ... [3], ... cyclic=False, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence(['s', 'o', 'm']) Sequence(['e', ' ', 't', 'e', 'x', 't'])
Partitions sequence cyclically into enchained parts by counts; truncates overhang:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [2, 6], ... cyclic=True, ... enchain=True, ... overhang=False, ... )
>>> for part in parts: ... part ... Sequence([0, 1]) Sequence([1, 2, 3, 4, 5, 6]) Sequence([6, 7]) Sequence([7, 8, 9, 10, 11, 12]) Sequence([12, 13])
Partitions sequence cyclically into enchained parts by counts; returns overhang at end:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [2, 6], ... cyclic=True, ... enchain=True, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1]) Sequence([1, 2, 3, 4, 5, 6]) Sequence([6, 7]) Sequence([7, 8, 9, 10, 11, 12]) Sequence([12, 13]) Sequence([13, 14, 15])
REGRESSION: partitions sequence cyclically into enchained parts by counts; does not return false 1-element part at end:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts( ... [5], ... cyclic=True, ... enchain=True, ... overhang=True, ... )
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3, 4]) Sequence([4, 5, 6, 7, 8]) Sequence([8, 9, 10, 11, 12]) Sequence([12, 13, 14, 15])
Edge case: empty counts nests sequence and ignores keywords:
>>> sequence = abjad.Sequence(range(16)) >>> parts = sequence.partition_by_counts([])
>>> for part in parts: ... part ... Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15])
Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).partition_by_ratio_of_lengths(ratio)[source]¶ Partitions sequence by
ratio
of lengths.Partitions sequence by
1:1:1
ratio:>>> numbers = abjad.Sequence(range(10)) >>> ratio = abjad.Ratio((1, 1, 1))
>>> for part in numbers.partition_by_ratio_of_lengths(ratio): ... part ... Sequence([0, 1, 2]) Sequence([3, 4, 5, 6]) Sequence([7, 8, 9])
Partitions sequence by
1:1:2
ratio:>>> numbers = abjad.Sequence(range(10)) >>> ratio = abjad.Ratio((1, 1, 2))
>>> for part in numbers.partition_by_ratio_of_lengths(ratio): ... part ... Sequence([0, 1, 2]) Sequence([3, 4]) Sequence([5, 6, 7, 8, 9])
Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).partition_by_ratio_of_weights(weights)[source]¶ Partitions sequence by ratio of
weights
.>>> ratio = abjad.Ratio([1, 1, 1]) >>> sequence = abjad.Sequence(10 * [1]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1]) Sequence([1, 1, 1, 1]) Sequence([1, 1, 1])
>>> ratio = abjad.Ratio([1, 1, 1, 1]) >>> sequence = abjad.Sequence(10 * [1]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1]) Sequence([1, 1]) Sequence([1, 1, 1]) Sequence([1, 1])
>>> ratio = abjad.Ratio([2, 2, 3]) >>> sequence = abjad.Sequence(10 * [1]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1]) Sequence([1, 1, 1]) Sequence([1, 1, 1, 1])
>>> ratio = abjad.Ratio([3, 2, 2]) >>> sequence = abjad.Sequence(10 * [1]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1, 1]) Sequence([1, 1, 1]) Sequence([1, 1, 1])
>>> ratio = abjad.Ratio([1, 1]) >>> items = [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2] >>> sequence = abjad.Sequence(items) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1, 1, 1, 1, 2, 2]) Sequence([2, 2, 2, 2])
>>> ratio = abjad.Ratio([1, 1, 1]) >>> items = [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2] >>> sequence = abjad.Sequence(items) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([1, 1, 1, 1, 1, 1]) Sequence([2, 2, 2]) Sequence([2, 2, 2])
>>> ratio = abjad.Ratio([1, 1, 1]) >>> sequence = abjad.Sequence([5, 5]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([5]) Sequence([5]) Sequence([])
>>> ratio = abjad.Ratio([1, 1, 1, 1]) >>> sequence = abjad.Sequence([5, 5]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([5]) Sequence([]) Sequence([5]) Sequence([])
>>> ratio = abjad.Ratio([2, 2, 3]) >>> sequence = abjad.Sequence([5, 5]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([5]) Sequence([5]) Sequence([])
>>> ratio = abjad.Ratio([3, 2, 2]) >>> sequence = abjad.Sequence([5, 5]) >>> sequence = sequence.partition_by_ratio_of_weights(ratio) >>> for item in sequence: ... item ... Sequence([5]) Sequence([5]) Sequence([])
Rounded weight-proportions of sequences returned equal to rounded
weights
.Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).partition_by_weights(weights, cyclic=False, overhang=False, allow_part_weights=Exact)[source]¶ Partitions sequence by
weights
exactly.>>> sequence = abjad.Sequence([3, 3, 3, 3, 4, 4, 4, 4, 5])
Partitions sequence once by weights with overhang:
>>> for item in sequence.partition_by_weights( ... [3, 9], ... cyclic=False, ... overhang=False, ... ): ... item ... Sequence([3]) Sequence([3, 3, 3])
Partitions sequence once by weights. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [3, 9], ... cyclic=False, ... overhang=True, ... ): ... item ... Sequence([3]) Sequence([3, 3, 3]) Sequence([4, 4, 4, 4, 5])
Partitions sequence cyclically by weights:
>>> for item in sequence.partition_by_weights( ... [12], ... cyclic=True, ... overhang=False, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4, 4, 4])
Partitions sequence cyclically by weights. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [12], ... cyclic=True, ... overhang=True, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4, 4, 4]) Sequence([4, 5])
>>> sequence = abjad.Sequence([3, 3, 3, 3, 4, 4, 4, 4, 5, 5])
Partitions sequence once by weights. Allows part weights to be just less than specified:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=False, ... overhang=False, ... allow_part_weights=abjad.Less, ... ): ... item ... Sequence([3, 3, 3]) Sequence([3])
Partitions sequence once by weights. Allows part weights to be just less than specified. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=False, ... overhang=True, ... allow_part_weights=abjad.Less, ... ): ... item ... Sequence([3, 3, 3]) Sequence([3]) Sequence([4, 4, 4, 4, 5, 5])
Partitions sequence cyclically by weights. Allows part weights to be just less than specified:
>>> for item in sequence.partition_by_weights( ... [10, 5], ... cyclic=True, ... overhang=False, ... allow_part_weights=abjad.Less, ... ): ... item ... Sequence([3, 3, 3]) Sequence([3]) Sequence([4, 4]) Sequence([4]) Sequence([4, 5]) Sequence([5])
Partitions sequence cyclically by weights. Allows part weights to be just less than specified. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [10, 5], ... cyclic=True, ... overhang=True, ... allow_part_weights=abjad.Less, ... ): ... item ... Sequence([3, 3, 3]) Sequence([3]) Sequence([4, 4]) Sequence([4]) Sequence([4, 5]) Sequence([5])
>>> sequence = abjad.Sequence([3, 3, 3, 3, 4, 4, 4, 4, 5, 5])
Partitions sequence once by weights. Allow part weights to be just more than specified:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=False, ... overhang=False, ... allow_part_weights=abjad.More, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4])
Partitions sequence once by weights. Allows part weights to be just more than specified. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=False, ... overhang=True, ... allow_part_weights=abjad.More, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4]) Sequence([4, 4, 4, 5, 5])
Partitions sequence cyclically by weights. Allows part weights to be just more than specified:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=True, ... overhang=False, ... allow_part_weights=abjad.More, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4]) Sequence([4, 4, 4]) Sequence([5])
Partitions sequence cyclically by weights. Allows part weights to be just more than specified. Allows overhang:
>>> for item in sequence.partition_by_weights( ... [10, 4], ... cyclic=True, ... overhang=True, ... allow_part_weights=abjad.More, ... ): ... item ... Sequence([3, 3, 3, 3]) Sequence([4]) Sequence([4, 4, 4]) Sequence([5]) Sequence([5])
Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).period_of_rotation()[source]¶ Gets period of rotation.
>>> baca.Sequence([1, 2, 3, 4, 5, 6]).period_of_rotation() 6
>>> baca.Sequence([1, 2, 3, 1, 2, 3]).period_of_rotation() 3
>>> baca.Sequence([1, 2, 1, 2, 1, 2]).period_of_rotation() 2
>>> baca.Sequence([1, 1, 1, 1, 1, 1]).period_of_rotation() 1
>>> baca.Sequence().period_of_rotation() 0
Defined equal to length of sequence divided by degree of rotational symmetry of sequence.
Returns positive integer.
- permutations()[source]¶
>>> evans.Sequence([0, 1, 2]).permutations() Sequence([[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]])
>>> evans.Sequence([0, [1, 2], 3]).permutations() Sequence([[0, [1, 2], 3], [0, 3, [1, 2]], [[1, 2], 0, 3], [[1, 2], 3, 0], [3, 0, [1, 2]], [3, [1, 2], 0]])
-
(
Sequence
).permute(permutation)[source]¶ Permutes sequence by
permutation
.>>> sequence = abjad.Sequence([10, 11, 12, 13, 14, 15]) >>> sequence.permute([5, 4, 0, 1, 2, 3]) Sequence([15, 14, 10, 11, 12, 13])
>>> sequence = abjad.Sequence([11, 12, 13, 14]) >>> sequence.permute([1, 0, 3, 2]) Sequence([12, 11, 14, 13])
Raises exception when lengths do not match:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6]) >>> sequence.permute([3, 0, 1, 2]) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/Users/evansdsg2/abjad/abjad/sequence.py", line 2081, in permute raise ValueError(message) ValueError: permutation Sequence([3, 0, 1, 2]) must match length of Sequence([1, 2, 3, 4, 5, 6]).
- Return type
Sequence
- pitch_warp(warp_values=(0.5, - 0.5), *, boolean_vector=1)[source]¶
>>> evans.Sequence([0, 1, 2, 3, 4]).pitch_warp( ... [0.5, -0.5], boolean_vector=[0, 1, 1] ... ) Sequence([0, 1.5, 1.5, 3, 4.5])
- potamia(columns=False, retrograde=False)[source]¶
>>> s = evans.Sequence([0, 1, [2, 3, 4], 5, [6, 7]]).matrix(padded=True) >>> s = s.potamia() >>> s.flatten().remove_none() Sequence([0, 1, 2, 3, 4, 5, 6, 7])
>>> s = evans.Sequence([0, 1, [2, 3, 4], 5, [6, 7]]).matrix(padded=True) >>> s = s.potamia(columns=True) >>> s.flatten().remove_none() Sequence([0, 1, 2, 5, 6, 7, 3, 4])
>>> s = evans.Sequence([0, 1, [2, 3, 4], 5, [6, 7]]).matrix(padded=True) >>> s = s.potamia(retrograde=True) >>> s.flatten().remove_none() Sequence([0, 1, 4, 3, 2, 5, 7, 6])
>>> s = evans.Sequence([0, 1, [2, 3, 4], 5, [6, 7]]).matrix(padded=True) >>> s = s.potamia(columns=True, retrograde=True) >>> s.flatten().remove_none() Sequence([6, 5, 2, 1, 0, 3, 7, 4])
- prism_sequence()[source]¶
>>> evans.Sequence([_ for _ in range(8)]).prism_sequence() Sequence([1, 14, 57, 148, 305, 546, 889, 1352])
-
(
Sequence
).quarters(*, compound=None, remainder=None)[source]¶ Splits sequence into quarter-note durations.
>>> list_ = baca.fractions([(2, 4), (6, 4)]) >>> for item in baca.Sequence(list_).quarters(): ... item ... Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)]) Sequence([NonreducedFraction(1, 4)])
>>> list_ = baca.fractions([(6, 4)]) >>> for item in baca.Sequence(list_).quarters(compound=(3, 2)): ... item ... Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(3, 8)])
Maps to each division: splits by
1/4
with remainder on right:>>> divisions = baca.fractions([(7, 8), (3, 8), (5, 8)]) >>> divisions = baca.Sequence(divisions).map(lambda _: baca.Sequence(_).quarters()) >>> for sequence in divisions: ... print("sequence:") ... for division in sequence: ... print(f"\t{repr(division)}") ... sequence: Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(1, 8)]) sequence: Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(1, 8)]) sequence: Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(1, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
- random_walk(length, step_list, random_seed=1)[source]¶
>>> evans.Sequence([_ for _ in range(10)]).random_walk( ... length=5, ... step_list=[1, 2, 1], ... random_seed=1, ... ) Sequence([0, 9, 0, 2, 1, 0])
-
(
Sequence
).ratios(ratios, *, rounded=None)[source]¶ Splits sequence by
ratios
.Splits sequence by exact
2:1
ratio:>>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = baca.Sequence(time_signatures) >>> divisions = divisions.ratios([(2, 1)]) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(5, 8) NonreducedFraction(7, 24) sequence: NonreducedFraction(11, 24)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits divisions by rounded
2:1
ratio:>>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = baca.Sequence(time_signatures) >>> divisions = divisions.ratios([(2, 1)], rounded=True) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(5, 8) NonreducedFraction(2, 8) sequence: NonreducedFraction(4, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division by exact
2:1
ratio:>>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = baca.Sequence(time_signatures).map( ... lambda _: baca.Sequence(_).ratios([(2, 1)]) ... ) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: Sequence([NonreducedFraction(10, 24)]) Sequence([NonreducedFraction(5, 24)]) sequence: Sequence([NonreducedFraction(4, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division by rounded
2:1
ratio:>>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = baca.Sequence(time_signatures).map( ... lambda _: baca.Sequence(_).ratios([(2, 1)], rounded=True) ... ) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(2, 8)]) sequence: Sequence([NonreducedFraction(4, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits divisions with alternating exact
2:1
and1:1:1
ratios:>>> ratios = abjad.CyclicTuple([(2, 1), (1, 1, 1)]) >>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = [] >>> for i, time_signature in enumerate(time_signatures): ... ratio = ratios[i] ... sequence = baca.Sequence(time_signature) ... sequence = sequence.ratios([ratio]) ... divisions.append(sequence) ... >>> divisions = baca.Sequence(divisions) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: Sequence([NonreducedFraction(10, 24)]) Sequence([NonreducedFraction(5, 24)]) sequence: Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits divisions with alternating rounded
2:1
and1:1:1
ratios:>>> ratios = abjad.CyclicTuple([(2, 1), (1, 1, 1)]) >>> time_signatures = baca.fractions([(5, 8), (6, 8)]) >>> divisions = [] >>> for i, time_signature in enumerate(time_signatures): ... ratio = ratios[i] ... sequence = baca.Sequence(time_signature) ... sequence = sequence.ratios([ratio], rounded=True) ... divisions.append(sequence) ... >>> divisions = baca.Sequence(divisions) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(2, 8)]) sequence: Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
- recaman_sequence()[source]¶
>>> evans.Sequence([_ + 1 for _ in range(10)]).recaman_sequence() Sequence([1, 3, 6, 2, 7, 1, 8, 16, 7, 17])
-
(
Sequence
).remove(indices=None, period=None)[source]¶ Removes items at
indices
.>>> sequence = abjad.Sequence(range(15))
>>> sequence.remove() Sequence([])
>>> sequence.remove(indices=[2, 3]) Sequence([0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
Removes elements and indices -2 and -3:
>>> sequence.remove(indices=[-2, -3]) Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14])
>>> sequence.remove(indices=[2, 3], period=4) Sequence([0, 1, 4, 5, 8, 9, 12, 13])
>>> sequence.remove(indices=[-2, -3], period=4) Sequence([2, 3, 6, 7, 10, 11, 14])
>>> sequence.remove(indices=[]) Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
>>> sequence.remove(indices=[97, 98, 99]) Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
Removes no elements:
>>> sequence.remove(indices=[-97, -98, -99]) Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
- Return type
Sequence
- remove_none()[source]¶
>>> evans.Sequence([0, 1, 2, None, 3, None, 4, 5, None, None]).remove_none() Sequence([0, 1, 2, 3, 4, 5])
-
(
Sequence
).repeat(n=1)[source]¶ Repeats sequence.
>>> abjad.Sequence([1, 2, 3]).repeat(n=0) Sequence([])
>>> abjad.Sequence([1, 2, 3]).repeat(n=1) Sequence([Sequence([1, 2, 3])])
>>> abjad.Sequence([1, 2, 3]).repeat(n=2) Sequence([Sequence([1, 2, 3]), Sequence([1, 2, 3])])
Returns nested sequence.
- Return type
Sequence
-
(
Sequence
).repeat_by(counts=None, cyclic=None)[source]¶ Repeat sequence elements at
counts
.With no counts:
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).repeat_by() Sequence([[1, 2, 3], 4, [5, 6]])
With acyclic counts:
>>> sequence = baca.Sequence([[1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([0]) Sequence([4, [5, 6]])
>>> sequence.repeat_by([1]) Sequence([[1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([2]) Sequence([[1, 2, 3], [1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([3]) Sequence([[1, 2, 3], [1, 2, 3], [1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([1, 0]) Sequence([[1, 2, 3], [5, 6]])
>>> sequence.repeat_by([1, 1]) Sequence([[1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([1, 2]) Sequence([[1, 2, 3], 4, 4, [5, 6]])
>>> sequence.repeat_by([1, 3]) Sequence([[1, 2, 3], 4, 4, 4, [5, 6]])
>>> sequence.repeat_by([1, 1, 0]) Sequence([[1, 2, 3], 4])
>>> sequence.repeat_by([1, 1, 1]) Sequence([[1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([1, 1, 2]) Sequence([[1, 2, 3], 4, [5, 6], [5, 6]])
>>> sequence.repeat_by([1, 1, 3]) Sequence([[1, 2, 3], 4, [5, 6], [5, 6], [5, 6]])
With cyclic counts:
>>> sequence.repeat_by([0], cyclic=True) Sequence([])
>>> sequence.repeat_by([1], cyclic=True) Sequence([[1, 2, 3], 4, [5, 6]])
>>> sequence.repeat_by([2], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], 4, 4, [5, 6], [5, 6]])
>>> sequence.repeat_by([3], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], [1, 2, 3], 4, 4, 4, [5, 6], [5, 6], [5, 6]])
>>> sequence.repeat_by([2, 0], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], [5, 6], [5, 6]])
>>> sequence.repeat_by([2, 1], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], 4, [5, 6], [5, 6]])
>>> sequence.repeat_by([2, 2], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], 4, 4, [5, 6], [5, 6]])
>>> sequence.repeat_by([2, 3], cyclic=True) Sequence([[1, 2, 3], [1, 2, 3], 4, 4, 4, [5, 6], [5, 6]])
Raises exception on negative counts.
Returns new sequence.
-
(
Sequence
).repeat_to_length(length=None, start=0)[source]¶ Repeats sequence to
length
.Repeats list to length 11:
>>> abjad.Sequence(range(5)).repeat_to_length(11) Sequence([0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0])
>>> abjad.Sequence(range(5)).repeat_to_length(11, start=2) Sequence([2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2])
>>> sequence = abjad.Sequence([0, -1, -2, -3, -4]) >>> sequence.repeat_to_length(11) Sequence([0, -1, -2, -3, -4, 0, -1, -2, -3, -4, 0])
>>> sequence.repeat_to_length(0) Sequence([])
>>> abjad.Sequence([1, 2, 3]).repeat_to_length(10, start=100) Sequence([2, 3, 1, 2, 3, 1, 2, 3, 1, 2])
- Return type
Sequence
-
(
Sequence
).repeat_to_weight(weight, allow_total=Exact)[source]¶ Repeats sequence to
weight
.Repeats sequence to weight of 23 exactly:
>>> abjad.Sequence([5, -5, -5]).repeat_to_weight(23) Sequence([5, -5, -5, 5, -3])
Repeats sequence to weight of 23 more:
>>> sequence = abjad.Sequence([5, -5, -5]) >>> sequence.repeat_to_weight(23, allow_total=abjad.More) Sequence([5, -5, -5, 5, -5])
Repeats sequence to weight of 23 or less:
>>> sequence = abjad.Sequence([5, -5, -5]) >>> sequence.repeat_to_weight(23, allow_total=abjad.Less) Sequence([5, -5, -5, 5])
>>> items = [abjad.NonreducedFraction(3, 16)] >>> sequence = abjad.Sequence(items) >>> weight = abjad.NonreducedFraction(5, 4) >>> sequence = sequence.repeat_to_weight(weight) >>> sum(sequence) NonreducedFraction(20, 16)
>>> [_.pair for _ in sequence] [(3, 16), (3, 16), (3, 16), (3, 16), (3, 16), (3, 16), (2, 16)]
- Return type
Sequence
-
(
Sequence
).replace_at(indices, new_material)[source]¶ Replaces items at
indices
withnew_material
.Replaces items at indices 0, 2, 4, 6:
>>> sequence = abjad.Sequence(range(16)) >>> sequence.replace_at( ... ([0], 2), ... (["A", "B", "C", "D"], None), ... ) Sequence(['A', 1, 'B', 3, 'C', 5, 'D', 7, 8, 9, 10, 11, 12, 13, 14, 15])
Replaces elements at indices 0, 1, 8, 13:
>>> sequence = abjad.Sequence(range(16)) >>> sequence.replace_at( ... ([0, 1, 8, 13], None), ... (["A", "B", "C", "D"], None), ... ) Sequence(['A', 'B', 2, 3, 4, 5, 6, 7, 'C', 9, 10, 11, 12, 'D', 14, 15])
Replaces every item at even index:
>>> sequence = abjad.Sequence(range(16)) >>> sequence.replace_at( ... ([0], 2), ... (["*"], 1), ... ) Sequence(['*', 1, '*', 3, '*', 5, '*', 7, '*', 9, '*', 11, '*', 13, '*', 15])
Replaces every element at an index congruent to 0 (mod 6) with
'A'
; replaces every element at an index congruent to 2 (mod 6) with'B'
:>>> sequence = abjad.Sequence(range(16)) >>> sequence.replace_at( ... ([0], 2), ... (["A", "B"], 3), ... ) Sequence(['A', 1, 'B', 3, 4, 5, 'A', 7, 'B', 9, 10, 11, 'A', 13, 'B', 15])
- Return type
Sequence
- reproportion_by_base(base, round=None)[source]¶
>>> rounder = evans.to_nearest_eighth_tone >>> print( ... evans.Sequence( ... [-24, -20, -15, -14, -4, 5, 11, 19, 26, 37, 39, 42] ... ).reproportion_by_base( ... base=2, ... round=rounder, ... ) ... ) Sequence([-4.75, -4, -3, -2.75, -0.75, 1, 2.25, 3.75, 5.25, 7.5, 7.75, 8.5])
-
(
Sequence
).retain(indices=None, period=None)[source]¶ Retains items at
indices
.>>> sequence = abjad.Sequence(range(10)) >>> sequence.retain() Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> sequence.retain(indices=[2, 3]) Sequence([2, 3])
>>> sequence.retain(indices=[-2, -3]) Sequence([7, 8])
>>> sequence.retain(indices=[2, 3], period=4) Sequence([2, 3, 6, 7])
>>> sequence.retain(indices=[-2, -3], period=4) Sequence([0, 3, 4, 7, 8])
>>> sequence.retain(indices=[]) Sequence([])
>>> sequence.retain(indices=[97, 98, 99]) Sequence([])
>>> sequence.retain(indices=[-97, -98, -99]) Sequence([])
- Return type
Sequence
-
(
Sequence
).retain_pattern(pattern)[source]¶ Retains items at indices matching
pattern
.>>> sequence = abjad.Sequence(range(10)) >>> sequence.retain_pattern(abjad.index_all()) Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> sequence.retain_pattern(abjad.index([2, 3])) Sequence([2, 3])
>>> sequence.retain_pattern(abjad.index([-2, -3])) Sequence([7, 8])
>>> sequence.retain_pattern(abjad.index([2, 3], 4)) Sequence([2, 3, 6, 7])
>>> sequence.retain_pattern(abjad.index([-2, -3], 4)) Sequence([0, 3, 4, 7, 8])
>>> sequence.retain_pattern(abjad.index([97, 98, 99])) Sequence([])
>>> sequence.retain_pattern(abjad.index([-97, -98, -99])) Sequence([])
- Return type
Sequence
-
(
Sequence
).reveal(count=None)[source]¶ Reveals contents of sequence.
With no count:
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal() Sequence([[1, 2, 3], 4, [5, 6]])
With zero count:
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=0) Sequence([])
With positive count:
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=1) Sequence([[1]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=2) Sequence([[1, 2]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=3) Sequence([[1, 2, 3]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=4) Sequence([[1, 2, 3], 4])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=5) Sequence([[1, 2, 3], 4, [5]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=6) Sequence([[1, 2, 3], 4, [5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=99) Sequence([[1, 2, 3], 4, [5, 6]])
With negative count:
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-1) Sequence([[6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-2) Sequence([[5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-3) Sequence([4, [5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-4) Sequence([[3], 4, [5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-5) Sequence([[2, 3], 4, [5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-6) Sequence([[1, 2, 3], 4, [5, 6]])
>>> baca.Sequence([[1, 2, 3], 4, [5, 6]]).reveal(count=-99) Sequence([[1, 2, 3], 4, [5, 6]])
Returns new sequence.
-
(
Sequence
).reverse(recurse=False)[source]¶ Reverses sequence.
Reverses sequence:
>>> sequence = abjad.Sequence([[1, 2], 3, [4, 5]])
>>> sequence.reverse() Sequence([[4, 5], 3, [1, 2]])
Reverses recursively:
>>> segment_1 = abjad.PitchClassSegment([1, 2]) >>> pitch = abjad.NumberedPitch(3) >>> segment_2 = abjad.PitchClassSegment([4, 5]) >>> sequence = abjad.Sequence([segment_1, pitch, segment_2])
>>> for item in sequence.reverse(recurse=True): ... item ... PitchClassSegment([5, 4]) NumberedPitch(3) PitchClassSegment([2, 1])
- Return type
Sequence
-
(
Sequence
).split(weights, cyclic=False, overhang=False)[source]¶ Splits sequence by
weights
.Splits sequence cyclically by weights with overhang:
>>> sequence = abjad.Sequence([10, -10, 10, -10])
>>> for part in sequence.split( ... (3, 15, 3), ... cyclic=True, ... overhang=True, ... ): ... part ... Sequence([3]) Sequence([7, -8]) Sequence([-2, 1]) Sequence([3]) Sequence([6, -9]) Sequence([-1])
Splits sequence once by weights with overhang:
>>> for part in sequence.split( ... (3, 15, 3), ... cyclic=False, ... overhang=True, ... ): ... part ... Sequence([3]) Sequence([7, -8]) Sequence([-2, 1]) Sequence([9, -10])
Splits sequence once by weights without overhang:
>>> for part in sequence.split( ... (3, 15, 3), ... cyclic=False, ... overhang=False, ... ): ... part ... Sequence([3]) Sequence([7, -8]) Sequence([-2, 1])
REGRESSION. Splits sequence of nonreduced fractions cyclically by weights with overhang:
>>> sequence = abjad.Sequence( ... [ ... abjad.NonreducedFraction(20, 2), ... abjad.NonreducedFraction(-20, 2), ... abjad.NonreducedFraction(20, 2), ... abjad.NonreducedFraction(-20, 2), ... ] ... )
>>> for part in sequence.split( ... (3, 15, 3), ... cyclic=True, ... overhang=True, ... ): ... part ... Sequence([NonreducedFraction(6, 2)]) Sequence([NonreducedFraction(14, 2), NonreducedFraction(-16, 2)]) Sequence([NonreducedFraction(-4, 2), NonreducedFraction(2, 2)]) Sequence([NonreducedFraction(6, 2)]) Sequence([NonreducedFraction(12, 2), NonreducedFraction(-18, 2)]) Sequence([NonreducedFraction(-2, 2)])
- Return type
Sequence
-
(
Sequence
).split_divisions(durations, *, compound=None, cyclic=None, remainder=None, remainder_fuse_threshold=None)[source]¶ Splits sequence divisions by
durations
.Splits every five sixteenths:
>>> divisions = baca.fractions(10 * [(1, 8)]) >>> divisions = baca.Sequence(divisions) >>> divisions = divisions.split_divisions([(5, 16)], cyclic=True) >>> for i, sequence_ in enumerate(divisions): ... print(f"sequence {i}") ... for division in sequence_: ... print("\t" + repr(division)) sequence 0 NonreducedFraction(1, 8) NonreducedFraction(1, 8) NonreducedFraction(1, 16) sequence 1 NonreducedFraction(1, 16) NonreducedFraction(1, 8) NonreducedFraction(1, 8) sequence 2 NonreducedFraction(1, 8) NonreducedFraction(1, 8) NonreducedFraction(1, 16) sequence 3 NonreducedFraction(1, 16) NonreducedFraction(1, 8) NonreducedFraction(1, 8)
Fuses divisions and then splits by
1/4
with remainder on right:>>> divisions = [(7, 8), (3, 8), (5, 8)] >>> divisions = [abjad.NonreducedFraction(_) for _ in divisions] >>> divisions = baca.Sequence(divisions).fuse() >>> divisions = divisions.split_divisions([(1, 4)], cyclic=True) >>> for item in divisions: ... item Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(1, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Fuses remainder:
>>> divisions = [(7, 8), (3, 8), (5, 8)] >>> divisions = [abjad.NonreducedFraction(_) for _ in divisions] >>> divisions = baca.Sequence(divisions).fuse() >>> divisions = divisions.split_divisions( ... [(1, 4)], ... cyclic=True, ... remainder_fuse_threshold=(1, 8), ... ) >>> for item in divisions: ... item Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(3, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Fuses divisions and then splits by
1/4
with remainder on left:>>> divisions = [(7, 8), (3, 8), (5, 8)] >>> divisions = [abjad.NonreducedFraction(_) for _ in divisions] >>> divisions = baca.Sequence(divisions).fuse() >>> divisions = divisions.split_divisions( ... [(1, 4)], ... cyclic=True, ... remainder=abjad.Left, ... ) >>> for item in divisions: ... item Sequence([NonreducedFraction(1, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Fuses remainder:
>>> divisions = [(7, 8), (3, 8), (5, 8)] >>> divisions = [abjad.NonreducedFraction(_) for _ in divisions] >>> divisions = baca.Sequence(divisions).fuse() >>> divisions = divisions.split_divisions( ... [(1, 4)], ... cyclic=True, ... remainder=abjad.Left, ... remainder_fuse_threshold=(1, 8), ... ) >>> for item in divisions: ... item Sequence([NonreducedFraction(3, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)]) Sequence([NonreducedFraction(2, 8)])
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division into quarters and positions remainder at right:
>>> def quarters(sequence): ... sequence = baca.Sequence(sequence) ... sequence = sequence.quarters() ... sequence = sequence.flatten(depth=-1) ... return sequence
>>> time_signatures = baca.fractions([(7, 8), (7, 8), (7, 16)]) >>> time_signatures = [abjad.NonreducedFraction(_) for _ in time_signatures] >>> divisions = baca.Sequence(time_signatures).map(quarters) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(1, 8) sequence: NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(1, 8) sequence: NonreducedFraction(4, 16) NonreducedFraction(3, 16)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division into quarters and positions remainder at left:
>>> def quarters(sequence): ... sequence = baca.Sequence(sequence) ... sequence = sequence.quarters(remainder=abjad.Left) ... sequence = sequence.flatten(depth=-1) ... return sequence
>>> time_signatures = [(7, 8), (7, 8), (7, 16)] >>> time_signatures = [abjad.NonreducedFraction(_) for _ in time_signatures] >>> divisions = baca.Sequence(time_signatures).map(quarters) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(1, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) sequence: NonreducedFraction(1, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) NonreducedFraction(2, 8) sequence: NonreducedFraction(3, 16) NonreducedFraction(4, 16)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division into quarters and fuses remainder less than or equal to
1/8
to the right:>>> def quarters(sequence): ... sequence = baca.Sequence(sequence) ... sequence = sequence.split_divisions( ... [(1, 4)], ... cyclic=True, ... remainder_fuse_threshold=(1, 8), ... ) ... sequence = sequence.flatten(depth=-1) ... return sequence
>>> time_signatures = [abjad.NonreducedFraction(5, 8)] >>> divisions = baca.Sequence(time_signatures).map(quarters) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(2, 8) NonreducedFraction(3, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division into quarters and fuses remainder less than or equal to
1/8
to the left:>>> def quarters(sequence): ... sequence = baca.Sequence(sequence) ... sequence = sequence.split_divisions( ... [(1, 4)], ... cyclic=True, ... remainder=abjad.Left, ... remainder_fuse_threshold=(1, 8), ... ) ... sequence = sequence.flatten(depth=-1) ... return sequence
>>> time_signatures = [abjad.NonreducedFraction(5, 8)] >>> divisions = baca.Sequence(time_signatures).map(quarters) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(3, 8) NonreducedFraction(2, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm( ... music, time_signatures ... ) >>> abjad.show(lilypond_file)
Splits each division into compound quarters:
>>> def quarters(sequence): ... sequence = baca.Sequence(sequence) ... sequence = sequence.quarters(compound=(3, 2)) ... sequence = sequence.flatten(depth=-1) ... return sequence
>>> time_signatures = baca.fractions([(3, 4), (6, 8)]) >>> divisions = baca.Sequence(time_signatures) >>> divisions = divisions.map(quarters) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(1, 4) NonreducedFraction(1, 4) NonreducedFraction(1, 4) sequence: NonreducedFraction(3, 8) NonreducedFraction(3, 8)
>>> rhythm_maker = rmakers.note() >>> music = rhythm_maker(divisions.flatten(depth=-1)) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
Splits each division by durations and rotates durations one to the left at each new division:
>>> durations = baca.Sequence([(1, 16), (1, 8), (1, 4)]) >>> time_signatures = baca.fractions([(7, 16), (7, 16), (7, 16)]) >>> divisions = [] >>> for i, time_signature in enumerate(time_signatures): ... durations_ = durations.rotate(n=-i) ... sequence = baca.Sequence(time_signature) ... sequence = sequence.split_divisions(durations_) ... sequence = sequence.flatten(depth=-1) ... divisions.append(sequence) ... >>> divisions = baca.Sequence(divisions) >>> for item in divisions: ... print("sequence:") ... for division in item: ... print(f"\t{repr(division)}") sequence: NonreducedFraction(1, 16) NonreducedFraction(2, 16) NonreducedFraction(4, 16) sequence: NonreducedFraction(2, 16) NonreducedFraction(4, 16) NonreducedFraction(1, 16) sequence: NonreducedFraction(4, 16) NonreducedFraction(1, 16) NonreducedFraction(2, 16)
>>> rhythm_maker = rmakers.note() >>> divisions = divisions.flatten(depth=-1) >>> music = rhythm_maker(divisions) >>> lilypond_file = abjad.LilyPondFile.rhythm(music, time_signatures) >>> abjad.illustrators.attach_markup_struts(lilypond_file) >>> abjad.show(lilypond_file)
- stack_intervals()[source]¶
>>> s = evans.Sequence([1, -2, 3]) >>> s.stack_intervals() Sequence([1, -1, 2])
- stack_pitches(as_ratios=False)[source]¶
>>> s = evans.Sequence([1, -2, 3]) >>> s.stack_pitches() Sequence([1, 10, 15])
-
(
Sequence
).sum()[source]¶ Sums sequence.
Sums sequence of positive numbers:
>>> sequence = abjad.Sequence([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> sequence.sum() 55
Sum sequence of numbers with mixed signs:
>>> sequence = abjad.Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10])
>>> sequence.sum() 5
Sums sequence and wraps result in new sequence:
>>> sequence = abjad.Sequence(range(1, 10 + 1)) >>> result = sequence.sum() >>> sequence = abjad.Sequence(result)
>>> sequence Sequence([55])
- Return type
-
(
Sequence
).sum_by_sign(sign=(- 1, 0, 1))[source]¶ Sums consecutive sequence items by
sign
.>>> items = [0, 0, -1, -1, 2, 3, -5, 1, 2, 5, -5, -6] >>> sequence = abjad.Sequence(items)
>>> sequence.sum_by_sign() Sequence([0, -2, 5, -5, 8, -11])
>>> sequence.sum_by_sign(sign=[-1]) Sequence([0, 0, -2, 2, 3, -5, 1, 2, 5, -11])
>>> sequence.sum_by_sign(sign=[0]) Sequence([0, -1, -1, 2, 3, -5, 1, 2, 5, -5, -6])
>>> sequence.sum_by_sign(sign=[1]) Sequence([0, 0, -1, -1, 5, -5, 8, -5, -6])
>>> sequence.sum_by_sign(sign=[-1, 0]) Sequence([0, -2, 2, 3, -5, 1, 2, 5, -11])
>>> sequence.sum_by_sign(sign=[-1, 1]) Sequence([0, 0, -2, 5, -5, 8, -11])
>>> sequence.sum_by_sign(sign=[0, 1]) Sequence([0, -1, -1, 5, -5, 8, -5, -6])
>>> sequence.sum_by_sign(sign=[-1, 0, 1]) Sequence([0, -2, 5, -5, 8, -11])
Sumsn consecutive negative elements when
-1
insign
.Sums consecutive zero-valued elements when
0
insign
.Sums consecutive positive elements when
1
insign
.- Return type
Sequence
- transpose(n)[source]¶
>>> evans.Sequence([0, 1, 2, 3]).transpose(10) Sequence([10, 11, 12, 13])
>>> evans.Sequence([0, 1, 2, 3]).transpose(10).mod(12, indices=True) Sequence([10, 11, 0, 1])
-
(
Sequence
).truncate(sum_=None, weight=None)[source]¶ Truncates sequence.
>>> sequence = abjad.Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10])
Truncates sequence to weights ranging from 1 to 10:
>>> for weight in range(1, 11): ... result = sequence.truncate(weight=weight) ... print(weight, result) ... 1 Sequence([-1]) 2 Sequence([-1, 1]) 3 Sequence([-1, 2]) 4 Sequence([-1, 2, -1]) 5 Sequence([-1, 2, -2]) 6 Sequence([-1, 2, -3]) 7 Sequence([-1, 2, -3, 1]) 8 Sequence([-1, 2, -3, 2]) 9 Sequence([-1, 2, -3, 3]) 10 Sequence([-1, 2, -3, 4])
Truncates sequence to sums ranging from 1 to 10:
>>> for sum_ in range(1, 11): ... result = sequence.truncate(sum_=sum_) ... print(sum_, result) ... 1 Sequence([-1, 2]) 2 Sequence([-1, 2, -3, 4]) 3 Sequence([-1, 2, -3, 4, -5, 6]) 4 Sequence([-1, 2, -3, 4, -5, 6, -7, 8]) 5 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) 6 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) 7 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) 8 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) 9 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) 10 Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10])
Truncates sequence to zero weight:
>>> sequence.truncate(weight=0) Sequence([])
Truncates sequence to zero sum:
>>> sequence.truncate(sum_=0) Sequence([])
Ignores
sum
whenweight
andsum
are both set.Raises value error on negative
sum
.- Return type
Sequence
- warp(min, max, random_seed, by_integers=False)[source]¶
>>> evans.Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]).warp(-0.5, 0.5, 3) Sequence([-0.26203537290810863, 1.0442292252959517, 1.8699551665480794, 3.1039200385961943, 4.125720304108054, 4.565528859239813, 5.513167991554874, 7.33746908209646, 7.759354014328007, 8.734330961046696])
>>> evans.Sequence([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]).warp(-1, 1, 3, by_integers=True) Sequence([-1, 2, 3, 2, 4, 6, 6, 8, 9, 8])
-
(
Sequence
).weight()[source]¶ Gets weight.
>>> abjad.Sequence([]).weight() 0
>>> abjad.Sequence([1]).weight() 1
>>> abjad.Sequence([1, 2, 3]).weight() 6
>>> abjad.Sequence([1, 2, -3]).weight() 6
>>> abjad.Sequence([-1, -2, -3]).weight() 6
>>> sequence = abjad.Sequence([-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]) >>> sequence.weight() 55
>>> abjad.Sequence([[1, -7, -7], [1, -8 - 8]]).weight() 32
- Return type
-
(
Sequence
).zip(cyclic=False, truncate=True)[source]¶ Zips sequences in sequence.
Zips cyclically:
>>> sequence = abjad.Sequence([[1, 2, 3], ["a", "b"]]) >>> for item in sequence.zip(cyclic=True): ... item ... Sequence([1, 'a']) Sequence([2, 'b']) Sequence([3, 'a'])
>>> items = [[10, 11, 12], [20, 21], [30, 31, 32, 33]] >>> sequence = abjad.Sequence(items) >>> for item in sequence.zip(cyclic=True): ... item ... Sequence([10, 20, 30]) Sequence([11, 21, 31]) Sequence([12, 20, 32]) Sequence([10, 21, 33])
Zips without truncation:
>>> items = [[1, 2, 3, 4], [11, 12, 13], [21, 22, 23]] >>> sequence = abjad.Sequence(items) >>> for item in sequence.zip(truncate=False): ... item ... Sequence([1, 11, 21]) Sequence([2, 12, 22]) Sequence([3, 13, 23]) Sequence([4])
Zips strictly:
>>> items = [[1, 2, 3, 4], [11, 12, 13], [21, 22, 23]] >>> for item in abjad.Sequence(items).zip(): ... item ... Sequence([1, 11, 21]) Sequence([2, 12, 22]) Sequence([3, 13, 23])
Returns nested sequence.
- Return type
Sequence
- zipped_bifurcation(reversed=True)[source]¶
>>> evans.Sequence([0, 1, 2, 3]).zipped_bifurcation() Sequence([0, 3, 1, 2])
>>> evans.Sequence([0, 1, 2, 3]).zipped_bifurcation(reversed=False) Sequence([0, 2, 1, 3])
Class & static methods
- classmethod chen(a, b, c, first_state, time_values, iters)[source]¶
>>> c = evans.Sequence.chen( ... a=40, ... b=3, ... c=28, ... first_state=[-0.1, 0.5, -0.6], ... time_values=[0.0, 40.0, 0.01], ... iters=10, ... ) >>> print(c) Sequence([[-0.1, 0.12465461315287765, 0.34050473218831634, 0.5770360314308272, 0.8626644815821614, 1.228312639285715, 1.7104499742301047, 2.3534686146396937, 3.210342581973768, 4.338499963066017], [0.5, 0.6622702530766478, 0.8942439508177749, 1.2176463222616842, 1.66295375321105, 2.2713555330407695, 3.0965468523002206, 4.204669803361282, 5.6680291136883945, 7.542293510840843], [-0.6, -0.5821525955103403, -0.5631370288024949, -0.5417183868578875, -0.5155298081524363, -0.48013350192305393, -0.4273027100127936, -0.34198524404844655, -0.19722719758314597, 0.05337630134609778]])
- classmethod e_bonacci_cycle(n, iters, first, second, modulus, wrap_to_zero=False)[source]¶
>>> evans.Sequence.e_bonacci_cycle(n=3, iters=15, first=1, second=1, modulus=7) Sequence([1, 1, 2, 4, 7, 6, 3, 2, 4, 2, 1, 7, 3])
- classmethod e_dovan_cycle(n, iters, first, second, modulus, wrap_to_zero=False)[source]¶
>>> evans.Sequence.e_dovan_cycle(n=3, iters=15, first=1, second=1, modulus=7) Sequence([1, 1, 1, 2, 3, 4, 6, 2, 6, 5, 7, 6, 4])
- classmethod feigenbaum_bifurcations(fertility=3.59785, initial_state=0.5, iterations=10)[source]¶
>>> evans.Sequence.feigenbaum_bifurcations( ... fertility=2.3, initial_state=0.5, iterations=4 ... ) Sequence([0.5, 0.575, 0.5620625, 0.5661409660156249, 0.5649383570133959])
- classmethod henon(first_state, a, b, iters)[source]¶
>>> h = evans.Sequence.henon( ... first_state=[(-0.75), 0.32], ... a=1.2, ... b=0.3, ... iters=10, ... ) >>> h Sequence([[-0.75, Decimal('0.6450000000000000316413562021'), Decimal('0.2757699999999999778210746366'), Decimal('1.102241088520000020387803903'), Decimal('-0.375191500666105380643309098'), Decimal('1.161749931949499014986033708'), Decimal('-0.7321529354614302607193373836'), Decimal('0.7052674744991025979072557961'), Decimal('0.1834714666579601521199694779'), Decimal('1.171186107456583192487843126'), Decimal('-0.590970837961775774691947209')], [0.32, Decimal('-0.2249999999999999916733273153'), Decimal('0.1935000000000000023314683518'), Decimal('0.08273099999999999028466035597'), Decimal('0.3306723265559999938790068193'), Decimal('-0.1125574501998316100275303026'), Decimal('0.3485249795848496915977948793'), Decimal('-0.2196458806384290700872707501'), Decimal('0.2115802423497307715421348517'), Decimal('0.05504143999738804359904837692'), Decimal('0.3513558322369749447435751116')]])
- classmethod lindenmayer(seed, rules, iters)[source]¶
>>> rule_dict = {"A": "ABA", "B": "BC", "C": "BAC"} >>> lind_list = evans.Sequence.lindenmayer(seed="AB", rules=rule_dict, iters=2) >>> lind_list Sequence(['A', 'B', 'A', 'B', 'C', 'A', 'B', 'A', 'B', 'C', 'B', 'A', 'C'])
- classmethod lorenz(rho, sigma, beta, first_state, time_values, iters)[source]¶
>>> evans.Sequence.lorenz( ... rho=28.0, ... sigma=10.0, ... beta=(8.0 / 3.0), ... first_state=[1.0, 1.0, 1.0], ... time_values=[0.0, 40.0, 0.01], ... iters=10, ... ) Sequence([[1.0, 1.0125657408032651, 1.0488214579592021, 1.107206299034454, 1.1868654842333801, 1.2875548011090359, 1.4095688012763303, 1.5536887870511105, 1.721145788631946, 1.9135963877769706], [1.0, 1.2599200056984277, 1.5240008388892068, 1.798314577764884, 2.0885455352781572, 2.400160398825767, 2.738552104480127, 3.109160997057688, 3.51757713188136, 3.969623487737072], [1.0, 0.9848910446848755, 0.973114341630953, 0.9651591023109144, 0.9617373815250438, 0.9638062240116604, 0.9726082787069016, 0.9897311952182216, 1.0171865646618774, 1.057511871629279]])
- classmethod lu_chen(a, b, c, u, first_state, time_values, iters)[source]¶
>>> evans.Sequence.lu_chen( ... a=36, ... b=3, ... c=20, ... u=(-15.15), ... first_state=[0.1, 0.3, -0.6], ... time_values=[0.0, 40.0, 0.01], ... iters=10, ... ) Sequence([[0.1, 0.14507340240351432, 0.14323815901530343, 0.10128972203257065, 0.02212510661501916, -0.09446533541055804, -0.25134777506809247, -0.4538520580544356, -0.7097811725420128, -1.0295889433224696], [0.3, 0.20092880055892573, 0.08027594159872467, -0.06748948170440211, -0.2490165225972874, -0.4723839158805826, -0.7474651998093496, -1.0863625805752994, -1.503923707544488, -2.0183521101080717], [-0.6, -0.5819559886254813, -0.5645492876975078, -0.547848676066436, -0.5317444633853425, -0.5158905397379729, -0.4995950638053594, -0.48163813037580305, -0.4599814138948388, -0.43131546553144084]])
- classmethod mandelbrot_set(xmin, xmax, ymin, ymax, width, height, maxiter)[source]¶
>>> evans.Sequence.mandelbrot_set( ... xmin=7, ... xmax=10, ... ymin=7, ... ymax=10, ... width=10, ... height=10, ... maxiter=10, ... ) Sequence([array([ 7. , 7.33333333, 7.66666667, 8. , 8.33333333, 8.66666667, 9. , 9.33333333, 9.66666667, 10. ]), array([ 7. , 7.33333333, 7.66666667, 8. , 8.33333333, 8.66666667, 9. , 9.33333333, 9.66666667, 10. ]), array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])])
- classmethod markov(transition_prob, first_state, length, seed)[source]¶
>>> prob = { ... "one": {"one": 0.8, "two": 0.19, "three": 0.01}, ... "two": {"one": 0.2, "two": 0.7, "three": 0.1}, ... "three": {"one": 0.1, "two": 0.2, "three": 0.7}, ... } >>> evans.Sequence.markov( ... transition_prob=prob, ... first_state="one", ... length=14, ... seed=7, ... ) Sequence(['one', 'one', 'one', 'one', 'two', 'two', 'two', 'one', 'one', 'one', 'one', 'two', 'two', 'one'])
- classmethod n_bonacci_cycle(n, first_number, second_number, length, modulus, wrap_to_zero=False)[source]¶
>>> evans.Sequence.n_bonacci_cycle( ... n=3, first_number=1, second_number=3, length=8, modulus=7 ... ) Sequence([1, 3, 3, 5, 4, 3, 6, 7, 6, 4])
- classmethod orbits(initial_state=0.4, iterations=10)[source]¶
>>> evans.Sequence.orbits(initial_state=0.4, iterations=5) Sequence([0.96, 0.15360000000000013, 0.5200281600000003, 0.9983954912280576, 0.006407737294172653])
- classmethod prime_sequence(start, end)[source]¶
>>> evans.Sequence.prime_sequence(start=11, end=25) Sequence([11, 13, 15, 17, 19, 21, 23, 25])
- classmethod ratio(ratio, reciprocals=False)[source]¶
>>> evans.Sequence.ratio("9:8:7:6:5:4") Sequence([Fraction(1, 1), Fraction(5, 4), Fraction(3, 2), Fraction(7, 4), Fraction(2, 1), Fraction(9, 4)])
- classmethod roessler(a, b, c, t_ini, t_fin, h)[source]¶
>>> import numpy >>> evans.Sequence.roessler( ... a=0.13, ... b=0.2, ... c=6.5, ... t_ini=0, ... t_fin=(3 * (numpy.pi)), ... h=0.0001, ... ) Sequence([array([ 0.00000000e+00, 0.00000000e+00, -2.00007553e-09, ..., 1.86024565e-03, 1.86567571e-03, 1.87110585e-03]), array([ 0. , 0. , 0. , ..., -0.08504001, -0.08504093, -0.08504185]), array([0.00000000e+00, 2.00003777e-05, 3.99877548e-05, ..., 3.07404473e-02, 3.07404717e-02, 3.07404962e-02])])
Read-only properties
-
(
Functions
- evans.sequence.cyc(lst)[source]¶
>>> cyc_list = evans.cyc([0, 1, 2]) >>> for _ in range(5): ... print(next(cyc_list)) ... 0 1 2 0 1