Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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()