def test_interleave(self): base = self.segment r1 = base.rawdata[512:1024] # 512 byte segment s1 = DefaultSegment(r1, 512) r2 = base.rawdata[1024:1536] # 512 byte segment s2 = DefaultSegment(r2, 1024) indexes1 = r1.get_indexes_from_base() verify1 = np.arange(512, 1024, dtype=np.uint32) assert np.array_equal(indexes1, verify1) indexes2 = r2.get_indexes_from_base() verify2 = np.arange(1024, 1536, dtype=np.uint32) assert np.array_equal(indexes2, verify2) s = interleave_segments([s1, s2], 2) a = np.empty(len(s1) + len(s2), dtype=np.uint8) a[0::4] = s1[0::2] a[1::4] = s1[1::2] a[2::4] = s2[0::2] a[3::4] = s2[1::2] print list(s[:]) print list(a[:]) print s.rawdata.order assert np.array_equal(s[:], a) s = interleave_segments([s1, s2], 4) a = np.empty(len(s1) + len(s2), dtype=np.uint8) a[0::8] = s1[0::4] a[1::8] = s1[1::4] a[2::8] = s1[2::4] a[3::8] = s1[3::4] a[4::8] = s2[0::4] a[5::8] = s2[1::4] a[6::8] = s2[2::4] a[7::8] = s2[3::4] assert np.array_equal(s[:], a) with pytest.raises(ValueError) as e: s = interleave_segments([s1, s2], 3) r1 = base.rawdata[512:1025] # 513 byte segment s1 = DefaultSegment(r1, 512) r2 = base.rawdata[1024:1537] # 513 byte segment s2 = DefaultSegment(r2, 1024) s = interleave_segments([s1, s2], 3) a = np.empty(len(s1) + len(s2), dtype=np.uint8) a[0::6] = s1[0::3] a[1::6] = s1[1::3] a[2::6] = s1[2::3] a[3::6] = s2[0::3] a[4::6] = s2[1::3] a[5::6] = s2[2::3] assert np.array_equal(s[:], a)
def test_interleave_different_sizes(self): base = self.segment r1 = base.rawdata[512:768] # 256 byte segment s1 = DefaultSegment(r1, 512) r2 = base.rawdata[1024:1536] # 512 byte segment s2 = DefaultSegment(r2, 1024) indexes1 = r1.get_indexes_from_base() verify1 = np.arange(512, 768, dtype=np.uint32) assert np.array_equal(indexes1, verify1) indexes2 = r2.get_indexes_from_base() verify2 = np.arange(1024, 1536, dtype=np.uint32) assert np.array_equal(indexes2, verify2) s = interleave_segments([s1, s2], 3) # when interleave size isn't a multiple of the length, the final array # will reduce the size of the input array to force it to be a multiple. size = (min(len(s1), len(s2)) // 3) * 3 assert size == (256 // 3) * 3 assert len(s) == size * 2 a = np.empty(len(s), dtype=np.uint8) a[0::6] = s1[0:size:3] a[1::6] = s1[1:size:3] a[2::6] = s1[2:size:3] a[3::6] = s2[0:size:3] a[4::6] = s2[1:size:3] a[5::6] = s2[2:size:3] assert np.array_equal(s[:], a)
def perform(self, event): e = self.active_editor dlg = SegmentInterleaveDialog(e.window.control, "Interleave Segments", e.document.segments[1:]) if dlg.ShowModal() == wx.ID_OK: s = dlg.get_segments() factor = dlg.get_interleave() segment = interleave_segments(s, factor) e.add_user_segment(segment, False) e.linked_base.find_segment(segment=segment, refresh=True) dlg.Destroy()
def perform(self, event): e = self.active_editor dlg = SegmentInterleaveDialog(e.window.control, "Interleave Segments", e.document.segments[1:]) if dlg.ShowModal() == wx.ID_OK: s = dlg.get_segments() print s factor = dlg.get_interleave() print factor segment = interleave_segments(s, factor) e.add_user_segment(segment, False) e.update_segments_ui() dlg.Destroy()