sequence

Sequence classes and functions.

digraph InheritanceGraph { graph [bgcolor=transparent, color=lightsteelblue2, fontname=Arial, fontsize=10, outputorder=edgesfirst, overlap=prism, penwidth=2, rankdir=LR, splines=spline, style="dashed, rounded", truecolor=true ]; node [colorscheme=pastel19, fontname=Arial, fontsize=10, height=0, penwidth=2, shape=box, style="filled, rounded", width=0 ]; edge [color=lightslategrey, penwidth=1 ]; subgraph "cluster_abjad.ratio" { graph [label="abjad.ratio"]; node [color=1]; "abjad.ratio.NonreducedRatio" [color=1, label="Nonreduced\nRatio"]; "abjad.ratio.Ratio" [color=1, label=Ratio]; "abjad.ratio.NonreducedRatio" -> "abjad.ratio.Ratio" [minlen=1]; } subgraph "cluster_abjad.sequence" { graph [label="abjad.sequence"]; node [color=2]; "abjad.sequence.Sequence" [color=2, label=Sequence]; } subgraph "cluster_abjadext.microtones.utilities" { graph [label="abjadext.microtones.utilities"]; node [color=3]; "abjadext.microtones.utilities.PitchClassSegment" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.PitchClassSegment", color=3, label="Pitch\nClass\nSegment", target=_top]; "abjadext.microtones.utilities.PitchClassSet" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.PitchClassSet", color=3, label="Pitch\nClass\nSet", target=_top]; "abjadext.microtones.utilities.PitchSegment" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.PitchSegment", color=3, label="Pitch\nSegment", target=_top]; "abjadext.microtones.utilities.PitchSet" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.PitchSet", color=3, label="Pitch\nSet", target=_top]; "abjadext.microtones.utilities.RatioClassSegment" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.RatioClassSegment", color=3, label="Ratio\nClass\nSegment", target=_top]; "abjadext.microtones.utilities.RatioClassSet" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.RatioClassSet", color=3, label="Ratio\nClass\nSet", target=_top]; "abjadext.microtones.utilities.RatioSegment" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.RatioSegment", color=3, label="Ratio\nSegment", target=_top]; "abjadext.microtones.utilities.RatioSet" [URL="../api/evans/../abjadext/microtones/utilities.html#abjadext.microtones.utilities.RatioSet", color=3, label="Ratio\nSet", target=_top]; } subgraph "cluster_baca.classes" { graph [label="baca.classes"]; node [color=4]; "baca.classes.Sequence" [color=4, label=Sequence]; } subgraph cluster_builtins { graph [label=builtins]; node [color=5]; "builtins.object" [URL="https://docs.python.org/3.7/library/functions.html#object", color=5, label=object, target=_top]; } subgraph "cluster_collections.abc" { graph [label="collections.abc"]; node [color=6]; "collections.abc.Collection" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Collection", color=6, label=Collection, shape=oval, style=bold, target=_top]; "collections.abc.Sequence" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Sequence", color=6, label=Sequence, shape=oval, style=bold, target=_top]; "collections.abc.Collection" -> "collections.abc.Sequence"; "collections.abc.Container" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Container", color=6, label=Container, shape=oval, style=bold, target=_top]; "collections.abc.Container" -> "collections.abc.Collection"; "collections.abc.Iterable" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Iterable", color=6, label=Iterable, shape=oval, style=bold, target=_top]; "collections.abc.Iterable" -> "collections.abc.Collection"; "collections.abc.Reversible" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Reversible", color=6, label=Reversible, shape=oval, style=bold, target=_top]; "collections.abc.Iterable" -> "collections.abc.Reversible" [minlen=1]; "collections.abc.Reversible" -> "collections.abc.Sequence"; "collections.abc.Sized" [URL="https://docs.python.org/3.7/library/collections.abc.html#collections.abc.Sized", color=6, label=Sized, shape=oval, style=bold, target=_top]; "collections.abc.Sized" -> "collections.abc.Collection"; } subgraph "cluster_evans.sequence" { graph [label="evans.sequence"]; node [color=7]; "evans.sequence.CyclicList" [URL="../api/evans/sequence.html#evans.sequence.CyclicList", color=black, fontcolor=white, label="Cyclic\nList", target=_top]; "evans.sequence.MarkovChain" [URL="../api/evans/sequence.html#evans.sequence.MarkovChain", color=black, fontcolor=white, label="Markov\nChain", target=_top]; "evans.sequence.PitchClassSegment" [URL="../api/evans/sequence.html#evans.sequence.PitchClassSegment", color=black, fontcolor=white, label="Pitch\nClass\nSegment", target=_top]; "evans.sequence.PitchClassSet" [URL="../api/evans/sequence.html#evans.sequence.PitchClassSet", color=black, fontcolor=white, label="Pitch\nClass\nSet", target=_top]; "evans.sequence.PitchSegment" [URL="../api/evans/sequence.html#evans.sequence.PitchSegment", color=black, fontcolor=white, label="Pitch\nSegment", target=_top]; "evans.sequence.PitchSet" [URL="../api/evans/sequence.html#evans.sequence.PitchSet", color=black, fontcolor=white, label="Pitch\nSet", target=_top]; "evans.sequence.Ratio" [URL="../api/evans/sequence.html#evans.sequence.Ratio", color=black, fontcolor=white, label=Ratio, target=_top]; "evans.sequence.RatioClassSegment" [URL="../api/evans/sequence.html#evans.sequence.RatioClassSegment", color=black, fontcolor=white, label="Ratio\nClass\nSegment", target=_top]; "evans.sequence.RatioClassSet" [URL="../api/evans/sequence.html#evans.sequence.RatioClassSet", color=black, fontcolor=white, label="Ratio\nClass\nSet", target=_top]; "evans.sequence.RatioSegment" [URL="../api/evans/sequence.html#evans.sequence.RatioSegment", color=black, fontcolor=white, label="Ratio\nSegment", target=_top]; "evans.sequence.RatioSet" [URL="../api/evans/sequence.html#evans.sequence.RatioSet", color=black, fontcolor=white, label="Ratio\nSet", target=_top]; "evans.sequence.Sequence" [URL="../api/evans/sequence.html#evans.sequence.Sequence", color=black, fontcolor=white, label=Sequence, target=_top]; } "abjad.ratio.Ratio" -> "evans.sequence.Ratio" [minlen=1]; "abjad.sequence.Sequence" -> "baca.classes.Sequence" [minlen=1]; "abjadext.microtones.utilities.PitchClassSegment" -> "evans.sequence.PitchClassSegment" [minlen=1]; "abjadext.microtones.utilities.PitchClassSet" -> "evans.sequence.PitchClassSet" [minlen=1]; "abjadext.microtones.utilities.PitchSegment" -> "evans.sequence.PitchSegment" [minlen=1]; "abjadext.microtones.utilities.PitchSet" -> "evans.sequence.PitchSet" [minlen=1]; "abjadext.microtones.utilities.RatioClassSegment" -> "evans.sequence.RatioClassSegment" [minlen=1]; "abjadext.microtones.utilities.RatioClassSet" -> "evans.sequence.RatioClassSet" [minlen=1]; "abjadext.microtones.utilities.RatioSegment" -> "evans.sequence.RatioSegment" [minlen=1]; "abjadext.microtones.utilities.RatioSet" -> "evans.sequence.RatioSet" [minlen=1]; "baca.classes.Sequence" -> "evans.sequence.Sequence" [minlen=1]; "builtins.object" -> "abjadext.microtones.utilities.PitchClassSegment" [minlen=1]; "builtins.object" -> "abjadext.microtones.utilities.PitchClassSet" [minlen=2]; "builtins.object" -> "abjadext.microtones.utilities.PitchSegment" [minlen=1]; "builtins.object" -> "abjadext.microtones.utilities.PitchSet" [minlen=2]; "builtins.object" -> "abjadext.microtones.utilities.RatioClassSegment" [minlen=1]; "builtins.object" -> "abjadext.microtones.utilities.RatioClassSet" [minlen=2]; "builtins.object" -> "abjadext.microtones.utilities.RatioSegment" [minlen=1]; "builtins.object" -> "abjadext.microtones.utilities.RatioSet" [minlen=2]; "builtins.object" -> "collections.abc.Container" [minlen=1]; "builtins.object" -> "collections.abc.Iterable"; "builtins.object" -> "collections.abc.Sized" [minlen=2]; "builtins.object" -> "evans.sequence.CyclicList" [minlen=1]; "builtins.object" -> "evans.sequence.MarkovChain" [minlen=2]; "collections.abc.Sequence" -> "abjad.ratio.NonreducedRatio" [minlen=1]; "collections.abc.Sequence" -> "abjad.sequence.Sequence" [minlen=2]; }


