Ejemplo n.º 1
0
def get_instance_segyiofd(tmpdir,
                          file_name="small.sgy",
                          mode="r+",
                          binary=None):
    path = str(tmpdir)
    f = os.path.join(path, file_name)
    if binary is not None:
        return _segyio.segyiofd(f, mode, binary)
    else:
        return _segyio.segyiofd(f, mode)
Ejemplo n.º 2
0
def get_instance_segyiofd(tmpdir,
                          file_name="small.sgy",
                          mode="r+",
                          samples = None,
                          tracecount = None,
                          ):
    path = str(tmpdir)
    f = os.path.join(path, file_name)

    if samples is not None:
        return _segyio.segyiofd(f, mode, 0).segymake(samples, tracecount)
    else:
        return _segyio.segyiofd(f, mode, 0).segyopen()
Ejemplo n.º 3
0
def test_open_flush_and_close_file():
    f = _segyio.segyiofd(str(testdata / 'small.sgy'), "r", 0)
    f.flush()
    f.close()

    with pytest.raises(IOError):
        f.flush()
Ejemplo n.º 4
0
    def test_read_and_write_trace(self, mmap=False):
        with TestContext("read_and_write_trace"):
            binary = bytearray(_segyio.binsize())
            _segyio.putfield(binary, 3213, 100)
            _segyio.putfield(binary, 3221, 25)
            f = _segyio.segyiofd("trace-wrt.sgy", "w+", binary)
            if mmap: f.mmap()

            buf = numpy.ones(25, dtype=numpy.single)
            buf[11] = 3.1415
            f.puttr(0, buf)
            buf[:] = 42.0
            f.puttr(1, buf)

            f.flush()

            buf = numpy.zeros(25, dtype=numpy.single)

            f.gettr(buf, 0, 1, 1)

            self.assertAlmostEqual(buf[10], 1.0, places=4)
            self.assertAlmostEqual(buf[11], 3.1415, places=4)

            f.gettr(buf, 1, 1, 1)

            self.assertAlmostEqual(sum(buf), 42.0 * 25, places=4)

            f.close()
Ejemplo n.º 5
0
def test_open_flush_and_close_file():
    f = _segyio.segyiofd("test-data/small.sgy", "r")
    f.flush()
    f.close()

    with pytest.raises(IOError):
        f.flush()
Ejemplo n.º 6
0
def test_read_text_header(mmap=False):
    f = _segyio.segyiofd("test-data/small.sgy", "r")
    if mmap:
        f.mmap()

    lines = {
        1: "DATE: 2016-09-19",
        2: "AN INCREASE IN AMPLITUDE EQUALS AN INCREASE IN ACOUSTIC IMPEDANCE",
        3: "Written by libsegyio (python)",
        11: "TRACE HEADER POSITION:",
        12: "  INLINE BYTES 189-193    | OFFSET BYTES 037-041",
        13: "  CROSSLINE BYTES 193-197 |",
        15: "END EBCDIC HEADER"
    }

    rows = segyio.create_text_header(lines)
    rows = bytearray(rows, 'ascii')  # mutable array of bytes
    rows[-1] = 128  # \x80
    actual_text_header = bytes(rows)

    assert f.gettext(0) == actual_text_header

    with pytest.raises(Exception):
        _segyio.read_texthdr(None, 0)

    f.close()
Ejemplo n.º 7
0
    def test_metrics(self, mmap=False):
        f = _segyio.segyiofd(self.filename, "r")
        if mmap: f.mmap()

        ilb = 189
        xlb = 193

        with self.assertRaises(IndexError):
            metrics = f.metrics()
            metrics.update(f.cube_metrics(ilb + 1, xlb))

        metrics = f.metrics()
        metrics.update(f.cube_metrics(ilb, xlb))

        self.assertEqual(metrics['trace0'],
                         _segyio.textsize() + _segyio.binsize())
        self.assertEqual(metrics['samplecount'], 50)
        self.assertEqual(metrics['format'], 1)
        self.assertEqual(metrics['trace_bsize'], 200)
        self.assertEqual(metrics['sorting'],
                         2)  # inline sorting = 2, crossline sorting = 1
        self.assertEqual(metrics['tracecount'], 25)
        self.assertEqual(metrics['offset_count'], 1)
        self.assertEqual(metrics['iline_count'], 5)
        self.assertEqual(metrics['xline_count'], 5)

        f.close()
