def test_distance_metrics(): jake = Jacobs() d_corpus = DCorpus(corpus_str=TestConstant.A_MAJ_SCALE_SHORT) jake.load_corpus(d_corpus=d_corpus) complete_rh_advice = jake.advise(staff="upper") complete_rh_advice_len = len(complete_rh_advice) right_re = re.compile('^>\d+$') assert right_re.match( complete_rh_advice), "Bad right-hand, upper-staff advice" rh_advice = jake.advise(staff="upper", offset=3, first_digit=4) short_advice_len = len(rh_advice) assert complete_rh_advice_len - 3 == short_advice_len, "Bad offset for advise() call" ff_re = re.compile('^>4\d+$') assert ff_re.match(rh_advice), "Bad first finger constraint" rh_advice = jake.advise(staff="upper", offset=10, first_digit=1, last_digit=3) short_advice_len = len(rh_advice) assert complete_rh_advice_len - 10 == short_advice_len, "Bad offset for advise() call" ff_re = re.compile('^>1\d+3$') assert ff_re.match(rh_advice), "Bad first and last finger constraints" lh_advice = jake.advise(staff="lower") left_re = re.compile('^<\d+$') assert left_re.match(lh_advice), "Bad left-hand, lower-staff advice" combo_advice = jake.advise(staff="both") clean_combo_advice = re.sub('[><&]', '', combo_advice) d_score = d_corpus.d_score_by_index(index=0) gold_fingering = d_score.abcdf(index=0) clean_gold_fingering = re.sub('[><&]', '', gold_fingering) combo_re = re.compile('^>\d+@<\d+$') assert combo_re.match(combo_advice), "Bad combined advice" hamming_evaluations = jake.evaluate_strike_distance(method="hamming", staff="both") assert hamming_evaluations[0] > 0, "Undetected Hamming costs" assert hamming_evaluations[4] == 0, "Bad fish in Hamming barrel" natural_evaluations = jake.evaluate_strike_distance(method="natural", staff="both") assert natural_evaluations[0] > 0, "Undetected natural costs" assert natural_evaluations[4] == 0, "Bad fish in natural barrel" pivot_evaluations = jake.evaluate_strike_distance(method="pivot", staff="both") assert pivot_evaluations[0] > 0, "Undetected pivot costs" assert pivot_evaluations[4] == 0, "Bad fish in pivot barrel"
def test_jake(): jake = Jacobs() d_corpus = DCorpus(corpus_str=TestConstant.ONE_NOTE) jake.load_corpus(d_corpus=d_corpus) upper_rh_advice = jake.advise(staff="upper") right_re = re.compile('^>\d$') assert right_re.match( upper_rh_advice), "Bad one-note, right-hand, upper-staff advice" # both_advice = jake.advise(staff="both") # both_re = re.compile('^>\d@$') # assert both_re.match(both_advice), "Bad one-note, segregated, both-staff advice" jake = Jacobs() d_corpus = DCorpus(corpus_str=TestConstant.ONE_BLACK_NOTE_PER_STAFF) jake.load_corpus(d_corpus=d_corpus) upper_advice = jake.advise(staff="upper") right_re = re.compile('^>2$') assert right_re.match( upper_advice), "Bad black-note, upper-staff advice" lower_advice = jake.advise(staff="lower") left_re = re.compile('^<2$') assert left_re.match( lower_advice), "Bad black-note, upper-staff advice" both_advice = jake.advise(staff="both") both_re = re.compile('^>2@<2$') assert both_re.match(both_advice), "Bad black-note, both-staff advice" lower_advice = jake.advise(staff="lower", first_digit=3) lower_re = re.compile('^<3$') assert lower_re.match( lower_advice), "Bad preset black-note, both-staff advice" jake = Jacobs() d_corpus = DCorpus(corpus_str=TestConstant.TWO_WHITE_NOTES_PER_STAFF) jake.load_corpus(d_corpus=d_corpus) upper_advice = jake.advise(staff="upper") right_re = re.compile('^>\d\d$') assert right_re.match( upper_advice), "Bad two white-note, upper-staff advice" upper_advice = jake.advise(staff="upper", first_digit=2, last_digit=4) right_re = re.compile('^>24$') assert right_re.match( upper_advice), "Bad preset two white-note, upper-staff advice"