コード例 #1
0
def test_quantizationtools_SilentQEvent___eq___02():

    a = quantizationtools.SilentQEvent(1000)
    b = quantizationtools.SilentQEvent(1000, ['foo', 'bar', 'baz'])
    c = quantizationtools.SilentQEvent(9999)

    assert a != b
    assert a != c
コード例 #2
0
def test_quantizationtools_QGrid___eq___02():
    a = quantizationtools.QGrid(
        root_node=quantizationtools.QGridContainer(
            preprolated_duration=1,
            children=[
                quantizationtools.QGridLeaf(
                    preprolated_duration=1,
                    q_event_proxies=[
                        quantizationtools.QEventProxy(
                            quantizationtools.SilentQEvent(100),
                            0.5,
                        ),
                    ],
                ),
            ],
        ),
        next_downbeat=quantizationtools.QGridLeaf(
            preprolated_duration=1,
            q_event_proxies=[
                quantizationtools.QEventProxy(
                    quantizationtools.TerminalQEvent(200),
                    0.9,
                ),
            ],
        ),
    )
    b = quantizationtools.QGrid(
        root_node=quantizationtools.QGridContainer(
            preprolated_duration=1,
            children=[
                quantizationtools.QGridLeaf(
                    preprolated_duration=1,
                    q_event_proxies=[
                        quantizationtools.QEventProxy(
                            quantizationtools.SilentQEvent(100),
                            0.5,
                        ),
                    ],
                ),
            ],
        ),
        next_downbeat=quantizationtools.QGridLeaf(
            preprolated_duration=1,
            q_event_proxies=[
                quantizationtools.QEventProxy(
                    quantizationtools.TerminalQEvent(200),
                    0.9,
                ),
            ],
        ),
    )
    assert format(a) == format(b)
    assert a != b
コード例 #3
0
def test_quantizationtools_QGrid___eq___03():
    a = quantizationtools.QGrid()
    b = quantizationtools.QGrid(root_node=quantizationtools.QGridContainer(
        preprolated_duration=1,
        children=[
            quantizationtools.QGridLeaf(
                preprolated_duration=1,
                q_event_proxies=[
                    quantizationtools.QEventProxy(
                        quantizationtools.SilentQEvent(100), 0.5)
                ],
            ),
        ],
    ), )
    c = quantizationtools.QGrid(next_downbeat=quantizationtools.QGridLeaf(
        preprolated_duration=1,
        q_event_proxies=[
            quantizationtools.QEventProxy(
                quantizationtools.TerminalQEvent(200), 0.9),
        ],
    ), )
    d = quantizationtools.QGrid(
        root_node=quantizationtools.QGridContainer(
            preprolated_duration=1,
            children=[
                quantizationtools.QGridLeaf(
                    preprolated_duration=1,
                    q_event_proxies=[
                        quantizationtools.QEventProxy(
                            quantizationtools.SilentQEvent(100), 0.5),
                    ],
                ),
            ],
        ),
        next_downbeat=quantizationtools.QGridLeaf(
            preprolated_duration=1,
            q_event_proxies=[
                quantizationtools.QEventProxy(
                    quantizationtools.TerminalQEvent(200),
                    0.9,
                ),
            ],
        ),
    ),

    assert a != b
    assert a != c
    assert a != d
    assert b != c
    assert b != d
    assert c != d
