def test_good_rules(): jake = Jacobs() jake.segment_combiner(method="cost") for id in subcosts: d_corpus = DCorpus( corpus_str=TestConstant.PARNCUTT_HUMAN_FRAGMENT[id]) jake.load_corpus(d_corpus=d_corpus) if id == 'B': suggestions, costs, details = jake.generate_advice( staff="upper", cycle=4, k=20) else: suggestions, costs, details = jake.generate_advice( staff="upper", last_digit=last_digit[id], k=30) details_for_sugg = dict() for i in range(len(details)): details_for_sugg[suggestions[i]] = details[i][ 0] # 0 index because we only have one segment jake.report_on_advice(suggestions, costs, details) for gold_sugg in subcosts[id]: assert gold_sugg in details_for_sugg, \ "Missing suggestion {0} in {1}".format(gold_sugg, id) for rule in subcosts[id][gold_sugg]: if rule == '345': continue gold_cost = subcosts[id][gold_sugg][rule] cost = details_for_sugg[gold_sugg][rule] assert cost == gold_cost, \ "Bad {0} cost for {1} in {2}: {3} should be {4}".format(rule, gold_sugg, id, cost, gold_cost)
def test_cycles(): jake = Jacobs() jake.segment_combiner(method="cost") d_corpus = DCorpus(corpus_str=TestConstant.FOUR_NOTES) jake.load_corpus(d_corpus=d_corpus) suggestions, costs, details = jake.generate_advice(staff="upper", cycle=4, k=2) assert len(suggestions) == 2, "No loops in that dog in top ten" # jake.report_on_advice(suggestions, costs, details) d_corpus = DCorpus( corpus_str=TestConstant.PARNCUTT_HUMAN_FRAGMENT['B']) jake.load_corpus(d_corpus=d_corpus) suggestions, costs, details = jake.generate_advice(staff="upper", cycle=4, k=16) assert len(suggestions) == 16, "There should be 16 cyclic fingerings!"
def test_fingering_counts(): jake = Jacobs(pruning_method="none") jake.segment_combiner(method="cost") d_corpus = DCorpus(corpus_str=TestConstant.FOUR_NOTES) jake.load_corpus(d_corpus=d_corpus) suggestions, costs, details = jake.generate_advice(staff="upper", k=2) assert jake.last_segment_pruned_count( ) == 320, "Bad none pruning on open-ended problem"
def test_four_note_example(self): jacobs = Jacobs(segmenter=ManualDSegmenter(), segment_combiner="cost") d_corpus = DCorpus(corpus_str=TestConstant.FOUR_NOTES) jacobs.load_corpus(d_corpus=d_corpus) suggestions, costs, details = jacobs.generate_advice(staff="upper", k=2) self.assertEqual(len(suggestions), 2, "No loops in that dog in top ten")