Skip to content

Bath Layer Redesign (UserExponents-first) #32

Description

@yjmaxpayne

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.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions