Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix unsafe initialization of CubeModel from ImageModel #9192

Merged
merged 2 commits into from
Feb 17, 2025

Conversation

emolter
Copy link
Collaborator

@emolter emolter commented Feb 13, 2025

spacetelescope/stdatamodels#403 will fix a bug where initializing DataModelA from a different-type DataModelB (e.g. model = DataModelA(DataModelB(shape)) fails to raise a ValidationError in cases where the shape of DataModelB is incompatible with ndim or max_ndim in the schema of DataModelA.

This bug was taken advantage of in one place in the JWST pipeline (see the regression test run here), where ami_analyze accepts either an ImageModel or a CubeModel. To do so, an ImageModel was being fed directly into CubeModel, then the data array shapes were expanded on the next lines to look more like a CubeModel. This led to a situation where the CubeModel contained a data array with ndim=2, which is incompatible with the schema (albeit only for one line before it was fixed).

It's just as easy, and a better pattern, to expand the dimensions before initializing the CubeModel. This PR changes the code to do so.

The fix should not modify the code behavior before the stdatamodels change, nor after it - running regression tests on both.

Tasks

  • request a review from someone specific, to avoid making the maintainers review every PR
  • add a build milestone, i.e. Build 11.3 (use the latest build if not sure)
  • Does this PR change user-facing code / API? (if not, label with no-changelog-entry-needed)
    • write news fragment(s) in changes/: echo "changed something" > changes/<PR#>.<changetype>.rst (see below for change types)
    • update or add relevant tests
    • update relevant docstrings and / or docs/ page
    • start a regression test and include a link to the running job (click here for instructions)
      • Do truth files need to be updated ("okified")?
        • after the reviewer has approved these changes, run okify_regtests to update the truth files
  • if a JIRA ticket exists, make sure it is resolved properly
news fragment change types...
  • changes/<PR#>.general.rst: infrastructure or miscellaneous change
  • changes/<PR#>.docs.rst
  • changes/<PR#>.stpipe.rst
  • changes/<PR#>.datamodels.rst
  • changes/<PR#>.scripts.rst
  • changes/<PR#>.set_telescope_pointing.rst
  • changes/<PR#>.pipeline.rst

stage 1

  • changes/<PR#>.group_scale.rst
  • changes/<PR#>.dq_init.rst
  • changes/<PR#>.emicorr.rst
  • changes/<PR#>.saturation.rst
  • changes/<PR#>.ipc.rst
  • changes/<PR#>.firstframe.rst
  • changes/<PR#>.lastframe.rst
  • changes/<PR#>.reset.rst
  • changes/<PR#>.superbias.rst
  • changes/<PR#>.refpix.rst
  • changes/<PR#>.linearity.rst
  • changes/<PR#>.rscd.rst
  • changes/<PR#>.persistence.rst
  • changes/<PR#>.dark_current.rst
  • changes/<PR#>.charge_migration.rst
  • changes/<PR#>.jump.rst
  • changes/<PR#>.clean_flicker_noise.rst
  • changes/<PR#>.ramp_fitting.rst
  • changes/<PR#>.gain_scale.rst

stage 2

  • changes/<PR#>.assign_wcs.rst
  • changes/<PR#>.badpix_selfcal.rst
  • changes/<PR#>.msaflagopen.rst
  • changes/<PR#>.nsclean.rst
  • changes/<PR#>.imprint.rst
  • changes/<PR#>.background.rst
  • changes/<PR#>.extract_2d.rst
  • changes/<PR#>.master_background.rst
  • changes/<PR#>.wavecorr.rst
  • changes/<PR#>.srctype.rst
  • changes/<PR#>.straylight.rst
  • changes/<PR#>.wfss_contam.rst
  • changes/<PR#>.flatfield.rst
  • changes/<PR#>.fringe.rst
  • changes/<PR#>.pathloss.rst
  • changes/<PR#>.barshadow.rst
  • changes/<PR#>.photom.rst
  • changes/<PR#>.pixel_replace.rst
  • changes/<PR#>.resample_spec.rst
  • changes/<PR#>.residual_fringe.rst
  • changes/<PR#>.cube_build.rst
  • changes/<PR#>.extract_1d.rst
  • changes/<PR#>.resample.rst

