Skip to content

The facade's sigma_r fold family is y-blind and (n,2n)-blind now that the operator's half carries the yield #449

Description

@deOliveira-R

Finding (elegance review of #426 step 2, 2026-09-04)

The σ_r fold family is spelled TWICE: MaterialXSField.{foldable_sigma, residual_sig_s} (the facade) and TransferOperator.{foldable_sigma, foldable_part, residual_part, is_foldable_into_sigma_r} (the operator core, orpheus/transport/operators/transfer.py). [M] they agree bitwise today; the DSA consumer (orpheus/sn/acceleration/dsa.py, mat_xs.foldable_sigma()) reads the FACADE's; nothing in production reads the operator's ("Data API only").

#426 step 2 made the operator's half generic in the yield — foldable_sigma returns y·diag(Σ_{c,0}), because Σ_r = Σ_t − y·Σ_{c,0}^{g→g} removes the EMISSION — and left the facade's half y-blind and (n,2n)-blind. The day a consistent-DSA session (#2) wants a low-order operator for the (n,2n) fold, mat_xs.foldable_sigma() returns the scattering diagonal with no yield and no channel: the facade half is now the one that goes wrong first.

Retired in the same carve: MaterialXSField.is_p0_diagonal_with_zero_n2n (zero callers; its ⚠ note asked #426 step 2 to re-derive whether a P0-only test suffices — it does: rowsum(Σ₂ₙ,0) = σ₂ₙ and |Σ_ℓ| ≤ Σ₀ entrywise mean a zero P0 row forces every ℓ block of that row to zero, so the predicate was never wrong, merely dead).

What to do

The retirement trigger already exists — the F-1 facade dissolution (orpheus/transport/mesh/material_xs_field.py, "until F-1 dissolves the facade"). Until then, the facade's fold accessors must either read the operator's (one spelling) or say in their docstrings that they are the y-blind SCATTERING-only half and must not be reached for on the (n,2n) channel. Any DSA work that folds a channel's within-group block goes through TransferOperator.foldable_part() (which preserves the term and the yield).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    module:sn02.Discrete.Ordinatestype:improvementEnhancement to existing functionality

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions