Skip to content

Commit

Permalink
Cleanup and fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr committed Dec 1, 2017
1 parent 90ad846 commit 5b298b3
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 41 deletions.
2 changes: 1 addition & 1 deletion holoviews/core/data/grid.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,6 @@ def coords(cls, dataset, dim, ordered=False, expanded=False, edges=False):
ND-array matching the dimensionality of the dataset.
"""
dim = dataset.get_dimension(dim, strict=True)
idx = dataset.get_dimension_index(dim)
irregular = cls.irregular(dataset, dim)
if irregular or expanded:
if irregular:
Expand All @@ -179,6 +178,7 @@ def coords(cls, dataset, dim, ordered=False, expanded=False, edges=False):
data = cls._infer_interval_breaks(data, axis=0)
return data

idx = dataset.get_dimension_index(dim)
data = dataset.data[dim.name]
if ordered and np.all(data[1:] < data[:-1]):
data = data[::-1]
Expand Down
9 changes: 9 additions & 0 deletions holoviews/core/data/xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,18 @@ def coords(cls, dataset, dimension, ordered=False, expanded=False, edges=False):
data = cls._infer_interval_breaks(data, axis=1)
data = cls._infer_interval_breaks(data, axis=0)
return data

idx = dataset.get_dimension_index(dim)
data = np.atleast_1d(dataset.data[dim].data)
if ordered and data.shape and np.all(data[1:] < data[:-1]):
data = data[::-1]
shape = cls.shape(dataset, True)
isedges = (dim in dataset.kdims and len(shape) == dataset.ndims
and len(data) == (shape[dataset.ndims-idx-1]+1))
if edges and not isedges:
data = cls._infer_interval_breaks(data)
elif not edges and isedges:
data = np.convolve(data, [0.5, 0.5], 'valid')
return data


Expand Down
5 changes: 3 additions & 2 deletions holoviews/plotting/bokeh/raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,9 @@ def get_data(self, element, ranges, style):
else:
xvals = element.dimension_values(x, expanded=True, flat=False)
yvals = element.dimension_values(y, expanded=True, flat=False)
widths = np.diff(element.interface.coords(element, x, edges=True))
heights = np.diff(element.interface.coords(element, y, edges=True))
xc, yc = (element.interface.coords(element, x, edges=True),
element.interface.coords(element, y, edges=True))
widths, heights = np.diff(xc), np.diff(yc)
xs, ys = xvals.flatten(), yvals.flatten()
ws, hs = cartesian_product([widths, heights], copy=True)
zvals = zdata.flatten() if self.invert_axes else zdata.T.flatten()
Expand Down
5 changes: 3 additions & 2 deletions holoviews/plotting/mpl/raster.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,8 @@ def get_data(self, element, ranges, style):
data = np.ma.array(zdata, mask=np.logical_not(np.isfinite(zdata)))
expanded = element.interface.irregular(element, element.kdims[0])
edges = style.get('shading') != 'gouraud'
coords = [element.interface.coords(element, d, expanded=expanded, edges=edges)
coords = [element.interface.coords(element, d, ordered=True,
expanded=expanded, edges=edges)
for d in element.kdims]
if self.invert_axes:
coords = coords[::-1]
Expand All @@ -260,7 +261,7 @@ def update_handles(self, key, axis, element, ranges, style):
locs = style.get('locs')
old_locs = self.handles.get('locs')
if None in (locs, old_locs) or (locs == old_locs).all():
cmesh.set_array(data[-1])
cmesh.set_array(data[-1].flatten())
cmesh.set_clim((style['vmin'], style['vmax']))
if 'norm' in style:
cmesh.norm = style['norm']
Expand Down
54 changes: 18 additions & 36 deletions tests/testelementindexing.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,70 +15,52 @@ def setUp(self):

def test_slice_all(self):
sliced = self.hist[:]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, self.values)
self.assertEqual(edges, self.edges)
self.assertEqual(sliced.values, self.values)
self.assertEqual(sliced.edges, self.edges)

def test_slice_exclusive_upper(self):
"Exclusive upper boundary semantics for bin centers"
sliced = self.hist[:6.5]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, np.arange(6))
self.assertEqual(edges, np.arange(7))
self.assertEqual(sliced.values, np.arange(6))
self.assertEqual(sliced.edges, np.arange(7))

def test_slice_exclusive_upper_exceeded(self):
"Slightly above the boundary in the previous test"
sliced = self.hist[:6.55]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, np.arange(7))
self.assertEqual(edges, np.arange(8))
self.assertEqual(sliced.values, np.arange(7))
self.assertEqual(sliced.edges, np.arange(8))

def test_slice_inclusive_lower(self):
"Inclusive lower boundary semantics for bin centers"
sliced = self.hist[3.5:]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, np.arange(3, 10))
self.assertEqual(edges, np.arange(3, 11))
self.assertEqual(sliced.values, np.arange(3, 10))
self.assertEqual(sliced.edges, np.arange(3, 11))

def test_slice_inclusive_lower_undershot(self):
"Inclusive lower boundary semantics for bin centers"
sliced = self.hist[3.45:]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, np.arange(3, 10))
self.assertEqual(edges, np.arange(3, 11))
self.assertEqual(sliced.values, np.arange(3, 10))
self.assertEqual(sliced.edges, np.arange(3, 11))

def test_slice_bounded(self):
sliced = self.hist[3.5:6.5]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, np.arange(3, 6))
self.assertEqual(edges, np.arange(3, 7))
self.assertEqual(sliced.values, np.arange(3, 6))
self.assertEqual(sliced.edges, np.arange(3, 7))

def test_slice_lower_out_of_bounds(self):
sliced = self.hist[-3:]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, self.values)
self.assertEqual(edges, self.edges)
self.assertEqual(sliced.values, self.values)
self.assertEqual(sliced.edges, self.edges)

def test_slice_upper_out_of_bounds(self):
sliced = self.hist[:12]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, self.values)
self.assertEqual(edges, self.edges)
self.assertEqual(sliced.values, self.values)
self.assertEqual(sliced.edges, self.edges)

def test_slice_both_out_of_bounds(self):
sliced = self.hist[-3:13]
values = sliced.dimension_values(1)
edges = sliced.interface.coords(sliced, sliced.kdims[0], edges=True)
self.assertEqual(values, self.values)
self.assertEqual(edges, self.edges)
self.assertEqual(sliced.values, self.values)
self.assertEqual(sliced.edges, self.edges)

def test_scalar_index(self):
self.assertEqual(self.hist[4.5], 4)
Expand Down

0 comments on commit 5b298b3

Please sign in to comment.