Add unit tests for Cube.coord_dims - #7198
Conversation
|
From @SciTools/peloton: Hi @01luyicheng, thanks for the PR, we'll get this reviewed soon, in the mean time, we just need you to sign the CLA (linked here #7198 (comment)). |
|
Hi, the CLA is signed now - looking forward to the review. Thanks! |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7198 +/- ##
==========================================
+ Coverage 90.18% 90.42% +0.23%
==========================================
Files 91 93 +2
Lines 25102 25812 +710
Branches 4706 4795 +89
==========================================
+ Hits 22638 23340 +702
- Misses 1685 1693 +8
Partials 779 779 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
ESadek-MO
left a comment
There was a problem hiding this comment.
Hi @01luyicheng, thanks so much for tackling this!
I've got a couple of comments; the only problems I've found thus far are readability concerns, the code itself all looks great!
Address review feedback from @ESadek-MO: - Move hybrid-height set-up into the single test that uses it - Group _setup into clear blocks: cube → DimCoords → AuxCoords → assigns
|
Hi @ESadek-MO, Thanks so much for the review and the kind words! I've just pushed an update (commit 8d101a2) that addresses both points:
No test logic or assertions were changed. Let me know if you'd prefer the hybrid-height set-up extracted into its own fixture instead of inlined into the test; happy to switch it over. Thanks again for your time! |
|
Hi @ESadek-MO, just a gentle follow-up on the changes I pushed in 8d101a2 — the I'm still happy to extract the hybrid-height set-up into a fixture if you'd prefer that over inlining it in the test — just say the word and I'll switch it over. No rush at all on my end; thanks again for the review! |
ESadek-MO
left a comment
There was a problem hiding this comment.
Hi @01luyicheng, apologies it took a while to get back to you, resource was a little bit tight over the last couple of days.
Please could you put all the hybrid height set-up into a fixture? On discussing with the rest of the team, we think that having a fixture is the best practice due to PyTest's ability to isolate the failures. Apologies to change my mind there!
As an aside, can I confirm that this is AI assisted development? It has a certain amount of AI hallmarks, not least the large number of comments. That isn't a problem, we just like to be sure.
Address review feedback from @ESadek-MO on SciTools#7198: move the hybrid-height construction (delta/sigma/orography, HybridHeightFactory, add_aux_factory) out of the test body and into its own pytest fixture, so that set-up failures can be isolated by PyTest.
|
Hi @ESadek-MO, just a gentle nudge — I've addressed the requested changes by moving the hybrid-height set-up into a dedicated fixture (commit 5ce7b9a). Could you please re-review when you have a moment? Happy to make further adjustments if needed. Thanks! |
ESadek-MO
left a comment
There was a problem hiding this comment.
I'm happy with this, thanks @01luyicheng !
I think it was AI gen, but nothing problematic appears in the changes so happy to merge.
* undo the whatsnew changes * fix for doctest warnings * Add unit tests for Cube.coord_dims (#7198) * Add unit tests for Cube.coord_dims * Add What's New changelog fragment for #4552 * Refactor Test_coord_dims._setup for readability Address review feedback from @ESadek-MO: - Move hybrid-height set-up into the single test that uses it - Group _setup into clear blocks: cube → DimCoords → AuxCoords → assigns * Move hybrid-height set-up into a dedicated fixture Address review feedback from @ESadek-MO on #7198: move the hybrid-height construction (delta/sigma/orography, HybridHeightFactory, add_aux_factory) out of the test body and into its own pytest fixture, so that set-up failures can be isolated by PyTest. --------- Co-authored-by: 01luyicheng <01luyicheng@users.noreply.github.com> * Bump the gha group across 1 directory with 9 updates (#7215) Bumps the gha group with 9 updates in the / directory: | Package | From | To | | --- | --- | --- | | [actions/checkout](https://github.com/actions/checkout) | `7.0.0` | `7.0.1` | | [actions/setup-python](https://github.com/actions/setup-python) | `6.3.0` | `7.0.0` | | [lycheeverse/lychee-action](https://github.com/lycheeverse/lychee-action) | `2.8.0` | `2.9.0` | | [scitools/workflows/.github/workflows/ci-manifest.yml](https://github.com/scitools/workflows) | `2026.06.0` | `2026.07.1` | | [scitools/workflows/.github/workflows/ci-template-check.yml](https://github.com/scitools/workflows) | `2026.06.0` | `2026.07.1` | | [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) | `1.14.0` | `1.14.2` | | [actions/labeler](https://github.com/actions/labeler) | `6.1.0` | `7.0.0` | | [scitools/workflows/.github/workflows/refresh-lockfiles.yml](https://github.com/scitools/workflows) | `2026.06.0` | `2026.07.1` | | [actions/stale](https://github.com/actions/stale) | `10.3.0` | `11.0.0` | Updates `actions/checkout` from 7.0.0 to 7.0.1 - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@9c091bb...3d3c42e) Updates `actions/setup-python` from 6.3.0 to 7.0.0 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](actions/setup-python@ece7cb0...5fda3b9) Updates `lycheeverse/lychee-action` from 2.8.0 to 2.9.0 - [Release notes](https://github.com/lycheeverse/lychee-action/releases) - [Commits](lycheeverse/lychee-action@8646ba3...e747777) Updates `scitools/workflows/.github/workflows/ci-manifest.yml` from 2026.06.0 to 2026.07.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@1f21414...7c41342) Updates `scitools/workflows/.github/workflows/ci-template-check.yml` from 2026.06.0 to 2026.07.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@1f21414...7c41342) Updates `pypa/gh-action-pypi-publish` from 1.14.0 to 1.14.2 - [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases) - [Commits](pypa/gh-action-pypi-publish@cef2210...dc37677) Updates `actions/labeler` from 6.1.0 to 7.0.0 - [Release notes](https://github.com/actions/labeler/releases) - [Commits](actions/labeler@f27b608...bf12e9b) Updates `scitools/workflows/.github/workflows/refresh-lockfiles.yml` from 2026.06.0 to 2026.07.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@1f21414...7c41342) Updates `actions/stale` from 10.3.0 to 11.0.0 - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](actions/stale@eb5cf3a...4391f3d) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: 7.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gha - dependency-name: actions/labeler dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gha - dependency-name: actions/setup-python dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major dependency-group: gha - dependency-name: actions/stale dependency-version: 10.4.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gha - dependency-name: lycheeverse/lychee-action dependency-version: 2.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: gha - dependency-name: pypa/gh-action-pypi-publish dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gha - dependency-name: scitools/workflows/.github/workflows/ci-manifest.yml dependency-version: 2026.07.1 dependency-type: direct:production dependency-group: gha - dependency-name: scitools/workflows/.github/workflows/ci-template-check.yml dependency-version: 2026.07.1 dependency-type: direct:production dependency-group: gha - dependency-name: scitools/workflows/.github/workflows/refresh-lockfiles.yml dependency-version: 2026.07.1 dependency-type: direct:production dependency-group: gha ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump the gha group across 1 directory with 3 updates (#7256) Bumps the gha group with 3 updates in the / directory: [scitools/workflows/.github/workflows/ci-manifest.yml](https://github.com/scitools/workflows), [scitools/workflows/.github/workflows/ci-template-check.yml](https://github.com/scitools/workflows) and [scitools/workflows/.github/workflows/refresh-lockfiles.yml](https://github.com/scitools/workflows). Updates `scitools/workflows/.github/workflows/ci-manifest.yml` from 2026.07.1 to 2026.08.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@7c41342...28aea7a) Updates `scitools/workflows/.github/workflows/ci-template-check.yml` from 2026.07.1 to 2026.08.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@7c41342...28aea7a) Updates `scitools/workflows/.github/workflows/refresh-lockfiles.yml` from 2026.07.1 to 2026.08.1 - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](SciTools/workflows@7c41342...28aea7a) --- updated-dependencies: - dependency-name: scitools/workflows/.github/workflows/ci-manifest.yml dependency-version: 2026.08.1 dependency-type: direct:production dependency-group: gha - dependency-name: scitools/workflows/.github/workflows/ci-template-check.yml dependency-version: 2026.08.1 dependency-type: direct:production dependency-group: gha - dependency-name: scitools/workflows/.github/workflows/refresh-lockfiles.yml dependency-version: 2026.08.1 dependency-type: direct:production dependency-group: gha ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix TEST_DATA_DIR default behaviour (#7257) * fix TEST_DATA_DIR default behaviour * add whatsnew * Add option for steps in Cube rolling windows (#7236) * Add option for steps in Cube rolling windows * Add changelog entry * Fix bug with mesh indexing for start_index=1 (#7253) * fix bug with mesh indexing for start_index=1 * add test * add whatsnew * add unit tests * CI compatibility with PROJ 9.8 (#7254) * CI compatibility with PROJ 9.8. * review comments (#97) --------- Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> * Update lock files plus test fixes (#7270) * Updated environment lockfiles * Temporary gallery test fix. * Revert "Temporary gallery test fix." This reverts commit 6403701. * Skip Proj 9.8 incompatible gallery tests. Proven by 6403701. * Modernise graphics tests. * What's New entry. --------- Co-authored-by: Lockfile bot <noreply@github.com> Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> * DOC BLD: get scipy objects inventory from their static site (#7269) * Move developers' conda yml to environment.yml (#7267) * Move developers' conda yml to environment.yml * Fix readthedocs.yml * Add environment.yml to manifest * Add code trial for encode/decode of lazy data. * Some extra debug. * Apply encode/decode to load/save shortcutting, and support lazy data. * Small changes to support scalar character variables. * Replace complex VariableEncoder constructor with a .from_var classmethod. * Apply scalar adjustment whether lazy or real. * Remove debug print. * Extend get_cf_var to test dataset-shortcutting of strings and real/lazy data. * Fix typo in tests. * Remove temporary tests. * With CoPilot: tests for handling of ncdata-style direct data transfers in '_lazy_stream_data'. * Added changelog fragment. * Review changes. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Henry Wright <henrywright@sky.com> Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Co-authored-by: 陆奕丞 <01luyicheng@gmail.com> Co-authored-by: 01luyicheng <01luyicheng@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: stephenworsley <49274989+stephenworsley@users.noreply.github.com> Co-authored-by: Andrew Creswick <89418171+mo-AndrewCreswick@users.noreply.github.com> Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> Co-authored-by: Lockfile bot <noreply@github.com> Co-authored-by: Ruth Comer <10599679+rcomer@users.noreply.github.com>
* Add unit tests for Cube.coord_dims * Add What's New changelog fragment for SciTools#4552 * Refactor Test_coord_dims._setup for readability Address review feedback from @ESadek-MO: - Move hybrid-height set-up into the single test that uses it - Group _setup into clear blocks: cube → DimCoords → AuxCoords → assigns * Move hybrid-height set-up into a dedicated fixture Address review feedback from @ESadek-MO on SciTools#7198: move the hybrid-height construction (delta/sigma/orography, HybridHeightFactory, add_aux_factory) out of the test body and into its own pytest fixture, so that set-up failures can be isolated by PyTest. --------- Co-authored-by: 01luyicheng <01luyicheng@users.noreply.github.com>
Description
Adds specific unit tests for
Cube.coord_dims, addressing #4552.Cube.coord_dimspreviously had no direct unit tests inlib/iris/tests/unit/cube/test_Cube.py(the existingCoord.cube_dims/CellMeasure.cube_dims/AncillaryVariable.cube_dimstests only mock-verify that those methods delegate toCube.coord_dims, without exercisingcoord_dimsitself).This adds a
Test_coord_dimsclass covering the seven scenarios listed in the issue, each exercising a distinct branch of the method:test_dim_coordtest_equivalent_coord_not_instancetest_no_match_raisestest_string_nametest_aux_coord_multiple_dimstest_aux_factorytest_aux_coord_single_dimCloses #4552.
Checklist
changelog/(follow-up commit)Testing
All 7 new tests pass, and the full
test_Cube.pysuite shows no regressions:ruff checkandruff format --checkboth pass with no warnings.