def test_Parentage_logical_voice_10():
    """
    Measure and leaves must carry same logical voice signature.
    """

    staff = abjad.Staff(r"""
        {
            \time 2/8
            c'8
            d'8
        }
        e'8
        f'8
        """)

    assert format(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            {
                \time 2/8
                c'8
                d'8
            }
            e'8
            f'8
        }
        """)

    assert (abjad.inspect(
        staff[0]).parentage().logical_voice() == abjad.inspect(
            staff[-1]).parentage().logical_voice())
    assert (abjad.inspect(
        staff[0]).parentage().logical_voice() == abjad.inspect(
            staff[0][0]).parentage().logical_voice())
    assert (abjad.inspect(
        staff[0][0]).parentage().logical_voice() == abjad.inspect(
            staff[-1]).parentage().logical_voice())
def test_scoretools_Mutation_replace_measure_contents_05():
    r'''Populate measures even when not enough total measures.
    '''

    maker = abjad.MeasureMaker()
    measures = maker([(1, 8), (1, 8)])
    staff = abjad.Staff(measures)
    notes = [
        abjad.Note("c'16"),
        abjad.Note("d'16"),
        abjad.Note("e'16"),
        abjad.Note("f'16"),
        abjad.Note("g'16"),
        abjad.Note("a'16")
    ]

    try:
        abjad.mutate(staff).replace_measure_contents(notes)
    except StopIteration:
        pass

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            {   % measure
                \time 1/8
                c'16
                d'16
            }   % measure
            {   % measure
                e'16
                f'16
            }   % measure
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
Esempio n. 3
0
def test_auto_rewrite_meter_06():
    staff = abjad.Staff(r"\time 3/4 c'8 d'4 e'4 f'8 "
                        r"\time 5/8 g'4 a'4 r8 "
                        r"\time 6/8 b'4 c''4 r4 "
                        r"\time 4/4 d''8 e''4 f''8 g''16 a''4 r8.")
    abjad.mutate.auto_rewrite_meter(staff)
    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \time 3/4
            c'8
            d'4
            e'4
            f'8
            \time 5/8
            g'4
            a'8
            ~
            a'8
            r8
            \time 6/8
            b'4
            c''8
            ~
            c''8
            r4
            \time 4/4
            d''8
            e''4
            f''8
            g''16
            a''8.
            ~
            a''16
            r8.
        }
        """)
def test_Score_add_double_bar_lines_before_time_signatures_08():
    staff = abjad.Staff(r"R1 "
                        r"\time 3/4 c'2. "
                        r"\time 4/4 d'1 "
                        r"e'1 "
                        r"\time 6/4 f'2. g'2. "
                        r"\time 2/4 a'2")
    abjad.attach(abjad.BarLine('.|:'), staff[0])
    abjad.attach(abjad.BarLine(':|.'), staff[1])
    abjad.attach(abjad.BarLine('|'), staff[3])
    abjad.attach(abjad.BarLine('!'), staff[5])
    score = auxjad.Score([staff])
    score.add_double_bar_lines_before_time_signatures()
    assert abjad.lilypond(score) == abjad.String.normalize(r"""
        \new Score
        <<
            \new Staff
            {
                R1
                \bar ".|:"
                \time 3/4
                c'2.
                \bar ":|."
                \time 4/4
                d'1
                e'1
                \bar "||"
                \time 6/4
                f'2.
                g'2.
                \bar "!"
                \time 2/4
                a'2
            }
        >>
        """)
Esempio n. 5
0
def test_lilypondparsertools_LilyPondParser__indicators__MetronomeMark_01():

    target = abjad.Score([abjad.Staff([abjad.Note(0, 1)])])
    mark = abjad.MetronomeMark(textual_indication="As fast as possible")
    abjad.attach(mark, target[0][0], context='Staff')

    assert format(target) == abjad.String.normalize(r'''
        \new Score
        <<
            \new Staff
            {
                \tempo "As fast as possible"
                c'1
            }
        >>
        ''')

    parser = abjad.lilypondparsertools.LilyPondParser()
    result = parser(format(target))
    assert format(target) == format(result) and target is not result
    leaves = abjad.select(result).leaves()
    leaf = leaves[0]
    marks = abjad.inspect(leaf).get_indicators(abjad.MetronomeMark)
    assert len(marks) == 1
