15
15
SpikeTimesAssembly , get_metadata
16
16
17
17
18
+ def test_get_metadata ():
19
+ xr .show_versions ()
20
+ # assembly, dims, names_only, include_coords, include_indexes, include_multi_indexes, include_levels
21
+ assy = DataAssembly (
22
+ data = [[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ], [10 , 11 , 12 ], [13 , 14 , 15 ], [16 , 17 , 18 ]],
23
+ coords = {
24
+ 'up' : ("a" , ['alpha' , 'alpha' , 'beta' , 'beta' , 'beta' , 'beta' ]),
25
+ 'down' : ("a" , [1 , 1 , 1 , 1 , 2 , 2 ]),
26
+ 'why' : ("a" , ['yes' , 'yes' , 'yes' , 'yes' , 'yes' , 'no' ]),
27
+ 'b' : ('b' , ['x' , 'y' , 'z' ]),
28
+ },
29
+ dims = ['a' , 'b' ]
30
+ )
31
+ assy = assy .reset_index ('why' )
32
+ assert set (get_metadata (assy , None , True , True , True , True , True )) == {'a' , 'up' , 'down' , 'why' , 'b' }
33
+ assert set (get_metadata (assy , None , True , True , True , True , False )) == {'a' , 'why' , 'b' }
34
+ assert set (get_metadata (assy , None , True , True , True , False , True )) == {'up' , 'down' , 'why' , 'b' }
35
+ assert set (get_metadata (assy , None , True , True , True , False , False )) == {'why' , 'b' }
36
+ assert set (get_metadata (assy , None , True , True , False , True , True )) == {'a' , 'up' , 'down' , 'why' }
37
+ assert set (get_metadata (assy , None , True , True , False , True , False )) == {'a' , 'why' }
38
+ assert set (get_metadata (assy , None , True , True , False , False , True )) == {'up' , 'down' , 'why' }
39
+ assert set (get_metadata (assy , None , True , True , False , False , False )) == {'why' }
40
+ assert set (get_metadata (assy , None , True , False , True , True , True )) == {'a' , 'up' , 'down' , 'b' }
41
+ assert set (get_metadata (assy , None , True , False , True , True , False )) == {'a' , 'b' }
42
+ assert set (get_metadata (assy , None , True , False , True , False , True )) == {'up' , 'down' , 'b' }
43
+ assert set (get_metadata (assy , None , True , False , True , False , False )) == {'b' }
44
+ assert set (get_metadata (assy , None , True , False , False , True , True )) == {'a' , 'up' , 'down' }
45
+ assert set (get_metadata (assy , None , True , False , False , True , False )) == {'a' }
46
+ assert set (get_metadata (assy , None , True , False , False , False , True )) == {'up' , 'down' }
47
+ assert set (get_metadata (assy , None , True , False , False , False , False )) == set ()
48
+
49
+ a = make_proto_assembly ()
50
+ md_all = list (get_metadata (a ))
51
+ assert len (md_all ) == 4
52
+ md_coo = list (get_metadata (a , include_indexes = False , include_levels = False ))
53
+ assert len (md_coo ) == 0
54
+ md_ind = list (get_metadata (a , include_coords = False , include_indexes = True , include_multi_indexes = True , include_levels = False ))
55
+ assert len (md_ind ) == 2
56
+ md_lev = list (get_metadata (a , include_coords = False , include_indexes = False ))
57
+ assert len (md_lev ) == 4
58
+
59
+
18
60
def test_get_levels ():
19
61
assy = DataAssembly (
20
62
data = [[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ], [10 , 11 , 12 ], [13 , 14 , 15 ], [16 , 17 , 18 ]],
@@ -40,12 +82,11 @@ def test_wrap_dataarray(self):
40
82
dims = ['a' , 'b' ]
41
83
)
42
84
assert "up" in da .coords
43
- assert da [ "a" ]. variable . level_names is None
85
+ assert "a" not in da . indexes
44
86
da = gather_indexes (da )
45
- assert da .coords .variables ["a" ].level_names == ["up" , "down" ]
46
- assert da ["a" ].variable .level_names == ["up" , "down" ]
87
+ assert da .indexes ["a" ].names == ["up" , "down" ]
47
88
da = DataArray (da )
48
- assert da .coords . variables ["a" ].level_names == ["up" , "down" ]
89
+ assert da .indexes ["a" ].names == ["up" , "down" ]
49
90
assert da ["up" ] is not None
50
91
51
92
def test_wrap_dataassembly (self ):
@@ -58,11 +99,9 @@ def test_wrap_dataassembly(self):
58
99
},
59
100
dims = ['a' , 'b' ]
60
101
)
61
- assert assy .coords .variables ["a" ].level_names == ["up" , "down" ]
62
- assert assy ["a" ].variable .level_names == ["up" , "down" ]
102
+ assert assy .indexes ["a" ].names == ["up" , "down" ]
63
103
da = DataArray (assy )
64
- assert da .coords .variables ["a" ].level_names == ["up" , "down" ]
65
- assert da ["a" ].variable .level_names == ["up" , "down" ]
104
+ assert assy .indexes ["a" ].names == ["up" , "down" ]
66
105
assert da ["up" ] is not None
67
106
68
107
def test_reset_index (self ):
@@ -109,6 +148,7 @@ def test_getitem(self):
109
148
)
110
149
single = assy [0 , 0 ]
111
150
assert type (single ) is type (assy )
151
+ assert single == 1
112
152
113
153
def test_is_fastpath (self ):
114
154
"""In DataAssembly.__init__ we have to check whether fastpath is present in a set of arguments and true
@@ -164,17 +204,14 @@ def test_align(self):
164
204
dims = ['a' , 'b' ]
165
205
)
166
206
assert hasattr (da1 , "up" )
167
- assert da1 .coords .variables ["a" ].level_names == ["up" , "down" ]
168
- assert da1 ["a" ].variable .level_names == ["up" , "down" ]
207
+ assert da1 .indexes ["a" ].names == ["up" , "down" ]
169
208
assert da1 ["up" ] is not None
170
209
aligned1 , aligned2 = xr .align (da1 , da2 , join = "outer" )
171
210
assert hasattr (aligned1 , "up" )
172
- assert aligned1 .coords .variables ["a" ].level_names == ["up" , "down" ]
173
- assert aligned1 ["a" ].variable .level_names == ["up" , "down" ]
211
+ assert aligned1 .indexes ["a" ].names == ["up" , "down" ]
174
212
assert aligned1 ["up" ] is not None
175
213
assert hasattr (aligned2 , "up" )
176
- assert aligned2 .coords .variables ["a" ].level_names == ["up" , "down" ]
177
- assert aligned2 ["a" ].variable .level_names == ["up" , "down" ]
214
+ assert aligned2 .indexes ["a" ].names == ["up" , "down" ]
178
215
assert aligned2 ["up" ] is not None
179
216
180
217
@@ -202,6 +239,60 @@ def test_incorrect_coord(self):
202
239
d .sel (coordB = 0 )
203
240
204
241
242
+ class TestPlainGroupy :
243
+
244
+ def test_on_data_array (self ):
245
+ d = DataArray (
246
+ data = [
247
+ [0 , 1 , 2 , 3 , 4 , 5 , 6 ],
248
+ [7 , 8 , 9 , 10 , 11 , 12 , 13 ],
249
+ [14 , 15 , 16 , 17 , 18 , 19 , 20 ]
250
+ ],
251
+ coords = {
252
+ "greek" : ("a" , ['alpha' , 'beta' , 'gamma' ]),
253
+ "colors" : ("a" , ['red' , 'green' , 'blue' ]),
254
+ "compass" : ("b" , ['north' , 'south' , 'east' , 'west' , 'northeast' , 'southeast' , 'southwest' ]),
255
+ "integer" : ("b" , [0 , 1 , 2 , 3 , 4 , 5 , 6 ]),
256
+ },
257
+ dims = ("a" , "b" )
258
+ )
259
+ d = gather_indexes (d )
260
+ g = d .groupby ('greek' )
261
+ # with xarray==2022.06.0, the following line fails with:
262
+ # ValueError: conflicting multi-index level name 'greek' with dimension 'greek'
263
+ m = g .mean (...)
264
+ c = DataArray (
265
+ data = [3 , 10 , 17 ],
266
+ coords = {'greek' : ('greek' , ['alpha' , 'beta' , 'gamma' ])},
267
+ dims = ['greek' ]
268
+ )
269
+ assert m .equals (c )
270
+
271
+ def test_on_data_assembly (self ):
272
+ d = DataAssembly (
273
+ data = [
274
+ [0 , 1 , 2 , 3 , 4 , 5 , 6 ],
275
+ [7 , 8 , 9 , 10 , 11 , 12 , 13 ],
276
+ [14 , 15 , 16 , 17 , 18 , 19 , 20 ]
277
+ ],
278
+ coords = {
279
+ "greek" : ("a" , ['alpha' , 'beta' , 'gamma' ]),
280
+ "colors" : ("a" , ['red' , 'green' , 'blue' ]),
281
+ "compass" : ("b" , ['north' , 'south' , 'east' , 'west' , 'northeast' , 'southeast' , 'southwest' ]),
282
+ "integer" : ("b" , [0 , 1 , 2 , 3 , 4 , 5 , 6 ]),
283
+ },
284
+ dims = ("a" , "b" )
285
+ )
286
+ g = d .groupby ('greek' )
287
+ m = g .mean (...)
288
+ c = DataAssembly (
289
+ data = [3 , 10 , 17 ],
290
+ coords = {'greek' : ('greek' , ['alpha' , 'beta' , 'gamma' ])},
291
+ dims = ['greek' ]
292
+ )
293
+ assert m .equals (c )
294
+
295
+
205
296
class TestMultiGroupby :
206
297
def test_single_dimension (self ):
207
298
d = DataAssembly ([[1 , 2 , 3 ], [4 , 5 , 6 ]], coords = {'a' : ['a' , 'b' ], 'b' : ['x' , 'y' , 'z' ]}, dims = ['a' , 'b' ])
@@ -228,13 +319,14 @@ def test_single_coord(self):
228
319
},
229
320
dims = ("a" , "b" )
230
321
)
231
- g = d .multi_groupby (['greek' ]).mean (...)
322
+ g = d .multi_groupby (['greek' ])
323
+ m = g .mean (...)
232
324
c = DataAssembly (
233
325
data = [3 , 10 , 17 ],
234
326
coords = {'greek' : ('greek' , ['alpha' , 'beta' , 'gamma' ])},
235
327
dims = ['greek' ]
236
328
)
237
- assert g .equals (c )
329
+ assert m .equals (c )
238
330
239
331
def test_single_dim_multi_coord (self ):
240
332
d = DataAssembly ([1 , 2 , 3 , 4 , 5 , 6 ],
@@ -452,15 +544,5 @@ def test_load_extras(self, test_stimulus_set_identifier):
452
544
assert extra .shape == (40 ,)
453
545
454
546
455
- def test_get_metadata ():
456
- a = make_proto_assembly ()
457
- md_all = list (get_metadata (a ))
458
- assert len (md_all ) == 4
459
- md_coo = list (get_metadata (a , include_indexes = False , include_levels = False ))
460
- assert len (md_coo ) == 0
461
- md_ind = list (get_metadata (a , include_coords = False , include_indexes = True , include_multi_indexes = True , include_levels = False ))
462
- assert len (md_ind ) == 2
463
- md_lev = list (get_metadata (a , include_coords = False , include_indexes = False ))
464
- assert len (md_lev ) == 4
465
547
466
548
0 commit comments