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