def test_quantizationtools_QEventSequence_from_tempo_scaled_leaves_02():

    staff = abjad.Staff([])

    staff.append(abjad.Note(0, (1, 4)))
    staff.append(abjad.Rest((1, 4)))
    staff.append(abjad.Rest((1, 8)))
    staff.append(abjad.Note(1, (1, 8)))
    staff.append(abjad.Note(1, (1, 8)))
    staff.append(abjad.Note(2, (1, 8)))
    staff.append(abjad.Note(2, (1, 8)))
    staff.append(abjad.Note(3, (1, 8)))
    staff.append(abjad.Skip((1, 4)))
    staff.append(abjad.Rest((1, 4)))
    staff.append(abjad.Note(3, (1, 8)))
    staff.append(abjad.Chord([0, 1, 4], (1, 4)))

    tie = abjad.Tie()
    abjad.attach(tie, staff[3:5])
    tie = abjad.Tie()
    abjad.attach(tie, staff[5:7])

    tempo = abjad.MetronomeMark((1, 4), 58)
    abjad.attach(tempo, staff[0], context='Staff')
    tempo = abjad.MetronomeMark((1, 4), 77)
    abjad.attach(tempo, staff[9], context='Staff')

    leaves = abjad.select(staff).leaves()
    q_events = quantizationtools.QEventSequence.from_tempo_scaled_leaves(
        leaves)

    assert q_events == quantizationtools.QEventSequence(
        (quantizationtools.PitchedQEvent(abjad.Offset(0, 1),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(30000, 29)),
         quantizationtools.PitchedQEvent(abjad.Offset(75000, 29),
                                         (abjad.NamedPitch("cs'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(105000, 29),
                                         (abjad.NamedPitch("d'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(135000, 29),
                                         (abjad.NamedPitch("ef'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(150000, 29)),
         quantizationtools.PitchedQEvent(abjad.Offset(15600000, 2233),
                                         (abjad.NamedPitch("ef'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(16470000, 2233), (
             abjad.NamedPitch("c'"),
             abjad.NamedPitch("cs'"),
             abjad.NamedPitch("e'"),
         )), quantizationtools.TerminalQEvent(abjad.Offset(18210000, 2233))))
def test_quantizationtools_SilentQEvent___init___02():

    q_event = quantizationtools.SilentQEvent(abjad.Offset(155, 7),
                                             attachments=['foo', 'bar', 'baz'])

    assert q_event.offset == abjad.Offset(155, 7)
    assert q_event.attachments == ('foo', 'bar', 'baz')
コード例 #6
0
def test_quantizationtools_QGrid_pickle_01():
    q_grid = quantizationtools.QGrid(
        root_node=quantizationtools.QGridContainer(
            preprolated_duration=1,
            children=[
                quantizationtools.QGridLeaf(
                    preprolated_duration=1,
                    q_event_proxies=[
                        quantizationtools.QEventProxy(
                            quantizationtools.SilentQEvent(100),
                            0.5,
                            ),
                        ],
                    ),
                ],
            ),
        next_downbeat=quantizationtools.QGridLeaf(
            preprolated_duration=1,
            q_event_proxies=[
                quantizationtools.QEventProxy(
                    quantizationtools.TerminalQEvent(200),
                    0.9,
                    ),
                ],
            ),
        )
    pickled = pickle.loads(pickle.dumps(q_grid))

    assert format(pickled) == format(q_grid)
    assert pickled is not q_grid
    assert pickled != q_grid, \
        systemtools.TestManager.diff(pickled, q_grid, 'Diff:')
コード例 #7
0
ファイル: QEventSequence.py プロジェクト: tchiwinpiti/abjad
    def from_tempo_scaled_durations(class_, durations, tempo=None):
        r'''Convert ``durations``, scaled by ``tempo``
        into a ``QEventSequence``:

        >>> tempo = abjad.MetronomeMark((1, 4), 174)
        >>> durations = [(1, 4), (-3, 16), (1, 16), (-1, 2)]
        >>> sequence = \
        ...     abjad.quantizationtools.QEventSequence.from_tempo_scaled_durations(
        ...     durations, tempo=tempo)

        >>> for q_event in sequence:
        ...     print(format(q_event, 'storage'))
        ...
        abjad.quantizationtools.PitchedQEvent(
            offset=abjad.Offset(0, 1),
            pitches=(
                abjad.NamedPitch("c'"),
                ),
            )
        abjad.quantizationtools.SilentQEvent(
            offset=abjad.Offset(10000, 29),
            )
        abjad.quantizationtools.PitchedQEvent(
            offset=abjad.Offset(17500, 29),
            pitches=(
                abjad.NamedPitch("c'"),
                ),
            )
        abjad.quantizationtools.SilentQEvent(
            offset=abjad.Offset(20000, 29),
            )
        abjad.quantizationtools.TerminalQEvent(
            offset=abjad.Offset(40000, 29),
            )

        Returns ``QEventSequence`` instance.
        '''
        import abjad
        from abjad.tools import quantizationtools
        durations = [abjad.Duration(x) for x in durations]
        assert isinstance(tempo, indicatortools.MetronomeMark)
        durations = [
            x for x in abjad.sequence(durations).sum_by_sign(sign=[-1]) if x
        ]
        durations = [tempo.duration_to_milliseconds(_) for _ in durations]
        offsets = mathtools.cumulative_sums([abs(_) for _ in durations])
        q_events = []
        for pair in zip(offsets, durations):
            offset = abjad.Offset(pair[0])
            duration = pair[1]
            # negative duration indicates silence
            if duration < 0:
                q_event = quantizationtools.SilentQEvent(offset)
            # otherwise use middle C
            else:
                q_event = quantizationtools.PitchedQEvent(offset, [0])
            q_events.append(q_event)
        # insert terminating silence QEvent
        q_events.append(quantizationtools.TerminalQEvent(offsets[-1]))
        return class_(q_events)
コード例 #8
0
def test_quantizationtools_PitchedQEvent___eq___03():

    a = quantizationtools.TerminalQEvent(100)
    b = quantizationtools.PitchedQEvent(100, [0])
    c = quantizationtools.SilentQEvent(100)

    assert a != b
    assert a != c
コード例 #9
0
def test_quantizationtools_QGridLeaf___eq___02():
    a = quantizationtools.QGridLeaf(1, [])
    b = quantizationtools.QGridLeaf(1, [
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1000),
                                      0.5)
    ])
    c = quantizationtools.QGridLeaf(2, [])
    d = quantizationtools.QGridLeaf(2, [
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1000),
                                      0.5)
    ])
    assert a != b
    assert a != c
    assert a != d
    assert b != c
    assert b != d
    assert c != d
def test_quantizationtools_QEventSequence_from_tempo_scaled_leaves_01():

    staff = abjad.Staff([])

    staff.append(abjad.Note(0, (1, 4)))
    staff.append(abjad.Rest((1, 4)))
    staff.append(abjad.Rest((1, 8)))
    staff.append(abjad.Note(1, (1, 8)))
    staff.append(abjad.Note(1, (1, 8)))
    staff.append(abjad.Note(2, (1, 8)))
    staff.append(abjad.Note(2, (1, 8)))
    staff.append(abjad.Note(3, (1, 8)))
    staff.append(abjad.Skip((1, 4)))
    staff.append(abjad.Rest((1, 4)))
    staff.append(abjad.Note(3, (1, 8)))
    staff.append(abjad.Chord([0, 1, 4], (1, 4)))

    tie = abjad.Tie()
    abjad.attach(tie, staff[3:5])
    tie = abjad.Tie()
    abjad.attach(tie, staff[5:7])

    tempo = abjad.MetronomeMark((1, 4), 55)

    leaves = abjad.select(staff).leaves()
    q_events = quantizationtools.QEventSequence.from_tempo_scaled_leaves(
        leaves, tempo)

    assert q_events == quantizationtools.QEventSequence(
        (quantizationtools.PitchedQEvent(abjad.Offset(0, 1),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(12000, 11)),
         quantizationtools.PitchedQEvent(abjad.Offset(30000, 11),
                                         (abjad.NamedPitch("cs'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(42000, 11),
                                         (abjad.NamedPitch("d'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(54000, 11),
                                         (abjad.NamedPitch("ef'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(60000, 11)),
         quantizationtools.PitchedQEvent(abjad.Offset(84000, 11),
                                         (abjad.NamedPitch("ef'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(90000, 11), (
             abjad.NamedPitch("c'"),
             abjad.NamedPitch("cs'"),
             abjad.NamedPitch("e'"),
         )), quantizationtools.TerminalQEvent(abjad.Offset(102000, 11))))
コード例 #11
0
def test_quantizationtools_QGridLeaf___copy___02():
    leaf = quantizationtools.QGridLeaf(2, [
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1000), 0.5)
        ])
    copied = copy.copy(leaf)
    assert format(leaf) == format(copied)
    assert leaf != copied
    assert leaf is not copied
コード例 #12
0
def test_quantizationtools_QGrid___call___03():
    r'''Non-binary works too.
    '''

    q_grid = quantizationtools.QGrid()
    q_grid.subdivide_leaves([(0, (1, 1))])

    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0, ['A']),
                                      0)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 20), ['B']), (1, 20))
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((9, 20), ['C']), (9, 20))
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['D']), (1, 2))
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1, ['G']),
                                      1)

    q_grid.fit_q_events([a, b, c, d, e, f, g])

    result = q_grid((1, 3))

    assert isinstance(result, list) and len(result) == 1
    assert format(result[0]) == abjad.String.normalize(r'''
        \tweak edge-height #'(0.7 . 0)
        \times 2/3 {
            c'4
            c'4
        }
        ''')
