Summary
Remove the array_transform: ArrayTransform field from openlifu.db.Session, along with its to_dict / from_dict handling, the associated docstring notes, and every reference in examples, tests, and test-resource JSON.
Motivation
Session.array_transform was designed around the assumption that a session has a single canonical "the transducer position." In SlicerOpenLIFU that assumption no longer holds:
- Each page that renders the transducer (pre-planning, localization, solution) picks whichever of the persisted transforms it needs (a specific approved virtual-fit result, a specific approved transducer-tracking result, or -- on the localization page -- both simultaneously).
- The full list of transducer transforms lives in
session.virtual_fit_results and session.transducer_tracking_results, keyed by target / photoscan.
- Approval invalidation is now driven per-VF and per-TT rather than by writing back a single pose.
As a result, SlicerOpenLIFU has stopped reading and writing session.array_transform (see the accompanying downstream PR). The field is now unused by the primary consumer and only serves to confuse the persistence model.
Scope of changes required in this repo
src/openlifu/db/session.py
- Remove the
array_transform field definition on Session.
- Remove the corresponding
to_dict / from_dict handling for array_transform.
- Update the
solution_id field docstring, which currently claims the id is "cleared whenever the array_transform changes." That invalidation policy needs to be reconsidered (probably driven by VF / TT approval changes on the consumer side); at minimum, drop the array_transform reference from the doc.
examples/tutorials/02_Database_Interaction.py and the matching .ipynb -- drop the array_transform=ArrayTransform(...) argument from the Session(...) construction.
tests/test_database.py -- remove assertions on session.array_transform.matrix.shape / .units and any loop variables named array_transform that come from the same fixture.
- Test resource JSON files under
tests/resources/example_db/ that carry an "array_transform" block -- either drop the block or regenerate the fixtures so they no longer contain it. from_dict should tolerate the field being absent, so old on-disk sessions still load cleanly.
- Sample database (
openlifu-sample-database repo) sessions currently carry an "array_transform" block too; that repo will need a matching sweep, but that is out of scope for this issue.
Backwards compatibility
Session.from_dict should silently ignore a legacy "array_transform" key so that existing on-disk sessions (including the pinned openlifu-sample-database fixtures) still load with the new library version.
Downstream
Coordinated with the SlicerOpenLIFU cleanup that decommissions the array_transform read/write path on the consumer side.
Summary
Remove the
array_transform: ArrayTransformfield fromopenlifu.db.Session, along with itsto_dict/from_dicthandling, the associated docstring notes, and every reference in examples, tests, and test-resource JSON.Motivation
Session.array_transformwas designed around the assumption that a session has a single canonical "the transducer position." In SlicerOpenLIFU that assumption no longer holds:session.virtual_fit_resultsandsession.transducer_tracking_results, keyed by target / photoscan.As a result, SlicerOpenLIFU has stopped reading and writing
session.array_transform(see the accompanying downstream PR). The field is now unused by the primary consumer and only serves to confuse the persistence model.Scope of changes required in this repo
src/openlifu/db/session.pyarray_transformfield definition onSession.to_dict/from_dicthandling forarray_transform.solution_idfield docstring, which currently claims the id is "cleared whenever the array_transform changes." That invalidation policy needs to be reconsidered (probably driven by VF / TT approval changes on the consumer side); at minimum, drop the array_transform reference from the doc.examples/tutorials/02_Database_Interaction.pyand the matching.ipynb-- drop thearray_transform=ArrayTransform(...)argument from theSession(...)construction.tests/test_database.py-- remove assertions onsession.array_transform.matrix.shape/.unitsand any loop variables namedarray_transformthat come from the same fixture.tests/resources/example_db/that carry an"array_transform"block -- either drop the block or regenerate the fixtures so they no longer contain it.from_dictshould tolerate the field being absent, so old on-disk sessions still load cleanly.openlifu-sample-databaserepo) sessions currently carry an"array_transform"block too; that repo will need a matching sweep, but that is out of scope for this issue.Backwards compatibility
Session.from_dictshould silently ignore a legacy"array_transform"key so that existing on-disk sessions (including the pinnedopenlifu-sample-databasefixtures) still load with the new library version.Downstream
Coordinated with the SlicerOpenLIFU cleanup that decommissions the
array_transformread/write path on the consumer side.