Classes

CyclicList

Cyclic List

MarkovChain

Markov Chain

PitchClassSegment

PitchClassSet

PitchSegment

PitchSet

Ratio

RatioClassSegment

RatioClassSet

RatioSegment

RatioSet

Sequence

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__

Call self as a function.

__repr__

Return repr(self).

__str__

Return str(self).

non_state_cyc

state

state_cyc


Special methods

overridden __call__(r)[source]

Call self as a function.

overridden __repr__()[source]

Return repr(self).

overridden __str__()[source]

Return str(self).


Methods

non_state_cyc(lst, r)[source]
state()[source]
state_cyc(lst, r)[source]
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

__repr__

Return repr(self).

__str__

Return str(self).

generate_states

next_state


Special methods

overridden __repr__()[source]

Return repr(self).

overridden __str__()[source]

Return str(self).


Methods

generate_states(current_state, no=10)[source]
next_state(current_state)[source]
class evans.sequence.PitchClassSegment(pitch_classes)[source]

Attributes Summary

alpha

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

alpha

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

alpha

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

alpha

to_sequence


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),
        ]
    )
(PitchSet).__contains__(argument)[source]

Returns boolean

>>> p_set = microtones.PitchSet([0, 1, 6])
>>> 6 in p_set
True
>>> 18 in p_set
False
>>> p_set = microtones.PitchSet([0, 1, 18])
>>> 6 in p_set
False
>>> 18 in p_set
True
(PitchSet).__getitem__(index)[source]

