import unittest.mock import generator.comping import generator.vocabulary import generator.parts import generator.arrange.form import generator.arrange.generate def section_document(document, part_type): prepared = generator.parts.prepare_document(document) role = {'acoustic': 'accompaniment', 'electric': 'melody', 'vocal': 'vocal'}[part_type] section = generator.arrange.form.ArrangementSection('', 0, len(prepared['staves'][0]['measures']), 0, role) with unittest.mock.patch('generator.arrange.form.full_arrangement_sections', return_value=[section]), generator.vocabulary.using(generator.vocabulary.load(), part_type + '_accompaniment'): backing = generator.comping.Canonical(prepared, part_type, 'fixture') if part_type == 'acoustic' else None return generator.arrange.generate._arrange_document(prepared, part_type, accompaniment=backing) def melody_performance(document, part_type): """Isolate unchanged source melody from accompaniment/ending construction.""" return generator.arrange.generate._arrange_document(generator.parts.prepare_document(document), part_type, owned={'melody', 'vocal'})