Overview
Reorients the bath abstraction so that an arbitrary user-supplied exponential
set (Bath::Kind::UserExponents, i.e. arbitrary (c_k, γ_k) pairs) is the
core primitive that the hierarchy and temperature-dependence machinery
consume, with the existing Pade-based spectral decomposition becoming one
provider on top of that primitive rather than the only path. This unblocks
arbitrary bath spectral densities (1/f, underdamped Brownian, user-fit
exponentials) without hard-coding a specific decomposition method into the
numerical core.
Background
The field has moved from purely analytic bath decomposition
(Matsubara/Pade expansions) toward numerical fitting methods (AAA/Prony) for
constructing exponential bath representations. Keeping the core primitive as
"a set of exponentials" rather than "a Pade-generated table" means new
decomposition methods can be added without touching hierarchy or
temperature-coefficient code. The current Pade coefficient generator is a
compact runtime eigenvalue-method implementation; it is reframed as the
first bath provider rather than replaced from scratch.
Core Objectives
1. Design the UserExponents interface surface
Decouple bath spectral-density output from the temperature-dependence
coefficient pipeline so any (c_k, γ_k) sequence can flow through.
2. Land UserExponents as a first-class Bath::Kind
Hierarchy and temperature-coefficient machinery consume arbitrary exponent
sets.
3. Re-platform the existing Pade generator as a provider
Not a special case in the core — a provider implementation on top of
UserExponents.
4. Resolve the double-precision activation blocker
Determine the real scope of templating the device-side numeric pipeline for
double precision (host-side Pade coefficients are already double-precision;
the remaining gap is device-side pipeline templating).
5. Keep numerical fitting (AAA/Prony) out of the core
Stays a Python-layer concern, reusing existing fitting tooling — the core
only needs to consume exponential sets, not fit them.
Success Criteria
| Metric |
Target |
| UserExponents path produces correct results on a non-Pade exponential set |
within stated tolerance vs. reference |
| Existing Pade-derived results reproduce prior generator output |
within numerical tolerance + legacy baseline preserved |
| Precision::Double scope decision executed |
decision recorded; double path activated or explicitly scoped out with reason |
Dependencies
Depends on Backend Abstraction Architecture (bath/coefficient code needs
to live in the backend-agnostic layer). Feeds Physics Validation & Test
Infrastructure (new bath kinds need oracle coverage) and Public API
Evolution (Bath::Kind enum activation).
Risks
Precision assumptions embedded in the current single-precision-fitted
coefficient path could produce silently degraded double-precision results if
double-precision activation isn't gated on this redesign landing first.
Overview
Reorients the bath abstraction so that an arbitrary user-supplied exponential
set (
Bath::Kind::UserExponents, i.e. arbitrary(c_k, γ_k)pairs) is thecore primitive that the hierarchy and temperature-dependence machinery
consume, with the existing Pade-based spectral decomposition becoming one
provider on top of that primitive rather than the only path. This unblocks
arbitrary bath spectral densities (1/f, underdamped Brownian, user-fit
exponentials) without hard-coding a specific decomposition method into the
numerical core.
Background
The field has moved from purely analytic bath decomposition
(Matsubara/Pade expansions) toward numerical fitting methods (AAA/Prony) for
constructing exponential bath representations. Keeping the core primitive as
"a set of exponentials" rather than "a Pade-generated table" means new
decomposition methods can be added without touching hierarchy or
temperature-coefficient code. The current Pade coefficient generator is a
compact runtime eigenvalue-method implementation; it is reframed as the
first bath provider rather than replaced from scratch.
Core Objectives
1. Design the UserExponents interface surface
Decouple bath spectral-density output from the temperature-dependence
coefficient pipeline so any
(c_k, γ_k)sequence can flow through.2. Land UserExponents as a first-class
Bath::KindHierarchy and temperature-coefficient machinery consume arbitrary exponent
sets.
3. Re-platform the existing Pade generator as a provider
Not a special case in the core — a provider implementation on top of
UserExponents.
4. Resolve the double-precision activation blocker
Determine the real scope of templating the device-side numeric pipeline for
double precision (host-side Pade coefficients are already double-precision;
the remaining gap is device-side pipeline templating).
5. Keep numerical fitting (AAA/Prony) out of the core
Stays a Python-layer concern, reusing existing fitting tooling — the core
only needs to consume exponential sets, not fit them.
Success Criteria
Dependencies
Depends on Backend Abstraction Architecture (bath/coefficient code needs
to live in the backend-agnostic layer). Feeds Physics Validation & Test
Infrastructure (new bath kinds need oracle coverage) and Public API
Evolution (
Bath::Kindenum activation).Risks
Precision assumptions embedded in the current single-precision-fitted
coefficient path could produce silently degraded double-precision results if
double-precision activation isn't gated on this redesign landing first.