Ejemplo n.º 8
0
    def test_open_flush_and_close_file(self):
        f = _segyio.segyiofd(self.filename, "r")
        f.flush()
        f.close()

        with self.assertRaises(IOError):
            f.flush()
Ejemplo n.º 9
0
def test_metrics(mmap=False):
    f = _segyio.segyiofd("test-data/small.sgy", "r")
    if mmap:
        f.mmap()

    ilb = 189
    xlb = 193

    with pytest.raises(IndexError):
        metrics = f.metrics()
        metrics.update(f.cube_metrics(ilb + 1, xlb))

    metrics = f.metrics()
    metrics.update(f.cube_metrics(ilb, xlb))

    assert metrics['trace0'] == _segyio.textsize() + _segyio.binsize()
    assert metrics['samplecount'] == 50
    assert metrics['format'] == 1
    assert metrics['trace_bsize'] == 200
    assert metrics['sorting'] == 2  # inline sorting = 2, crossline sorting = 1
    assert metrics['tracecount'] == 25
    assert metrics['offset_count'] == 1
    assert metrics['iline_count'] == 5
    assert metrics['xline_count'] == 5

    f.close()
Ejemplo n.º 10
0
def read_small(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)

    metrics.update(line_metrics)

    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)

    return f, metrics, iline_indexes, xline_indexes
Ejemplo n.º 11
0
    def __init__(self, filename, mode, iline=189, xline=193, tracecount=0, binary=None):
        self._filename = filename
        self._mode = mode
        self._il = iline
        self._xl = xline

        # property value holders
        self._ilines = None
        self._xlines = None
        self._offsets = None
        self._samples = None
        self._sorting = None

        # private values
        self._iline_length = None
        self._iline_stride = None
        self._xline_length = None
        self._xline_stride = None

        self._trace = Trace(self)
        self._header = Header(self)
        self._iline = None
        self._xline = None
        self._gather = None

        self.xfd = _segyio.segyiofd(filename, mode, tracecount, binary)
        metrics = self.xfd.metrics()
        self._fmt = metrics['format']
        self._tracecount = metrics['tracecount']
        self._ext_headers = metrics['ext_headers']

        super(SegyFile, self).__init__()
Ejemplo n.º 12
0
def test_read_traceheaders():
    f = _segyio.segyiofd(str(testdata / 'small.sgy'), "r", 0).segyopen()
    read_traceheaders_forall(f, False)
    read_traceheaders_forall(f, True)

    read_traceheaders_foreach(f, False)
    read_traceheaders_foreach(f, True)

    f.close()
Ejemplo n.º 13
0
def test_read_traceheaders():
    f = _segyio.segyiofd("test-data/small.sgy", "r", 0).segyopen()
    read_traceheaders_forall(f, False)
    read_traceheaders_forall(f, True)

    read_traceheaders_foreach(f, False)
    read_traceheaders_foreach(f, True)

    f.close()
Ejemplo n.º 14
0
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()
Ejemplo n.º 15
0
    def test_read_text_header(self, mmap=False):
        f = _segyio.segyiofd(self.filename, "r")
        if mmap: f.mmap()

        self.assertEqual(f.gettext(0), self.ACTUAL_TEXT_HEADER)

        with self.assertRaises(Exception):
            _segyio.read_texthdr(None, 0)

        f.close()
Ejemplo n.º 16
0
    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()
Ejemplo n.º 17
0
    def test_read_and_write_binary_header(self, mmap=False):
        with TestContext("read_and_write_bin_header") as context:
            context.copy_file(self.filename)

            f = _segyio.segyiofd("small.sgy", "r+")
            if mmap: f.mmap()

            binary_header = f.getbin()

            with self.assertRaises(ValueError):
                f.putbin("Buffer too small")

            f.putbin(binary_header)
            f.close()
