Skip to content

Commit

Permalink
Added attach, register, and unregister functionality. Removed groupin…
Browse files Browse the repository at this point in the history
…g from these features because groupby does not yet support them. Added testing to validate functionality.
  • Loading branch information
Ethan-DeBandi99 committed Apr 22, 2022
1 parent 43b107e commit 9078ead
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 4 deletions.
27 changes: 24 additions & 3 deletions arkouda/segarray.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from arkouda.pdarrayclass import pdarray, is_sorted
from arkouda.pdarrayclass import pdarray, is_sorted, attach_pdarray
from arkouda.numeric import cumsum
from arkouda.dtypes import isSupportedInt
from arkouda.dtypes import int64 as akint64
Expand Down Expand Up @@ -1015,5 +1015,26 @@ def setxor(self, other):
segments[truth] = segments[arange(self.size)[truth] + 1]
return SegArray(segments, new_values[g.permutation])

# Register/Attach functionality has been removed until it is added for GroupBy.
# Please refer to ticket #1122 (https://github.com/Bears-R-Us/arkouda/issues/1122 for updates
def register(self, name, segment_suffix='_segments', value_suffix='_values', length_suffix='_lengths', grouping_suffix='_grouping'):
if len(set((segment_suffix, value_suffix, length_suffix, grouping_suffix))) != 4:
raise ValueError("Suffixes must all be different")
self.segments.register(name+segment_suffix)
self.values.register(name+value_suffix)
self.lengths.register(name+length_suffix)
# TODO - groupby does not have register.
# self.grouping.register(name+grouping_suffix)

def unregister(self):
self.segments.unregister()
self.values.unregister()
self.lengths.unregister()
# TODO - groupby does not have unregister.
#self.grouping.unregister()

@classmethod
def attach(cls, name, segment_suffix='_segments', value_suffix='_values', length_suffix='_lengths', grouping_suffix='_grouping'):
if len(set((segment_suffix, value_suffix, length_suffix, grouping_suffix))) != 4:
raise ValueError("Suffixes must all be different")
# TODO - add grouping attaching grouping=ak.GroupBy.attach(name+grouping_suffix)
return cls(attach_pdarray(name+segment_suffix), attach_pdarray(name+value_suffix),
lengths=attach_pdarray(name+length_suffix))
20 changes: 19 additions & 1 deletion tests/segarray_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,4 +571,22 @@ def test_setxor(self):
xor = segarr.setxor(segarr_2)
self.assertListEqual(xor.lengths.to_ndarray().tolist(), [0, 2])
self.assertListEqual(xor[0].tolist(), [])
self.assertListEqual(xor[1].tolist(), [3, 4])
self.assertListEqual(xor[1].tolist(), [3, 4])

def test_register_attach(self):
a = [1, 2, 3]
b = [6, 7, 8]

segarr = ak.SegArray(ak.array([0, len(a)]), ak.array(a + b))
#register the seg array
segarr.register('segarrtest')

segarr_2 = ak.SegArray.attach('segarrtest')

self.assertEqual(segarr.size, segarr_2.size)
self.assertListEqual(segarr.lengths.to_ndarray().tolist(), segarr_2.lengths.to_ndarray().tolist())
self.assertListEqual(segarr.segments.to_ndarray().tolist(), segarr_2.segments.to_ndarray().tolist())
self.assertListEqual(segarr.values.to_ndarray().tolist(), segarr_2.values.to_ndarray().tolist())

segarr.unregister()
self.assertEqual(len(ak.list_registry()), 0)

0 comments on commit 9078ead

Please sign in to comment.