6
6
import numpy as np
7
7
8
8
from larray .tests .common import assert_array_equal , assert_nparray_equal
9
- from larray import Axis , LGroup , IGroup , read_hdf
9
+ from larray import Axis , LGroup , IGroup , read_hdf , X
10
+ from larray .core .axis import AxisReference
10
11
11
12
12
13
def test_init ():
@@ -98,7 +99,7 @@ def test_translate():
98
99
99
100
def test_getitem_lgroup_keys ():
100
101
def group_equal (g1 , g2 ):
101
- return ( g1 .key == g2 .key and g1 .name == g2 .name and g1 .axis is g2 .axis )
102
+ return g1 .key == g2 .key and g1 .name == g2 .name and g1 .axis is g2 .axis
102
103
103
104
age = Axis (range (100 ), 'age' )
104
105
ages = [1 , 5 , 9 ]
@@ -119,93 +120,125 @@ def group_equal(g1, g2):
119
120
def test_getitem_group_keys ():
120
121
a = Axis ('a=a0..a2' )
121
122
alt_a = Axis ('a=a1..a3' )
123
+
122
124
key = a ['a1' ]
125
+
123
126
g = a [key ]
124
127
assert g .key == 'a1'
125
128
assert g .axis is a
129
+
126
130
g = alt_a [key ]
127
131
assert g .key == 'a1'
128
132
assert g .axis is alt_a
133
+
129
134
key = a ['a1' :'a2' ]
135
+
130
136
g = a [key ]
131
137
assert g .key == slice ('a1' , 'a2' )
132
138
assert g .axis is a
139
+
133
140
g = alt_a [key ]
134
141
assert g .key == slice ('a1' , 'a2' )
135
142
assert g .axis is alt_a
143
+
136
144
key = a [['a1' , 'a2' ]]
145
+
137
146
g = a [key ]
138
147
assert g .key == ['a1' , 'a2' ]
139
148
assert g .axis is a
149
+
140
150
g = alt_a [key ]
141
151
assert g .key == ['a1' , 'a2' ]
142
152
assert g .axis is alt_a
153
+
143
154
key = a .i [1 ]
155
+
144
156
g = a [key ]
145
157
assert isinstance (g , LGroup )
146
158
assert g .key == 'a1'
147
159
assert g .axis is a
160
+
148
161
g = alt_a [key ]
149
162
assert isinstance (g , LGroup )
150
163
assert g .key == 'a1'
151
164
assert g .axis is alt_a
165
+
152
166
key = a .i [1 :3 ]
167
+
153
168
g = a [key ]
154
169
assert isinstance (g , LGroup )
155
170
assert g .key == slice ('a1' , 'a2' )
156
171
assert g .axis is a
172
+
157
173
g = alt_a [key ]
158
174
assert isinstance (g , LGroup )
159
175
assert g .key == slice ('a1' , 'a2' )
160
176
assert g .axis is alt_a
177
+
161
178
key = a .i [[1 , 2 ]]
179
+
162
180
g = a [key ]
163
181
assert isinstance (g , LGroup )
164
182
assert list (g .key ) == ['a1' , 'a2' ]
165
183
assert g .axis is a
184
+
166
185
g = alt_a [key ]
167
186
assert isinstance (g , LGroup )
168
187
assert list (g .key ) == ['a1' , 'a2' ]
169
188
assert g .axis is alt_a
189
+
170
190
lg_a1 = a ['a1' ]
171
191
lg_a2 = a ['a2' ]
192
+
172
193
g = a [lg_a1 :lg_a2 ]
173
194
assert isinstance (g , LGroup )
174
195
assert g .key == slice ('a1' , 'a2' )
175
196
assert g .axis is a
197
+
176
198
g = alt_a [lg_a1 :lg_a2 ]
177
199
assert isinstance (g , LGroup )
178
200
assert g .key == slice ('a1' , 'a2' )
179
201
assert g .axis is alt_a
202
+
180
203
pg_a1 = a .i [1 ]
181
204
pg_a2 = a .i [2 ]
205
+
182
206
g = a [pg_a1 :pg_a2 ]
183
207
assert isinstance (g , LGroup )
184
208
assert g .key == slice ('a1' , 'a2' )
185
209
assert g .axis is a
210
+
186
211
g = alt_a [pg_a1 :pg_a2 ]
187
212
assert isinstance (g , LGroup )
188
213
assert g .key == slice ('a1' , 'a2' )
189
214
assert g .axis is alt_a
215
+
190
216
key = [a ['a1' ], a ['a2' ]]
217
+
191
218
g = a [key ]
192
219
assert isinstance (g , LGroup )
193
220
assert g .key == ['a1' , 'a2' ]
194
221
assert g .axis is a
222
+
195
223
g = alt_a [key ]
196
224
assert isinstance (g , LGroup )
197
225
assert g .key == ['a1' , 'a2' ]
198
226
assert g .axis is alt_a
227
+
199
228
key = [a .i [1 ], a .i [2 ]]
229
+
200
230
g = a [key ]
201
231
assert isinstance (g , LGroup )
202
232
assert g .key == ['a1' , 'a2' ]
203
233
assert g .axis is a
234
+
204
235
g = alt_a [key ]
205
236
assert isinstance (g , LGroup )
206
237
assert g .key == ['a1' , 'a2' ]
207
238
assert g .axis is alt_a
239
+
208
240
key = [a ['a1' , 'a2' ], a ['a2' , 'a1' ]]
241
+
209
242
g = a [key ]
210
243
assert isinstance (g , list )
211
244
assert isinstance (g [0 ], LGroup )
@@ -214,6 +247,7 @@ def test_getitem_group_keys():
214
247
assert g [1 ].key == ['a2' , 'a1' ]
215
248
assert g [0 ].axis is a
216
249
assert g [1 ].axis is a
250
+
217
251
g = alt_a [key ]
218
252
assert isinstance (g , list )
219
253
assert isinstance (g [0 ], LGroup )
@@ -222,7 +256,9 @@ def test_getitem_group_keys():
222
256
assert g [1 ].key == ['a2' , 'a1' ]
223
257
assert g [0 ].axis is alt_a
224
258
assert g [1 ].axis is alt_a
259
+
225
260
key = (a .i [1 , 2 ], a .i [2 , 1 ])
261
+
226
262
g = a [key ]
227
263
assert isinstance (g , tuple )
228
264
assert isinstance (g [0 ], LGroup )
@@ -231,6 +267,7 @@ def test_getitem_group_keys():
231
267
assert list (g [1 ].key ) == ['a2' , 'a1' ]
232
268
assert g [0 ].axis is a
233
269
assert g [1 ].axis is a
270
+
234
271
g = alt_a [key ]
235
272
assert isinstance (g , tuple )
236
273
assert isinstance (g [0 ], LGroup )
@@ -239,25 +276,33 @@ def test_getitem_group_keys():
239
276
assert list (g [1 ].key ) == ['a2' , 'a1' ]
240
277
assert g [0 ].axis is alt_a
241
278
assert g [1 ].axis is alt_a
279
+
242
280
key = (a ['a1' ], a ['a2' ])
281
+
243
282
g = a [key ]
244
283
assert isinstance (g , LGroup )
245
284
assert g .key == ['a1' , 'a2' ]
246
285
assert g .axis is a
286
+
247
287
g = alt_a [key ]
248
288
assert isinstance (g , LGroup )
249
289
assert g .key == ['a1' , 'a2' ]
250
290
assert g .axis is alt_a
291
+
251
292
key = (a .i [1 ], a .i [2 ])
293
+
252
294
g = a [key ]
253
295
assert isinstance (g , LGroup )
254
296
assert g .key == ['a1' , 'a2' ]
255
297
assert g .axis is a
298
+
256
299
g = alt_a [key ]
257
300
assert isinstance (g , LGroup )
258
301
assert g .key == ['a1' , 'a2' ]
259
302
assert g .axis is alt_a
303
+
260
304
key = (a ['a1' , 'a2' ], a ['a2' , 'a1' ])
305
+
261
306
g = a [key ]
262
307
assert isinstance (g , tuple )
263
308
assert isinstance (g [0 ], LGroup )
@@ -266,6 +311,7 @@ def test_getitem_group_keys():
266
311
assert g [1 ].key == ['a2' , 'a1' ]
267
312
assert g [0 ].axis is a
268
313
assert g [1 ].axis is a
314
+
269
315
g = alt_a [key ]
270
316
assert isinstance (g , tuple )
271
317
assert isinstance (g [0 ], LGroup )
@@ -274,7 +320,9 @@ def test_getitem_group_keys():
274
320
assert g [1 ].key == ['a2' , 'a1' ]
275
321
assert g [0 ].axis is alt_a
276
322
assert g [1 ].axis is alt_a
323
+
277
324
key = (a .i [1 , 2 ], a .i [2 , 1 ])
325
+
278
326
g = a [key ]
279
327
assert isinstance (g , tuple )
280
328
assert isinstance (g [0 ], LGroup )
@@ -283,6 +331,7 @@ def test_getitem_group_keys():
283
331
assert list (g [1 ].key ) == ['a2' , 'a1' ]
284
332
assert g [0 ].axis is a
285
333
assert g [1 ].axis is a
334
+
286
335
g = alt_a [key ]
287
336
assert isinstance (g , tuple )
288
337
assert isinstance (g [0 ], LGroup )
@@ -293,6 +342,55 @@ def test_getitem_group_keys():
293
342
assert g [1 ].axis is alt_a
294
343
295
344
345
+ def test_axis_ref_getitem_group_keys ():
346
+ # test that we can retarget a key to another axis using an axis ref
347
+
348
+ # a) when the name of the axis is different
349
+ axis1 = Axis ('axis1=a0..a2' )
350
+
351
+ g = X .axis2 [axis1 ['a1' ]]
352
+ assert isinstance (g .key , str ) and g .key == 'a1'
353
+ assert isinstance (g .axis , AxisReference )
354
+ assert g .axis .name == 'axis2'
355
+
356
+ g = X .axis2 [axis1 ['a1' ], axis1 ['a2' ]]
357
+ assert isinstance (g .key , list ) and g .key == ['a1' , 'a2' ]
358
+ assert isinstance (g .axis , AxisReference )
359
+ assert g .axis .name == 'axis2'
360
+
361
+ g = X .axis2 [[axis1 ['a1' ], axis1 ['a2' ]]]
362
+ assert isinstance (g .key , list ) and g .key == ['a1' , 'a2' ]
363
+ assert isinstance (g .axis , AxisReference )
364
+ assert g .axis .name == 'axis2'
365
+
366
+ g = X .axis2 [axis1 ['a1' :'a2' ]]
367
+ assert isinstance (g .key , slice ) and g .key == slice ('a1' , 'a2' )
368
+ assert isinstance (g .axis , AxisReference )
369
+ assert g .axis .name == 'axis2'
370
+
371
+ # b) when the name of the axis is the same (i.e. when the retarget is useless)
372
+ # this is what issue #787 was all about
373
+ g = X .axis1 [axis1 ['a1' ]]
374
+ assert isinstance (g .key , str ) and g .key == 'a1'
375
+ assert isinstance (g .axis , AxisReference )
376
+ assert g .axis .name == 'axis1'
377
+
378
+ g = X .axis1 [axis1 ['a1' ], axis1 ['a2' ]]
379
+ assert isinstance (g .key , list ) and g .key == ['a1' , 'a2' ]
380
+ assert isinstance (g .axis , AxisReference )
381
+ assert g .axis .name == 'axis1'
382
+
383
+ g = X .axis1 [[axis1 ['a1' ], axis1 ['a2' ]]]
384
+ assert isinstance (g .key , list ) and g .key == ['a1' , 'a2' ]
385
+ assert isinstance (g .axis , AxisReference )
386
+ assert g .axis .name == 'axis1'
387
+
388
+ g = X .axis1 [axis1 ['a1' :'a2' ]]
389
+ assert isinstance (g .key , slice ) and g .key == slice ('a1' , 'a2' )
390
+ assert isinstance (g .axis , AxisReference )
391
+ assert g .axis .name == 'axis1'
392
+
393
+
296
394
def test_init_from_group ():
297
395
code = Axis ('code=C01..C03' )
298
396
code_group = code [:'C02' ]
0 commit comments