Skip to content

fix: Updating intrusions code - #300

Open
lachlangrose wants to merge 6 commits into
masterfrom
split/01-intrusions-fix
Open

fix: Updating intrusions code#300
lachlangrose wants to merge 6 commits into
masterfrom
split/01-intrusions-fix

Conversation

@lachlangrose

Copy link
Copy Markdown
Member

Split out of #298 / #299 into a stacked PR series. This is PR 1 of 9 — the shared base for the rest of the stack.

Stack

  1. fix: Updating intrusions code (this PR) → master
  2. feat: add loopstructural-visualisation package → depends on 1
  3. feat: add map2loop package → depends on 2
  4. feat: wire map2loop/visualisation into workspace → depends on 3
  5. fix: fault-proximity gradient + stratigraphic column → depends on 1
  6. refactor: extract ModelSerializer → depends on 5
  7. refactor: extract ModelExporter → depends on 6
  8. refactor: extract FeatureRelationshipManager → depends on 7
  9. refactor: extract ModelFeatureFactory → depends on 8

Content

Cleans up the intrusions modelling code: removes intrusion_support_functions.py (folded into the builder/feature classes), adds INTRUSIONS.md documentation, and adds regression tests in test_intrusions.py.

Verified this branch, merged with the tip of the full stack, reproduces the exact same tree as the original combined branch (zero diff) — the split is lossless.

- Added a new method `_validate_intrusion_inputs` in `GeologicalModel` to validate inputs for intrusions, ensuring necessary data is present before processing.
- Updated `_build_intrusion` to call the new validation method, improving error handling for missing data.
- Refactored `IntrusionBuilder.create_geometry_using_geometric_scaling` to clarify that geometric scaling is not currently implemented, raising a `NotImplementedError` immediately.
- Simplified threshold handling in `IntrusionFeature` by removing redundant checks for marginal faults.
- Removed the unused `intrusion_support_functions.py` file to clean up the codebase.
- Updated tests in `test_intrusions.py` to cover new validation logic, ensuring clear error messages for missing data and parameters.
- Added regression tests for previously silent errors related to weight handling and geometric scaling.

(cherry picked from commit 8cb80c1)
@lachlangrose
lachlangrose force-pushed the split/01-intrusions-fix branch from 92d6981 to eeb2124 Compare August 14, 2026 11:14
…raphic_column from wiping state (#304)

* fix: Updating intrusions code

- Added a new method `_validate_intrusion_inputs` in `GeologicalModel` to validate inputs for intrusions, ensuring necessary data is present before processing.
- Updated `_build_intrusion` to call the new validation method, improving error handling for missing data.
- Refactored `IntrusionBuilder.create_geometry_using_geometric_scaling` to clarify that geometric scaling is not currently implemented, raising a `NotImplementedError` immediately.
- Simplified threshold handling in `IntrusionFeature` by removing redundant checks for marginal faults.
- Removed the unused `intrusion_support_functions.py` file to clean up the codebase.
- Updated tests in `test_intrusions.py` to cover new validation logic, ensuring clear error messages for missing data and parameters.
- Added regression tests for previously silent errors related to weight handling and geometric scaling.

(cherry picked from commit 8cb80c1)

* fix: correct fault-proximity gradient retry loop and stop set_stratigraphic_column from wiping state

evaluate_gradient's tetrahedron-refinement loop set resolved=True
unconditionally after one pass, so it never actually retried after
shrinking the tetrahedron near a fault. set_stratigraphic_column
cleared the model's stratigraphic column before unconditionally
raising DeprecationWarning, destroying existing state on every call.

(cherry picked from commit 647fe5d)
GeologicalModel mixed recipe/pickle I/O in with feature-construction
orchestration, evaluation, and export logic (2580 lines total). Move
the recipe/JSON and dill/pickle serialization logic into a standalone
ModelSerializer, keeping every GeologicalModel public method as a
thin unchanged-signature wrapper so the CI-enforced stable API
surface (API.md, tests/unit/test_public_api_contract.py) is
unaffected.

(cherry picked from commit 404ce4b)
Move surface/block-model export logic (get_fault_surfaces,
get_stratigraphic_surfaces, get_block_model, save) into a standalone
ModelExporter, continuing the GeologicalModel decomposition. Public
methods remain unchanged thin wrappers.

(cherry picked from commit c2435ac)
Move fault/unconformity relationship bookkeeping (_add_faults,
_add_domain_fault_above/below, _add_unconformity_above,
add_unconformity, add_onlap_unconformity) into a standalone
FeatureRelationshipManager, continuing the GeologicalModel
decomposition. Public methods remain unchanged thin wrappers;
_add_feature stays on GeologicalModel since it owns
features/feature_name_index mutation directly.

(cherry picked from commit b7f2197)
Move the seven _build_* feature-construction methods (foliation,
fold frame, folded foliation, folded fold frame, intrusion, domain
fault, fault) -- collectively ~1000 lines, the largest remaining
chunk of GeologicalModel -- into a standalone ModelFeatureFactory.
The FeatureBuilderRegistry wiring at the bottom of geological_model.py
now dispatches to ModelFeatureFactory.build_* instead of the removed
private methods. Public create_and_add_* wrappers are unchanged;
their docstring cross-references are updated to point at the new
factory location. geological_model.py drops from 2579 to 1505 lines.

(cherry picked from commit 068d93b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant