From bd4ff9569a231f6e76a00075235444e7020bf8b7 Mon Sep 17 00:00:00 2001 From: Rob McMullen Date: Sun, 12 Mar 2017 17:01:28 -0700 Subject: [PATCH] Added copy function to raw data --- atrcopy/segments.py | 18 +++++++++++++++++- test/test_segment.py | 25 ++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/atrcopy/segments.py b/atrcopy/segments.py index bbba03a..b28fba2 100644 --- a/atrcopy/segments.py +++ b/atrcopy/segments.py @@ -97,6 +97,10 @@ class OrderWrapper(object): """ return self.order[index] + @property + def shape(self): + return (len(self),) + @property def unindexed(self): return self.np_data[self.order] @@ -217,6 +221,18 @@ class SegmentData(object): s = self.style[index] e = self.extra return SegmentData(d, s, e, order=order) + + def copy(self): + if self.is_indexed: + d = self.data.np_data.copy() + s = self.style.np_data.copy() + copy = SegmentData(d, s, order=self.order) + else: + d = self.data + s = self.style + start, end = self.byte_bounds_offset() + copy = SegmentData(d[start:end], s[start:end]) + return copy def get_bases(self): if self.data.base is None: @@ -226,7 +242,7 @@ class SegmentData(object): data_base = self.data.base style_base = self.style.base return data_base, style_base - + def get_indexed(self, index): index = to_numpy_list(index) if self.is_indexed: diff --git a/test/test_segment.py b/test/test_segment.py index 119f7f3..7882c53 100644 --- a/test/test_segment.py +++ b/test/test_segment.py @@ -16,7 +16,7 @@ class TestSegment1(object): def setup(self): self.segments = [] for i in range(8): - data = np.ones([1024], dtype=np.uint8) * i + data = np.arange(1024, dtype=np.uint8) * i r = SegmentData(data) self.segments.append(DefaultSegment(r, i * 1024)) @@ -33,8 +33,16 @@ class TestSegment1(object): # 6 bytes for the last segment run address # 4 bytes per segment for start, end address size = reduce(lambda a, b:a + 4 + len(b), s, 0) + print size, len(bytes) assert len(bytes) == 2 + 6 + size + def test_copy(self): + for s in self.segments: + c = s.rawdata.copy() + print c.data.shape, c.is_indexed + print c.data.np_data, s.data.np_data + assert np.all((c.data - s.data) == 0) + class TestIndexed(object): def setup(self): @@ -154,6 +162,17 @@ class TestIndexed(object): a[5::6] = s2[2::3] assert np.array_equal(s[:], a) + def test_copy(self): + s, indexes = get_indexed(self.segment, 1024, 3) + c = s.rawdata.copy() + print c.data.shape, c.is_indexed + print id(c.data.np_data), id(s.data.np_data) + assert c.data.shape == s.data.shape + assert id(c) != id(s) + assert np.all((c.data[:] - s.data[:]) == 0) + c.data[0:100] = 1 + assert not np.all((c.data[:] - s.data[:]) == 0) + if __name__ == "__main__": t = TestIndexed() @@ -161,3 +180,7 @@ if __name__ == "__main__": t.test_indexed() t.test_indexed_sub() t.test_interleave() + #t = TestSegment1() + #t.setup() + #t.test_xex() + t.test_copy()