def test_rhythmmakertools_NoteRhythmMaker___call___01(): maker = rhythmmakertools.NoteRhythmMaker() divisions = [(5, 16), (3, 8)] result = maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(result) assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 5/16 c'4 ~ c'16 } % measure { % measure \time 3/8 c'4. } % measure } ''' )
def test_scoretools_Mutation_replace_measure_contents_01(): r'''Contents duration less than sum of duration of measures. abjad.Note spacer skip at end of second measure. ''' maker = abjad.MeasureMaker() measures = maker([(1, 8), (3, 16)]) staff = abjad.Staff(measures) notes = [ abjad.Note("c'16"), abjad.Note("d'16"), abjad.Note("e'16"), abjad.Note("f'16") ] abjad.mutate(staff).replace_measure_contents(notes) assert format(staff) == abjad.String.normalize(r''' \new Staff { { % measure \time 1/8 c'16 d'16 } % measure { % measure \time 3/16 e'16 f'16 s1 * 1/16 } % measure } ''') assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_NoteRhythmMaker___call___02(): duration_specifier = rhythmmakertools.DurationSpecifier( decrease_monotonic=False, ) maker = rhythmmakertools.NoteRhythmMaker( duration_specifier=duration_specifier, ) divisions = [(5, 16), (3, 8)] result = maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(result) assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 5/16 c'16 ~ c'4 } % measure { % measure \time 3/8 c'4. } % measure } ''' )
def test_scoretools_Mutation_replace_measure_contents_06(): r'''Preserves ties. ''' maker = abjad.NoteMaker() durations = [(5, 16), (3, 16)] leaf_lists = maker([0], durations) leaves = abjad.sequence(leaf_lists).flatten(depth=-1) maker = abjad.MeasureMaker() measures = maker(durations) staff = abjad.Staff(measures) measures = abjad.mutate(staff).replace_measure_contents(leaves) assert format(staff) == abjad.String.normalize(r''' \new Staff { { % measure \time 5/16 c'4 ~ c'16 } % measure { % measure \time 3/16 c'8. } % measure } ''') assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_TaleaRhythmMaker_tie_split_notes_02(): talea = rhythmmakertools.Talea( counts=[5], denominator=16, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, ) divisions = [(3, 16), (5, 8), (4, 8), (7, 16)] result = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) measures = abjad.mutate(staff).replace_measure_contents(result) assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 3/16 c'8. ~ } % measure { % measure \time 5/8 c'8 c'4 ~ c'16 [ c'8. ~ ] } % measure { % measure \time 4/8 c'8 c'4 ~ c'16 [ c'16 ~ ] } % measure { % measure \time 7/16 c'4 c'8. } % measure } ''' ) assert abjad.inspect(staff).is_well_formed()
def test_rhythmmakertools_BurnishSpecifier_outer_divisions_only_02(): burnish_specifier = rhythmmakertools.BurnishSpecifier( left_classes=[-1], right_classes=[-1], left_counts=[1], right_counts=[1], outer_divisions_only=True, ) talea = rhythmmakertools.Talea( counts=[1], denominator=4, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, burnish_specifier=burnish_specifier, extra_counts_per_division=[2], ) divisions = [(3, 16), (3, 8)] selections = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(selections) assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 3/16 \tweak text #tuplet-number::calc-fraction-text \times 3/5 { r4 c'16 ~ } } % measure { % measure \time 3/8 \tweak text #tuplet-number::calc-fraction-text \times 3/4 { c'8. c'4 r16 } } % measure } ''' ), format(staff)
def test_rhythmmakertools_TaleaRhythmMaker___call___02(): talea = rhythmmakertools.Talea( counts=[-1, 4, -2, 3], denominator=16, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, extra_counts_per_division=[3, 4], split_divisions_by_counts=[6], ) divisions = [(2, 8), (5, 8)] result = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(result) assert format(staff) == abjad.String.normalize(r''' \new Staff { { % measure \time 2/8 \times 4/7 { r16 c'4 r8 } } % measure { % measure \time 5/8 \tweak text #tuplet-number::calc-fraction-text \times 1/1 { c'8 ~ } \times 2/3 { c'16 r16 c'4 r8 c'16 ~ } \tweak text #tuplet-number::calc-fraction-text \times 1/1 { c'8 } } % measure } ''')
def test_scoretools_Measure_measure_number_01(): r'''Measures in staff number correctly starting from 1. ''' maker = abjad.MeasureMaker() time_signature_pairs = [(3, 16), (5, 16), (5, 16)] measures = maker(time_signature_pairs) staff = abjad.Staff(measures) assert staff[0].measure_number == 1 assert staff[1].measure_number == 2 assert staff[2].measure_number == 3
def test_rhythmmakertools_BurnishSpecifier_outer_divisions_only_04(): burnish_specifier = rhythmmakertools.BurnishSpecifier( left_classes=[-1], right_classes=[-1], left_counts=[1], right_counts=[2], outer_divisions_only=True, ) talea = rhythmmakertools.Talea( counts=[1], denominator=8, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, burnish_specifier=burnish_specifier, extra_counts_per_division=[], ) divisions = [(8, 8)] selections = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(selections) assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 8/8 r8 c'8 [ c'8 c'8 c'8 c'8 ] r8 r8 } % measure } ''' ), format(staff)
def from_selections(class_, selections, time_signatures=None): r'''Makes a selection of measures from `selections`. Returns selections. ''' import abjad assert len(selections) if not time_signatures: time_signatures = [_.get_duration() for _ in selections] assert len(selections) == len(time_signatures) durations = [abjad.inspect(_).get_duration() for _ in selections] assert durations == [abjad.Duration(_) for _ in time_signatures] maker = abjad.MeasureMaker() measures = maker(time_signatures) temporary_voice = abjad.Voice(measures) abjad.mutate(temporary_voice).replace_measure_contents(selections) temporary_voice[:] = [] return measures
def test_scoretools_Mutation_replace_measure_contents_04(): r'''Raise StopIteration when not enough 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") ] notes, staff statement = 'abjad.mutate(staff).replace_measure_contents(notes)' assert pytest.raises(StopIteration, statement)
def test_scoretools_Mutation_replace_measure_contents_02(): r'''Some contents too big for some measures. Small measures skipped. ''' time_signatures = [(1, 16), (3, 16), (1, 16), (3, 16)] maker = abjad.MeasureMaker() measures = maker(time_signatures) staff = abjad.Staff(measures) notes = [abjad.Note("c'8"), abjad.Note("d'8")] abjad.mutate(staff).replace_measure_contents(notes) assert format(staff) == abjad.String.normalize(r''' \new Staff { { % measure \time 1/16 s1 * 1/16 } % measure { % measure \time 3/16 c'8 s1 * 1/16 } % measure { % measure \time 1/16 s1 * 1/16 } % measure { % measure \time 3/16 d'8 s1 * 1/16 } % measure } ''') assert abjad.inspect(staff).is_well_formed()
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()
def test_rhythmmakertools_BeamSpecifier_beam_each_division_01(): r'''Beam each cell with a multipart beam spanner. ''' talea = rhythmmakertools.Talea( counts=[1, 1, 1, -1, 2, 2], denominator=32, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, extra_counts_per_division=[3, 4], ) divisions = [(2, 16), (5, 16)] selections = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(selections) score = abjad.Score([staff]) abjad.setting(score).autoBeaming = False assert format(staff) == abjad.String.normalize( r''' \new Staff { { % measure \time 2/16 \times 4/7 { c'32 [ c'32 c'32 ] r32 c'16 [ c'32 ~ ] } } % measure { % measure \time 5/16 \tweak text #tuplet-number::calc-fraction-text \times 5/7 { c'32 [ c'32 c'32 c'32 ] r32 c'16 [ c'16 c'32 c'32 c'32 ] r32 c'32 } } % measure } ''' )
def test_rhythmmakertools_BurnishSpecifier_02(): burnish_specifier = rhythmmakertools.BurnishSpecifier( left_classes=[0], middle_classes=[abjad.Rest], right_classes=[0], left_counts=[2], right_counts=[1], ) talea = rhythmmakertools.Talea( counts=[1, 1, 2, 4], denominator=32, ) rhythm_maker = rhythmmakertools.TaleaRhythmMaker( talea=talea, extra_counts_per_division=[0], burnish_specifier=burnish_specifier, ) divisions = [(5, 16), (6, 16)] selections = rhythm_maker(divisions) maker = abjad.MeasureMaker() measures = maker(divisions) staff = abjad.Staff(measures) abjad.mutate(staff).replace_measure_contents(selections) assert format(staff) == abjad.String.normalize(r''' \new Staff { { % measure \time 5/16 \tweak text #tuplet-number::calc-fraction-text \times 1/1 { c'32 [ c'32 ] r16 r8 r32 c'32 } } % measure { % measure \time 6/16 \tweak text #tuplet-number::calc-fraction-text \times 1/1 { c'16 [ c'8 ] r32 r32 r16 c'16 } } % measure } ''')