Skip to content

Update Hinton plot operator to take a cubelist and broader refactor - #2453

Merged
James Warner (jwarner8) merged 29 commits into
mainfrom
2445_hintonoperator
Sep 18, 2026
Merged

James Warner (jwarner8) merged 29 commits into
mainfrom
2445_hintonoperator

Conversation

@jwarner8

@jwarner8 James Warner (jwarner8) commented Sep 1, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #2445

Microsoft CoPilot was used to help refactor plot.py, and suggest some of the unit tests.

  • Check plumbing of similar plot types (qq plot), and how private/public function divided to separate plotting/webpage.
  • Create appropriate plumbing to match style of existing plot functions.
  • Update args to take only cubes, base name, other name, and magnitude (rest can be worked out intelligently).
  • Create dummy test data cubes to check function working, flexible etc.
  • Add code to sift cubes, separate, determine what is available to set-up plot parameters.
  • Test working and producing sensible results to a local filename.

Contribution checklist

Aim to have all relevant checks ticked off before merging. See the developer's guide for more detail.

  • Documentation has been updated to reflect change.
  • New code has tests, and affected old tests have been updated.
  • All tests and CI checks pass.
  • Ensured the pull request title is descriptive.
  • Attributed any Generative AI, such as GitHub Copilot, used in this PR.
  • Marked the PR as ready to review.

@jwarner8 James Warner (jwarner8) added the cleanup Non-functional improvement label Sep 1, 2026
@jwarner8 James Warner (jwarner8) changed the title Update Hinton plot operator to take a cubelist Update Hinton plot operator to take a cubelist and broader refactor Sep 1, 2026
@github-actions

github-actions Bot commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor
Total coverage: 93% (HTML report)
Name                                                              Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------------------------------------------
src/CSET/__init__.py                                                105      0     14      0   100%
src/CSET/_common.py                                                 156      0     54      0   100%
src/CSET/cset_workflow/app/fetch_fcst/bin/fetch_data.py             117     28     26      0    78%
src/CSET/cset_workflow/app/fetch_nimrod/bin/fetch_nimrod.py          81      8     28     11    83%
src/CSET/cset_workflow/app/finish_website/bin/finish_website.py      79      2      8      2    95%
src/CSET/cset_workflow/app/parbake_recipes/bin/parbake.py            29      0      8      0   100%
src/CSET/cset_workflow/app/send_email/bin/send_email.py              25      0      4      0   100%
src/CSET/cset_workflow/lib/python/jinja_utils.py                     17      0      6      0   100%
src/CSET/extract_workflow.py                                        106      1     26      1    98%
src/CSET/graph.py                                                    44      0     14      0   100%
src/CSET/operators/__init__.py                                       89      0     26      0   100%
src/CSET/operators/_atmospheric_constants.py                          9      0      0      0   100%
src/CSET/operators/_colormaps.py                                    249      3     72      4    98%
src/CSET/operators/_stash_to_lfric.py                                 3      0      0      0   100%
src/CSET/operators/_utils.py                                        200      8     74      6    95%
src/CSET/operators/ageofair.py                                      142      7     64      5    94%
src/CSET/operators/aggregate.py                                      77      1     22      1    98%
src/CSET/operators/aviation.py                                       61      0     18      0   100%
src/CSET/operators/collapse.py                                      155      8     72      3    93%
src/CSET/operators/constraints.py                                   115      7     50      2    93%
src/CSET/operators/convection.py                                     38      4     10      2    88%
src/CSET/operators/ensembles.py                                      27      0     14      0   100%
src/CSET/operators/feature.py                                        44      0     10      0   100%
src/CSET/operators/filters.py                                        67      2     30      0    98%
src/CSET/operators/fluxes.py                                         41      0     10      0   100%
src/CSET/operators/humidity.py                                      135      0     52      0   100%
src/CSET/operators/imageprocessing.py                                57      0     16      0   100%
src/CSET/operators/mesoscale.py                                      18      0      2      0   100%
src/CSET/operators/misc.py                                          172      1     72      3    98%
src/CSET/operators/plot.py                                         1169    152    436     70    84%
src/CSET/operators/power_spectrum.py                                156     10     60      8    91%
src/CSET/operators/precipitation.py                                 204      2     92      2    99%
src/CSET/operators/pressure.py                                       41      0     12      0   100%
src/CSET/operators/read.py                                          440     24    186     15    94%
src/CSET/operators/regrid.py                                        147      1     70      3    98%
src/CSET/operators/scoreswrappers.py                                217     22     66      5    88%
src/CSET/operators/temperature.py                                   121      0     32      0   100%
src/CSET/operators/transect.py                                       63      0     24      0   100%
src/CSET/operators/wind.py                                           46      3     10      2    91%
src/CSET/operators/write.py                                          15      0      6      0   100%
src/CSET/recipes/__init__.py                                        104      0     28      0   100%
src/CSET/sample_data/__init__.py                                      0      0      0      0   100%
---------------------------------------------------------------------------------------------------
TOTAL                                                              5181    294   1824    145    93%

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think looks fine but requested some changes with the tests.

Would also be good to see a couple example plots if possible?

Comment thread tests/operators/test_plot.py Outdated
@jwarner8

Copy link
Copy Markdown
Contributor Author

Comments addressed, ready for final review.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry a few more suggestions

Comment thread src/CSET/operators/plot.py Outdated
Comment thread tests/conftest.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
@jwarner8

Copy link
Copy Markdown
Contributor Author

PLots here: #2419 (comment)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you just commit those changes I made then go ahead merge

Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
Comment thread tests/operators/test_plot.py Outdated
@jwarner8
James Warner (jwarner8) merged commit 25434ae into main Sep 18, 2026
8 checks passed
@jwarner8
James Warner (jwarner8) deleted the 2445_hintonoperator branch September 18, 2026 11:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cleanup Non-functional improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Scores Aggregation: Update Hinton plot operator to take a cubelist, rather than np arrays

2 participants