stage 3

  • changes/<PR#>.assign_mtwcs.rst
  • changes/<PR#>.mrs_imatch.rst
  • changes/<PR#>.tweakreg.rst
  • changes/<PR#>.skymatch.rst
  • changes/<PR#>.exp_to_source.rst
  • changes/<PR#>.outlier_detection.rst
  • changes/<PR#>.tso_photometry.rst
  • changes/<PR#>.stack_refs.rst
  • changes/<PR#>.align_refs.rst
  • changes/<PR#>.klip.rst
  • changes/<PR#>.spectral_leak.rst
  • changes/<PR#>.source_catalog.rst
  • changes/<PR#>.combine_1d.rst
  • changes/<PR#>.ami.rst

other

  • changes/<PR#>.wfs_combine.rst
  • changes/<PR#>.white_light.rst
  • changes/<PR#>.cube_skymatch.rst
  • changes/<PR#>.engdb_tools.rst
  • changes/<PR#>.guider_cds.rst

@github-actions github-actions bot added the ami label Feb 13, 2025
@emolter
Copy link
Collaborator Author

emolter commented Feb 13, 2025

regression tests with stdatamodels main: https://github.com/spacetelescope/RegressionTests/actions/runs/13313758378

regression tests with stdatamodels PR branch: https://github.com/spacetelescope/RegressionTests/actions/runs/13313793079

Expecting both to pass before this can be merged.

edit: failures in both are unrelated. They match expected failures from an unrelated fix, see https://github.com/spacetelescope/RegressionTests/actions/runs/13294000215, now ok-ified

Copy link

codecov bot commented Feb 13, 2025

Codecov Report

Attention: Patch coverage is 37.50000% with 5 lines in your changes missing coverage. Please review.

Project coverage is 73.61%. Comparing base (a553e90) to head (586af32).
Report is 4 commits behind head on main.

Files with missing lines Patch % Lines
jwst/ami/ami_analyze.py 37.50% 5 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9192      +/-   ##
==========================================
- Coverage   73.67%   73.61%   -0.07%     
==========================================
  Files         372      368       -4     
  Lines       37091    36298     -793     
==========================================
- Hits        27328    26719     -609     
+ Misses       9763     9579     -184     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@emolter emolter added this to the Build 11.3 milestone Feb 13, 2025
@emolter emolter marked this pull request as ready for review February 13, 2025 19:17
@emolter emolter requested a review from a team as a code owner February 13, 2025 19:17
Copy link
Collaborator

@melanieclarke melanieclarke left a comment

Choose a reason for hiding this comment

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

This looks fine to me. It's uncovered by unit tests though - do the regression tests cover the input ImageModel case?

@emolter
Copy link
Collaborator Author

emolter commented Feb 17, 2025

This looks fine to me. It's uncovered by unit tests though - do the regression tests cover the input ImageModel case?

Yes, thankfully they do, otherwise I'd have probably assumed the fix in stdatamodels doesn't affect any existing JWST code at all. See https://github.com/spacetelescope/RegressionTests/actions/runs/13311698850 which had failures due to this pattern when pointing to the PR branch in stdatamodels

Copy link
Collaborator

@melanieclarke melanieclarke left a comment

Choose a reason for hiding this comment

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

Oh, of course, you mentioned that. In that case, LGTM!

@melanieclarke melanieclarke merged commit e5c683b into spacetelescope:main Feb 17, 2025
29 of 30 checks passed
@emolter emolter deleted the fix-unsafe-model-init-ami branch February 18, 2025 14:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants