Skip to content

Commit 60fccbc

Browse files
committed
fix: warn instead of raise in set_stratigraphic_column
set_stratigraphic_column raised DeprecationWarning unconditionally, which broke GeologicalModel.from_processor (its last step assigns the processor's column dict to the stratigraphic_column setter) and left the dict-to-column conversion code below the raise unreachable. Emit the deprecation warning with warnings.warn instead so the legacy dict format keeps working, and add a regression test covering from_processor. Fixes #296
1 parent 160c6e2 commit 60fccbc

2 files changed

Lines changed: 29 additions & 2 deletions

File tree

‎LoopStructural/modelling/core/geological_model.py‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import json
77
import pathlib
8+
import warnings
89

910
import numpy as np
1011
import pandas as pd
@@ -834,8 +835,9 @@ def set_stratigraphic_column(self, stratigraphic_column, cmap="tab20"):
834835
# if the colour for a unit hasn't been specified we can just sample from
835836
# a colour map e.g. tab20
836837
logger.info("Adding stratigraphic column to model")
837-
raise DeprecationWarning(
838-
"set_stratigraphic_column is deprecated, use model.stratigraphic_column.add_units instead"
838+
warnings.warn(
839+
"set_stratigraphic_column is deprecated, use model.stratigraphic_column.add_units instead",
840+
DeprecationWarning,
839841
)
840842
for i, g in enumerate(stratigraphic_column.keys()):
841843
if g == 'faults':

‎tests/unit/input/test_data_processor.py‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import numpy as np
22
import pandas as pd
33

4+
from LoopStructural import GeologicalModel
45
from LoopStructural.modelling import ProcessInputData
56
from LoopStructural.utils import rng
67

@@ -14,3 +15,27 @@ def test_create_processor():
1415
contacts=df, stratigraphic_order=stratigraphic_order, thicknesses=thicknesses
1516
)
1617
assert (processor.data["val"].unique() == np.array([0.5, 0])).all()
18+
19+
20+
def test_from_processor_populates_stratigraphic_column():
21+
"""
22+
Regression test: from_processor crashed with a DeprecationWarning raised by
23+
set_stratigraphic_column when assigning the processor's column to the model.
24+
"""
25+
df = pd.DataFrame(rng.random(size=(10, 3)), columns=["X", "Y", "Z"])
26+
df["name"] = [f"unit_{name % 2}" for name in range(10)]
27+
stratigraphic_order = [("sg", ["unit_0", "unit_1", "basement"])]
28+
thicknesses = {"unit_0": 1.0, "unit_1": 0.5}
29+
processor = ProcessInputData(
30+
contacts=df,
31+
stratigraphic_order=stratigraphic_order,
32+
thicknesses=thicknesses,
33+
origin=np.zeros(3),
34+
maximum=np.ones(3),
35+
)
36+
37+
model = GeologicalModel.from_processor(processor)
38+
39+
unit_names = [unit.name for unit in model.stratigraphic_column.order if hasattr(unit, "name")]
40+
assert "unit_0" in unit_names
41+
assert "unit_1" in unit_names

0 commit comments

Comments
 (0)