コード例 #13
0
def test_quantizationtools_QGrid_fit_q_events_01():

    q_grid = quantizationtools.QGrid()

    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0, ['A']),
                                      0)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 20), ['B']), (1, 20))
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((9, 20), ['C']), (9, 20))
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['D']), (1, 2))
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1, ['G']),
                                      1)

    q_grid.fit_q_events([a, b, c, d, e, f, g])

    assert q_grid.leaves[0].q_event_proxies == [a, b, c, d]
    assert q_grid.leaves[1].q_event_proxies == [e, f, g]

    q_events = q_grid.subdivide_leaves([(0, (1, 1))])

    q_grid.fit_q_events(q_events)

    assert q_grid.leaves[0].q_event_proxies == [a, b]
    assert q_grid.leaves[1].q_event_proxies == [c, d, e]
    assert q_grid.leaves[2].q_event_proxies == [g, f]
コード例 #14
0
def test_quantizationtools_QGrid___call___01():

    q_grid = quantizationtools.QGrid()
    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0, ['A']),
                                      0)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 20), ['B']), (1, 20))
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((9, 20), ['C']), (9, 20))
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['D']), (1, 2))
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1, ['G']),
                                      1)
    q_grid.fit_q_events([a, b, c, d, e, f, g])
    result = q_grid((1, 4))

    assert len(result) == 1
    assert format(result[0]) == "c'4"

    annotation = abjad.inspect(result[0]).get_indicator(dict)
    q_events = annotation['q_events']

    assert isinstance(q_events, tuple) and len(q_events) == 4
    assert q_events[0].attachments == ('A', )
    assert q_events[1].attachments == ('B', )
    assert q_events[2].attachments == ('C', )
    assert q_events[3].attachments == ('D', )
def test_quantizationtools_QEventSequence_from_millisecond_durations_03():
    r'''Silences are fused.
    '''

    durations = [100, -100, 100, -100, -100, 100]
    q_events = quantizationtools.QEventSequence.from_millisecond_durations(
        durations, fuse_silences=True)

    assert q_events == quantizationtools.QEventSequence(
        (quantizationtools.PitchedQEvent(abjad.Offset(0),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(100)),
         quantizationtools.PitchedQEvent(abjad.Offset(200),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(300)),
         quantizationtools.PitchedQEvent(abjad.Offset(500),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.TerminalQEvent(abjad.Offset(600))))
コード例 #16
0
def test_quantizationtools_QGrid___call___02():

    q_grid = quantizationtools.QGrid()
    q_grid.subdivide_leaves([(0, (1, 1, 1))])
    q_grid.subdivide_leaves([(1, (1, 1))])
    q_grid.subdivide_leaves([(-2, (1, 1, 1))])
    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0, ['A']),
                                      0)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 20), ['B']), (1, 20))
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((9, 20), ['C']), (9, 20))
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['D']), (1, 2))
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1, ['G']),
                                      1)
    q_grid.fit_q_events([a, b, c, d, e, f, g])
    result = q_grid((1, 4))

    assert isinstance(result, list) and len(result) == 1
    assert format(result[0]) == abjad.String.normalize(r'''
        \times 2/3 {
            c'8
            c'16
            c'16
            \times 2/3 {
                c'16
                c'16
                c'16
            }
        }
        ''')

    leaves = abjad.select(result[0]).leaves()
    leaf = leaves[0]
    annotation = abjad.inspect(leaf).get_indicator(dict)
    q_events = annotation['q_events']
    assert isinstance(q_events, tuple) and len(q_events) == 2
    assert q_events[0].attachments == ('A', )
    assert q_events[1].attachments == ('B', )

    leaf = leaves[1]
    assert not abjad.inspect(leaf).get_indicator(dict)

    leaf = leaves[2]
    annotation = abjad.inspect(leaf).get_indicator(dict)
    q_events = annotation['q_events']

    assert isinstance(q_events, tuple) and len(q_events) == 3
    assert q_events[0].attachments == ('C', )
    assert q_events[1].attachments == ('D', )
    assert q_events[2].attachments == ('E', )

    for leaf in leaves[3:6]:
        assert not abjad.inspect(leaf).get_indicators(dict)
def test_quantizationtools_QEventSequence_from_millisecond_pitch_pairs_01():

    durations = [100, 200, 100, 300, 350, 400, 600]
    pitches = [0, None, None, [1, 4], None, 5, 7]
    pairs = tuple(zip(durations, pitches))

    q_events = quantizationtools.QEventSequence.from_millisecond_pitch_pairs(
        pairs)

    assert q_events == quantizationtools.QEventSequence((
        quantizationtools.PitchedQEvent(
            abjad.Offset(0),
            (abjad.NamedPitch("c'"),)
            ),
        quantizationtools.SilentQEvent(
            abjad.Offset(100, 1)
            ),
        quantizationtools.PitchedQEvent(
            abjad.Offset(400, 1),
            (
                abjad.NamedPitch("cs'"),
                abjad.NamedPitch("e'")
            )
            ),
        quantizationtools.SilentQEvent(
            abjad.Offset(700, 1)
            ),
        quantizationtools.PitchedQEvent(
            abjad.Offset(1050, 1),
            (abjad.NamedPitch("f'"),)
            ),
        quantizationtools.PitchedQEvent(
            abjad.Offset(1450, 1),
            (abjad.NamedPitch("g'"),)
            ),
        quantizationtools.TerminalQEvent(
            abjad.Offset(2050, 1),
            )
    ))
