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
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
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')
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:')
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)
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
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))))
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
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 } ''')
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]
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))))
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))))
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)
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))'
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))'
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)
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
def test_quantizationtools_SilentQEvent___eq___01(): a = quantizationtools.SilentQEvent(1000) b = quantizationtools.SilentQEvent(1000) assert a == b
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)
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))' ]
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:')
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)
def test_quantizationtools_SilentQEvent___init___01(): q_event = quantizationtools.SilentQEvent(130) assert q_event.offset == abjad.Offset(130) assert q_event.attachments == ()