def test_read_line_mmap(self): f, metrics, iline_idx, xline_idx = self.read_small(True) tr0 = metrics['trace0'] bsz = metrics['trace_bsize'] samples = metrics['sample_count'] xline_stride = metrics['xline_stride'] iline_stride = metrics['iline_stride'] offsets = metrics['offset_count'] xline_trace0 = _segyio.fread_trace0(20, len(iline_idx), xline_stride, offsets, xline_idx, "crossline") iline_trace0 = _segyio.fread_trace0(1, len(xline_idx), iline_stride, offsets, iline_idx, "inline") buf = numpy.zeros((len(iline_idx), samples), dtype=numpy.single) _segyio.read_line(f, xline_trace0, len(iline_idx), xline_stride, offsets, buf, tr0, bsz, 1, samples) self.assertAlmostEqual(sum(sum(buf)), 800.061169624, places=6) _segyio.read_line(f, iline_trace0, len(xline_idx), iline_stride, offsets, buf, tr0, bsz, 1, samples) self.assertAlmostEqual(sum(sum(buf)), 305.061146736, places=6) _segyio.close(f)
def test_fread_trace0_for_depth(self): elements = list(range(25)) indices = numpy.asarray(elements, dtype=numpy.intc) for index in indices: d = _segyio.fread_trace0(index, 1, 1, 1, indices, "depth") self.assertEqual(d, index) with self.assertRaises(KeyError): d = _segyio.fread_trace0(25, 1, 1, 1, indices, "depth")
def test_fread_trace0_for_depth(): elements = list(range(25)) indices = numpy.asarray(elements, dtype=numpy.intc) for index in indices: d = _segyio.fread_trace0(index, 1, 1, 1, indices, "depth") assert d == index with pytest.raises(KeyError): _segyio.fread_trace0(25, 1, 1, 1, indices, "depth")
def test_fread_trace0(self, mmap=False): f = _segyio.open(self.filename, "r") if mmap: _segyio.mmap(f) binary_header = _segyio.read_binaryheader(f) ilb = 189 xlb = 193 metrics = _segyio.init_metrics(f, binary_header) metrics.update( _segyio.init_cube_metrics(f, ilb, xlb, metrics['trace_count'], metrics['trace0'], metrics['trace_bsize'])) sorting = metrics['sorting'] trace_count = metrics['trace_count'] inline_count = metrics['iline_count'] crossline_count = metrics['xline_count'] offset_count = metrics['offset_count'] line_metrics = _segyio.init_line_metrics(sorting, trace_count, inline_count, crossline_count, offset_count) iline_indexes = numpy.zeros(metrics['iline_count'], dtype=numpy.intc) xline_indexes = numpy.zeros(metrics['xline_count'], dtype=numpy.intc) offsets = numpy.zeros(metrics['offset_count'], dtype=numpy.intc) _segyio.init_indices(f, metrics, iline_indexes, xline_indexes, offsets) with self.assertRaises(KeyError): _segyio.fread_trace0(0, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") with self.assertRaises(KeyError): _segyio.fread_trace0(2, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") value = _segyio.fread_trace0(1, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") self.assertEqual(value, 0) value = _segyio.fread_trace0(2, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") self.assertEqual(value, 5) value = _segyio.fread_trace0(21, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") self.assertEqual(value, 1) value = _segyio.fread_trace0(22, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") self.assertEqual(value, 2) _segyio.close(f)
def _index(self, lineno, offset): """ :rtype: int""" offs = self.segy.offsets if offset is None: offset = 0 else: try: offset = next(i for i, x in enumerate(offs) if x == offset) except StopIteration: try: int(offset) except TypeError: raise TypeError("Offset must be int or slice") raise KeyError("Unknkown offset {}".format(offset)) try: lineno = int(lineno) except TypeError: raise TypeError("Must be int or slice") trace0 = _segyio.fread_trace0(lineno, len(self.other_lines), self.stride, len(offs), self.lines, self.name) return offset + trace0
def test_fread_trace0(mmap=False): f = _segyio.segyiofd("test-data/small.sgy", "r") if mmap: f.mmap() ilb = 189 xlb = 193 metrics = f.metrics() metrics.update(f.cube_metrics(ilb, xlb)) sorting = metrics['sorting'] trace_count = metrics['tracecount'] inline_count = metrics['iline_count'] crossline_count = metrics['xline_count'] offset_count = metrics['offset_count'] line_metrics = _segyio.line_metrics(sorting, trace_count, inline_count, crossline_count, offset_count) iline_indexes = numpy.zeros(metrics['iline_count'], dtype=numpy.intc) xline_indexes = numpy.zeros(metrics['xline_count'], dtype=numpy.intc) offsets = numpy.zeros(metrics['offset_count'], dtype=numpy.intc) f.indices(metrics, iline_indexes, xline_indexes, offsets) with pytest.raises(KeyError): _segyio.fread_trace0(0, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") with pytest.raises(KeyError): _segyio.fread_trace0(2, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") value = _segyio.fread_trace0(1, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") assert value == 0 value = _segyio.fread_trace0(2, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") assert value == 5 value = _segyio.fread_trace0(21, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") assert value == 1 value = _segyio.fread_trace0(22, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") assert value == 2 f.close()
def test_fread_trace0(self, mmap=False): f = _segyio.segyiofd(self.filename, "r") if mmap: f.mmap() ilb = 189 xlb = 193 metrics = f.metrics() metrics.update(f.cube_metrics(ilb, xlb)) sorting = metrics['sorting'] trace_count = metrics['tracecount'] inline_count = metrics['iline_count'] crossline_count = metrics['xline_count'] offset_count = metrics['offset_count'] line_metrics = _segyio.line_metrics(sorting, trace_count, inline_count, crossline_count, offset_count) iline_indexes = numpy.zeros(metrics['iline_count'], dtype=numpy.intc) xline_indexes = numpy.zeros(metrics['xline_count'], dtype=numpy.intc) offsets = numpy.zeros(metrics['offset_count'], dtype=numpy.intc) f.indices(metrics, iline_indexes, xline_indexes, offsets) with self.assertRaises(KeyError): _segyio.fread_trace0(0, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") with self.assertRaises(KeyError): _segyio.fread_trace0(2, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") value = _segyio.fread_trace0(1, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") self.assertEqual(value, 0) value = _segyio.fread_trace0(2, len(xline_indexes), line_metrics['iline_stride'], offset_count, iline_indexes, "inline") self.assertEqual(value, 5) value = _segyio.fread_trace0(21, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") self.assertEqual(value, 1) value = _segyio.fread_trace0(22, len(iline_indexes), line_metrics['xline_stride'], offset_count, xline_indexes, "crossline") self.assertEqual(value, 2) f.close()
def read_line(f, metrics, iline_idx, xline_idx): samples = metrics['samplecount'] xline_stride = metrics['xline_stride'] iline_stride = metrics['iline_stride'] offsets = metrics['offset_count'] xline_trace0 = _segyio.fread_trace0(20, len(iline_idx), xline_stride, offsets, xline_idx, "crossline") iline_trace0 = _segyio.fread_trace0(1, len(xline_idx), iline_stride, offsets, iline_idx, "inline") buf = numpy.zeros((len(iline_idx), samples), dtype=numpy.single) f.getline(xline_trace0, len(iline_idx), xline_stride, offsets, buf) assert sum(sum(buf)) == approx(800.061169624, abs=1e-6) f.getline(iline_trace0, len(xline_idx), iline_stride, offsets, buf) assert sum(sum(buf)) == approx(305.061146736, abs=1e-6) f.close()