Open achilleas-k opened 4 years ago
From Jan
Current behaviour (from #801 I believe?) is:
a.shape = (10, 10, 10)
t.position = (5, 5)
t.extent = None
t.retrieve(a).shape = (1,1,10)
New behaviour could be (this is my current proposal and personally preferred behaviour):
a.shape = (10, 10, 10)
t.position = (5, 5)
t.extent = None
t.retrieve(a).shape = (10)
t.extent = (0, 0)
t.retrieve(a).shape = (10)
t.extent = (1, 1)
t.retrieve(a).shape = (1, 1, 10)
We need to decide on the exact behaviour of extents for a couple of edge cases. Currently, extents are inclusive, so for a tag that has extents
(10, 20)
(assuming the interval of the underlying data is 1) the returned data has the shape(11, 21)
. This should probably change such that the extents are equivalent to the shape.To generalise a little, let's assume a DataArray with n-dimensions, all regularly sampled with a sampling interval for
dn
(for dimension n). In that case, a tag with position(p1, p2, ..., pn)
and extent(e1, e2, ..., en)
should be equivalent to slicing the underlying array as:[p1*d1:(p1+e1)*d1, p2*d2:(p2+e2)*d2, ..., pn*dn:(pn+en)*dn]
This would make extents exclusive.
There's also the more complicated question of what it means for an extent to be missing, what it means if it's 0, and what it means if it's 1. If we follow the above logic (and think about it in numpy equivalent behaviour),
None
,0
, and1
are all different, but it might make sense if we treatNone
as0
and take it to mean drop this dimension, while 1 returns an extra dimension with length 1.