Goal
Execute the ICA redesign: one pure dqdv() core plus a new dvdq(), an IcaOptions
dataclass replacing the ~20 tunneled kwargs, and a specced long-format output frame.
Why
utils/ica.py (1 124 lines) has four entry points that accept the same twenty options
in three different ways, and returns four different shapes (numpy tuples, long frames,
wide MultiIndex pairs). More importantly the output frame schema is a data contract:
users consume the returned columns directly. Changing it in 2.1 would be a break in a
minor release, so it has to happen at 2.0.
Plan: architecture-plan/cellpy2-ica-redesign-plan.md.
Scope
Acceptance
- The 19 existing
tests/test_ica.py characterization tests pass through the shims.
- New tests assert the output frame against its spec.
dvdq() on a golden cell matches an independently computed reference.
- No hidden converter state between calls (determinism test).
Goal
Execute the ICA redesign: one pure
dqdv()core plus a newdvdq(), anIcaOptionsdataclass replacing the ~20 tunneled kwargs, and a specced long-format output frame.
Why
utils/ica.py(1 124 lines) has four entry points that accept the same twenty optionsin three different ways, and returns four different shapes (numpy tuples, long frames,
wide MultiIndex pairs). More importantly the output frame schema is a data contract:
users consume the returned columns directly. Changing it in 2.1 would be a break in a
minor release, so it has to happen at 2.0.
Plan:
architecture-plan/cellpy2-ica-redesign-plan.md.Scope
cellpycore.curves; scipy stays app-side.IcaOptionsdataclass — the only way to pass converter parameters.dqdv()and newdvdq()with symmetric signatures.CurveCols-stylespec, documented in the data-format specifications).
dqdv_cycle,dqdv_cycles,dqdv_np,split=True) kept aswarn_onceshims registered inDEPRECATIONS.md, removal at 2.1.Acceptance
tests/test_ica.pycharacterization tests pass through the shims.dvdq()on a golden cell matches an independently computed reference.