annotate tests/test_PitchBihist.py @ 75:02faad4a996b branch-tests

results and figures
author Maria Panteli <m.x.panteli@gmail.com>
date Fri, 22 Sep 2017 16:30:28 +0100
parents 0e70021f251e
children 9b2beffa5fdd
rev   line source
Maria@36 1 # -*- coding: utf-8 -*-
Maria@36 2 """
Maria@36 3 Created on Fri Sep 1 19:11:52 2017
Maria@36 4
Maria@36 5 @author: mariapanteli
Maria@36 6 """
Maria@36 7
Maria@36 8 import pytest
Maria@36 9
Maria@36 10 import numpy as np
Maria@36 11
Maria@36 12 import scripts.PitchBihist as PitchBihist
Maria@36 13
Maria@36 14
Maria@36 15 pbi = PitchBihist.PitchBihist()
Maria@36 16
Maria@36 17
Maria@36 18 def test_hz_to_cents():
Maria@36 19 freq_Hz = np.array([32.703, 65.406, 55, 110])
Maria@36 20 freq_cents = pbi.hz_to_cents(freq_Hz)
Maria@36 21 freq_cents_true = np.array([0, 1200, 900, 2100])
Maria@36 22 assert np.array_equal(freq_cents, freq_cents_true)
Maria@36 23
Maria@36 24
Maria@36 25 def test_wrap_to_octave():
Maria@36 26 cents = np.array([900, 2100, 1200])
Maria@36 27 octave_cents = pbi.wrap_to_octave(cents)
Maria@36 28 octave_cents_true = np.array([900, 900, 0])
Maria@36 29 assert np.array_equal(octave_cents, octave_cents_true)
Maria@36 30
Maria@36 31
Maria@36 32 def test_get_melody_from_file():
Maria@36 33 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 34 melody = pbi.get_melody_from_file(melodia_file)
Maria@37 35 assert len(melody) < 12. * pbi.melody_sr
Maria@36 36
Maria@36 37
Maria@36 38 def test_get_melody_matrix():
Maria@36 39 melody = 440 * np.ones(1000)
Maria@36 40 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 41 n_frames = melody_matrix.shape[1]
Maria@36 42 assert np.array_equal(melody_matrix[45, :], np.ones(n_frames))
Maria@36 43
Maria@36 44
Maria@39 45 def test_second_frame_decomposition():
Maria@39 46 norigframes = 100
Maria@39 47 nframes, win2, hop2 = pbi.second_frame_decomposition(norigframes)
Maria@39 48 assert nframes == 1
Maria@39 49
Maria@39 50
Maria@39 51 def test_second_frame_decomposition():
Maria@39 52 norigframes = np.ceil(pbi.melody_sr * 16.)
Maria@39 53 nframes, win2, hop2 = pbi.second_frame_decomposition(norigframes)
Maria@39 54 # for 16-sec segment with .5 hop size expect ~16 frames round up
Maria@39 55 assert nframes == 17
Maria@39 56
Maria@39 57
Maria@36 58 def test_bihist_from_melodia():
Maria@36 59 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 60 bihist = pbi.bihist_from_melodia(melodia_file, secondframedecomp=False)
Maria@36 61 assert bihist.shape == (60, 60)
Maria@36 62
Maria@36 63
Maria@36 64 def test_bihist_from_melodia_n_frames():
Maria@36 65 melodia_file = 'data/sample_dataset/Melodia/mel_1_2_1.csv'
Maria@36 66 bihist = pbi.bihist_from_melodia(melodia_file, secondframedecomp=True)
Maria@36 67 dur_sec = 11.5 # duration of first file in metadata.csv is > 11 seconds
Maria@36 68 n_frames_true = np.round((dur_sec - pbi.win2sec) * 2) # for .5 sec hop size
Maria@36 69 assert bihist.shape[1] == n_frames_true
Maria@36 70
Maria@36 71
Maria@36 72 def test_bihistogram():
Maria@36 73 melody = 440 * np.ones(1000)
Maria@36 74 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 75 bihist = pbi.bihistogram(melody_matrix, align=False)
Maria@36 76 assert np.array_equal(bihist, np.zeros((60, 60)))
Maria@36 77
Maria@36 78
Maria@36 79 def test_bihistogram_values():
Maria@36 80 melody = np.concatenate([440 * np.ones(500), 32.703 * np.ones(500)])
Maria@36 81 melody_matrix = pbi.get_melody_matrix(melody)
Maria@36 82 # melody transitions from A to C (bin 45/60 to bin 0/60)
Maria@36 83 bihist = pbi.bihistogram(melody_matrix, align=False)
Maria@36 84 # expect only element [45, 0] to be non-zero
Maria@36 85 assert bihist[45, 0] > 0 and (np.sum(bihist) - bihist[45, 0]) == 0
Maria@36 86
Maria@36 87
Maria@37 88 def test_bihistogram_align():
Maria@37 89 melody = np.concatenate([660 * np.ones(250), 440 * np.ones(500)])
Maria@37 90 melody_matrix = pbi.get_melody_matrix(melody)
Maria@37 91 # bin of max magnitude = A = 45/60
Maria@37 92 bihist = pbi.bihistogram(melody_matrix, align=True)
Maria@37 93 # bihist[20, 45] == 0
Maria@37 94 # we shift up 45 so rows 20-45 and left 45 so cols 45-45
Maria@37 95 assert bihist[20-45, 0] == 1