--- a +++ b/tests/test_nparr.py @@ -0,0 +1,146 @@ +from copy import copy + +import numpy as np +import pytest + +from janggu.data import Array +from janggu.data import NanToNumConverter +from janggu.data import RandomOrientation +from janggu.data import RandomShift +from janggu.data import RandomSignalScale +from janggu.data import ReduceDim +from janggu.data import SqueezeDim + + +def test_nparr(tmpdir): + X = Array("X", np.random.random((1000, 100))) + y = Array('y', np.random.randint(2, size=(1000,))) + + np.testing.assert_equal(len(X), len(y)) + np.testing.assert_equal(len(X), 1000) + np.testing.assert_equal(X.shape, (1000, 100,)) + np.testing.assert_equal(y.shape, (1000, 1)) + assert y.ndim == 2 + assert y.shape == (1000, 1) + new_X = copy(X) + + +def test_reducedim(): + x_orig = np.zeros((3,1,1,2)) + + np.testing.assert_equal(x_orig.ndim, 4) + x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"])) + x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='mean') + x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='max') + x_reduce = ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator=np.mean) + with pytest.raises(ValueError): + ReduceDim(Array('test', x_orig, conditions=["A", "B"]), aggregator='nonsense') + + np.testing.assert_equal(len(x_reduce), 3) + np.testing.assert_equal(x_reduce.shape, (3,2)) + np.testing.assert_equal(x_reduce.ndim, 2) + assert x_reduce[0].shape == (1, 2) + assert x_reduce[:3].shape == (3, 2) + assert x_reduce[[0,1]].shape == (2, 2) + assert x_reduce.ndim == 2 + new_x = copy(x_reduce) + assert x_reduce[0].shape == new_x[0].shape + assert x_reduce.conditions == ["A", "B"] + +def test_squeezedim(): + x_orig = np.zeros((3,1,1,2)) + + np.testing.assert_equal(x_orig.ndim, 4) + x_sq = SqueezeDim(Array('test', x_orig, conditions=["A", "B"])) + + np.testing.assert_equal(len(x_sq), 3) + + np.testing.assert_equal(x_sq.shape, (3,2)) + + np.testing.assert_equal(x_sq.ndim, 2) + assert x_sq[0].shape == (2,) + assert x_sq[:3].shape == (3, 2) + assert x_sq[[0,1]].shape == (2, 2) + assert x_sq.ndim == 2 + new_x = copy(x_sq) + assert x_sq[0].shape == new_x[0].shape + assert x_sq.conditions == ["A", "B"] + + +def test_nantonumconverter(): + x_orig = np.zeros((3,1,1,2)) + x_orig[0,0,0,0] = np.nan + arr = Array('test', x_orig, conditions=["A", "B"]) + assert np.isnan(arr[0].mean()) + + x_tr = NanToNumConverter(Array('test', x_orig, conditions=["A", "B"])) + assert x_tr[0].shape == (1, 1, 1, 2) + assert x_tr[:3].shape == (3, 1, 1, 2) + assert x_tr[[0,1]].shape == (2, 1, 1, 2) + assert len(x_tr) == 3 + assert x_tr.shape == (3, 1, 1, 2) + assert x_tr.ndim == 4 + assert not np.isnan(x_tr[0].mean()) + np.testing.assert_equal(x_tr[0], [[[[0,0]]]]) + new_x = copy(x_tr) + assert x_tr[0].shape == new_x[0].shape + assert x_tr.conditions == ["A", "B"] + +def test_randomorientation(): + x_orig = np.zeros((3,1,1,2)) + + x_tr = RandomOrientation(Array('test', x_orig, conditions=["A", "B"])) + assert x_tr[0].shape == (1, 1, 1, 2) + assert x_tr[:3].shape == (3, 1, 1, 2) + assert x_tr[[0,1]].shape == (2, 1, 1, 2) + np.testing.assert_equal(len(x_tr), 3) + assert len(x_tr) == 3 + assert x_tr.shape == (3, 1, 1, 2) + assert x_tr.ndim == 4 + np.testing.assert_equal(x_tr[0], [[[[0,0]]]]) + new_x = copy(x_tr) + assert x_tr[0].shape == new_x[0].shape + assert x_tr.conditions == ["A", "B"] + + +def test_randomsignalscale(): + x_orig = np.ones((3,1,1,2)) + + x_tr = RandomSignalScale(Array('test', x_orig), .1) + assert x_tr[0].shape == (1, 1, 1, 2) + assert x_tr[:3].shape == (3, 1, 1, 2) + assert x_tr[[0,1]].shape == (2, 1, 1, 2) + np.testing.assert_equal(len(x_tr), 3) + assert len(x_tr) == 3 + assert x_tr.shape == (3, 1, 1, 2) + assert x_tr.ndim == 4 + new_x = copy(x_tr) + assert x_tr[0].shape == new_x[0].shape + assert x_tr.conditions == None + + +def test_randomshift(): + x_orig = np.zeros((1,4,1,4)) + x_orig[0, 0, 0,0] = 1 + x_orig[0, 1, 0,1] = 1 + x_orig[0, 2, 0,2] = 1 + x_orig[0, 3, 0,3] = 1 + + x_tr = RandomShift(Array('test', x_orig), 1) + assert x_tr[0].shape == (1, 4, 1, 4) + np.testing.assert_equal(len(x_tr), 1) + assert x_tr.shape == (1, 4, 1, 4) + assert x_tr.ndim == 4 + new_x = copy(x_tr) + assert x_tr[0].shape == new_x[0].shape + assert x_tr.conditions == None + + x_tr = RandomShift(Array('test', x_orig), 1, True) + assert x_tr[0].shape == (1, 4, 1, 4) + np.testing.assert_equal(len(x_tr), 1) + assert x_tr.shape == (1, 4, 1, 4) + assert x_tr.ndim == 4 + new_x = copy(x_tr) + assert x_tr[0].shape == new_x[0].shape + assert x_tr.conditions == None +