Skip to content

Fix Damping_Calibration.get_H4_x_param() returning HH parameters - #115

Merged
jsh9 merged 10 commits into
mainfrom
2026-10-11-fix-get-h4-x-param
Oct 11, 2026
Merged

jsh9 merged 10 commits into
mainfrom
2026-10-11-fix-get-h4-x-param

Conversation

@jsh9

@jsh9 jsh9 commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #60. One of the four P0 fixes from #114.

Problem

Damping_Calibration.get_H4_x_param() called mdc.get_all_HH_x_params(**kwargs), the same line as get_HH_x_param(). So it returned an HH_Param_Multi_Layer with the 9 HH keys instead of the documented MKZ_Param_Multi_Layer with gamma_ref, s, beta, Gmax.

Changes

  • PySeismoSoil/class_damping_calibration.py: get_H4_x_param() now calls mdc.get_all_H4_x_params(**kwargs). The two methods take the same keyword arguments, so the passed-through **kwargs stay valid.
  • tests/test_class_damping_calibration.py: test_get_HH_x_or_H4_x_param used to check only that the calls run. Each case now checks the returned class, the number of layers, and the parameter keys of every layer (the expected class and keys are new parameters).
  • CHANGELOG.md: a "Fixed" entry.
  • The example notebooks were re-run, as CONTRIBUTING.md requires. None of them calls get_H4_x_param(), so only timings, folder names and object addresses changed.

Testing

These were run locally on Python 3.13, after merging main (which now includes #74):

  • Without the library change, test_get_HH_x_or_H4_x_param[H4_x] fails (isinstance(<HH_Param_Multi_Layer ...>, MKZ_Param_Multi_Layer) is false). With it, the test passes.
  • python -m pytest tests: 241 passed.
  • pre-commit run -a and pydoclint PySeismoSoil: pass.
  • tox -e run-notebooks: all 14 notebooks ran without errors.

Notes for review

🤖 Generated with Claude Code

https://claude.ai/code/session_01W7fK8T2pPLf3tPCnMCKL1T

Test functions that ran the same code with different inputs and expected
results are now one test with `pytest.mark.parametrize`, in 15 of the 22
test files. Each case keeps its own test ID (named after the original
test or its comment), so the same cases still run and are reported
separately: 108 test functions become 40 parametrized tests with 109
cases (the old invalid-unit-names test in test_class_ground_motion.py
had two checks, which are now two cases).

- Where the cases call different methods of the same kind (e.g., the
  four ground-motion filters, `get_HH_x_param()`/`get_H4_x_param()`, or
  `get_f0_BH()`/`get_f0_RO()`), the unbound method is the parameter
- Boolean parameters are keyword-only (FBT001), as in CONTRIBUTING.md
- The expected-failure cases that matched against an empty string
  (`match=''`, which pytest warns always passes) now use no `match`
- The HH case of the multi-layer list-operations test now checks
  `n_layer` after deleting a layer, like the MKZ case did, instead of
  checking `len()` twice

Tests with different assertions or setup are left as they are, and so
are the sequential checks inside one test function.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C1a5vwxyeL4atk9tYUUEoQ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C1a5vwxyeL4atk9tYUUEoQ
- Name the combined HH/H4 and HH/MKZ tests after both models, e.g.,
  `test_HH_x_or_H4_x_fit_single_layer` and
  `test_HH_MKZ_param_multi_layer__can_initiate_object_from_file`, and
  `test_f0` as `test_f0_BH_or_f0_RO`
- Name the cases of `test_construct_curves`, `test_param_serialize`,
  and `test_serialize_to_2D_array` after the original test functions
  (e.g., `from_HH_G_parameters`)
- Move a comment in test_helper_hh_model.py into the `pytest.param()`
  that it describes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C1a5vwxyeL4atk9tYUUEoQ
- Leave out optional arguments in the cases that used to leave them
  out, so that their defaults are tested again: `dt` in the ground
  motion loading tests, and `OCR_upper_limit` in `test_calc_OCR`. The
  cases now pass a `kwargs` dict, like `test_class_svm.py` does
- Pass callables (`lambda gm: gm.pga_in_g`, and lambdas that call
  `get_curve_matrix()` with the keyword argument) instead of attribute
  and keyword names as strings
- Combine the differential-evolution and DEAP multi-layer fitting tests
  into `test_HH_x_or_H4_x_fit_multi_layer`. The DEAP cases still pass
  when DEAP is not installed, as before; an `ImportError` in the
  differential-evolution cases is no longer swallowed
- Share one `multi_layer_case` fixture among the 4 HH/MKZ multi-layer
  parameter tests, instead of repeating the case list. The list
  operations test now deletes layer 3 in both cases (it was 6 for MKZ)
- Rename `test_param_multi_layer__test_list_operations` to
  `test_HH_MKZ_param_multi_layer__list_operations`, and
  `test_calc_damping_from_stress_strain__case_3` to
  `..._initial_damping_almost_0`, after what it tests (its siblings'
  IDs are no longer numbered)
- Pass a copy, not a view, of the module-level `DATA_5_COLUMNS` array
  in the `incorrect_number_of_columns` case

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016MPgzyHE9jy5vP7heBxZhA
- Damping_Calibration.get_H4_x_param() called get_all_HH_x_params(), so it
  returned HH parameters (HH_Param_Multi_Layer) instead of the documented
  MKZ_Param_Multi_Layer. It now calls get_all_H4_x_params(), which takes
  the same keyword arguments, so the passed-through **kwargs stay valid
- test_get_HH_x_or_H4_x_param now checks the returned class, the number of
  layers, and the parameter keys of each layer (expected class and keys
  are added as parameters), instead of only checking that the calls run
- Add a "Fixed" entry to the changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W7fK8T2pPLf3tPCnMCKL1T
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W7fK8T2pPLf3tPCnMCKL1T
#74 was squash-merged into main, so main's files are identical to the
branch's old base. Every conflict is resolved with this branch's version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W7fK8T2pPLf3tPCnMCKL1T
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01W7fK8T2pPLf3tPCnMCKL1T
@jsh9
jsh9 changed the base branch from 2026-10-10-parametrize-tests to main October 11, 2026 18:01
cursoragent and others added 2 commits October 11, 2026 20:37
Co-authored-by: jsh9 <jsh9@users.noreply.github.com>
Co-authored-by: jsh9 <jsh9@users.noreply.github.com>
@jsh9
jsh9 merged commit 2495849 into main Oct 11, 2026
12 checks passed
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.

Damping_Calibration.get_H4_x_param() returns HH parameters instead of H4 (MKZ) parameters

3 participants