def test_quantizationtools_QEventSequence_from_tempo_scaled_durations_02():
    r'''Silences are fused.
    '''

    durations = [
        abjad.Duration(x)
        for x in [(1, 4), (-1, 4), (1, 4), (1, 4), (-1, 4), (-1, 4), (1, 4)]
    ]
    tempo = abjad.MetronomeMark((1, 4), 77)
    q_events = quantizationtools.QEventSequence.from_tempo_scaled_durations(
        durations, tempo)

    assert q_events == quantizationtools.QEventSequence(
        (quantizationtools.PitchedQEvent(abjad.Offset(0, 1),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(60000, 77)),
         quantizationtools.PitchedQEvent(abjad.Offset(120000, 77),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.PitchedQEvent(abjad.Offset(180000, 77),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.SilentQEvent(abjad.Offset(240000, 77)),
         quantizationtools.PitchedQEvent(abjad.Offset(360000, 77),
                                         (abjad.NamedPitch("c'"), )),
         quantizationtools.TerminalQEvent(abjad.Offset(60000, 11))))
コード例 #19
0
def test_quantizationtools_QGrid_distance_01():

    q_grid = quantizationtools.QGrid()

    assert q_grid.distance is None

    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0,        ['A']), 0)
    q_grid.fit_q_events([a])
    assert q_grid.distance == abjad.Offset(0)

    b = quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 20),  ['B']), (1, 20))
    q_grid.fit_q_events([b])
    assert q_grid.distance == abjad.Offset(1, 40)

    c = quantizationtools.QEventProxy(quantizationtools.SilentQEvent((9, 20),  ['C']), (9, 20))
    q_grid.fit_q_events([c])
    assert q_grid.distance == abjad.Offset(1, 6)

    d = quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 2),   ['D']), (1, 2))
    q_grid.fit_q_events([d])
    assert q_grid.distance == abjad.Offset(1, 4)

    e = quantizationtools.QEventProxy(quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    q_grid.fit_q_events([e])
    assert q_grid.distance == abjad.Offset(29, 100)

    f = quantizationtools.QEventProxy(quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    q_grid.fit_q_events([f])
    assert q_grid.distance == abjad.Offset(1, 4)

    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1,        ['G']), 1)
    q_grid.fit_q_events([g])
    assert q_grid.distance == abjad.Offset(3, 14)

    q_events = q_grid.subdivide_leaves([(0, (1, 1))])
    q_grid.fit_q_events(q_events)

    assert q_grid.distance == abjad.Offset(1, 35)
コード例 #20
0
def test_quantizationtools_QGrid_subdivide_leaves_02():

    q_grid = quantizationtools.QGrid()

    a = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0, ['A']),
                                      0)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 20), ['B']), (1, 20))
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((9, 20), ['C']), (9, 20))
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['D']), (1, 2))
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((11, 20), ['E']), (11, 20))
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((19, 20), ['F']), (19, 20))
    g = quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1, ['G']),
                                      1)

    q_grid.leaves[0].q_event_proxies.extend([a, b, c, d])
    q_grid.leaves[1].q_event_proxies.extend([e, f, g])

    assert q_grid.root_node.rtm_format == '1'

    q_events = q_grid.subdivide_leaves([(0, (1, 1))])

    assert q_events == [a, b, c, d, e, f]
    assert q_grid.root_node.rtm_format == '(1 (1 1))'

    q_grid.leaves[0].q_event_proxies.extend([a, b])
    q_grid.leaves[1].q_event_proxies.extend([c, d, e])
    q_grid.leaves[2].q_event_proxies.append(f)

    q_events = q_grid.subdivide_leaves([(0, (3, 4, 5))])

    assert q_events == [a, b, c]
    assert q_grid.root_node.rtm_format == '(1 ((1 (3 4 5)) 1))'
