Skip to content

Commit

Permalink
Merge pull request #1399 from ioam/array_interface_sort_fix
Browse files Browse the repository at this point in the history
Fixed bug in sorting on array interface
  • Loading branch information
jlstevens committed May 3, 2017
2 parents 8dec7db + 6f101c7 commit feb2a5c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
7 changes: 4 additions & 3 deletions holoviews/core/data/array.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,10 @@ def sort(cls, dataset, by=[]):
if len(by) == 1:
sorting = cls.values(dataset, by[0]).argsort()
else:
dtypes = (dataset.data.dtype,)*dataset.data.shape[1]
sort_fields = tuple('f%s' % dataset.get_dimension_index(d) for d in by)
sorting = dataset.data.T.view(dtypes).argsort(order=sort_fields)
dtypes = [(d.name, dataset.data.dtype) for d in dataset.dimensions()]
sort_fields = tuple(dataset.get_dimension(d).name for d in by)
sorting = dataset.data.view(dtypes, np.recarray).T
sorting = sorting.argsort(order=sort_fields)[0]
return data[sorting]


Expand Down
26 changes: 26 additions & 0 deletions tests/testdataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,13 @@ def test_dataset_closest(self):

# Operations

def test_dataset_sort_hm(self):
ds = Dataset(([2, 2, 1], [2,1,2], [0.1, 0.2, 0.3]),
kdims=['x', 'y'], vdims=['z']).sort()
ds_sorted = Dataset(([1, 2, 2], [2, 1, 2], [0.3, 0.2, 0.1]),
kdims=['x', 'y'], vdims=['z'])
self.assertEqual(ds.sort(), ds_sorted)

def test_dataset_sort_vdim_hm(self):
xs_2 = np.array(self.xs_2)
dataset = Dataset(np.column_stack([self.xs, -xs_2]),
Expand Down Expand Up @@ -575,6 +582,9 @@ def test_dataset_add_dimensions_values_hm(self):
def test_dataset_add_dimensions_values_ht(self):
raise SkipTest("Not supported")

def test_dataset_sort_hm(self):
raise SkipTest("Not supported")

def test_dataset_sort_vdim_ht(self):
raise SkipTest("Not supported")

Expand Down Expand Up @@ -615,6 +625,13 @@ def setUp(self):
self.data_instance_type = NdElement
self.init_column_data()

def test_dataset_sort_hm(self):
"""
Sorting broken in this case for some reason, since deprecated
this is not worth fixing
"""
raise SkipTest("Not supported")

# Literal formats that have been previously been supported but
# currently are only supported via NdElement.

Expand Down Expand Up @@ -815,6 +832,9 @@ def test_dataset_ndelement_init_hm(self):
Dataset(NdElement(zip(self.xs, self.xs_2),
kdims=['x'], vdims=['x2']))

def test_dataset_sort_hm(self):
raise SkipTest("Not supported")

def test_dataset_sort_vdim_hm(self):
exception = ('Compressed format cannot be sorted, either instantiate '
'in the desired order or use the expanded format.')
Expand Down Expand Up @@ -975,6 +995,9 @@ def test_dataset_add_dimensions_values_hm(self):
def test_dataset_add_dimensions_values_hm_alias(self):
raise SkipTest("Not supported")

def test_dataset_sort_hm(self):
raise SkipTest("Not supported")

def test_dataset_sort_vdim_hm(self):
raise SkipTest("Not supported")

Expand Down Expand Up @@ -1032,6 +1055,9 @@ def setUp(self):
def test_dataset_add_dimensions_values_hm(self):
raise SkipTest("Not supported")

def test_dataset_sort_hm(self):
raise SkipTest("Not supported")

def test_dataset_sort_vdim_hm_alias(self):
raise SkipTest("Not supported")

Expand Down

0 comments on commit feb2a5c

Please sign in to comment.