AUREOLE-R-v3 / legacy /code /aureole_core.py
PureOne's picture
AUREOLE-R 3.0.0-hf.1: standalone public research release
9d6c005 verified
Raw
History Blame Contribute Delete
3.67 kB
"""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)