import os
from io import StringIO
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)
WRAPPED_V12 = fixture("v12/sample_v12_wrapped.las")
WRAPPED_V20 = fixture("v20/sample_v20_wrapped.las")
@pytest.mark.xfail(reason="not yet implemented")
def test_wrapped_flag_detected():
las = las_rs.read(WRAPPED_V12)
assert las.version["WRAP"].value.strip().upper() == "YES"
@pytest.mark.xfail(reason="not yet implemented")
def test_wrapped_data_count():
las = las_rs.read(WRAPPED_V12)
assert las.data.size == 4 * 12
@pytest.mark.xfail(reason="not yet implemented")
def test_wrapped_uses_normal_engine():
las_normal = las_rs.read(WRAPPED_V12, engine="normal")
las_numpy_req = las_rs.read(WRAPPED_V12, engine="numpy")
np.testing.assert_array_almost_equal(
las_normal.curves["DEPT"].data,
las_numpy_req.curves["DEPT"].data,
)
@pytest.mark.xfail(reason="not yet implemented")
def test_write_wrapped():
las = las_rs.read(WRAPPED_V12)
buf = StringIO()
las.write(buf, wrap=True)
output = buf.getvalue()
data_section = output[output.index("~A") :]
lines = [l.strip() for l in data_section.splitlines() if l.strip() and not l.startswith("~")]
assert len(lines) > 4
@pytest.mark.xfail(reason="not yet implemented")
def test_write_unwrapped():
las = las_rs.read(WRAPPED_V12)
buf = StringIO()
las.write(buf, wrap=False)
output = buf.getvalue()
data_start = output.index("~A")
data_lines = [
l for l in output[data_start:].splitlines()
if l.strip() and not l.strip().startswith("~") and not l.strip().startswith("#")
]
assert len(data_lines) == 4
@pytest.mark.xfail(reason="not yet implemented")
def test_wrapped_roundtrip():
original = las_rs.read(WRAPPED_V12)
buf = StringIO()
original.write(buf, wrap=True)
buf.seek(0)
reread = las_rs.read(buf)
for curve in original.curves:
np.testing.assert_array_almost_equal(
curve.data,
reread.curves[curve.mnemonic].data,
decimal=4,
)