コード例 #21
0
    def from_millisecond_durations(cls, milliseconds, fuse_silences=False):
        r'''Convert a sequence of millisecond durations ``durations`` into
        a ``QEventSequence``:

        ::

            >>> durations = [-250, 500, -1000, 1250, -1000]

        ::

            >>> sequence = \
            ...     quantizationtools.QEventSequence.from_millisecond_durations(
            ...     durations)

        ::

            >>> for q_event in sequence:
            ...     print(format(q_event, 'storage'))
            ...
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(0, 1),
                )
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(250, 1),
                pitches=(
                    pitchtools.NamedPitch("c'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(750, 1),
                )
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(1750, 1),
                pitches=(
                    pitchtools.NamedPitch("c'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(3000, 1),
                )
            quantizationtools.TerminalQEvent(
                offset=durationtools.Offset(4000, 1),
                )

        Returns ``QEventSequence`` instance.
        '''
        from abjad.tools import quantizationtools
        if fuse_silences:
            durations = [x for x in \
                sequencetools.sum_consecutive_elements_by_sign(
                    milliseconds, sign=[-1]) if x]
        else:
            durations = milliseconds
        offsets = mathtools.cumulative_sums([abs(x) for x in durations])
        q_events = []
        for pair in zip(offsets, durations):
            offset = durationtools.Offset(pair[0])
            duration = pair[1]
            if duration < 0:  # negative duration indicates silence
                q_event = quantizationtools.SilentQEvent(offset)
            else:
                q_event = quantizationtools.PitchedQEvent(offset, [0])
            q_events.append(q_event)
        q_events.append(
            quantizationtools.TerminalQEvent(durationtools.Offset(
                offsets[-1])))
        return cls(q_events)
def test_quantizationtools_UnweightedSearchTree___call___01():

    definition = {2: {2: {2: None}, 3: None}, 5: None}
    search_tree = quantizationtools.UnweightedSearchTree(definition)
    q_grid = quantizationtools.QGrid()
    a = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent(0, ['A'], index=1), 0, 1)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 5), ['B'], index=2), 0, 1)
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 4), ['C'], index=3), 0, 1)
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 3), ['D'], index=4), 0, 1)
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((2, 5), ['E'], index=5), 0, 1)
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['F'], index=6), 0, 1)
    g = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((3, 5), ['G'], index=7), 0, 1)
    h = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((2, 3), ['H'], index=8), 0, 1)
    i = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((3, 4), ['I'], index=9), 0, 1)
    j = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((4, 5), ['J'], index=10), 0, 1)
    k = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent(1, ['K'], index=11), 0, 1)
    q_grid.fit_q_events([a, b, c, d, e, f, g, h, i, j, k])

    q_grids = search_tree(q_grid)

    assert q_grids[0].root_node.rtm_format == '(1 (1 1))'
    assert q_grids[1].root_node.rtm_format == '(1 (1 1 1 1 1))'
コード例 #23
0
def test_quantizationtools_ParallelJobHandler___call___02():

    job_id = 1
    definition = {2: {2: {2: None}, 3: None}, 5: None}
    search_tree = quantizationtools.UnweightedSearchTree(definition)
    q_event_proxies = [
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent(0, ['A'], index=1), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 5), ['B'], index=2), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 4), ['C'], index=3), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 3), ['D'], index=4), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((2, 5), ['E'], index=5), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 2), ['F'], index=6), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((3, 5), ['G'], index=7), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((2, 3), ['H'], index=8), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((3, 4), ['I'], index=9), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((4, 5), ['J'], index=10), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent(1, ['K'], index=11), 0, 1)
    ]
    job_a = quantizationtools.QuantizationJob(job_id, search_tree,
                                              q_event_proxies)
    job_b = quantizationtools.QuantizationJob(job_id, search_tree,
                                              q_event_proxies)

    assert job_a == job_b

    a_jobs = quantizationtools.SerialJobHandler()([job_a])
    b_jobs = quantizationtools.ParallelJobHandler()([job_b])

    assert len(a_jobs) == len(b_jobs)

    a_rtms = sorted(
        [q_grid.root_node.rtm_format for q_grid in a_jobs[0].q_grids])
    b_rtms = sorted(
        [q_grid.root_node.rtm_format for q_grid in b_jobs[0].q_grids])

    assert a_rtms == b_rtms

    assert sorted(a_jobs[0].q_grids, key=lambda x: x.root_node.rtm_format) == \
        sorted(b_jobs[0].q_grids, key=lambda x: x.root_node.rtm_format)
コード例 #24
0
def test_quantizationtools_QuantizationJob___call___01():

    job_id = 1
    definition = {2: {2: {2: None}, 3: None}, 5: None}
    search_tree = quantizationtools.UnweightedSearchTree(definition)
    q_event_proxies = [
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent(0, ['A'], index=1), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 5), ['B'], index=2), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 4), ['C'], index=3), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 3), ['D'], index=4), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((2, 5), ['E'], index=5), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((1, 2), ['F'], index=6), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((3, 5), ['G'], index=7), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((2, 3), ['H'], index=8), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((3, 4), ['I'], index=9), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent((4, 5), ['J'], index=10), 0, 1),
        quantizationtools.QEventProxy(
            quantizationtools.SilentQEvent(1, ['K'], index=11), 0, 1)
    ]
    job = quantizationtools.QuantizationJob(job_id, search_tree,
                                            q_event_proxies)
    job()

    assert len(job.q_grids) == 10

    rtm_formats = [q_grid.root_node.rtm_format for q_grid in job.q_grids]
    rtm_formats.sort(reverse=True)

    assert rtm_formats == [
        '1', '(1 (1 1))', '(1 (1 1 1 1 1))', '(1 ((1 (1 1)) (1 (1 1))))',
        '(1 ((1 (1 1)) (1 (1 1 1))))', '(1 ((1 (1 1 1)) (1 (1 1))))',
        '(1 ((1 (1 1 1)) (1 (1 1 1))))',
        '(1 ((1 (1 1 1)) (1 ((1 (1 1)) (1 (1 1))))))',
        '(1 ((1 ((1 (1 1)) (1 (1 1)))) (1 (1 1 1))))',
        '(1 ((1 ((1 (1 1)) (1 (1 1)))) (1 ((1 (1 1)) (1 (1 1))))))'
    ], rtm_formats
