def test_run_1(self): # properly deals with "intervals" experiment # also tests that the user can pass a custom string to the continuer setting mock_path = u'vis.workflow.WorkflowManager._intervs' with mock.patch(mock_path) as mock_meth: mock_meth.return_value = u'the final countdown' test_wc = WorkflowManager([]) test_wc._loaded = True test_wc.settings(None, 'continuer', 'Unisonus') test_wc.run(u'intervals') mock_meth.assert_called_once_with() self.assertEqual(mock_meth.return_value, test_wc._result) self.assertEqual(u'intervals', test_wc._previous_exp) self.assertEqual('Unisonus', test_wc.settings(None, 'continuer'))
def test_run_2b(self): # same as 2a but 'interval quality' is set to False mock_path = u'vis.workflow.WorkflowManager._interval_ngrams' with mock.patch(mock_path) as mock_meth: mock_meth.return_value = u'the final countdown' test_wc = WorkflowManager([]) test_wc._loaded = True test_wc.settings(None, 'interval quality', False) def the_side_effect(): assert '1' == test_wc.settings(None, 'continuer') return mock.DEFAULT mock_meth.side_effect = the_side_effect test_wc.run(u'interval n-grams') mock_meth.assert_called_once_with() self.assertEqual(mock_meth.return_value, test_wc._result) self.assertEqual(u'interval n-grams', test_wc._previous_exp) self.assertEqual('dynamic quality', test_wc.settings(None, 'continuer'))
def test_run_2a(self): # properly deals with "interval n-grams" experiment # checks that the continuer returns to 'dynamic quality' after runtime when # interval quality was set to True mock_path = u'vis.workflow.WorkflowManager._interval_ngrams' with mock.patch(mock_path) as mock_meth: mock_meth.return_value = u'the final countdown' test_wc = WorkflowManager([]) test_wc._loaded = True test_wc.settings(None, 'interval quality', True) def the_side_effect(): assert 'P1' == test_wc.settings(None, 'continuer') return mock.DEFAULT mock_meth.side_effect = the_side_effect test_wc.run(u'interval n-grams') mock_meth.assert_called_once_with() self.assertEqual(mock_meth.return_value, test_wc._result) self.assertEqual(u'interval n-grams', test_wc._previous_exp) self.assertEqual('dynamic quality', test_wc.settings(None, 'continuer'))
def test_intervals_2(self): # test all combinations of bwv77 test_wm = WorkflowManager(['vis/tests/corpus/bwv77.mxl']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') actual = test_wm.run('intervals') exp_ind = list(IntervalsTests.EXPECTED_2.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_2[ind_item], actual[ind_item])
def test_ngrams_8(self): # test_ngrams_7 *but* with part combinations specified rather than 'all pairs' test_wm = WorkflowManager(['vis/tests/corpus/vis_Test_Piece.xml']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', '[[0,1], [0,2], [0,3], [1,2], [1,3], [2,3]]') test_wm.settings(0, 'n', 2) actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_7.index) # yes, this *should* be EXPECTED_7 act_ind = list(actual.index) self.assertEqual(len(exp_ind), len(act_ind)) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) self.assertEqual(NGramsTests.EXPECTED_7[ind_item], actual[ind_item])
def test_ngrams_7(self): # test all two-part combinations of the test piece; 2-grams test_wm = WorkflowManager(['vis/tests/corpus/vis_Test_Piece.xml']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(0, 'n', 2) actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_7.index) act_ind = list(actual.index) self.assertEqual(len(exp_ind), len(act_ind)) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) self.assertEqual(NGramsTests.EXPECTED_7[ind_item], actual[ind_item])
def test_ngrams_6(self): # test madrigal51 with all-voice 2-grams and rests test_wm = WorkflowManager(['vis/tests/corpus/madrigal51.mxl']) test_wm.settings(0, 'voice combinations', 'all') test_wm.settings(None, 'include rests', True) test_wm.load('pieces') actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_6.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(NGramsTests.EXPECTED_6[ind_item], actual[ind_item])
def test_ngrams_3(self): # test all voices of bwv77; 1-grams test_wm = WorkflowManager(['vis/tests/corpus/bwv77.mxl']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all') test_wm.settings(0, 'n', 1) actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_3.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(NGramsTests.EXPECTED_3[ind_item], actual[ind_item])
def test_intervals_3(self): # test all combinations of madrigal51 without rests test_wm = WorkflowManager(['vis/tests/corpus/madrigal51.mxl']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(None, 'include rests', False) actual = test_wm.run('intervals') exp_ind = list(IntervalsTests.EXPECTED_3.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_3[ind_item], actual[ind_item])
def test_ngrams_2(self): # test all two-part combinations of bwv77; 5-grams test_wm = WorkflowManager(['vis/tests/corpus/bwv77.mxl']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(0, 'n', 5) test_wm.settings(0, 'continuer', '_') actual = test_wm.run('interval n-grams')[:10] exp_ind = list(NGramsTests.EXPECTED_2.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(NGramsTests.EXPECTED_2[ind_item], actual[ind_item])
def test_ngrams_4(self): # test all voices of bwv2; 3-grams; simple intervals test_wm = WorkflowManager(['vis/tests/corpus/bwv2.xml']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all') test_wm.settings(0, 'n', 2) test_wm.settings(None, 'simple intervals', True) actual = test_wm.run('interval n-grams')[:10] exp_ind = list(NGramsTests.EXPECTED_4.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(NGramsTests.EXPECTED_4[ind_item], actual[ind_item])
def test_ngrams_9c(self): # same as 9b but 'interval quality' is set to False (by default). test_wm = WorkflowManager(['vis/tests/corpus/Kyrie_short.krn']) test_wm.load() test_wm.settings(0, 'voice combinations', '[[1,3]]') test_wm.settings(0, 'n', 2) test_wm.settings(0, 'offset interval', 2.0) actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_9c.index) act_ind = list(actual.index) self.assertEqual(len(exp_ind), len(act_ind)) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) self.assertEqual(NGramsTests.EXPECTED_9c[ind_item], actual[ind_item])
def test_intervals_2(self): """test all combinations of bwv77""" test_wm = WorkflowManager([os.path.join(VIS_PATH, 'tests', 'corpus', 'bwv77.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) actual = actual['aggregator.ColumnAggregator'] exp_ind = list(IntervalsTests.EXPECTED_2.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_2[ind_item], actual[ind_item])
def test_ngrams_1(self): # test the two highest voices of bwv77; 2-grams test_wm = WorkflowManager(['vis/tests/corpus/bwv77.mxl']) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', '[[0, 1]]') test_wm.settings(0, 'n', 2) test_wm.settings(0, 'continuer', '_') actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_1.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(NGramsTests.EXPECTED_1[ind_item], actual[ind_item])
def test_intervals_3(self): """test all combinations of madrigal51 without rests""" test_wm = WorkflowManager([os.path.join(VIS_PATH, 'tests', 'corpus', 'madrigal51.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(None, 'include rests', False) actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) actual = actual['aggregator.ColumnAggregator'] exp_ind = list(IntervalsTests.EXPECTED_3.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_3[ind_item], actual[ind_item])
def test_intervals_7(self): # TODO: add a frequency-counted test """same as test_6 *but* no quality""" # NB: the "expected" was hand-counted expected = pandas.read_csv(os.path.join(VIS_PATH, 'tests', 'expecteds', 'bwv77', 'SA_intervals_nq.csv'), comment='#', index_col=0, header=[0, 1], quotechar="'", dtype='object') test_wm = WorkflowManager([os.path.join(VIS_PATH, 'tests', 'corpus', 'bwv77.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', '[[0, 1]]') test_wm.settings(None, 'count frequency', False) test_wm.settings(None, 'interval quality', False) actual = test_wm.run('intervals') self.assertEqual(1, len(actual)) actual = actual[0].dropna() self.assertDataFramesEqual(expected, actual)
def test_ngrams_9b(self): # same as 9a but tests functionality of 'dynamic quality setting of continuer # when 'interval quality' is set to True. test_wm = WorkflowManager(['vis/tests/corpus/Kyrie_short.krn']) test_wm.load() test_wm.settings(0, 'voice combinations', '[[1,3]]') test_wm.settings(0, 'n', 2) test_wm.settings(0, 'offset interval', 2.0) test_wm.settings(0, 'interval quality', True) actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_9b.index) act_ind = list(actual.index) self.assertEqual(len(exp_ind), len(act_ind)) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) self.assertEqual(NGramsTests.EXPECTED_9b[ind_item], actual[ind_item])
def test_intervals_2(self): """test all combinations of bwv77""" test_wm = WorkflowManager( [os.path.join(VIS_PATH, 'tests', 'corpus', 'bwv77.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) actual = actual['aggregator.ColumnAggregator'] exp_ind = list(IntervalsTests.EXPECTED_2.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_2[ind_item], actual[ind_item])
def test_intervals_3(self): """test all combinations of madrigal51 without rests""" test_wm = WorkflowManager( [os.path.join(VIS_PATH, 'tests', 'corpus', 'madrigal51.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(None, 'include rests', False) actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) actual = actual['aggregator.ColumnAggregator'] exp_ind = list(IntervalsTests.EXPECTED_3.index) act_ind = list(actual.index) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) for ind_item in exp_ind: self.assertEqual(IntervalsTests.EXPECTED_3[ind_item], actual[ind_item])
def test_ngrams_9a(self): # test the calculation of horizontal intervals when the lower voice is sustained # longer than the offset interval. A custom string is passed for horizontal # unisons resulting from a sustained lower voice. Regression test for: # https://github.com/ELVIS-Project/vis/issues/305 test_wm = WorkflowManager(['vis/tests/corpus/Kyrie_short.krn']) test_wm.load() test_wm.settings(0, 'voice combinations', '[[1,3]]') test_wm.settings(0, 'n', 2) test_wm.settings(0, 'offset interval', 2.0) test_wm.settings(0, 'continuer', 'zamboni') actual = test_wm.run('interval n-grams') exp_ind = list(NGramsTests.EXPECTED_9a.index) act_ind = list(actual.index) self.assertEqual(len(exp_ind), len(act_ind)) for ind_item in exp_ind: self.assertTrue(ind_item in act_ind) self.assertEqual(NGramsTests.EXPECTED_9a[ind_item], actual[ind_item])
def test_intervals_5(self): """test all combinations of vis_Test_Piece""" test_wm = WorkflowManager([os.path.join(VIS_PATH, 'tests', 'corpus', 'vis_Test_Piece.xml')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(None, 'include rests', True) expected = pandas.read_csv(os.path.join(VIS_PATH, 'tests', 'corpus', 'test_intervals_5.csv'), index_col=0) actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) self.assertSequenceEqual(list(expected.columns), list(actual.columns)) for col_name in expected.columns: self.assertEqual(len(expected[col_name]), len(actual[col_name])) for each_interval in expected[col_name].index: # NOTE: for whatever reason, the "expected" file always imports with an Int64Index, # so .loc() won't find things properly unless we give the int64 index to the # expected and the str index to the actual self.assertEqual(expected[col_name].loc[each_interval], actual[col_name].loc[str(each_interval)])
def test_intervals_6(self): # TODO: add a frequency-counted test """test Soprano and Alto of bwv77; with quality; not counting frequency""" # NB: the "expected" was hand-counted expected = pandas.read_csv(os.path.join(VIS_PATH, 'tests', 'expecteds', 'bwv77', 'SA_intervals.csv'), comment='#', index_col=0, header=[0, 1], quotechar="'") test_wm = WorkflowManager( [os.path.join(VIS_PATH, 'tests', 'corpus', 'bwv77.mxl')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', '[[0, 1]]') test_wm.settings(None, 'count frequency', False) test_wm.settings(None, 'interval quality', True) actual = test_wm.run('intervals') self.assertEqual(1, len(actual)) actual = actual[0].dropna() self.assertDataFramesEqual(expected, actual)
def test_intervals_5(self): """test all combinations of vis_Test_Piece""" test_wm = WorkflowManager( [os.path.join(VIS_PATH, 'tests', 'corpus', 'vis_Test_Piece.xml')]) test_wm.load('pieces') test_wm.settings(0, 'voice combinations', 'all pairs') test_wm.settings(None, 'include rests', True) expected = pandas.read_csv(os.path.join(VIS_PATH, 'tests', 'corpus', 'test_intervals_5.csv'), index_col=0) actual = test_wm.run('intervals') self.assertEqual(1, len(actual.columns)) self.assertSequenceEqual(list(expected.columns), list(actual.columns)) for col_name in expected.columns: self.assertEqual(len(expected[col_name]), len(actual[col_name])) for each_interval in expected[col_name].index: # NOTE: for whatever reason, the "expected" file always imports with an Int64Index, # so .loc() won't find things properly unless we give the int64 index to the # expected and the str index to the actual self.assertEqual(expected[col_name].loc[each_interval], actual[col_name].loc[str(each_interval)])