GEOPY-2880: Allow EM receiver orientations to be defined as 2D array (per location) - #465
GEOPY-2880: Allow EM receiver orientations to be defined as 2D array (per location)#465domfournier wants to merge 7 commits into
Conversation
…-drivers into GEOPY-2880 # 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
There was a problem hiding this comment.
Pull request overview
This PR updates the EM receiver-orientation pipeline to support per-location orientations (2D arrays), enabling spatially varying receiver orientation definitions across a survey. It also adds a regression/integration test to exercise variable orientations and updates dependency pins/lockfiles to versions that include the required upstream support.
Changes:
- Pass through per-location (2D) receiver orientations from the receiver factory into SimPEG receiver objects.
- Update EM projection precomputation to handle per-location orientation arrays.
- Add a ground TDEM oriented-receiver forward-run test and update dependency pins/conda lockfiles to the GEOPY-2880-compatible stack.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tests/run_tests/oriented_ground_tem_receiver_test.py | Adds a forward-run test validating behavior with variable per-location receiver orientations. |
| simpeg_drivers/utils/surveys.py | Updates EM receiver projection assembly to accept 2D orientation inputs (per location). |
| simpeg_drivers/utils/nested.py | Ensures per-location orientations are correctly subset when building tiled/nested surveys. |
| simpeg_drivers/components/factories/receiver_factory.py | Stops averaging orientations and forwards per-location orientations into receiver kwargs. |
| pyproject.toml | Pins mira-simpeg to the GEOPY-2880 git ref to pick up orientation-related changes. |
| py-3.13.conda-lock.yml | Updates locked dependency set to match the new git refs / resolved packages. |
| py-3.12.conda-lock.yml | Updates locked dependency set to match the new git refs / resolved packages. |
| environments/py-3.13-win-64.conda.lock.yml | Updates environment lock to match new dependency resolution (including git pins). |
| environments/py-3.13-win-64-dev.conda.lock.yml | Updates dev environment lock to match new dependency resolution (including git pins). |
| environments/py-3.13-linux-64.conda.lock.yml | Updates environment lock to match new dependency resolution (including git pins). |
| environments/py-3.13-linux-64-dev.conda.lock.yml | Updates dev environment lock to match new dependency resolution (including git pins). |
| environments/py-3.12-win-64.conda.lock.yml | Updates environment lock to match new dependency resolution (including git pins). |
| environments/py-3.12-win-64-dev.conda.lock.yml | Updates dev environment lock to match new dependency resolution (including git pins). |
| environments/py-3.12-linux-64.conda.lock.yml | Updates environment lock to match new dependency resolution (including git pins). |
| environments/py-3.12-linux-64-dev.conda.lock.yml | Updates dev environment lock to match new dependency resolution (including git pins). |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| orientations = receiver.orientation.reshape((-1, 3)) | ||
| for orientation, comp in zip(orientations.T, "xyz", strict=True): | ||
| if len(orientation) == 1 and orientation == 0: | ||
| continue | ||
| elif len(orientation) > 1: |
There was a problem hiding this comment.
No, the orientations.T returns a 1x3 array, or a nx3 array, which then unfolds to orientation being either a 1x1 or 1x3 array, then the logic works.
GEOPY-2880 - Allow EM receiver orientations to be defined as 2D array (per location)