コード例 #25
0
def test_quantizationtools_SilentQEvent___eq___01():

    a = quantizationtools.SilentQEvent(1000)
    b = quantizationtools.SilentQEvent(1000)

    assert a == b
コード例 #26
0
    def from_millisecond_pitch_pairs(cls, pairs):
        r'''Convert millisecond-duration:pitch pairs ``pairs`` into a
        ``QEventSequence``:

        ::

            >>> durations = [250, 500, 1000, 1250, 1000]
            >>> pitches = [(0,), None, (2, 3), None, (1,)]
            >>> pairs = tuple(zip(durations, pitches))

        ::

            >>> sequence = \
            ...     quantizationtools.QEventSequence.from_millisecond_pitch_pairs(
            ...     pairs)

        ::

            >>> for q_event in sequence:
            ...     print(format(q_event, 'storage'))
            ...
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(0, 1),
                pitches=(
                    pitchtools.NamedPitch("c'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(250, 1),
                )
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(750, 1),
                pitches=(
                    pitchtools.NamedPitch("d'"),
                    pitchtools.NamedPitch("ef'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(1750, 1),
                )
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(3000, 1),
                pitches=(
                    pitchtools.NamedPitch("cs'"),
                    ),
                )
            quantizationtools.TerminalQEvent(
                offset=durationtools.Offset(4000, 1),
                )

        Returns ``QEventSequence`` instance.
        '''
        from abjad.tools import quantizationtools
        assert isinstance(pairs, collections.Iterable)
        assert all(isinstance(x, collections.Iterable) for x in pairs)
        assert all(len(x) == 2 for x in pairs)
        assert all(0 < x[0] for x in pairs)
        for pair in pairs:
            assert isinstance(
                pair[1], (numbers.Number, type(None), collections.Iterable))
            if isinstance(pair[1], collections.Iterable):
                assert 0 < len(pair[1])
                assert all(isinstance(x, numbers.Number) for x in pair[1])
        # fuse silences
        g = itertools.groupby(pairs, lambda x: x[1] is not None)
        groups = []
        for value, group in g:
            if value:
                groups.extend(list(group))
            else:
                duration = sum(x[0] for x in group)
                groups.append((duration, None))
        # find offsets
        offsets = mathtools.cumulative_sums([abs(x[0]) for x in groups])
        # build QEvents
        q_events = []
        for pair in zip(offsets, groups):
            offset = durationtools.Offset(pair[0])
            pitches = pair[1][1]
            if isinstance(pitches, collections.Iterable):
                assert all(isinstance(x, numbers.Number) for x in pitches)
                q_events.append(
                    quantizationtools.PitchedQEvent(offset, pitches))
            elif isinstance(pitches, type(None)):
                q_events.append(quantizationtools.SilentQEvent(offset))
            elif isinstance(pitches, numbers.Number):
                q_events.append(
                    quantizationtools.PitchedQEvent(offset, [pitches]))
        q_events.append(
            quantizationtools.TerminalQEvent(durationtools.Offset(
                offsets[-1])))
        return cls(q_events)