def test_scoretools_Inspection_get_indicators_04():

    staff = abjad.Staff("c'8 d'8 e'8 f'8")
    comment_1 = abjad.LilyPondComment('comment 1')
    abjad.attach(comment_1, staff[0])
    comment_2 = abjad.LilyPondComment('comment 2')
    abjad.attach(comment_2, staff[0])

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            % comment 1
            % comment 2
            c'8
            d'8
            e'8
            f'8
        }
        '''), format(staff)

    indicators = abjad.inspect(staff[0]).get_indicators(abjad.LilyPondComment)
    assert comment_1 in indicators
    assert comment_2 in indicators
    assert len(indicators) == 2
Esempio n. 7
0
def test_Tuplet_timespan_01():

    staff = abjad.Staff(r"c'4 d'4 \times 2/3 { e'4 f'4 g'4 }")

    assert abjad.lilypond(staff) == abjad.String.normalize(
        r"""
        \new Staff
        {
            c'4
            d'4
            \times 2/3
            {
                e'4
                f'4
                g'4
            }
        }
        """
    )

    assert abjad.get.timespan(staff) == abjad.Timespan(0, 1)
    assert abjad.get.timespan(staff[0]) == abjad.Timespan(0, (1, 4))
    assert abjad.get.timespan(staff[1]) == abjad.Timespan((1, 4), (1, 2))
    assert abjad.get.timespan(staff[-1]) == abjad.Timespan((1, 2), 1)
Esempio n. 8
0
def test_LeafLooper_21():
    random.seed(55126)
    container = abjad.Container(r"c'4 d'4 e'4 f'4 g'4 a'4 b'4 c''4 d''4")
    looper = auxjad.LeafLooper(container,
                               window_size=2,
                               max_steps=4,
                               )
    notes = looper.output_n(4)
    staff = abjad.Staff(notes)
    assert format(staff) == abjad.String.normalize(
        r"""
        \new Staff
        {
            \time 2/4
            c'4
            d'4
            g'4
            a'4
            a'4
            b'4
            c''4
            d''4
        }
        """)
def test_scoretools_Container___setitem___13():
    r'''Replaces three spanned leaves with three different leaves.
    '''

    staff = abjad.Staff("c'8 d'8 e'8 f'8")
    beam = abjad.Beam()
    abjad.attach(beam, staff[:])
    notes = [abjad.Note("b'8"), abjad.Note("a'8"), abjad.Note("g'8")]
    staff[1:3] = notes

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            c'8
            [
            b'8
            a'8
            g'8
            f'8
            ]
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_LilyPondParser__spanners__Hairpin_06():
    """
    With direction.
    """

    maker = abjad.NoteMaker()
    target = abjad.Staff(maker([0] * 5, [(1, 4)]))
    start_hairpin = abjad.StartHairpin("<", direction=abjad.Up)
    abjad.attach(start_hairpin, target[0])
    stop_hairpin = abjad.StopHairpin()
    abjad.attach(stop_hairpin, target[2])
    hairpin = abjad.StartHairpin(">", direction=abjad.Down)
    abjad.attach(hairpin, target[2])
    dynamic = abjad.Dynamic("ppp")
    abjad.attach(dynamic, target[-1])

    assert format(target) == abjad.String.normalize(
        r"""
        \new Staff
        {
            c'4
            ^ \<
            c'4
            c'4
            \!
            _ \>
            c'4
            c'4
            \ppp
        }
        """
    )

    parser = abjad.parser.LilyPondParser()
    result = parser(format(target))
    assert format(target) == format(result) and target is not result
def test_scoretools_Staff___copy___01():
    r'''Staves (shallow) copy grob abjad.overrides and context abjad.settings
    but not components.
    '''

    staff_1 = abjad.Staff("c'8 d'8 e'8 f'8")
    abjad.override(staff_1).note_head.color = 'red'
    abjad.setting(staff_1).tuplet_full_length = True


    staff_2 = copy.copy(staff_1)

    assert format(staff_2) == abjad.String.normalize(
        r'''
        \new Staff
        \with
        {
            \override NoteHead.color = #red
            tupletFullLength = ##t
        }
        {
        }
        '''
        )
def test_Staff_engraver_removals_01():

    staff = abjad.Staff("c'8 d'8 e'8 f'8")
    staff.remove_commands.append("Time_signature_engraver")
    staff.remove_commands.append("Bar_number_engraver")

    assert format(staff) == abjad.String.normalize(
        r"""
        \new Staff
        \with
        {
            \remove Time_signature_engraver
            \remove Bar_number_engraver
        }
        {
            c'8
            d'8
            e'8
            f'8
        }
        """
    )

    assert abjad.inspect(staff).wellformed()
Esempio n. 13
0
def test_Phaser_20():
    random.seed(98451)
    container = abjad.Container(r"c'4 d'4 e'4 f'4")
    phaser = auxjad.Phaser(
        container,
        step_size=(1, 4),
        forward_bias=0.5,
    )
    notes = phaser.output_n(5)
    staff = abjad.Staff(notes)
    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \time 4/4
            c'4
            d'4
            e'4
            f'4
            d'4
            e'4
            f'4
            c'4
            c'4
            d'4
            e'4
            f'4
            f'4
            c'4
            d'4
            e'4
            c'4
            d'4
            e'4
            f'4
        }
        """)
Esempio n. 14
0
def test_Phaser_19():
    container = abjad.Container(r"\time 3/4 c'4 d'4 e'4")
    phaser = auxjad.Phaser(
        container,
        step_size=(1, 8),
        omit_time_signatures=True,
    )
    notes = phaser.output_n(3)
    staff = abjad.Staff(notes)
    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            c'4
            d'4
            e'4
            c'8
            d'4
            e'4
            c'8
            d'4
            e'4
            c'4
        }
        """)
def test_LilyPondParser__indicators__Dynamic_01():

    target = abjad.Staff(abjad.Note(-12, (1, 2)) * 6)
    dynamic = abjad.Dynamic("ppp")
    abjad.attach(dynamic, target[0])
    dynamic = abjad.Dynamic("mp")
    abjad.attach(dynamic, target[1])
    dynamic = abjad.Dynamic("rfz")
    abjad.attach(dynamic, target[2])
    dynamic = abjad.Dynamic("mf")
    abjad.attach(dynamic, target[3])
    dynamic = abjad.Dynamic("spp")
    abjad.attach(dynamic, target[4])
    dynamic = abjad.Dynamic("ff")
    abjad.attach(dynamic, target[5])

    string = r"""\new Staff { c2\ppp c\mp c2\rfz c\mf c2\spp c\ff }"""

    parser = abjad.parser.LilyPondParser()
    result = parser(string)
    assert format(target) == format(result) and target is not result
    for x in result:
        dynamics = abjad.inspect(x).indicators(abjad.Dynamic)
        assert len(dynamics) == 1
def test_mutate__split_leaf_by_durations_01():
    """
    Splits note into assignable notes.

    Does tie split notes.
    """

    staff = abjad.Staff("c'8 [ d'8 e'8 ]")

    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            c'8
            [
            d'8
            e'8
            ]
        }
        """), print(abjad.lilypond(staff))

    abjad.mutate._split_leaf_by_durations(staff[1], [abjad.Duration(1, 32)])

    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            c'8
            [
            d'32
            ~
            d'16.
            e'8
            ]
        }
        """), print(abjad.lilypond(staff))

    assert abjad.wf.wellformed(staff)
def test_scoretools_Container___setitem___10():
    r'''Sets leaf between spanned compoennts.
    '''

    staff = abjad.Staff("c'8 d'8 e'8 f'8")
    beam = abjad.Beam()
    abjad.attach(beam, staff[:])
    note = abjad.Note("g'8")
    staff[2:2] = [note]

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            c'8
            [
            d'8
            g'8
            e'8
            f'8
            ]
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
def test_lilypondparsertools_LilyPondParser__functions__transpose_03():

    maker = abjad.NoteMaker()
    target = abjad.Staff([
        abjad.Container(maker(["cs'", "ds'", "es'", "fs'"], (1, 4))),
        abjad.Container(maker(["df'", "ef'", "f'", "gf'"], (1, 4)))
    ])

    assert format(target) == abjad.String.normalize(r'''
        \new Staff
        {
            {
                cs'4
                ds'4
                es'4
                fs'4
            }
            {
                df'4
                ef'4
                f'4
                gf'4
            }
        }
        ''')

    string = r'''music = \relative c' { c d e f }
    \new Staff {
        \transpose c cs \music
        \transpose c df \music
    }
    '''

    parser = abjad.lilypondparsertools.LilyPondParser()
    result = parser(string)
    assert format(target) == format(result) and target is not result
Esempio n. 19
0
def test_reposition_clefs_12():
    staff = abjad.Staff(r"c'1 | d'1")
    abjad.attach(abjad.Clef('treble'), staff[0])
    abjad.attach(abjad.Clef('treble'), staff[1])
    assert format(staff) == abjad.String.normalize(
        r"""
        \new Staff
        {
            \clef "treble"
            c'1
            \clef "treble"
            d'1
        }
        """)
    abjad.mutate(staff[:]).reposition_clefs()
    assert format(staff) == abjad.String.normalize(
        r"""
        \new Staff
        {
            \clef "treble"
            c'1
            d'1
        }
        """)
Esempio n. 20
0
def test_lilypondproxytools_LilyPondGrobNameManager___setattr___46():
    r'''Override LilyPond TextSpanner grob.
    '''

    staff = abjad.Staff("c'8 c'8 c'8 c'8")
    text_spanner = abjad.TextSpanner()
    abjad.attach(text_spanner, staff[:])
    abjad.override(text_spanner).text_spanner.font_shape = 'italic'

    assert format(staff) == abjad.String.normalize(r'''
        \new Staff
        {
            \override TextSpanner.font-shape = #'italic
            c'8
            \startTextSpan
            c'8
            c'8
            \revert TextSpanner.font-shape
            c'8
            \stopTextSpan
        }
        ''')

    assert abjad.inspect(staff).is_well_formed()
Esempio n. 21
0
def test_Staff___delitem___03():

    staff = abjad.Staff([
        abjad.Note("c'4"),
        abjad.Rest((1, 4)),
        abjad.Chord([2, 3, 4], (1, 4)),
        abjad.Skip((1, 4)),
        abjad.Tuplet((4, 5), 4 * abjad.Note(0, (1, 16))),
    ])

    assert len(staff) == 5
    assert isinstance(staff[0], abjad.Note)
    assert isinstance(staff[1], abjad.Rest)
    assert isinstance(staff[2], abjad.Chord)
    assert isinstance(staff[3], abjad.Skip)
    assert isinstance(staff[4], abjad.Tuplet)
    del (staff[3])
    assert len(staff) == 4
    assert isinstance(staff[0], abjad.Note)
    assert isinstance(staff[1], abjad.Rest)
    assert isinstance(staff[2], abjad.Chord)
    assert isinstance(staff[3], abjad.Tuplet)
    del (staff[-2])
    assert len(staff) == 3
    assert isinstance(staff[0], abjad.Note)
    assert isinstance(staff[1], abjad.Rest)
    assert isinstance(staff[2], abjad.Tuplet)
    del (staff[2])
    assert len(staff) == 2
    assert isinstance(staff[0], abjad.Note)
    assert isinstance(staff[1], abjad.Rest)
    del (staff[0])
    assert len(staff) == 1
    assert isinstance(staff[0], abjad.Rest)
    del (staff[-1])
    assert len(staff) == 0
Esempio n. 22
0
def test_Mutation_split_20():
    """
    Splits leaf at non-assignable, non-power-of-two offset.
    """

    staff = abjad.Staff("c'4")

    notes = staff[:1]
    result = abjad.mutate(notes).split([abjad.Duration(5, 24)], )

    assert format(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \times 2/3 {
                c'4
                ~
                c'16
                ~
                c'16
            }
        }
        """), print(format(staff))

    assert abjad.inspect(staff).wellformed()
Esempio n. 23
0
def test_mutate_split_15():
    """
    Splits leaf at non-assignable, non-power-of-two offset.
    """

    staff = abjad.Staff("c'4")

    notes = staff[:1]
    abjad.mutate.split(notes, [abjad.Duration(5, 24)])

    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \times 2/3 {
                c'4
                ~
                c'16
                ~
                c'16
            }
        }
        """), print(abjad.lilypond(staff))

    assert abjad.wf.wellformed(staff)
Esempio n. 24
0
def test_Fader_07():
    random.seed(44126)
    container = abjad.Container(r"\times 2/3 {c'8 d'8 e'8} d'2.")
    fader = auxjad.Fader(container)
    notes = fader.output_all()
    staff = abjad.Staff(notes)
    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \times 2/3
            {
                \time 4/4
                c'8
                d'8
                e'8
            }
            d'2.
            \times 2/3
            {
                r8
                d'8
                e'8
            }
            d'2.
            \times 2/3
            {
                r8
                d'8
                r8
            }
            d'2.
            r4
            d'2.
            R1
        }
        """)
def test_LilyPondParser__indicators__TimeSignature_01():

    target = abjad.Score([abjad.Staff([abjad.Note(0, 1)])])
    time_signature = abjad.TimeSignature((8, 8))
    abjad.attach(time_signature, target[0][0])

    assert format(target) == abjad.String.normalize(r"""
        \new Score
        <<
            \new Staff
            {
                \time 8/8
                c'1
            }
        >>
        """)

    parser = abjad.parser.LilyPondParser()
    result = parser(format(target))
    assert format(target) == format(result) and target is not result
    leaves = abjad.select(result).leaves()
    leaf = leaves[0]
    time_signatures = abjad.inspect(leaf).indicators(abjad.TimeSignature)
    assert len(time_signatures) == 1
Esempio n. 26
0
def test_Fader_10():
    random.seed(29862)
    container = abjad.Container(r"c'8 d'8 e'8 f'8 g'8 a'8 b'8 c''8")
    fader = auxjad.Fader(
        container,
        max_steps=3,
        process_on_first_call=True,
    )
    notes = fader.output_n(3)
    staff = abjad.Staff(notes)
    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            \time 4/4
            c'8
            d'8
            r8
            f'8
            g'8
            a'8
            b'8
            c''8
            r4.
            f'8
            g'8
            a'8
            b'8
            c''8
            r4.
            f'8
            r8
            a'8
            b'8
            r8
        }
        """)
def test_Score_add_double_bar_lines_before_time_signatures_07():
    staff = abjad.Staff(
        r"\time 3/4 R1 * 3/4 \time 4/4 R1 * 2 \time 6/4 R1 * 6/4 \time 4/4 R1")
    score = auxjad.Score([staff])
    score.add_double_bar_lines_before_time_signatures()
    assert abjad.lilypond(score) == abjad.String.normalize(r"""
        \new Score
        <<
            \new Staff
            {
                \time 3/4
                R1 * 3/4
                \bar "||"
                \time 4/4
                R1 * 2
                \bar "||"
                \time 6/4
                R1 * 3/2
                \bar "||"
                \time 4/4
                R1
            }
        >>
        """)
def test_Inspection_effective_staff_03():
    """
    Staff changes work on the last note of a staff.
    """

    staves = 2 * abjad.Staff("c'8 d'8 e'8 f'8")
    staff_group = abjad.StaffGroup(staves)
    staff_group.lilypond_type = "PianoStaff"
    staff_group.is_simultaneous = True
    staff_group[0].name = "RH"
    staff_group[1].name = "LH"
    staff_change = abjad.StaffChange(staff_group[1])
    abjad.attach(staff_change, staff_group[0][-1])

    assert format(staff_group) == abjad.String.normalize(r"""
        \new PianoStaff
        <<
            \context Staff = "RH"
            {
                c'8
                d'8
                e'8
                \change Staff = LH
                f'8
            }
            \context Staff = "LH"
            {
                c'8
                d'8
                e'8
                f'8
            }
        >>
        """)

    assert abjad.inspect(staff_group).wellformed()
Esempio n. 29
0
def test_Inspection_indicators_04():

    staff = abjad.Staff("c'8 d'8 e'8 f'8")
    comment_1 = abjad.LilyPondComment("comment 1")
    abjad.attach(comment_1, staff[0])
    comment_2 = abjad.LilyPondComment("comment 2")
    abjad.attach(comment_2, staff[0])

    assert format(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            % comment 1
            % comment 2
            c'8
            d'8
            e'8
            f'8
        }
        """), format(staff)

    indicators = abjad.inspect(staff[0]).indicators(abjad.LilyPondComment)
    assert comment_1 in indicators
    assert comment_2 in indicators
    assert len(indicators) == 2
def test_mutate__split_leaf_by_durations_06():
    """
    Returns three leaves with two tied.
    """

    staff = abjad.Staff([abjad.Note("c'4")])
    new_leaves = abjad.mutate._split_leaf_by_durations(staff[0],
                                                       [abjad.Duration(5, 32)])

    assert isinstance(new_leaves, abjad.Selection)
    assert all(isinstance(_, abjad.Note) for _ in new_leaves)

    assert abjad.lilypond(staff) == abjad.String.normalize(r"""
        \new Staff
        {
            c'8
            ~
            c'32
            ~
            c'16.
        }
        """), print(abjad.lilypond(staff))

    assert abjad.wf.wellformed(staff)