예제 #1
0
    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"
예제 #2
0
    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"