Ejemplo n.º 18
0
def test_indices(mmap=False):
    f = _segyio.segyiofd(str(testdata / 'small.sgy'), "r", 0).segyopen()
    if mmap:
        f.mmap()

    ilb = 189
    xlb = 193
    metrics = f.metrics()
    dmy = numpy.zeros(2, dtype=numpy.intc)

    dummy_metrics = {'xline_count':   2,
                     'iline_count':   2,
                     'offset_count':  1}

    with pytest.raises(TypeError):
        f.indices("-", dmy, dmy, dmy)

    with pytest.raises(TypeError):
        f.indices(dummy_metrics, 1, dmy, dmy)

    with pytest.raises(TypeError):
        f.indices(dummy_metrics, dmy, 2, dmy)

    with pytest.raises(TypeError):
        f.indices(dummy_metrics, dmy, dmy, 2)

    one = numpy.zeros(1, dtype=numpy.intc)
    two = numpy.zeros(2, dtype=numpy.intc)
    off = numpy.zeros(1, dtype=numpy.intc)
    with pytest.raises(ValueError):
        f.indices(dummy_metrics, one, two, off)

    with pytest.raises(ValueError):
        f.indices(dummy_metrics, two, one, off)

    metrics.update(f.cube_metrics(ilb, xlb))

    # Happy Path
    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)

    assert [1, 2, 3, 4, 5] == list(iline_indexes)
    assert [20, 21, 22, 23, 24] == list(xline_indexes)
    assert [1] == list(offsets)

    f.close()
Ejemplo n.º 19
0
    def test_read_binary_header_fields(self, mmap=False):
        f = _segyio.segyiofd(self.filename, "r")
        if mmap: f.mmap()

        binary_header = f.getbin()

        with self.assertRaises(TypeError):
            _ = _segyio.getfield([], 0)

        with self.assertRaises(IndexError):
            _ = _segyio.getfield(binary_header, -1)

        self.assertEqual(_segyio.getfield(binary_header, 3225), 1)
        self.assertEqual(_segyio.getfield(binary_header, 3221), 50)

        f.close()
Ejemplo n.º 20
0
def test_read_binary_header_fields(mmap=False):
    f = _segyio.segyiofd("test-data/small.sgy", "r")
    if mmap:
        f.mmap()

    binary_header = f.getbin()

    with pytest.raises(TypeError):
        _ = _segyio.getfield([], 0)

    with pytest.raises(KeyError):
        _ = _segyio.getfield(binary_header, -1)

    assert _segyio.getfield(binary_header, 3225) == 1
    assert _segyio.getfield(binary_header, 3221) == 50

    f.close()
Ejemplo n.º 21
0
    def test_indices(self, mmap=False):
        f = _segyio.segyiofd(self.filename, "r")
        if mmap: f.mmap()

        ilb = 189
        xlb = 193
        metrics = f.metrics()
        dmy = numpy.zeros(2, dtype=numpy.intc)

        dummy_metrics = {'xline_count': 2, 'iline_count': 2, 'offset_count': 1}

        with self.assertRaises(TypeError):
            f.indices("-", dmy, dmy, dmy)

        with self.assertRaises(TypeError):
            f.indices(dummy_metrics, 1, dmy, dmy)

        with self.assertRaises(TypeError):
            f.indices(dummy_metrics, dmy, 2, dmy)

        with self.assertRaises(TypeError):
            f.indices(dummy_metrics, dmy, dmy, 2)

        one = numpy.zeros(1, dtype=numpy.intc)
        two = numpy.zeros(2, dtype=numpy.intc)
        off = numpy.zeros(1, dtype=numpy.intc)
        with self.assertRaises(ValueError):
            f.indices(dummy_metrics, one, two, off)

        with self.assertRaises(ValueError):
            f.indices(dummy_metrics, two, one, off)

        metrics.update(f.cube_metrics(ilb, xlb))

        # Happy Path
        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)

        self.assertListEqual([1, 2, 3, 4, 5], list(iline_indexes))
        self.assertListEqual([20, 21, 22, 23, 24], list(xline_indexes))
        self.assertListEqual([1], list(offsets))

        f.close()
Ejemplo n.º 22
0
    def test_read_and_write_traceheader(self, mmap=False):
        with TestContext("read_and_write_trace_header") as context:
            context.copy_file(self.filename)

            f = _segyio.segyiofd("small.sgy", "r+")
            if mmap: f.mmap()

            ilb = 189
            xlb = 193

            def mkempty():
                return bytearray(_segyio.thsize())

            with self.assertRaises(TypeError):
                trace_header = f.getth("+")

            with self.assertRaises(TypeError):
                trace_header = f.getth(0, None)

            trace_header = f.getth(0, mkempty())

            self.assertEqual(_segyio.getfield(trace_header, ilb), 1)
            self.assertEqual(_segyio.getfield(trace_header, xlb), 20)

            trace_header = f.getth(1, mkempty())

            self.assertEqual(_segyio.getfield(trace_header, ilb), 1)
            self.assertEqual(_segyio.getfield(trace_header, xlb), 21)

            _segyio.putfield(trace_header, ilb, 99)
            _segyio.putfield(trace_header, xlb, 42)

            f.putth(0, trace_header)

            trace_header = f.getth(0, mkempty())

            self.assertEqual(_segyio.getfield(trace_header, ilb), 99)
            self.assertEqual(_segyio.getfield(trace_header, xlb), 42)

            f.close()
