def test_mutate__split_leaf_by_durations_07(): """ After grace notes are removed from first split leaf. """ note = abjad.Note("c'4") after_grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(after_grace, note) new_leaves = abjad.mutate._split_leaf_by_durations(note, [abjad.Duration(1, 8)]) staff = abjad.Staff(new_leaves) assert abjad.lilypond(staff) == abjad.String.normalize(r""" \new Staff { c'8 ~ \afterGrace c'8 { c'32 } } """), print(abjad.lilypond(staff)) assert abjad.get.after_grace_container(new_leaves[0]) is None assert len(abjad.get.after_grace_container(new_leaves[1])) == 1 abjad.wf.wellformed(staff)
def test_scoretools_GraceContainer___copy___01(): grace_container_1 = abjad.AfterGraceContainer([abjad.Note("d'32")]) grace_container_2 = copy.copy(grace_container_1) assert grace_container_1 is not grace_container_2 assert isinstance(grace_container_2, abjad.AfterGraceContainer)
def test_Leaf__split_by_durations_14(): """ After grace notes are removed from first split leaf. """ note = abjad.Note("c'4") grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(grace, note) new_leaves = note._split_by_durations([abjad.Duration(5, 32)]) staff = abjad.Staff(new_leaves) assert format(staff) == abjad.String.normalize(r""" \new Staff { c'8 ~ c'32 ~ \afterGrace c'16. { c'32 } } """), print(format(staff)) abjad.inspect(staff).wellformed()
def test_Leaf__split_by_durations_07(): """ After grace notes are removed from first split leaf. """ note = abjad.Note("c'4") after_grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(after_grace, note) new_leaves = note._split_by_durations([abjad.Duration(1, 8)]) staff = abjad.Staff(new_leaves) assert format(staff) == abjad.String.normalize( r""" \new Staff { c'8 ~ \afterGrace c'8 { c'32 } } """ ), print(format(staff)) assert abjad.inspect(new_leaves[0]).after_grace_container() is None assert len(abjad.inspect(new_leaves[1]).after_grace_container()) == 1 abjad.inspect(staff).wellformed()
def test_scoretools_Note___copy___04(): r'''Copy note with grace container. ''' note_1 = abjad.Note("c'4") grace_container_1 = abjad.AfterGraceContainer([abjad.Note("d'32")]) abjad.attach(grace_container_1, note_1) assert format(note_1) == abjad.String.normalize( r''' \afterGrace c'4 { d'32 } ''' ) note_2 = copy.copy(note_1) grace_container_2 = abjad.inspect(note_2).get_after_grace_container() assert format(note_2) == abjad.String.normalize( r''' \afterGrace c'4 { d'32 } ''' ) assert note_1 is not note_2 assert grace_container_1 is not grace_container_2 assert isinstance(grace_container_1, abjad.AfterGraceContainer)
def test_Note___copy___04(): """ Copy note with grace container. """ note_1 = abjad.Note("c'4") grace_container_1 = abjad.AfterGraceContainer([abjad.Note("d'32")]) abjad.attach(grace_container_1, note_1) assert abjad.lilypond(note_1) == abjad.String.normalize(r""" \afterGrace c'4 { d'32 } """) note_2 = copy.copy(note_1) grace_container_2 = abjad.get.after_grace_container(note_2) assert abjad.lilypond(note_2) == abjad.String.normalize(r""" \afterGrace c'4 { d'32 } """) assert note_1 is not note_2 assert grace_container_1 is not grace_container_2 assert isinstance(grace_container_1, abjad.AfterGraceContainer)
def test_GraceContainer_parentage_03(): """ Grace containers bound to leaf have their correct main leaf after assignment. """ note = abjad.Note(1, (1, 4)) after_grace = abjad.AfterGraceContainer([abjad.Note("e'16")]) abjad.attach(after_grace, note) grace = abjad.GraceContainer([abjad.Note("e'16")]) abjad.attach(grace, note) assert after_grace._main_leaf is note assert grace._main_leaf is note after_grace[:] = [] notes = [abjad.Note("c'8"), abjad.Note("d'8")] after_grace.extend(notes) grace[:] = [] notes = [abjad.Note("c'8"), abjad.Note("d'8")] grace.extend(notes) assert after_grace._main_leaf is note assert grace._main_leaf is note after_grace[:] = [] grace[:] = [] assert after_grace._main_leaf is note assert grace._main_leaf is note
def test_Note_grace_06(): """ Attaches several after grace notes. """ note = abjad.Note("c'4") grace_notes = [ abjad.Note(0, (1, 16)), abjad.Note(2, (1, 16)), abjad.Note(4, (1, 16)), ] grace = abjad.AfterGraceContainer(grace_notes) abjad.attach(grace, note) assert format(note) == abjad.String.normalize( r""" \afterGrace c'4 { c'16 d'16 e'16 } """ )
def test_mutate__split_leaf_by_durations_08(): """ After grace notes are removed from first split leaf. """ note = abjad.Note("c'4") grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(grace, note) new_leaves = abjad.mutate._split_leaf_by_durations(note, [abjad.Duration(5, 32)]) staff = abjad.Staff(new_leaves) assert abjad.lilypond(staff) == abjad.String.normalize(r""" \new Staff { c'8 ~ c'32 ~ \afterGrace c'16. { c'32 } } """), print(abjad.lilypond(staff)) abjad.wf.wellformed(staff)
def _notate_glissando(name: str) -> None: staff = abjad.Staff([ abjad.Note("a'", 3 / 16), abjad.Note("a'", 1 / 16), abjad.Note("a'", 1 / 8), abjad.Note("a'", 1 / 8), ]) abjad.attach( abjad.LilyPondLiteral("#(define afterGraceFraction (cons 15 16))"), staff[0]) abjad.attach( abjad.LilyPondLiteral('\\override Flag.stroke-style = #"grace"'), staff[0], ) for n in (0, 2): attachments._GlissandoAttachment._set_glissando_layout( staff[n + 1], minimum_length=3) abjad.attach(abjad.AfterGraceContainer([abjad.Note("f'", 1 / 8)]), staff[n + 1]) abjad.attach(abjad.Tie(), staff[n]) abjad.attach(abjad.StartBeam(), staff[n]) abjad.attach(abjad.StopBeam(), staff[n + 1]) abjad.attach(abjad.GlissandoIndicator(), staff[n + 1]) abjad.attach(lily.mk_no_time_signature(), staff[0]) abjad.attach(abjad.TimeSignature((len(staff), 1)), staff[0]) abjad.attach(abjad.Clef("treble"), staff[0]) sco = abjad.Score([staff]) lily.make_small_example(sco, name, ragged_last=True, ragged_right=True)
def test_scoretools_GraceContainer_05(): grace_container = abjad.AfterGraceContainer("c'8 c'8 c'8") assert format(grace_container) == abjad.String.normalize(r''' { c'8 c'8 c'8 } ''')
def test_GraceContainer_05(): grace_container = abjad.AfterGraceContainer("c'8 c'8 c'8") assert format(grace_container) == abjad.String.normalize(r""" { c'8 c'8 c'8 } """)
def test_scoretools_Leaf__split_by_durations_15(): r'''After grace notes are removed from first split leaf. ''' note = abjad.Note("c'4") after_grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(after_grace, note) halves = note._split_by_durations([abjad.Duration(1, 8)]) assert abjad.inspect(halves[0][0]).get_after_grace_container() is None assert len(abjad.inspect(halves[1][0]).get_after_grace_container()) == 1
def test_scoretools_Leaf__split_by_durations_16(): r'''After grace notes are removed from first split leaf. ''' note = abjad.Note("c'4") grace = abjad.AfterGraceContainer([abjad.Note(0, (1, 32))]) abjad.attach(grace, note) halves = note._split_by_durations([abjad.Duration(5, 32)]) assert len(halves) == 2 assert getattr(halves[0][0], 'after_grace', None) is None assert getattr(halves[0][1], 'after_grace', None) is None assert len(halves[1]) == 1 after_grace = abjad.inspect(halves[1][0]).get_after_grace_container() assert len(after_grace) == 1
def test_Note_grace_05(): """ Attaches one after grace note. """ note = abjad.Note("c'4") grace = abjad.AfterGraceContainer([abjad.Note(2, (1, 16))]) abjad.attach(grace, note) assert format(note) == abjad.String.normalize(r""" \afterGrace c'4 { d'16 } """)
def test_scoretools_Note_grace_05(): r'''Attaches one after grace note. ''' note = abjad.Note("c'4") grace = abjad.AfterGraceContainer([abjad.Note(2, (1, 16))]) abjad.attach(grace, note) assert format(note) == abjad.String.normalize( r''' \afterGrace c'4 { d'16 } ''' )
def test_scoretools_Note_grace_06(): r'''Attaches several after grace notes. ''' note = abjad.Note("c'4") grace_notes = [abjad.Note(0, (1, 16)), abjad.Note(2, (1, 16)), abjad.Note(4, (1, 16))] grace = abjad.AfterGraceContainer(grace_notes) abjad.attach(grace, note) assert format(note) == abjad.String.normalize( r''' \afterGrace c'4 { c'16 d'16 e'16 } ''' )
def test_scoretools_GraceContainer_parentage_03(): r'''Grace containers bound to leaf have their correct carrier after assignment. ''' note = abjad.Note(1, (1, 4)) after_grace = abjad.AfterGraceContainer([abjad.Note("e'16")]) abjad.attach(after_grace, note) grace = abjad.GraceContainer([abjad.Note("e'16")]) abjad.attach(grace, note) assert after_grace._carrier is note assert grace._carrier is note after_grace[:] = [] notes = [abjad.Note("c'8"), abjad.Note("d'8")] after_grace.extend(notes) grace[:] = [] notes = [abjad.Note("c'8"), abjad.Note("d'8")] grace.extend(notes) assert after_grace._carrier is note assert grace._carrier is note after_grace[:] = [] grace[:] = [] assert after_grace._carrier is note assert grace._carrier is note
def handle_orphaned_q_event_proxies(self, last_leaf, q_event_proxies): r""" Embeds orphaned ``QEvents`` into an ``AfterGraceContainer`` and attaches it to the last leaf. .. container:: example >>> durations = [1000, 1000, 1000, 400, 50, 50] >>> pitches = range(len(durations)) >>> quantizer = nauert.Quantizer() >>> q_event_sequence = nauert.QEventSequence.from_millisecond_pitch_pairs( ... tuple(zip(durations, pitches)) ... ) >>> search_tree = nauert.UnweightedSearchTree() >>> attack_point_optimizer = nauert.MeasurewiseAttackPointOptimizer() >>> q_schema = nauert.MeasurewiseQSchema( ... search_tree=search_tree, time_signature=(7, 8), use_full_measure=True ... ) >>> result = quantizer( ... q_event_sequence, ... q_schema=q_schema, ... attach_tempos=True, ... attack_point_optimizer=attack_point_optimizer, ... ) >>> staff = abjad.Staff([result]) >>> abjad.show(staff) # doctest: +SKIP .. docs:: >>> string = abjad.lilypond(staff) >>> print(string) \new Staff { \new Voice { { \tempo 4=60 \time 7/8 c'4 cs'8 ~ cs'8 d'8 ~ d'8 \afterGrace ef'8 { e'16 f'16 } } } } """ grace_container = abjad.AfterGraceContainer() if q_event_proxies else None for proxy in q_event_proxies: q_event = proxy.q_event if isinstance(q_event, PitchedQEvent): if len(q_event.pitches) == 1: leaf = abjad.Note(q_event.pitches[0], self.grace_duration) else: leaf = abjad.Chord(q_event.pitches, self.grace_duration) abjad.annotate(leaf, "q_event_attachments", q_event.attachments) assert grace_container is not None grace_container.append(leaf) if grace_container: # TODO: check if the grace_container is empty? abjad.attach(grace_container, last_leaf)