コード例 #27
0
def test_quantizationtools_WeightedSearchTree___call___01():
    definition = {
        'divisors': (2, 3, 5, 7),
        'max_depth': 3,
        'max_divisions': 2,
    }
    search_tree = quantizationtools.WeightedSearchTree(definition)
    q_grid = quantizationtools.QGrid()
    a = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent(0, ['A'], index=1), 0, 1)
    b = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 5), ['B'], index=2), 0, 1)
    c = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 4), ['C'], index=3), 0, 1)
    d = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 3), ['D'], index=4), 0, 1)
    e = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((2, 5), ['E'], index=5), 0, 1)
    f = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((1, 2), ['F'], index=6), 0, 1)
    g = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((3, 5), ['G'], index=7), 0, 1)
    h = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((2, 3), ['H'], index=8), 0, 1)
    i = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((3, 4), ['I'], index=9), 0, 1)
    j = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent((4, 5), ['J'], index=10), 0, 1)
    k = quantizationtools.QEventProxy(
        quantizationtools.SilentQEvent(1, ['K'], index=11), 0, 1)
    q_grid.fit_q_events([a, b, c, d, e, f, g, h, i, j, k])
    q_grids = search_tree(q_grid)

    assert [q_grid.root_node.rtm_format for q_grid in q_grids] == [
        '(1 (1 1))', '(1 (2 1))', '(1 (1 2))', '(1 (4 1))', '(1 (3 2))',
        '(1 (2 3))', '(1 (1 4))', '(1 (6 1))', '(1 (5 2))', '(1 (4 3))',
        '(1 (3 4))', '(1 (2 5))', '(1 (1 6))'
    ]
コード例 #28
0
def test_quantizationtools_QuantizationJob_pickle_01():
    job_id = 1
    definition = {
        2: {
            2: {
                2: None
                },
                3: None
            },
            5: None
        }
    search_tree = quantizationtools.UnweightedSearchTree(definition)
    q_event_proxies = [
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent(0,      ['A'], index=1), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 5), ['B'], index=2), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 4), ['C'], index=3), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 3), ['D'], index=4), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((2, 5), ['E'], index=5), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((1, 2), ['F'], index=6), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((3, 5), ['G'], index=7), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((2, 3), ['H'], index=8), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((3, 4), ['I'], index=9), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent((4, 5), ['J'], index=10), 0, 1),
        quantizationtools.QEventProxy(quantizationtools.SilentQEvent(1,      ['K'], index=11), 0, 1)
        ]
    job = quantizationtools.QuantizationJob(job_id, search_tree, q_event_proxies)

    pickled = pickle.loads(pickle.dumps(job))

    assert pickled is not job
    assert format(pickled) == format(job), \
        systemtools.TestManager.diff(pickled, job, 'Diff:')

    job()

    pickled = pickle.loads(pickle.dumps(job))

    assert pickled is not job
    assert format(pickled) == format(job), \
        systemtools.TestManager.diff(pickled, job, 'Diff:')
コード例 #29
0
    def from_tempo_scaled_durations(cls, durations, tempo=None):
        r'''Convert ``durations``, scaled by ``tempo``
        into a ``QEventSequence``:

        ::

            >>> tempo = Tempo((1, 4), 174)
            >>> durations = [(1, 4), (-3, 16), (1, 16), (-1, 2)]

        ::

            >>> sequence = \
            ...     quantizationtools.QEventSequence.from_tempo_scaled_durations(
            ...     durations, tempo=tempo)

        ::

            >>> for q_event in sequence:
            ...     print(format(q_event, 'storage'))
            ...
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(0, 1),
                pitches=(
                    pitchtools.NamedPitch("c'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(10000, 29),
                )
            quantizationtools.PitchedQEvent(
                offset=durationtools.Offset(17500, 29),
                pitches=(
                    pitchtools.NamedPitch("c'"),
                    ),
                )
            quantizationtools.SilentQEvent(
                offset=durationtools.Offset(20000, 29),
                )
            quantizationtools.TerminalQEvent(
                offset=durationtools.Offset(40000, 29),
                )

        Returns ``QEventSequence`` instance.
        '''
        from abjad.tools import quantizationtools
        durations = [durationtools.Duration(x) for x in durations]
        assert isinstance(tempo, indicatortools.Tempo)
        durations = [
            x for x in sequencetools.sum_consecutive_elements_by_sign(
                durations,
                sign=[-1],
            ) if x
        ]
        durations = [tempo.duration_to_milliseconds(x) for x in durations]
        offsets = mathtools.cumulative_sums(abs(x) for x in durations)
        q_events = []
        for pair in zip(offsets, durations):
            offset = durationtools.Offset(pair[0])
            duration = pair[1]
            if duration < 0:  # negative duration indicates silence
                q_event = quantizationtools.SilentQEvent(offset)
            else:  # otherwise, use middle-C
                q_event = quantizationtools.PitchedQEvent(offset, [0])
            q_events.append(q_event)
        # insert terminating silence QEvent
        q_events.append(quantizationtools.TerminalQEvent(offsets[-1]))
        return cls(q_events)
コード例 #30
0
def test_quantizationtools_SilentQEvent___init___01():

    q_event = quantizationtools.SilentQEvent(130)

    assert q_event.offset == abjad.Offset(130)
    assert q_event.attachments == ()