Mercurial > hg > plosone_underreview
comparison 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 |
comparison
equal
deleted
inserted
replaced
34:115774aff442 | 35:c4428589b82b |
---|---|
5 @author: mariapanteli | 5 @author: mariapanteli |
6 """ | 6 """ |
7 | 7 |
8 import pytest | 8 import pytest |
9 | 9 |
10 import os | |
10 import numpy as np | 11 import numpy as np |
11 | 12 import pandas as pd |
12 import scripts.load_features as load_features | 13 import scripts.load_features as load_features |
13 | 14 |
14 feat_loader = load_features.FeatureLoader(win2sec=8) | 15 feat_loader = load_features.FeatureLoader(win2sec=8) |
15 | 16 |
16 | 17 |
93 frames = np.vstack([frames1, frames2]) | 94 frames = np.vstack([frames1, frames2]) |
94 aveframes = feat_loader.average_local_frames(frames, getstd=True) | 95 aveframes = feat_loader.average_local_frames(frames, getstd=True) |
95 aveframes_true = np.array([[0.5, 0], [1.5, 1], [0.1, 0], [0.1, 0]]) | 96 aveframes_true = np.array([[0.5, 0], [1.5, 1], [0.1, 0], [0.1, 0]]) |
96 # test only the second frame which contains values 0 or values 1 for all 8-second frame entries | 97 # test only the second frame which contains values 0 or values 1 for all 8-second frame entries |
97 assert np.array_equal(aveframes[:, 1], aveframes_true[:, 1]) | 98 assert np.array_equal(aveframes[:, 1], aveframes_true[:, 1]) |
99 | |
100 | |
101 def test_get_op_from_melspec_n_frames(): | |
102 dur_sec = 10.0 | |
103 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
104 np.random.seed(1) | |
105 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
106 melspec = melspec - np.min(melspec) # melspec must be positive | |
107 opmel = feat_loader.get_op_from_melspec(melspec) | |
108 n_frames = opmel.shape[0] | |
109 # expect 4 frames for windows not centered and .5 sec hop size | |
110 # np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) | |
111 assert n_frames == 4 | |
112 | |
113 | |
114 def test_get_op_from_melspec_n_bins(): | |
115 dur_sec = 10.0 | |
116 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
117 np.random.seed(1) | |
118 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
119 melspec = melspec - np.min(melspec) # melspec must be positive | |
120 opmel = feat_loader.get_op_from_melspec(melspec) | |
121 n_bins = opmel.shape[1] | |
122 assert n_bins == 40 * 200 | |
123 | |
124 | |
125 def test_get_op_from_melspec_K_bands(): | |
126 dur_sec = 10.0 | |
127 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
128 np.random.seed(1) | |
129 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
130 melspec = melspec - np.min(melspec) # melspec must be positive | |
131 K = 2 | |
132 opmel = feat_loader.get_op_from_melspec(melspec, K=K) | |
133 n_bins = opmel.shape[1] | |
134 assert n_bins == K * 200 | |
135 | |
136 | |
137 def test_get_mfcc_from_melspec_n_coef(): | |
138 dur_sec = 10.0 | |
139 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
140 np.random.seed(1) | |
141 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
142 melspec = melspec - np.min(melspec) # melspec must be positive | |
143 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False) | |
144 assert mfcc.shape[1] == 20 | |
145 | |
146 | |
147 def test_get_mfcc_from_melspec_n_coef_delta(): | |
148 dur_sec = 10.0 | |
149 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
150 np.random.seed(1) | |
151 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
152 melspec = melspec - np.min(melspec) # melspec must be positive | |
153 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=True, avelocalframes=False) | |
154 assert mfcc.shape[1] == 40 | |
155 | |
156 | |
157 def test_get_mfcc_from_melspec_n_frames(): | |
158 dur_sec = 10.0 | |
159 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
160 np.random.seed(1) | |
161 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
162 melspec = melspec - np.min(melspec) # melspec must be positive | |
163 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=False) | |
164 assert mfcc.shape[0] == dur_frames | |
165 | |
166 | |
167 def test_get_mfcc_from_melspec_n_frames_win2(): | |
168 dur_sec = 10.0 | |
169 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
170 np.random.seed(1) | |
171 melspec = np.random.randn(40, dur_frames) # melspec with 40 melbands | |
172 melspec = melspec - np.min(melspec) # melspec must be positive | |
173 mfcc = feat_loader.get_mfcc_from_melspec(melspec, deltamfcc=False, avelocalframes=True) | |
174 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) | |
175 assert mfcc.shape[0] == n_frames_true | |
176 | |
177 | |
178 def test_get_ave_chroma_align(): | |
179 dur_sec = 10.0 | |
180 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
181 np.random.seed(1) | |
182 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins | |
183 chroma = chroma - np.min(chroma) # chroma must be positive | |
184 ave_chroma = feat_loader.get_ave_chroma(chroma, alignchroma=True, avelocalframes=False) | |
185 # the maximum bin across time is the first bin (after alignment) | |
186 assert np.argmax(np.sum(ave_chroma, axis=0)) == 0 | |
187 | |
188 | |
189 def test_get_ave_chroma_n_frames(): | |
190 dur_sec = 10.0 | |
191 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
192 np.random.seed(1) | |
193 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins | |
194 chroma = chroma - np.min(chroma) # chroma must be positive | |
195 ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=False) | |
196 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) | |
197 assert ave_chroma.shape[0] == n_frames_true | |
198 | |
199 | |
200 def test_get_ave_chroma_n_bins(): | |
201 dur_sec = 10.0 | |
202 dur_frames = np.int(np.round(dur_sec * feat_loader.framessr)) | |
203 np.random.seed(1) | |
204 chroma = np.random.randn(60, dur_frames) # chroma with 60 bins | |
205 chroma = chroma - np.min(chroma) # chroma must be positive | |
206 ave_chroma = feat_loader.get_ave_chroma(chroma, avelocalframes=True, stdlocalframes=True) | |
207 assert ave_chroma.shape[1] == 120 | |
208 | |
209 | |
210 def test_get_pb_for_file_empty(): | |
211 pbihist = feat_loader.get_pb_for_file('') | |
212 assert np.array_equal(pbihist, []) | |
213 | |
214 | |
215 def test_get_pb_for_file_n_bins(): | |
216 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False) | |
217 assert pbihist.shape[1] == 3600 | |
218 | |
219 | |
220 def test_get_pb_for_file_align(): | |
221 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=False, scale=False) | |
222 pbihist = pbihist.get_values() | |
223 assert np.sum(pbihist[:, :60].ravel()) > np.sum(pbihist[:, 60:120].ravel()) | |
224 | |
225 | |
226 def test_get_pb_for_file_nmf(): | |
227 pbihist = feat_loader.get_pb_for_file('data/sample_dataset/Melodia/mel_1_2_1.csv', nmfpb=True, scale=False) | |
228 assert pbihist.shape[1] == 240 | |
229 | |
230 | |
231 def test_get_features(): | |
232 df = pd.read_csv('data/sample_dataset/metadata.csv') | |
233 df = df.iloc[:1, :] | |
234 os.chdir('data/') | |
235 data_list = feat_loader.get_features(df) | |
236 os.chdir('..') | |
237 assert len(np.unique(data_list[-1])) == 1 | |
238 | |
239 | |
240 def test_get_features_n_files(): | |
241 df = pd.read_csv('data/sample_dataset/metadata.csv') | |
242 n_files = 3 | |
243 df = df.iloc[:n_files, :] | |
244 os.chdir('data/') | |
245 data_list = feat_loader.get_features(df) | |
246 os.chdir('..') | |
247 assert len(np.unique(data_list[-1])) == n_files | |
248 | |
249 | |
250 def test_get_features_n_frames(): | |
251 df = pd.read_csv('data/sample_dataset/metadata.csv') | |
252 df = df.iloc[:1, :] | |
253 os.chdir('data/') | |
254 data_list = feat_loader.get_features(df) | |
255 os.chdir('..') | |
256 dur_sec = 11.5 # duration of first file in metadata.csv is > 11 seconds | |
257 n_frames_true = np.round((dur_sec - feat_loader.win2sec) * feat_loader.framessr2) | |
258 assert len(data_list[0]) == n_frames_true | |
259 |