import math
import numpy as np
import pytest
import las_rs
def _las_with_gr_value(gr_value_str, null="-999.25", extra_well="NULLTEST"):
return (
"~VERSION INFORMATION\n"
" VERS. 2.0 : LAS VERSION 2.0\n"
" WRAP. NO : ONE LINE PER DEPTH STEP\n"
"~WELL INFORMATION\n"
" STRT.M 1.0 : START\n"
" STOP.M 2.0 : STOP\n"
" STEP.M 1.0 : STEP\n"
f" NULL. {null} : NULL\n"
f" WELL. {extra_well} : WELL\n"
"~CURVE INFORMATION\n"
" DEPT.M : DEPTH\n"
" GR .GAPI: GAMMA RAY\n"
"~ASCII LOG DATA\n"
f" 1.0 {gr_value_str}\n"
" 2.0 45.0\n"
)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_text_parenthesized():
las = las_rs.read(_las_with_gr_value("(null)"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
assert gr[1] == pytest.approx(45.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_text_inf():
las = las_rs.read(_las_with_gr_value("1.#INF"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
@pytest.mark.xfail(reason="not yet implemented")
def test_null_text_io():
las = las_rs.read(_las_with_gr_value("1.#IO"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
@pytest.mark.xfail(reason="not yet implemented")
def test_null_text_ind():
las = las_rs.read(_las_with_gr_value("1.#IND"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
@pytest.mark.xfail(reason="not yet implemented")
def test_null_negative_zero():
las = las_rs.read(_las_with_gr_value("-0.0"), null_policy="aggressive")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
@pytest.mark.xfail(reason="not yet implemented")
def test_null_numbers_only():
las = las_rs.read(_las_with_gr_value("ERR"), null_policy="all")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
assert gr[1] == pytest.approx(45.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_err_preserved_under_strict():
las = las_rs.read(_las_with_gr_value("ERR"), null_policy="strict")
gr = las.curves["GR"].data
assert gr[1] == pytest.approx(45.0)
assert isinstance(las, las_rs.LASFile)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_custom_string_sentinel():
las_text = (
"~VERSION INFORMATION\n"
" VERS. 2.0 : LAS VERSION 2.0\n"
" WRAP. NO : ONE LINE PER DEPTH STEP\n"
"~WELL INFORMATION\n"
" STRT.M 1.0 : START\n"
" STOP.M 4.0 : STOP\n"
" STEP.M 1.0 : STEP\n"
" NULL. -999.25 : NULL\n"
" WELL. CUSTOMNULL : WELL\n"
"~CURVE INFORMATION\n"
" DEPT.M : DEPTH\n"
" GR .GAPI: GAMMA RAY\n"
"~ASCII LOG DATA\n"
" 1.0 NULL\n"
" 2.0 9998\n"
" 3.0 42.0\n"
" 4.0 9998\n"
)
las = las_rs.read(las_text, null_policy=["NULL", 9998])
gr = las.curves["GR"].data
assert np.isnan(gr[0])
assert np.isnan(gr[1])
assert np.isnan(gr[3])
assert gr[2] == pytest.approx(42.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_dashes_single():
las = las_rs.read(_las_with_gr_value("-"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
assert gr[1] == pytest.approx(45.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_dashes_double():
las = las_rs.read(_las_with_gr_value("--"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
@pytest.mark.xfail(reason="not yet implemented")
def test_null_dashes_preserves_negative():
las = las_rs.read(_las_with_gr_value("-2550.0"), null_policy="common")
gr = las.curves["GR"].data
assert not np.isnan(gr[0])
assert gr[0] == pytest.approx(-2550.0)
@pytest.mark.xfail(reason="not yet implemented")
def test_null_na_hash():
las = las_rs.read(_las_with_gr_value("#N/A"), null_policy="common")
gr = las.curves["GR"].data
assert np.isnan(gr[0])
assert gr[1] == pytest.approx(45.0)