1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
import numpy as np
import pytest
from numpy.testing import assert_equal
from brian2.memory.dynamicarray import DynamicArray, DynamicArray1D
@pytest.mark.codegen_independent
def test_dynamic_array_1d_access():
da = DynamicArray1D(10)
da[:] = np.arange(10)
assert da[7] == 7
assert len(da) == 10
assert da.shape == (10,)
assert len(str(da))
assert len(repr(da))
da[:] += 1
da.data[:] += 1
assert all(da[:] == (np.arange(10) + 2))
@pytest.mark.codegen_independent
def test_dynamic_array_1d_resize_up_down():
for numpy_resize in [True, False]:
da = DynamicArray1D(10, use_numpy_resize=numpy_resize, refcheck=False)
da[:] = np.arange(10)
da.resize(15)
assert len(da) == 15
assert da.shape == (15,)
assert all(da[10:] == 0)
assert all(da[:10] == np.arange(10))
da.resize(5)
assert len(da) == 5
assert da.shape == (5,)
assert all(da[:] == np.arange(5))
@pytest.mark.codegen_independent
def test_dynamic_array_1d_resize_down_up():
for numpy_resize in [True, False]:
da = DynamicArray1D(10, use_numpy_resize=numpy_resize)
da[:] = np.arange(10)
da.resize(5)
assert len(da) == 5
assert da.shape == (5,)
assert all(da[:5] == np.arange(5))
da.resize(10)
assert len(da) == 10
assert da.shape == (10,)
assert all(da[:5] == np.arange(5))
assert all(da[5:] == 0)
@pytest.mark.codegen_independent
def test_dynamic_array_1d_shrink():
for numpy_resize in [True, False]:
da = DynamicArray1D(10, use_numpy_resize=numpy_resize, refcheck=False)
da[:] = np.arange(10)
da.shrink(5)
assert len(da) == 5
assert all(da[:] == np.arange(5))
# After using shrink, the underlying array should have changed
assert len(da._data) == 5
@pytest.mark.codegen_independent
def test_dynamic_array_2d_access():
da = DynamicArray1D((10, 20))
da[:, :] = np.arange(200).reshape((10, 20))
assert da[5, 10] == 5 * 20 + 10
assert da.shape == (10, 20)
assert len(str(da))
assert len(repr(da))
da[:] += 1
da.data[:] += 1
assert_equal(da[:, :], np.arange(200).reshape((10, 20)) + 2)
@pytest.mark.codegen_independent
def test_dynamic_array_2d_resize_up_down():
for numpy_resize in [True, False]:
da = DynamicArray((10, 20), use_numpy_resize=numpy_resize, refcheck=False)
da[:, :] = np.arange(200).reshape((10, 20))
da.resize((15, 20))
assert da.shape == (15, 20)
assert_equal(da[10:, :], np.zeros((5, 20)))
assert_equal(da[:10, :], np.arange(200).reshape((10, 20)))
da.resize((15, 25))
assert da.shape == (15, 25)
assert_equal(da[:10, 20:], np.zeros((10, 5)))
assert_equal(da[:10, :20], np.arange(200).reshape((10, 20)))
da.resize((10, 20))
assert da.shape == (10, 20)
assert_equal(da[:, :], np.arange(200).reshape((10, 20)))
@pytest.mark.codegen_independent
def test_dynamic_array_2d_resize_down_up():
for numpy_resize in [True, False]:
da = DynamicArray((10, 20), use_numpy_resize=numpy_resize, refcheck=False)
da[:, :] = np.arange(200).reshape((10, 20))
da.resize((5, 20))
assert da.shape == (5, 20)
assert_equal(da, np.arange(100).reshape((5, 20)))
da.resize((5, 15))
assert da.shape == (5, 15)
for row_idx, row in enumerate(da):
assert_equal(row, 20 * row_idx + np.arange(15))
da.resize((10, 20))
assert da.shape == (10, 20)
for row_idx, row in enumerate(da[:5, :15]):
assert_equal(row, 20 * row_idx + np.arange(15))
assert_equal(da[5:, 15:], 0)
@pytest.mark.codegen_independent
def test_dynamic_array_2d_shrink():
for numpy_resize in [True, False]:
da = DynamicArray((10, 20), use_numpy_resize=numpy_resize, refcheck=False)
da[:, :] = np.arange(200).reshape((10, 20))
da.shrink((5, 15))
assert da.shape == (5, 15)
# After using shrink, the underlying array should have changed
assert da._data.shape == (5, 15)
assert_equal(
da[:, :], np.arange(15).reshape((1, 15)) + 20 * np.arange(5).reshape((5, 1))
)
if __name__ == "__main__":
test_dynamic_array_1d_access()
test_dynamic_array_1d_resize_up_down()
test_dynamic_array_1d_resize_down_up()
test_dynamic_array_1d_shrink()
test_dynamic_array_2d_access()
test_dynamic_array_2d_resize_up_down()
test_dynamic_array_2d_resize_down_up()
test_dynamic_array_2d_shrink()
|