import io
import os
import numpy as np
import pytest
import las_rs
test_dir = os.path.dirname(__file__)
def fixture(fn):
return os.path.join(test_dir, "fixtures", fn)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert isinstance(las, las_rs.LASFile)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_version_value():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert float(las.version["VERS"].value) == pytest.approx(1.2)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_well_company():
las = las_rs.read(fixture("v12/sample_v12.las"))
comp = las.well["COMP"].value
assert "ACME DRILLING" in comp
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_well_name():
las = las_rs.read(fixture("v12/sample_v12.las"))
well_name = las.well["WELL"].value
assert "GAMMA-7" in well_name
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_strt_stop_step():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert float(las.well["STRT"].value) == pytest.approx(500.0)
assert float(las.well["STOP"].value) == pytest.approx(502.5)
assert float(las.well["STEP"].value) == pytest.approx(0.5)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_null_value():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert float(las.well["NULL"].value) == pytest.approx(-999.25)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_curve_count():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert len(las.curves) == 4
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_curve_mnemonics():
las = las_rs.read(fixture("v12/sample_v12.las"))
mnemonics = [c.mnemonic for c in las.curves]
assert mnemonics == ["DEPT", "GR", "NPHI", "RHOB"]
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_data_shape():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert las.data.shape == (6, 4)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_first_depth():
las = las_rs.read(fixture("v12/sample_v12.las"))
assert las.curves["DEPT"].data[0] == pytest.approx(500.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_params():
las = las_rs.read(fixture("v12/sample_v12.las"))
param_mnemonics = [p.mnemonic for p in las.params]
assert "BHT" in param_mnemonics
assert "BS" in param_mnemonics
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_other():
las = las_rs.read(fixture("v12/sample_v12.las"))
other_text = las.other
assert "calibrated" in other_text.lower() or "calibrat" in other_text.lower()
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v20():
las = las_rs.read(fixture("v20/sample_v20.las"))
assert isinstance(las, las_rs.LASFile)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v20_version_value():
las = las_rs.read(fixture("v20/sample_v20.las"))
assert float(las.version["VERS"].value) == pytest.approx(2.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v20_curve_count():
las = las_rs.read(fixture("v20/sample_v20.las"))
assert len(las.curves) == 5
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v20_data_values():
las = las_rs.read(fixture("v20/sample_v20.las"))
dt_data = las.curves["DT"].data
gr_data = las.curves["GR"].data
assert dt_data[0] == pytest.approx(85.44)
assert gr_data[0] == pytest.approx(28.31)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v12_minimal():
las = las_rs.read(fixture("v12/sample_v12_minimal.las"))
assert isinstance(las, las_rs.LASFile)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_v20_minimal():
las = las_rs.read(fixture("v20/sample_v20_minimal.las"))
assert isinstance(las, las_rs.LASFile)
_SAMPLE_LAS_STRING = """\
~VERSION INFORMATION
VERS. 1.2 : LAS VERSION 1.2
WRAP. NO : ONE LINE PER DEPTH STEP
~WELL INFORMATION BLOCK
STRT.M 1000.0 : START DEPTH
STOP.M 1001.0 : STOP DEPTH
STEP.M 1.0 : STEP VALUE
NULL. -999.25 : NULL VALUE
COMP. STRINGTEST INC : COMPANY
WELL. STRTEST-1 : WELL
~CURVE INFORMATION BLOCK
DEPT.M : DEPTH
GR .GAPI : GAMMA RAY
~ASCII LOG DATA
1000.0 58.20
1001.0 71.40
"""
@pytest.mark.xfail(reason="not yet implemented")
def test_read_from_string():
las = las_rs.read(_SAMPLE_LAS_STRING)
assert isinstance(las, las_rs.LASFile)
assert float(las.version["VERS"].value) == pytest.approx(1.2)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_from_file_object():
with open(fixture("v12/sample_v12.las"), "r") as fh:
las = las_rs.read(fh)
assert isinstance(las, las_rs.LASFile)
@pytest.mark.xfail(reason="not yet implemented")
def test_read_nonexistent_file():
with pytest.raises(OSError):
las_rs.read(fixture("v12/does_not_exist.las"))
@pytest.mark.xfail(reason="not yet implemented")
def test_read_not_a_las_file():
garbage = "this is not\na las file at all\njust random text\n"
with pytest.raises(KeyError):
las_rs.read(garbage)