"""AUREOLE v1: small, explicit linear-Gaussian reference operations. This is a CPU research witness, not a neural renderer or DLSS implementation. All matrices use float64. Measurements are conditionally independent unless an explicit joint noise covariance is provided. Never reuse correlated rays as independent observations. """ from __future__ import annotations import numpy as np def sym(a): return (a + a.T) * 0.5 def sqrt_psd(a): vals, vecs = np.linalg.eigh(sym(a)) if vals.min() < -1e-10: raise ValueError("Matrix is not positive semidefinite") return (vecs * np.sqrt(np.maximum(vals, 0))) @ vecs.T def observe(mean, covariance, h, value, noise_variance): """One scalar Gaussian update, using Joseph form for numerical stability.""" h = np.asarray(h, dtype=float) if noise_variance <= 0: raise ValueError("Noise variance must be positive") ph = covariance @ h innovation_var = float(noise_variance + h @ ph) k = ph / innovation_var m = mean + k * (value - h @ mean) residual = np.eye(len(mean)) - np.outer(k, h) p = residual @ covariance @ residual.T + noise_variance * np.outer(k, k) return m, sym(p) def query_value(covariance, task_metric, h, noise_variance): """Exact one-query quadratic Bayes risk reduction; future task map is fixed.""" ph = covariance @ h return float(ph @ task_metric @ ph / (noise_variance + h @ ph)) def batch_covariance(p, h, noise): """Exact joint update, including correlated measurement noise.""" v = h @ p @ h.T + noise return sym(p - p @ h.T @ np.linalg.solve(v, h @ p)) def future_metric(dynamics, task_maps, weights): """W=sum w_tau Phi_tau.T C_tau.T C_tau Phi_tau; tau starts at zero.""" p = np.eye(dynamics.shape[0]) w = np.zeros_like(dynamics, dtype=float) for c, weight in zip(task_maps, weights): w += weight * p.T @ c.T @ c @ p p = dynamics @ p return sym(w) def closed_observation_basis(dynamics_list, channel_rows, tol=1e-10): """Smallest common A.T-invariant column span containing all C.T and H.T. Returns orthonormal U with quotient z=U.T x. This exact finite-dimensional construction is expensive for a full scene; intended for tests/local blocks. """ def orth(x): u, s, _ = np.linalg.svd(x, full_matrices=False) return u[:, s > tol] basis = orth(np.asarray(channel_rows, float).T) while True: enlarged = orth(np.concatenate([basis] + [a.T @ basis for a in dynamics_list], axis=1)) if enlarged.shape[1] == basis.shape[1]: return enlarged basis = enlarged def risk(p, w): return float(np.trace(w @ p)) def transform_coding(source_covariance, task_metric, rank): """Optimal exact rank-r linear encoding of a Gaussian source innovation. This source covariance is NOT automatically the renderer's posterior P. The encoder must actually possess the source being compressed. """ root = sqrt_psd(source_covariance) vals, vectors = np.linalg.eigh(sym(root @ task_metric @ root)) order = np.argsort(vals)[::-1] vals, vectors = vals[order], vectors[:, order] kept = vectors[:, :rank] error_cov = root @ (np.eye(len(vals)) - kept @ kept.T) @ root return kept, np.maximum(vals, 0), sym(error_cov) def area_mixture(operators, weights): """Convex area mixing under the manuscript's independent patch assumptions.""" weights = np.asarray(weights, float) if np.min(weights) < 0 or not np.isclose(weights.sum(), 1): raise ValueError("Mixture weights must form a simplex") return np.einsum("k,kij->ij", weights, operators)