def write_test_output( output, full_file_name, test_function_name, cache_ly=False, cache_pdf=False, go=False, render_pdf=False, ): r'''Writes test output. Returns none. ''' from abjad.tools import lilypondfiletools from abjad.tools import markuptools from abjad.tools import schemetools from abjad.tools import scoretools from abjad.tools import systemtools from abjad.tools import topleveltools if go: cache_ly = cache_pdf = render_pdf = True if not any([cache_ly, cache_pdf, render_pdf]): return if isinstance(output, scoretools.Score): lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file( output) TestManager.apply_additional_layout(lilypond_file) score = output elif isinstance(output, lilypondfiletools.LilyPondFile): lilypond_file = output score = lilypond_file.score_block[0] else: message = 'output must be score or LilyPond file: {!r}.' message = message.format(output) raise TypeError(message) title_lines = TestManager.test_function_name_to_title_lines( test_function_name) lilypond_file.header_block.title = \ markuptools.make_centered_title_markup( title_lines, font_size=6, vspace_before=2, vspace_after=4, ) parent_directory_name = os.path.dirname(full_file_name) if render_pdf: topleveltools.show(lilypond_file) if cache_pdf: file_name = '{}.pdf'.format(test_function_name) pdf_path_name = os.path.join(parent_directory_name, file_name) topleveltools.persist(lilypond_file).as_pdf(pdf_path_name) if cache_ly: file_name = '{}.ly'.format(test_function_name) ly_path_name = os.path.join(parent_directory_name, file_name) with open(ly_path_name, 'w') as f: f.write(format(score))
def make_lilypond_file(music, divisions, implicit_scaling=False): r'''Makes LilyPond file. .. container:: :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> music = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... music, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' assert isinstance(music, list), repr(music) prototype = (selectiontools.Selection, scoretools.Tuplet) assert all(isinstance(x, prototype) for x in music), repr(music) assert isinstance(divisions, (tuple, list)), repr(divisions) score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures( divisions, implicit_scaling=implicit_scaling, ) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures( divisions, implicit_scaling=implicit_scaling, ) staff = scoretools.Staff(measures) staff.context_name = 'RhythmicStaff' music = sequencetools.flatten_sequence(music) measures = mutate(staff).replace_measure_contents(music) score.append(staff) return lilypond_file
def make_lilypond_file(music, divisions): r'''Makes LilyPond file. .. container:: :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> music = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... music, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures(divisions) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures(divisions) staff = scoretools.RhythmicStaff(measures) music = sequencetools.flatten_sequence(music) measures = mutate(staff).replace_measure_contents(music) score.append(staff) return lilypond_file
def make_lilypond_file( selections, divisions, implicit_scaling=None, pitched_staff=None, time_signatures=None, ): r'''Makes LilyPond file. .. container:: **Example 1.** :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(exponent=1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> selections = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... selections, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' assert isinstance(selections, list), repr(selections) prototype = selectiontools.Selection assert all(isinstance(_, prototype) for _ in selections), repr(selections) assert isinstance(divisions, (tuple, list)), repr(divisions) time_signatures = time_signatures or divisions score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures( time_signatures, implicit_scaling=implicit_scaling, ) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures( time_signatures, implicit_scaling=implicit_scaling, ) if pitched_staff: staff = scoretools.Staff(measures) else: staff = scoretools.Staff(measures, context_name='RhythmicStaff') selections = sequencetools.flatten_sequence(selections) selections_ = copy.deepcopy(selections) try: measures = mutate(staff).replace_measure_contents(selections) except StopIteration: if pitched_staff: staff = scoretools.Staff(selections_) else: staff = scoretools.Staff(selections_, context_name='RhythmicStaff') score.append(staff) return lilypond_file