File: test_memory.py

package info (click to toggle)
brian 2.9.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,872 kB
  • sloc: python: 51,820; cpp: 2,033; makefile: 108; sh: 72
file content (140 lines) | stat: -rw-r--r-- 4,648 bytes parent folder | download | duplicates (2)
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()