GEOPY-3046 - #474
Conversation
# Conflicts: # environments/py-3.12-linux-64-dev.conda.lock.yml # environments/py-3.12-linux-64.conda.lock.yml # environments/py-3.12-win-64-dev.conda.lock.yml # environments/py-3.12-win-64.conda.lock.yml # environments/py-3.13-linux-64-dev.conda.lock.yml # environments/py-3.13-linux-64.conda.lock.yml # environments/py-3.13-win-64-dev.conda.lock.yml # environments/py-3.13-win-64.conda.lock.yml # py-3.12.conda-lock.yml # py-3.13.conda-lock.yml
# Conflicts: # environments/py-3.12-linux-64-dev.conda.lock.yml # environments/py-3.12-win-64-dev.conda.lock.yml # environments/py-3.13-linux-64-dev.conda.lock.yml # environments/py-3.13-win-64-dev.conda.lock.yml # py-3.12.conda-lock.yml # py-3.13.conda-lock.yml
There was a problem hiding this comment.
Pull request overview
Adds “borehole tdem” as a first-class EM workflow in simpeg-drivers, including new survey generation paths and UIJSON definitions, plus updates to orientation/projection handling and dependency pinning.
Changes:
- Introduces Borehole TDEM forward/inversion drivers + options and UI JSON assets, and wires them into driver/factory registries.
- Refactors/extends synthetic TDEM survey generation (airborne/ground/borehole) and orientation handling across receiver/entity/simulation utilities.
- Updates development dependency git refs to
developand refreshes conda-lock outputs accordingly.
Reviewed changes
Copilot reviewed 33 out of 34 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/run_tests/oriented_ground_tem_receiver_test.py | New run-test validating receiver orientation workflows (currently contains an ineffective magnitude assertion). |
| tests/run_tests/driver_borehole_tem_test.py | New borehole TDEM forward+inversion run-test (currently not pytest-collectable due to non-fixture args). |
| tests/plate_simulation/leroi_air/init.py | Updates import to new airborne time-domain survey module path. |
| simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py | Generalizes ground TDEM survey generation (adds n_loops) and adjusts geometry/cells construction. |
| simpeg_drivers/utils/synthetics/surveys/time_domain/borehole.py | New borehole TDEM survey generator built on ground TDEM survey generation. |
| simpeg_drivers/utils/synthetics/surveys/time_domain/airborne.py | New airborne TDEM survey generator module. |
| simpeg_drivers/utils/synthetics/surveys/factory.py | Routes “borehole tdem” to borehole survey generator; updates imports for refactored modules. |
| simpeg_drivers/utils/surveys.py | Updates CCW sorting and EM projection logic to support orientation arrays (contains a NumPy truthiness bug). |
| simpeg_drivers/utils/nested.py | Preserves multi-dimensional receiver orientations when creating nested surveys. |
| simpeg_drivers/electromagnetics/borehole_time_domain/options.py | New borehole TDEM forward/inversion options classes + UIJSON linkage. |
| simpeg_drivers/electromagnetics/borehole_time_domain/inversion.py | New borehole TDEM inversion driver entrypoint. |
| simpeg_drivers/electromagnetics/borehole_time_domain/forward.py | New borehole TDEM forward driver entrypoint. |
| simpeg_drivers/electromagnetics/borehole_time_domain/init.py | New package initializer for borehole time-domain module. |
| simpeg_drivers/components/factories/source_factory.py | Tightens factory typing to CoreOptions. |
| simpeg_drivers/components/factories/simulation_factory.py | Adds “borehole tdem” support to simulation selection and assembly logic. |
| simpeg_drivers/components/factories/simpeg_factory.py | Registers “borehole tdem” as a valid factory type. |
| simpeg_drivers/components/factories/receiver_factory.py | Extends receiver orientation mapping and orientation derivation for borehole workflows. |
| simpeg_drivers/components/factories/entity_factory.py | Adds borehole-specific receiver orientation propagation / computed AUV groups (contains a boolean assignment bug). |
| simpeg_drivers/components/factories/directives_factory.py | Enables borehole tdem participation in directive selection paths. |
| simpeg_drivers/components/data.py | Includes borehole tdem in channel-aware data saving logic. |
| simpeg_drivers/init.py | Registers “borehole tdem” in DRIVER_MAP for CLI/app discovery. |
| simpeg_drivers-assets/uijson/borehole_tdem_inversion.ui.json | New UIJSON definition for borehole TDEM inversion. |
| simpeg_drivers-assets/uijson/borehole_tdem_forward.ui.json | New UIJSON definition for borehole TDEM forward. |
| pyproject.toml | Updates git dependency refs to develop. |
| py-3.13.conda-lock.yml | Updates resolved dependency lock for Python 3.13. |
| py-3.12.conda-lock.yml | Updates resolved dependency lock for Python 3.12. |
| environments/py-3.13-win-64.conda.lock.yml | Updates platform-specific lock output (py3.13 win-64). |
| environments/py-3.13-win-64-dev.conda.lock.yml | Updates dev platform-specific lock output (py3.13 win-64 dev). |
| environments/py-3.13-linux-64.conda.lock.yml | Updates platform-specific lock output (py3.13 linux-64). |
| environments/py-3.13-linux-64-dev.conda.lock.yml | Updates dev platform-specific lock output (py3.13 linux-64 dev). |
| environments/py-3.12-win-64.conda.lock.yml | Updates platform-specific lock output (py3.12 win-64). |
| environments/py-3.12-win-64-dev.conda.lock.yml | Updates dev platform-specific lock output (py3.12 win-64 dev). |
| environments/py-3.12-linux-64.conda.lock.yml | Updates platform-specific lock output (py3.12 linux-64). |
| environments/py-3.12-linux-64-dev.conda.lock.yml | Updates dev platform-specific lock output (py3.12 linux-64 dev). |
Suppressed comments (3)
simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py:14
y_rotation_matrixis imported but never used in this module, which will fail linting/static analysis. Remove the unused import (or use it).
simpeg_drivers/utils/synthetics/surveys/time_domain/ground.py:40center(and the flatten-specific adjustment) is computed but no longer used, leaving dead code. If re-centering is no longer needed, remove these lines to avoid confusion.
tests/run_tests/driver_borehole_tem_test.py:113pytestin the test function signature will be treated as a fixture name by pytest and will raise a fixture lookup error during collection. Keep pytest-collected tests fixture-only and move this flag into a helper function or module-level constant.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
| "borehole" in self.params.inversion_type | ||
| and self.params.receivers_orientation is None | ||
| ): | ||
| self._add_auv_data_groups(entity) |
There was a problem hiding this comment.
you can call a staticmethod this way? I thought it had to be EntityFactory._add_auv_data_groups(entity)
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #474 +/- ##
===========================================
+ Coverage 90.46% 90.48% +0.02%
===========================================
Files 113 117 +4
Lines 6993 7095 +102
Branches 864 873 +9
===========================================
+ Hits 6326 6420 +94
- Misses 451 456 +5
- Partials 216 219 +3
🚀 New features to boost your workflow:
|

No description provided.