openghg_inversions.basis.covariance_products#
Labelled in-memory native-covariance products for retained scaling states.
This module is an eager numerical kernel. Callers supply a canonical native
sensitivity H and basis prolongation U; basis operators own any source
expansion. Their payloads may remain sparse or Dask-backed until the named
projection boundary, where related arrays are materialized together. Custom
restrictions are likewise materialized once and reused by all retained-state
RHS blocks.
For native covariance B and retained restriction Pi, the kernel returns
C_alpha = Pi B Pi.T, H U_*, H B Pi.T, and H B H.T (or its
diagonal). Strategies return authoritative Pi; the kernel derives
B Pi.T, C_alpha, and U_* = B Pi.T C_alpha^-1. The default strategy
preserves bucket prolongation by deriving
Pi_U = (U.T B^-1 U)^-1 U.T B^-1. The kernel trusts the covariance action’s
real self-adjoint positive-definite semantics and compatible inverse rather
than globally certifying a matrix-free operator. Durable artifact identity and
persistence are intentionally deferred to the artifact-I/O layer.
- class openghg_inversions.basis.covariance_products.NativeCovarianceProducts(restriction: DataArray, prolongation: DataArray, state_covariance: DataArray, effective_observation_operator: DataArray, observation_state_cross_covariance: DataArray, native_observation_covariance: DataArray, strategy: str, observation_covariance_view: Literal['dense', 'diagonal'])#
Bases:
objectLabelled in-memory product blocks induced by one retained restriction.
- Variables:
restriction (xarray.core.dataarray.DataArray) – Dimensionless
Piwith dimensions(state_dim, *native_dims).prolongation (xarray.core.dataarray.DataArray) – Derived dimensionless covariance-natural
U_*with dimensions(*native_dims, state_dim).state_covariance (xarray.core.dataarray.DataArray) – Positive-definite dimensionless
C_alphawith distinct typed row/column state dimensions.effective_observation_operator (xarray.core.dataarray.DataArray) –
H U_*with dimensions(observation_dim, state_dim)and sensitivity units.observation_state_cross_covariance (xarray.core.dataarray.DataArray) –
H B Pi.Twith dimensions(observation_dim, state_column_dim)and sensitivity units.native_observation_covariance (xarray.core.dataarray.DataArray) – Dense positive-semidefinite (and possibly singular)
H B H.Ton distinct typed observation axes, or its nonnegative observation-axis diagonal. Units are squared sensitivity units.strategy (str) – Identifier of the strategy that selected
Pi.observation_covariance_view (Literal['dense', 'diagonal']) – Whether the observation covariance field contains the dense matrix or its diagonal.
Notes
Freezing the dataclass prevents field reassignment, but the contained DataArrays remain mutable. Product attributes are construction-time snapshots, not live views of input attribute mappings.
- class openghg_inversions.basis.covariance_products.PreserveBucketProlongation(name: str = 'preserve_bucket_prolongation')#
Bases:
objectDerive
Pi_Uso covariance-weighted prolongation equalsU_bucket.- projection(covariance: InvertibleNativeCovarianceAction, basis_prolongation: DataArray, *, native_dims: tuple[str, ...], state_dim: str) RetainedProjection#
Construct the prior-precision-compatible restriction.
- Parameters:
covariance – Invertible labelled action for native covariance
B.basis_prolongation – Eager canonical bucket prolongation
U.native_dims – Ordered native dimensions.
state_dim – Retained-state dimension.
- Returns:
The authoritative bucket-compatible restriction
Pi_U.- Raises:
ValueError – If
Uis invalid or lacks full column rank.
- class openghg_inversions.basis.covariance_products.RetainedProjection(restriction: DataArray, strategy: str)#
Bases:
objectA labelled retained restriction selected by one strategy.
- Variables:
restriction (xarray.core.dataarray.DataArray) – Dimensionless
Piwith dimensions(state_dim, *native_dims). The frozen dataclass does not freeze this mutable DataArray.strategy (str) – Stable identifier for the scientific projection choice.
- class openghg_inversions.basis.covariance_products.RetainedProjectionStrategy(*args, **kwargs)#
Bases:
ProtocolExtension seam for choosing authoritative retained coefficients.
- projection(covariance: InvertibleNativeCovarianceAction, basis_prolongation: DataArray, *, native_dims: tuple[str, ...], state_dim: str) RetainedProjection#
Return the authoritative labelled retained restriction
Pi.- Parameters:
covariance – Labelled native covariance action.
basis_prolongation – Dimensionless basis
Uwith dimensions(*native_dims, state_dim).native_dims – Ordered native covariance dimensions.
state_dim – Retained-state dimension.
- Returns:
A dimensionless restriction with dimensions
(state_dim, *native_dims). The kernel derivesB Pi.T,C_alpha, andU_*from it.
- openghg_inversions.basis.covariance_products.project_native_covariance(*, covariance: InvertibleNativeCovarianceAction, basis_prolongation: DataArray, state_dim: str, native_sensitivity: DataArray, observation_dim: str, observation_covariance: Literal['dense', 'diagonal'] = 'dense', observation_batch_size: int = 64, strategy: RetainedProjectionStrategy | None = None) NativeCovarianceProducts#
Compute coherent labelled native-covariance products eagerly.
- Parameters:
covariance – Labelled native covariance action with a compatible solve.
basis_prolongation – Canonical labelled
Ufrom the basis-side native expansion boundary.state_dim – Retained-state dimension shared by
UandPi.native_sensitivity – Canonical labelled native sensitivity
H.observation_dim – Observation dimension in
H.observation_covariance – Return dense
H B H.Tor its diagonal.observation_batch_size – Positive integral number of covariance right-hand sides per eager block.
strategy – Authoritative restriction choice; defaults to the bucket-preserving restriction.
- Returns:
Frozen in-memory labelled product value object. Scaling covariance, restriction, and prolongation have units
"1". Products linear inHinherit its units; observation covariance uses squaredHunits when supplied.The kernel trusts the covariance action’s declared real, self-adjoint, positive-definite semantics. It does not globally certify a matrix-free
Bor revalidate products constructed here.- Raises:
ValueError – If labelled inputs cannot be exactly aligned, the batch size is not positive, or a required Cholesky factorization fails.