Gets value at index

>>> microtones.PitchSet([0, 1, 6])[0]
Fraction(0, 1)
(PitchSet).__iter__()[source]

Iterates contents.

>>> pc_set = microtones.PitchSet([0, 1, 2])
>>> for item in pc_set:
...     item
... 
Fraction(0, 1)
Fraction(1, 1)
Fraction(2, 1)
(PitchSet).__len__()[source]

Gets length of contents.

>>> len(microtones.PitchSet([0, 1, 2]))
3
(PitchSet).__repr__()[source]

Gets interpreter representation.

>>> microtones.PitchSet([0, 1, 2])
PitchSet([Fraction(0, 1), Fraction(1, 1), Fraction(2, 1)])
(PitchSet).__str__()[source]

Gets string representation.

>>> str(microtones.PitchSet([0, 1, 2]))
'{0, 1, 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).multiply(n)[source]

Gets multiplication.

>>> print(abjad.storage(microtones.PitchSet([0, 1, 3]).multiply(2)))
microtones.PitchSet(
    [
        Fraction(0, 1),
        Fraction(2, 1),
        Fraction(6, 1),
        ]
    )
(PitchSet).sorted()[source]

Gets Pitch Set sorted in ascending order.

>>> print(abjad.storage(microtones.PitchSet([2, 1, 0]).sorted()))
microtones.PitchSet(
    [
        Fraction(0, 1),
        Fraction(1, 1),
        Fraction(2, 1),
        ]
    )
