From 60fccbc6311aa19a522018d1c7fdca999aeaaa8f Mon Sep 17 00:00:00 2001 From: "Jean Pierre Mandujano G." Date: Wed, 5 Aug 2026 00:03:16 -0500 Subject: [PATCH] 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 --- .../modelling/core/geological_model.py | 6 +++-- tests/unit/input/test_data_processor.py | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/LoopStructural/modelling/core/geological_model.py b/LoopStructural/modelling/core/geological_model.py index 72e66120..e259a576 100644 --- a/LoopStructural/modelling/core/geological_model.py +++ b/LoopStructural/modelling/core/geological_model.py @@ -5,6 +5,7 @@ import json import pathlib +import warnings import numpy as np import pandas as pd @@ -834,8 +835,9 @@ def set_stratigraphic_column(self, stratigraphic_column, cmap="tab20"): # if the colour for a unit hasn't been specified we can just sample from # a colour map e.g. tab20 logger.info("Adding stratigraphic column to model") - raise DeprecationWarning( - "set_stratigraphic_column is deprecated, use model.stratigraphic_column.add_units instead" + warnings.warn( + "set_stratigraphic_column is deprecated, use model.stratigraphic_column.add_units instead", + DeprecationWarning, ) for i, g in enumerate(stratigraphic_column.keys()): if g == 'faults': diff --git a/tests/unit/input/test_data_processor.py b/tests/unit/input/test_data_processor.py index 33a4a51d..d37c1766 100644 --- a/tests/unit/input/test_data_processor.py +++ b/tests/unit/input/test_data_processor.py @@ -1,6 +1,7 @@ import numpy as np import pandas as pd +from LoopStructural import GeologicalModel from LoopStructural.modelling import ProcessInputData from LoopStructural.utils import rng @@ -14,3 +15,27 @@ def test_create_processor(): contacts=df, stratigraphic_order=stratigraphic_order, thicknesses=thicknesses ) assert (processor.data["val"].unique() == np.array([0.5, 0])).all() + + +def test_from_processor_populates_stratigraphic_column(): + """ + Regression test: from_processor crashed with a DeprecationWarning raised by + set_stratigraphic_column when assigning the processor's column to the model. + """ + df = pd.DataFrame(rng.random(size=(10, 3)), columns=["X", "Y", "Z"]) + df["name"] = [f"unit_{name % 2}" for name in range(10)] + stratigraphic_order = [("sg", ["unit_0", "unit_1", "basement"])] + thicknesses = {"unit_0": 1.0, "unit_1": 0.5} + processor = ProcessInputData( + contacts=df, + stratigraphic_order=stratigraphic_order, + thicknesses=thicknesses, + origin=np.zeros(3), + maximum=np.ones(3), + ) + + model = GeologicalModel.from_processor(processor) + + unit_names = [unit.name for unit in model.stratigraphic_column.order if hasattr(unit, "name")] + assert "unit_0" in unit_names + assert "unit_1" in unit_names