Ejemplo n.º 23
0
def test_line_metrics(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))
    f.close()

    sorting = metrics['sorting']
    trace_count = metrics['tracecount']
    inline_count = metrics['iline_count']
    crossline_count = metrics['xline_count']
    offset_count = metrics['offset_count']

    metrics = _segyio.line_metrics(sorting, trace_count, inline_count,
                                   crossline_count, offset_count)

    assert metrics['xline_length'] == 5
    assert metrics['xline_stride'] == 5
    assert metrics['iline_length'] == 5
    assert metrics['iline_stride'] == 1

    # (sorting, trace_count, inline_count, crossline_count, offset_count)
    metrics = _segyio.line_metrics(1, 15, 3, 5, 1)

    assert metrics['xline_length'] == 3
    assert metrics['xline_stride'] == 1
    assert metrics['iline_length'] == 5
    assert metrics['iline_stride'] == 3

    metrics = _segyio.line_metrics(2, 15, 3, 5, 1)

    assert metrics['xline_length'] == 3
    assert metrics['xline_stride'] == 5
    assert metrics['iline_length'] == 5
    assert metrics['iline_stride'] == 1
Ejemplo n.º 24
0
    def test_write_text_header(self, mmap=False):
        with TestContext("write_text_header") as context:
            context.copy_file(self.filename)

            f = _segyio.segyiofd("small.sgy", "r+")
            if mmap: f.mmap()

            f.puttext(0, "")

            textheader = f.gettext(0)
            textheader = textheader.decode('ascii')
            self.assertEqual(textheader, "" * 3200)

            f.puttext(0, "yolo" * 800)

            textheader = f.gettext(0)
            textheader = textheader.decode(
                'ascii'
            )  # Because in Python 3.5 bytes are not comparable to strings
            self.assertEqual(textheader, "yolo" * 800)

            f.close()
Ejemplo n.º 25
0
    def test_line_metrics(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))
        f.close()

        sorting = metrics['sorting']
        trace_count = metrics['tracecount']
        inline_count = metrics['iline_count']
        crossline_count = metrics['xline_count']
        offset_count = metrics['offset_count']

        metrics = _segyio.line_metrics(sorting, trace_count, inline_count,
                                       crossline_count, offset_count)

        self.assertEqual(metrics['xline_length'], 5)
        self.assertEqual(metrics['xline_stride'], 5)
        self.assertEqual(metrics['iline_length'], 5)
        self.assertEqual(metrics['iline_stride'], 1)

        # (sorting, trace_count, inline_count, crossline_count, offset_count)
        metrics = _segyio.line_metrics(1, 15, 3, 5, 1)

        self.assertEqual(metrics['xline_length'], 3)
        self.assertEqual(metrics['xline_stride'], 1)
        self.assertEqual(metrics['iline_length'], 5)
        self.assertEqual(metrics['iline_stride'], 3)

        metrics = _segyio.line_metrics(2, 15, 3, 5, 1)

        self.assertEqual(metrics['xline_length'], 3)
        self.assertEqual(metrics['xline_stride'], 5)
        self.assertEqual(metrics['iline_length'], 5)
        self.assertEqual(metrics['iline_stride'], 1)
Ejemplo n.º 26
0
def test_open_and_close_file():
    f = _segyio.segyiofd("test-data/small.sgy", "r")
    f.close()
Ejemplo n.º 27
0
 def test_open_non_existing_file(self):
     with self.assertRaises(IOError):
         _ = _segyio.segyiofd("non-existing", "r")
Ejemplo n.º 28
0
 def test_open_and_close_file(self):
     f = _segyio.segyiofd(self.filename, "r")
     f.close()
Ejemplo n.º 29
0
def test_open_non_existing_file():
    with pytest.raises(IOError):
        _ = _segyio.segyiofd("non-existing", "r")
Ejemplo n.º 30
0
def test_open_and_close_file():
    f = _segyio.segyiofd(str(testdata / 'small.sgy'), "r", 0)
    f.close()