def test_scoretools_fuse_measures_07():
    r'''Fuse three measures.
    '''

    voice = abjad.Voice("abj: | 1/8 c'16 d'16 || 1/8 e'16 f'16 || 1/8 g'16 a'16 |")
    leaves = abjad.select(voice).leaves()
    beam = beam = abjad.Beam()
    abjad.attach(beam, leaves)

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 1/8
                c'16 [
                d'16
            }
            {
                e'16
                f'16
            }
            {
                g'16
                a'16 ]
            }
        }
        '''
        )

    abjad.fuse_measures(voice[:])

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 3/8
                c'16 [
                d'16
                e'16
                f'16
                g'16
                a'16 ]
            }
        }
        '''
        )

    assert abjad.inspect(voice).is_well_formed()
def test_scoretools_fuse_measures_04():
    r'''Fuse measures with power-of-two-denominators together with measures
    without power-of-two denominators.
    Helpers selects least common multiple of denominators.
    Beams are OK because they abjad.attach to leaves rather than containers.
    '''

    measure_1 = abjad.Measure((1, 8), "c'8")
    measure_2 = abjad.Measure((1, 12), "d'8")
    voice = abjad.Voice([measure_1, measure_2])
    leaves = abjad.select(voice).leaves()
    beam = abjad.Beam()
    abjad.attach(beam, leaves)

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 1/8
                c'8 [
            }
            {
                \time 1/12
                \scaleDurations #'(2 . 3) {
                    d'8 ]
                }
            }
        }
        '''
        )

    abjad.fuse_measures(voice[:])

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 5/24
                \scaleDurations #'(2 . 3) {
                    c'8. [
                    d'8 ]
                }
            }
        }
        '''
        )

    assert abjad.inspect(voice).is_well_formed()
def test_scoretools_fuse_measures_05():
    r'''Fusing empty selection returns none.
    '''

    staff = abjad.Staff()
    result = abjad.fuse_measures(staff[:])
    assert result is None
def test_scoretools_fuse_measures_02():
    r'''Fuse measures carrying time signatures with differing
    power-of-two denominators. Helpers selects minimum of two denominators.
    Beams are OK because they abjad.attach to leaves rather than containers.
    '''

    voice = abjad.Voice("abj: | 1/8 c'16 d'16 || 2/16 e'16 f'16 |")
    leaves = abjad.select(voice).leaves()
    beam = abjad.Beam()
    abjad.attach(beam, leaves)

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 1/8
                c'16 [
                d'16
            }
            {
                \time 2/16
                e'16
                f'16 ]
            }
        }
        '''
        )

    abjad.fuse_measures(voice[:])

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 2/8
                c'16 [
                d'16
                e'16
                f'16 ]
            }
        }
        '''
        )

    assert abjad.inspect(voice).is_well_formed()
def test_scoretools_fuse_measures_03():
    r'''Fuse measures with differing power-of-two denominators.
    Helpers selects minimum of two denominators.
    Beam abjad.attaches to container rather than leaves.
    '''

    voice = abjad.Voice("abj: | 1/8 c'16 d'16 || 2/16 e'16 f'16 |")
    beam = abjad.Beam()
    abjad.attach(beam, voice[0])

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 1/8
                c'16 [
                d'16 ]
            }
            {
                \time 2/16
                e'16
                f'16
            }
        }
        '''
        )

    abjad.fuse_measures(voice[:])

    assert format(voice) == abjad.String.normalize(
        r'''
        \new Voice
        {
            {
                \time 2/8
                c'16
                d'16
                e'16
                f'16
            }
        }
        '''
        )

    assert abjad.inspect(voice).is_well_formed()
def test_scoretools_fuse_measures_06():
    r'''Fusing selection of only one measure returns measure unaltered.
    '''

    measure = abjad.Measure((3, 8), "c'8 d'8 e'8")
    staff = abjad.Staff([measure])
    new = abjad.fuse_measures(staff[:])

    assert new is measure
def test_scoretools_fuse_measures_01():
    r'''Fuse unicorporated measures carrying
    time signatures with power-of-two denominators.
    '''

    measure_1 = abjad.Measure((1, 8), "c'16 d'16")
    beam = abjad.Beam()
    abjad.attach(beam, measure_1[:])
    measure_2 = abjad.Measure((2, 16), "c'16 d'16")
    slur = abjad.Slur()
    abjad.attach(slur, measure_2[:])
    staff = abjad.Staff([measure_1, measure_2])

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {
                \time 1/8
                c'16 [
                d'16 ]
            }
            {
                \time 2/16
                c'16 (
                d'16 )
            }
        }
        '''
        )

    new = abjad.fuse_measures(staff[:])

    assert format(new) == abjad.String.normalize(
        r'''
        {
            \time 2/8
            c'16 [
            d'16 ]
            c'16 (
            d'16 )
        }
        '''
        )

    assert new is not measure_1 and new is not measure_2
    assert len(measure_1) == 0
    assert len(measure_2) == 0
    assert abjad.inspect(new).is_well_formed()
def test_scoretools_fuse_measures_09():
    r'''Fusing measures with power-of-two denominators
    to measures without power-of-two denominators.
    With change in number of note-heads because of non-power-of-two multiplier.
    '''

    staff = abjad.Staff()
    staff.append(abjad.Measure((9, 80), "c'64 c' c' c' c' c' c' c' c'"))
    staff.append(abjad.Measure((2, 16), "c'16 c'"))

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {
                \time 9/80
                \scaleDurations #'(4 . 5) {
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                }
            }
            {
                \time 2/16
                c'16
                c'16
            }
        }
        '''
        )

    new = abjad.fuse_measures(staff[:])

    assert format(staff) == abjad.String.normalize(
        r'''
        \new Staff
        {
            {
                \time 19/80
                \scaleDurations #'(4 . 5) {
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'64
                    c'16 ~
                    c'64
                    c'16 ~
                    c'64
                }
            }
        }
        '''
        )

    assert abjad.inspect(staff).is_well_formed()