Skip to content

fix: join per-parameter adjoint gradients in _adjoint_array - #175

Merged
rolfjl merged 1 commit into
Python-Ensemble-Toolbox:mainfrom
MathiasMNilsen:pr/adjoint-per-parameter-gradients
Oct 14, 2026
Merged

rolfjl merged 1 commit into
Python-Ensemble-Toolbox:mainfrom
MathiasMNilsen:pr/adjoint-per-parameter-gradients

Conversation

@MathiasMNilsen

Copy link
Copy Markdown
Contributor

An adjoint frame with (datatype, parameter) columns gives a Series of per-parameter gradients for each cell. _adjoint_array passed that Series straight to np.asarray(dtype=float), so forecast() raised "ValueError: setting an array element with a sequence." The frame path that #166 replaced joined them via _to_singlelevel_columns; the gradients are now joined in column order again. The per-cell lookup moves to _adjoint_block, and each member's (nd, nx) Jacobian is stacked row by row.

Verification:

  • new test_per_parameter_adjoint_columns_are_joined_into_one_gradient fails on 0a46451 with the ValueError above and passes here
  • test_adjoints.py, test_assimilation_pipeline.py, test_minires_sim.py pass
  • synthetic comparison against the first version of the fix: identical arrays, scaled and unscaled, single- and two-level columns

An adjoint frame with (datatype, parameter) columns gives a Series of
per-parameter gradients for each cell. _adjoint_array passed that Series
straight to np.asarray(dtype=float), so forecast() raised
"ValueError: setting an array element with a sequence." The frame path
that Python-Ensemble-Toolbox#166 replaced joined them via _to_singlelevel_columns; the gradients
are now joined in column order again. The per-cell lookup moves to
_adjoint_block, and each member's (nd, nx) Jacobian is stacked row by row.

Verification:
- new test_per_parameter_adjoint_columns_are_joined_into_one_gradient
  fails on 0a46451 with the ValueError above and passes here
- test_adjoints.py, test_assimilation_pipeline.py, test_minires_sim.py pass
- synthetic comparison against the first version of the fix: identical
  arrays, scaled and unscaled, single- and two-level columns

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@rolfjl
rolfjl merged commit 895f021 into Python-Ensemble-Toolbox:main Oct 14, 2026
4 checks passed
@MathiasMNilsen
MathiasMNilsen deleted the pr/adjoint-per-parameter-gradients branch October 14, 2026 07:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants