def test_LilyPondParser__spanners__Glissando_01(): target = abjad.Container([abjad.Note(0, 1), abjad.Note(0, 1)]) abjad.glissando(target[:]) parser = abjad.parser.LilyPondParser() result = parser(abjad.lilypond(target)) assert abjad.lilypond(target) == abjad.lilypond(result) and target is not result
def attach_glissandi(nucleus_voice): selections = [[]] leaves = abjad.iterate(nucleus_voice).leaves() for leaf_index, leaf in enumerate(leaves): if 641 <= leaf_index: leaf_index += 2 string = letter_maker.nuclei[leaf_index] if string == 0: glissando = False else: result = letter_maker.get_body_pitch_shape_glissando(string) pitch, shape, glissando = result if glissando: assert isinstance(leaf, abjad.Note), repr(leaf) selections[-1].append(leaf) elif not selections[-1] == []: selections.append([]) if selections[-1] == []: selections.pop() selections = [abjad.select(_) for _ in selections] for selection in selections: next_leaf = abjad.inspect(selection[-1]).leaf(1) if next_leaf is not None: selection = selection + [next_leaf] abjad.glissando(selection, allow_repeats=True) triples = abjad.sequence(selection).nwise(n=3) for left_note, middle_note, right_note in triples: if not (left_note.written_pitch == middle_note.written_pitch == right_note.written_pitch): continue abjad.override(middle_note).note_head.transparent = True grob_proxy = abjad.override(middle_note).glissando grob_proxy.bound_details__left__padding = -1.2
def test_Container___delitem___08(): """ Deletes leaf from nested container. """ voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]") leaves = abjad.select(voice).leaves() abjad.glissando(leaves) assert format(voice) == abjad.String.normalize( r""" \new Voice { c'8 [ \glissando { d'8 \glissando e'8 \glissando } f'8 ] } """ ) leaf = leaves[1] del voice[1][0] assert format(voice) == abjad.String.normalize( r""" \new Voice { c'8 [ \glissando { e'8 \glissando } f'8 ] } """ ) assert abjad.inspect(voice).wellformed() assert abjad.inspect(leaf).wellformed()
def test_Container___delitem___08(): """ Deletes leaf from nested container. """ voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]") leaves = abjad.select(voice).leaves() abjad.glissando(leaves) string = abjad.lilypond(voice) assert string == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando { d'8 \glissando e'8 \glissando } f'8 ] } """), print(string) leaf = leaves[1] del voice[1][0] string = abjad.lilypond(voice) assert string == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando { e'8 \glissando } f'8 ] } """), print(string) assert abjad.wf.wellformed(voice) assert abjad.wf.wellformed(leaf)
def test_Container___delitem___08(): """ Deletes leaf from nested container. """ voice = abjad.Voice("c'8 [ { d'8 e'8 } f'8 ]") leaves = abjad.select(voice).leaves() abjad.glissando(leaves) assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando %! abjad.glissando(7) { d'8 \glissando %! abjad.glissando(7) e'8 \glissando %! abjad.glissando(7) } f'8 ] } """), abjad.f(voice) leaf = leaves[1] del voice[1][0] assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando %! abjad.glissando(7) { e'8 \glissando %! abjad.glissando(7) } f'8 ] } """), abjad.f(voice) assert abjad.inspect(voice).wellformed() assert abjad.inspect(leaf).wellformed()
def test_Mutation_extract_02(): """ Extracts multiple notes. """ voice = abjad.Voice("c'8 d'8 e'8 f'8") abjad.beam(voice[:]) abjad.glissando(voice[:]) assert format(voice) == abjad.String.normalize( r""" \new Voice { c'8 [ \glissando d'8 \glissando e'8 \glissando f'8 ] } """ ), print(format(voice)) notes = voice[:2] for note in notes: abjad.mutate(note).extract() assert format(voice) == abjad.String.normalize( r""" \new Voice { e'8 \glissando f'8 ] } """ ), print(format(voice)) for note in notes: assert abjad.inspect(note).wellformed() assert abjad.inspect(voice).wellformed()
def test_Mutation_extract_02(): """ Extracts multiple notes. """ voice = abjad.Voice("c'8 d'8 e'8 f'8") abjad.beam(voice[:]) abjad.glissando(voice[:]) assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando %! abjad.glissando(7) d'8 \glissando %! abjad.glissando(7) e'8 \glissando %! abjad.glissando(7) f'8 ] } """), print(format(voice)) notes = voice[:2] for note in notes: abjad.mutate(note).extract() assert format(voice) == abjad.String.normalize(r""" \new Voice { e'8 \glissando %! abjad.glissando(7) f'8 ] } """), print(format(voice)) for note in notes: assert abjad.inspect(note).wellformed() assert abjad.inspect(voice).wellformed()
def test_Mutation_extract_01(): """ Extracts note. """ voice = abjad.Voice("c'8 d'8 e'8 f'8") abjad.beam(voice[:]) abjad.glissando(voice[:]) assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando d'8 \glissando e'8 \glissando f'8 ] } """), print(format(voice)) note = voice[1] abjad.mutate(note).extract() assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando e'8 \glissando f'8 ] } """), print(format(voice)) assert abjad.inspect(note).wellformed() assert abjad.inspect(voice).wellformed()
def test_mutate_extract_02(): """ Extracts multiple notes. """ voice = abjad.Voice("c'8 d'8 e'8 f'8") abjad.beam(voice[:]) abjad.glissando(voice[:]) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando %! abjad.glissando(7) d'8 \glissando %! abjad.glissando(7) e'8 \glissando %! abjad.glissando(7) f'8 ] } """), print(abjad.lilypond(voice)) notes = voice[:2] for note in notes: abjad.mutate.extract(note) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { e'8 \glissando %! abjad.glissando(7) f'8 ] } """), print(abjad.lilypond(voice)) for note in notes: assert abjad.wf.wellformed(note) assert abjad.wf.wellformed(voice)
def test_mutate_extract_01(): """ Extracts note. """ voice = abjad.Voice("c'8 d'8 e'8 f'8") abjad.beam(voice[:]) abjad.glissando(voice[:]) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando d'8 \glissando e'8 \glissando f'8 ] } """), print(abjad.lilypond(voice)) note = voice[1] abjad.mutate.extract(note) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando e'8 \glissando f'8 ] } """), print(abjad.lilypond(voice)) assert abjad.wf.wellformed(note) assert abjad.wf.wellformed(voice)
def test_Mutation_extract_04(): """ Extracts multiple containers. """ voice = abjad.Voice() voice.append(abjad.Container("c'8 d'8")) voice.append(abjad.Container("e'8 f'8")) voice.append(abjad.Container("g'8 a'8")) leaves = abjad.select(voice).leaves() abjad.beam(leaves) abjad.glissando(leaves) assert format(voice) == abjad.String.normalize(r""" \new Voice { { c'8 [ \glissando %! abjad.glissando(7) d'8 \glissando %! abjad.glissando(7) } { e'8 \glissando %! abjad.glissando(7) f'8 \glissando %! abjad.glissando(7) } { g'8 \glissando %! abjad.glissando(7) a'8 ] } } """), print(format(voice)) containers = voice[:2] for container in containers: abjad.mutate(container).extract() assert format(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando %! abjad.glissando(7) d'8 \glissando %! abjad.glissando(7) e'8 \glissando %! abjad.glissando(7) f'8 \glissando %! abjad.glissando(7) { g'8 \glissando %! abjad.glissando(7) a'8 ] } } """), print(format(voice)) for container in containers: assert not container assert abjad.inspect(voice).wellformed()
def make_gliss(selections): abjad.glissando(selections[:])
def test_Mutation_extract_04(): """ Extracts multiple containers. """ voice = abjad.Voice() voice.append(abjad.Container("c'8 d'8")) voice.append(abjad.Container("e'8 f'8")) voice.append(abjad.Container("g'8 a'8")) leaves = abjad.select(voice).leaves() abjad.beam(leaves) abjad.glissando(leaves) assert format(voice) == abjad.String.normalize( r""" \new Voice { { c'8 [ \glissando d'8 \glissando } { e'8 \glissando f'8 \glissando } { g'8 \glissando a'8 ] } } """ ), print(format(voice)) containers = voice[:2] for container in containers: abjad.mutate(container).extract() assert format(voice) == abjad.String.normalize( r""" \new Voice { c'8 [ \glissando d'8 \glissando e'8 \glissando f'8 \glissando { g'8 \glissando a'8 ] } } """ ), print(format(voice)) for container in containers: assert not container assert abjad.inspect(voice).wellformed()
def __illustrate__(self): r""" Illustrates pitch range. .. container:: example >>> pitch_range = abjad.PitchRange('[C3, C7]') >>> abjad.show(pitch_range) # doctest: +SKIP .. docs:: >>> lilypond_file = pitch_range.__illustrate__() >>> abjad.f(lilypond_file[abjad.Score]) \new Score \with { \override BarLine.stencil = ##f \override Glissando.thickness = #2 \override SpanBar.stencil = ##f \override TimeSignature.stencil = ##f } << \new PianoStaff << \context Staff = "Treble_Staff" { \clef "treble" s1 * 1/4 s1 * 1/4 } \context Staff = "Bass_Staff" { \clef "bass" c1 * 1/4 \glissando \change Staff = Treble_Staff c''''1 * 1/4 } >> >> Returns LilyPond file. """ import abjad start_pitch_clef = abjad.Clef.from_selection(self.start_pitch) stop_pitch_clef = abjad.Clef.from_selection(self.stop_pitch) start_note = abjad.Note(self.start_pitch, 1) stop_note = abjad.Note(self.stop_pitch, 1) if start_pitch_clef == stop_pitch_clef: if start_pitch_clef == abjad.Clef('bass'): bass_staff = abjad.Staff() abjad.attach(abjad.Clef('bass'), bass_staff) bass_staff.extend([start_note, stop_note]) bass_leaves = abjad.select(bass_staff).leaves() abjad.glissando(bass_leaves) score = abjad.Score([bass_staff]) else: treble_staff = abjad.Staff() abjad.attach(abjad.Clef('treble'), treble_staff) treble_staff.extend([start_note, stop_note]) treble_leaves = abjad.select(treble_staff).leaves() abjad.glissando(treble_leaves) score = abjad.Score([treble_staff]) else: result = abjad.Score.make_piano_score() score, treble_staff, bass_staff = result bass_staff.extend([start_note, stop_note]) treble_staff.extend(abjad.Skip(1) * 2) bass_leaves = abjad.select(bass_staff).leaves() abjad.glissando(bass_leaves) abjad.attach(abjad.StaffChange(treble_staff), bass_staff[1]) abjad.attach(abjad.Clef('treble'), treble_staff[0]) abjad.attach(abjad.Clef('bass'), bass_staff[0]) for leaf in abjad.iterate(score).leaves(): leaf.multiplier = (1, 4) abjad.override(score).bar_line.stencil = False abjad.override(score).span_bar.stencil = False abjad.override(score).glissando.thickness = 2 abjad.override(score).time_signature.stencil = False lilypond_file = abjad.LilyPondFile.new(score) return lilypond_file
def __illustrate__(self): r""" Illustrates pitch range. .. container:: example >>> pitch_range = abjad.PitchRange('[C3, C7]') >>> abjad.show(pitch_range) # doctest: +SKIP .. docs:: >>> lilypond_file = pitch_range.__illustrate__() >>> abjad.f(lilypond_file[abjad.Score]) \new Score \with { \override BarLine.stencil = ##f \override Glissando.thickness = #2 \override SpanBar.stencil = ##f \override TimeSignature.stencil = ##f } << \new PianoStaff << \context Staff = "Treble_Staff" { \clef "treble" s1 * 1/4 s1 * 1/4 } \context Staff = "Bass_Staff" { \clef "bass" c1 * 1/4 \glissando \change Staff = Treble_Staff c''''1 * 1/4 } >> >> Returns LilyPond file. """ import abjad start_pitch_clef = abjad.Clef.from_selection(self.start_pitch) stop_pitch_clef = abjad.Clef.from_selection(self.stop_pitch) start_note = abjad.Note(self.start_pitch, 1) stop_note = abjad.Note(self.stop_pitch, 1) if start_pitch_clef == stop_pitch_clef: if start_pitch_clef == abjad.Clef("bass"): bass_staff = abjad.Staff() abjad.attach(abjad.Clef("bass"), bass_staff) bass_staff.extend([start_note, stop_note]) bass_leaves = abjad.select(bass_staff).leaves() abjad.glissando(bass_leaves) score = abjad.Score([bass_staff]) else: treble_staff = abjad.Staff() abjad.attach(abjad.Clef("treble"), treble_staff) treble_staff.extend([start_note, stop_note]) treble_leaves = abjad.select(treble_staff).leaves() abjad.glissando(treble_leaves) score = abjad.Score([treble_staff]) else: result = abjad.Score.make_piano_score() score, treble_staff, bass_staff = result bass_staff.extend([start_note, stop_note]) treble_staff.extend(abjad.Skip(1) * 2) bass_leaves = abjad.select(bass_staff).leaves() abjad.glissando(bass_leaves) abjad.attach(abjad.StaffChange(treble_staff), bass_staff[1]) abjad.attach(abjad.Clef("treble"), treble_staff[0]) abjad.attach(abjad.Clef("bass"), bass_staff[0]) for leaf in abjad.iterate(score).leaves(): leaf.multiplier = (1, 4) abjad.override(score).bar_line.stencil = False abjad.override(score).span_bar.stencil = False abjad.override(score).glissando.thickness = 2 abjad.override(score).time_signature.stencil = False lilypond_file = abjad.LilyPondFile.new(score) return lilypond_file
def test_mutate_extract_04(): """ Extracts multiple containers. """ voice = abjad.Voice() voice.append(abjad.Container("c'8 d'8")) voice.append(abjad.Container("e'8 f'8")) voice.append(abjad.Container("g'8 a'8")) leaves = abjad.select(voice).leaves() abjad.beam(leaves) abjad.glissando(leaves) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { { c'8 [ \glissando d'8 \glissando } { e'8 \glissando f'8 \glissando } { g'8 \glissando a'8 ] } } """), print(abjad.lilypond(voice)) containers = voice[:2] for container in containers: abjad.mutate.extract(container) assert abjad.lilypond(voice) == abjad.String.normalize(r""" \new Voice { c'8 [ \glissando d'8 \glissando e'8 \glissando f'8 \glissando { g'8 \glissando a'8 ] } } """), print(abjad.lilypond(voice)) for container in containers: assert not container assert abjad.wf.wellformed(voice)