3
3
4
4
5
5
import numpy as np
6
- from nose .tools import eq_ as eq
6
+ from numpy .testing import assert_array_equal
7
+ from nose .tools import eq_ as eq , assert_is_instance
7
8
8
9
9
10
from zarr .store .memory import MemoryStore
10
11
from zarr .array import Array
11
12
from zarr import defaults
12
13
13
14
15
+ def create_array (shape , chunks , ** kwargs ):
16
+ store = MemoryStore (shape , chunks , ** kwargs )
17
+ return Array (store )
18
+
19
+
14
20
def test_1d ():
15
21
16
22
a = np .arange (1050 )
17
- store = MemoryStore (a .shape , chunks = 100 , dtype = a .dtype )
18
- z = Array (store )
23
+ z = create_array (a .shape , chunks = 100 , dtype = a .dtype )
19
24
20
25
# check properties
21
26
eq (a .shape , z .shape )
@@ -28,4 +33,128 @@ def test_1d():
28
33
eq (0 , z .cbytes )
29
34
eq (0 , z .initialized )
30
35
31
- # TODO
36
+ # check empty
37
+ b = z [:]
38
+ assert_is_instance (b , np .ndarray )
39
+ eq (a .shape , b .shape )
40
+ eq (a .dtype , b .dtype )
41
+
42
+ # set data
43
+ z [:] = a
44
+
45
+ # check properties
46
+ eq (a .nbytes , z .nbytes )
47
+ assert z .cbytes > 0
48
+ eq (z .store .cbytes , z .cbytes )
49
+ eq (11 , z .initialized )
50
+
51
+ # check slicing
52
+ assert_array_equal (a , z [:])
53
+ assert_array_equal (a , z [...])
54
+ # noinspection PyTypeChecker
55
+ assert_array_equal (a , z [slice (None )])
56
+ assert_array_equal (a [:10 ], z [:10 ])
57
+ assert_array_equal (a [10 :20 ], z [10 :20 ])
58
+ assert_array_equal (a [- 10 :], z [- 10 :])
59
+ # ...across chunk boundaries...
60
+ assert_array_equal (a [:110 ], z [:110 ])
61
+ assert_array_equal (a [190 :310 ], z [190 :310 ])
62
+ assert_array_equal (a [- 110 :], z [- 110 :])
63
+
64
+ # check partial assignment
65
+ b = np .arange (1e5 , 2e5 )
66
+ z [190 :310 ] = b [190 :310 ]
67
+ assert_array_equal (a [:190 ], z [:190 ])
68
+ assert_array_equal (b [190 :310 ], z [190 :310 ])
69
+ assert_array_equal (a [310 :], z [310 :])
70
+
71
+
72
+ def test_array_1d_fill_value ():
73
+
74
+ for fill_value in - 1 , 0 , 1 , 10 :
75
+
76
+ a = np .arange (1050 )
77
+ f = np .empty_like (a )
78
+ f .fill (fill_value )
79
+ z = create_array (shape = a .shape , chunks = 100 , dtype = a .dtype ,
80
+ fill_value = fill_value )
81
+ z [190 :310 ] = a [190 :310 ]
82
+
83
+ assert_array_equal (f [:190 ], z [:190 ])
84
+ assert_array_equal (a [190 :310 ], z [190 :310 ])
85
+ assert_array_equal (f [310 :], z [310 :])
86
+
87
+
88
+ def test_array_1d_set_scalar ():
89
+
90
+ # setup
91
+ a = np .empty (100 )
92
+ z = create_array (shape = a .shape , chunks = 10 , dtype = a .dtype )
93
+ z [:] = a
94
+ assert_array_equal (a , z [:])
95
+
96
+ for value in - 1 , 0 , 1 , 10 :
97
+ a [15 :35 ] = value
98
+ z [15 :35 ] = value
99
+ assert_array_equal (a , z [:])
100
+ a [:] = value
101
+ z [:] = value
102
+ assert_array_equal (a , z [:])
103
+
104
+
105
+ def test_array_2d ():
106
+
107
+ a = np .arange (10000 ).reshape ((1000 , 10 ))
108
+ z = create_array (shape = a .shape , chunks = (100 , 2 ), dtype = a .dtype )
109
+
110
+ # check properties
111
+ eq (a .shape , z .shape )
112
+ eq (a .dtype , z .dtype )
113
+ eq ((100 , 2 ), z .chunks )
114
+ eq (defaults .cname , z .cname )
115
+ eq (defaults .clevel , z .clevel )
116
+ eq (defaults .shuffle , z .shuffle )
117
+ eq (0 , z .cbytes )
118
+ eq (0 , z .initialized )
119
+
120
+ # set data
121
+ z [:] = a
122
+
123
+ # check properties
124
+ eq (a .nbytes , z .nbytes )
125
+ assert z .cbytes > 0
126
+ eq (50 , z .initialized )
127
+
128
+ # check slicing
129
+ assert_array_equal (a , z [:])
130
+ assert_array_equal (a , z [...])
131
+ # noinspection PyTypeChecker
132
+ assert_array_equal (a , z [slice (None )])
133
+ assert_array_equal (a [:10 ], z [:10 ])
134
+ assert_array_equal (a [10 :20 ], z [10 :20 ])
135
+ assert_array_equal (a [- 10 :], z [- 10 :])
136
+ assert_array_equal (a [:, :2 ], z [:, :2 ])
137
+ assert_array_equal (a [:, 2 :4 ], z [:, 2 :4 ])
138
+ assert_array_equal (a [:, - 2 :], z [:, - 2 :])
139
+ assert_array_equal (a [:10 , :2 ], z [:10 , :2 ])
140
+ assert_array_equal (a [10 :20 , 2 :4 ], z [10 :20 , 2 :4 ])
141
+ assert_array_equal (a [- 10 :, - 2 :], z [- 10 :, - 2 :])
142
+ # ...across chunk boundaries...
143
+ assert_array_equal (a [:110 ], z [:110 ])
144
+ assert_array_equal (a [190 :310 ], z [190 :310 ])
145
+ assert_array_equal (a [- 110 :], z [- 110 :])
146
+ assert_array_equal (a [:, :3 ], z [:, :3 ])
147
+ assert_array_equal (a [:, 3 :7 ], z [:, 3 :7 ])
148
+ assert_array_equal (a [:, - 3 :], z [:, - 3 :])
149
+ assert_array_equal (a [:110 , :3 ], z [:110 , :3 ])
150
+ assert_array_equal (a [190 :310 , 3 :7 ], z [190 :310 , 3 :7 ])
151
+ assert_array_equal (a [- 110 :, - 3 :], z [- 110 :, - 3 :])
152
+
153
+ # check partial assignment
154
+ b = np .arange (10000 , 20000 ).reshape ((1000 , 10 ))
155
+ z [190 :310 , 3 :7 ] = b [190 :310 , 3 :7 ]
156
+ assert_array_equal (a [:190 ], z [:190 ])
157
+ assert_array_equal (a [:, :3 ], z [:, :3 ])
158
+ assert_array_equal (b [190 :310 , 3 :7 ], z [190 :310 , 3 :7 ])
159
+ assert_array_equal (a [310 :], z [310 :])
160
+ assert_array_equal (a [:, 7 :], z [:, 7 :])
0 commit comments