to_sequence()[source]
(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

extract_sub_ratios


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
(Ratio).__getitem__(argument)[source]

Gets item or slice identified by argument.

>>> ratio = abjad.Ratio((2, 4, 2))
>>> ratio[1]
2

Returns integer or tuple.

(Ratio).__hash__()[source]

Hashes ratio.

Required to be explicitly redefined on Python 3 if __eq__ changes.

Returns integer.

(NonreducedRatio).__iter__()

Iterates ratio.

Returns generator.

(Ratio).__len__()[source]

Gets length of ratio.

>>> ratio = abjad.Ratio((2, 4, 2))
>>> len(ratio)
3

Returns integer.

(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).__repr__()

Gets interpreter representation.

Return type

str

(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.

(Ratio).__str__()[source]

Gets string representation of ratio.

Ratio of two numbers:

>>> str(abjad.Ratio((2, 4)))
'1:2'

Ratio of three numbers:

>>> str(abjad.Ratio((2, 4, 2)))
'1:2:1'

Returns string.


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 by ratio.

>>> abjad.Ratio([1, 2]).partition_integer(10)
[3, 7]

Partitions positive integer-equivalent n by ratio with negative parts:

>>> abjad.Ratio([1, -2]).partition_integer(10)
[3, -7]

Partitions negative integer-equivalent n by ratio:

>>> abjad.Ratio([1, 2]).partition_integer(-10)
[-3, -7]

Partitions negative integer-equivalent n by ratio 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.

Return type

List[int]


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

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

to_sequence


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),
        ]
    )
to_sequence()[source]
(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

to_sequence


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),
        ]
    )
(RatioSet).__contains__(argument)[source]

Returns boolean

>>> r_set = microtones.RatioSet([1, 2, 6])
>>> 1 in r_set
True
(RatioSet).__getitem__(index)[source]

Gets item at index

>>> microtones.RatioSet([1, 2, 3])[0]
Fraction(1, 1)
(RatioSet).__iter__()[source]

Iterates contents.

>>> pc_set = microtones.RatioSet([1, 2, 3])
>>> for item in pc_set:
...     item
... 
Fraction(1, 1)
Fraction(2, 1)
Fraction(3, 1)
>>> for x in microtones.RatioSet(["31/2", "10", "33/4", "36/10", "113/10"]):
...     print(x)
... 
31/2
10
33/4
18/5
113/10
(RatioSet).__len__()[source]

Gets length of contents.

>>> len(microtones.RatioSet([1, 2, 3]))
3
(RatioSet).__repr__()[source]

Gets interpreter representation.

>>> microtones.RatioSet([1, 2, 3])
RatioSet([Fraction(1, 1), Fraction(2, 1), Fraction(3, 1)])
(RatioSet).__str__()[source]

Gets string representation.

>>> str(microtones.RatioSet([1, 2, 3]))
'{1, 2, 3}'

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).constrain_to_octave()[source]

Gets Ratio Set constrained within an octave.

>>> str(microtones.RatioSet([1, 3, "1/5"]).constrain_to_octave())
'{1, 3/2, 4/5}'
(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).multiply(n)[source]

Gets multiplication.

>>> s = microtones.RatioSet([1, 2, 3]).multiply(2)
>>> print(abjad.storage(s))
microtones.RatioSet(
    [
        Fraction(2, 1),
        Fraction(4, 1),
        Fraction(6, 1),
        ]
    )
(RatioSet).sorted()[source]

Gets Ratio Class Set sorted in ascending order.

>>> s = microtones.RatioSet([5, 2, 3]).sorted()
>>> print(abjad.storage(s))
microtones.RatioSet(
    [
        Fraction(2, 1),
        Fraction(3, 1),
        Fraction(5, 1),
        ]
    )
to_sequence()[source]
(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

add_sequences

alpha

chen

combination_addition

combination_division

combination_multiplication

combination_subtraction

combinations

derive_added_sequences

derive_multiplied_sequences

divide_all

e_bonacci_cycle

e_dovan_cycle

feigenbaum_bifurcations

grouper

guerrero_morales

henon

hexagonal_sequence

josephus

lindenmayer

linear_asymmetric_inversion

lorenz

lu_chen

mandelbrot_set

map_dict

map_indices

markov

matrix

mirror

mod

multiply

multiply_all

multiply_sequences

n_bonacci_cycle

normalize_to_indices

normalize_to_sum

orbits

permutations

pitch_warp

potamia

prime_sequence

prism_sequence

random_walk

ratio

recaman_sequence

reciprocals

remove_none

reproportion_by_base

roessler

rotate

stack_intervals

stack_pitches

subtract_all

transpose

warp

zipped_bifurcation


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).__contains__(value)
(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

bool

(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

Any

(Sequence).__hash__()[source]

Hashes sequence.

Return type

int

(Sequence).__iter__()
(Sequence).__len__()[source]

Gets length of sequence.

Gets length of sequence:

>>> len(abjad.Sequence([1, 2, 3, 4, 5, 6]))
6

Gets length of sequence:

>>> len(abjad.Sequence("text"))
4
Return type

int

(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

(Sequence).__repr__()[source]

Gets interpreter representation of sequence.

Gets interpreter representation:

>>> abjad.Sequence([99])
Sequence([99])

Gets interpreter representation:

>>> abjad.Sequence([1, 2, 3, 4, 5, 6])
Sequence([1, 2, 3, 4, 5, 6])
Return type

str

(Sequence).__reversed__()

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 integer count.

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).count(value)integer return number of occurrences of value
(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 in sign.

Groups zero-valued elements When 0 in sign.

Groups positive elements when 1 in sign.

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).index(value[, start[, stop]])integer return first index of value.

Raises ValueError if the value is not present.

Supporting start and stop arguments is optional, but recommended.

(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

bool

(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

bool

(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

bool

(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

bool

(Sequence).join()[source]

Join subsequences in sequence.

>>> items = [(1, 2, 3), (), (4, 5), (), (6,)]
>>> sequence = abjad.Sequence(items)
>>> sequence
Sequence([(1, 2, 3), (), (4, 5), (), (6,)])
>>> sequence.join()
Sequence([(1, 2, 3, 4, 5, 6)])
Return type

Sequence

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_all()[source]
>>> evans.Sequence([7, 8, 9, 10]).multiply_all()
Sequence([5040])
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 when cyclic is true.

Return type

Generator

(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 and 1: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 and 1: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])
reciprocals()[source]
>>> evans.Sequence([0.5]).reciprocals()
Sequence([2.0])
(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).remove_repeats()[source]

Removes repeats from sequence.

>>> items = [31, 31, 35, 35, 31, 31, 31, 31, 35]
>>> sequence = abjad.Sequence(items)
>>> sequence.remove_repeats()
Sequence([31, 35, 31, 35])
Return type

Sequence

(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(old, new)[source]

Replaces old with new.

>>> sequence = abjad.Sequence([0, 2, 3, 0, 2, 3, 0, 2, 3])
>>> sequence.replace(0, 1)
Sequence([1, 2, 3, 1, 2, 3, 1, 2, 3])
Return type

Sequence

(Sequence).replace_at(indices, new_material)[source]

Replaces items at indices with new_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

overridden rotate(n)[source]
>>> evans.Sequence([0, 1, 2, 3]).rotate(2)
Sequence([2, 3, 0, 1])
(Sequence).sort(key=None, reverse=False)[source]

Sorts sequence.

>>> sequence = abjad.Sequence([3, 2, 5, 4, 1, 6])
>>> sequence.sort()
Sequence([1, 2, 3, 4, 5, 6])
>>> sequence
Sequence([3, 2, 5, 4, 1, 6])
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])
subtract_all()[source]
>>> l = [1, 2, 3, 4]
>>> evans.Sequence(l).subtract_all()
Sequence([-8])
(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

Any

(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 in sign.

Sums consecutive zero-valued elements when 0 in sign.

Sums consecutive positive elements when 1 in sign.

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 when weight and sum 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

Any

(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

(Sequence).items

Gets sequence items.

Initializes items positionally:

>>> abjad.Sequence([1, 2, 3, 4, 5, 6]).items
(1, 2, 3, 4, 5, 6)

Initializes items from keyword:

>>> abjad.Sequence([1, 2, 3, 4, 5, 6]).items
(1, 2, 3, 4, 5, 6)
Return type

Tuple[Any, …]


Functions

cyc

flatten

julia_set

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
evans.sequence.flatten(lst)[source]
>>> nested_list = [1, 1, [1, [1, 1]], 1]
>>> flat = evans.flatten(nested_list)
>>> print(flat)
[1, 1, 1, 1, 1, 1]
evans.sequence.julia_set(c, z0, max_iter)[source]
>>> s = evans.julia_set(
...     c=0.25,
...     z0=1.5,
...     max_iter=10,
... )
>>> print(s)
1.7209086512090908