Mercurial > hg > plosone_underreview
diff tests/test_load_features.py @ 35:c4428589b82b branch-tests
more tests in load_features
author | Maria Panteli |
---|---|
date | Thu, 14 Sep 2017 13:07:19 +0100 |
parents | 115774aff442 |
children | b1d9ba5f888e |
line wrap: on
line diff
--- a/tests/test_load_features.py Thu Sep 14 10:16:59 2017 +0100 +++ b/tests/test_load_features.py Thu Sep 14 13:07:19 2017 +0100 @@ -7,8 +7,9 @@ import pytest +import os import numpy as np - +import pandas as pd import scripts.load_features as load_features feat_loader = load_features.FeatureLoader(win2sec=8) @@ -95,3 +96,164 @@ aveframes_true = np.array([[0.5, 0], [1.5, 1], [0.1, 0], [0.1, 0]]) # test only the second frame which contains values 0 or values 1 for all 8-second frame entries assert np.array_equal(aveframes[:, 1], aveframes_true[:, 1]) + + +def test_get_op_from_melspec_n_frames(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + opmel = feat_loader.get_op_from_melspec(melspec) + n_frames = opmel.shape[0] + # expect 4 frames for windows not centered and .5 sec hop size + # np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) + assert n_frames == 4 + + +def test_get_op_from_melspec_n_bins(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + opmel = feat_loader.get_op_from_melspec(melspec) + n_bins = opmel.shape[1] + assert n_bins == 40 * 200 + + +def test_get_op_from_melspec_K_bands(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + K = 2 + opmel = feat_loader.get_op_from_melspec(melspec, K=K) + n_bins = opmel.shape[1] + assert n_bins == K * 200 + + +def test_get_mfcc_from_melspec_n_coef(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False) + assert mfcc.shape[1] == 20 + + +def test_get_mfcc_from_melspec_n_coef_delta(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=True, avelocalframes=False) + assert mfcc.shape[1] == 40 + + +def test_get_mfcc_from_melspec_n_frames(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False) + assert mfcc.shape[0] == dur_frames + + +def test_get_mfcc_from_melspec_n_frames_win2(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands + melspec = melspec - np.min(melspec) # melspec must be positive + mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=True) + n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) + assert mfcc.shape[0] == n_frames_true + + +def test_get_ave_chroma_align(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + chroma = np.random.randn(60, dur_frames) # chroma with 60 bins + chroma = chroma - np.min(chroma) # chroma must be positive + ave_chroma = feat_loader.get_ave_chroma(chroma, alignchroma=True, avelocalframes=False) + # the maximum bin across time is the first bin (after alignment) + assert np.argmax(np.sum(ave_chroma, axis=0)) == 0 + + +def test_get_ave_chroma_n_frames(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + chroma = np.random.randn(60, dur_frames) # chroma with 60 bins + chroma = chroma - np.min(chroma) # chroma must be positive + ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=False) + n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) + assert ave_chroma.shape[0] == n_frames_true + + +def test_get_ave_chroma_n_bins(): + dur_sec = 10.0 + dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) + np.random.seed(1) + chroma = np.random.randn(60, dur_frames) # chroma with 60 bins + chroma = chroma - np.min(chroma) # chroma must be positive + ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=True) + assert ave_chroma.shape[1] == 120 + + +def test_get_pb_for_file_empty(): + pbihist = feat_loader.get_pb_for_file('') + assert np.array_equal(pbihist, []) + + +def test_get_pb_for_file_n_bins(): + pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False) + assert pbihist.shape[1] == 3600 + + +def test_get_pb_for_file_align(): + pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False) + pbihist = pbihist.get_values() + assert np.sum(pbihist[:, :60].ravel()) > np.sum(pbihist[:, 60:120].ravel()) + + +def test_get_pb_for_file_nmf(): + pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=True, scale=False) + assert pbihist.shape[1] == 240 + + +def test_get_features(): + df = pd.read_csv('data/sample_dataset/metadata.csv') + df = df.iloc[:1, :] + os.chdir('data/') + data_list = feat_loader.get_features(df) + os.chdir('..') + assert len(np.unique(data_list[-1])) == 1 + + +def test_get_features_n_files(): + df = pd.read_csv('data/sample_dataset/metadata.csv') + n_files = 3 + df = df.iloc[:n_files, :] + os.chdir('data/') + data_list = feat_loader.get_features(df) + os.chdir('..') + assert len(np.unique(data_list[-1])) == n_files + + +def test_get_features_n_frames(): + df = pd.read_csv('data/sample_dataset/metadata.csv') + df = df.iloc[:1, :] + os.chdir('data/') + data_list = feat_loader.get_features(df) + os.chdir('..') + dur_sec = 11.5 # duration of first file in metadata.csv is > 11 seconds + n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) + assert len(data_list[0]) == n_frames_true + \ No newline at end of file