AUREOLE-R-v3 / aureole /innovation.py
PureOne's picture
AUREOLE-R 3.0.0-hf.1: standalone public research release
9d6c005 verified
Raw
History Blame Contribute Delete
4.26 kB
"""Sequential residual elimination with fixed budget and exact partial sums.
Do not supply unverified entries as known. Zero proposal support is legal
only when the contribution is exact. This module does not validate geometry.
"""
import numpy as np
def prepare(bound, prior, values, known, score):
b, p, v = np.asarray(bound, float), np.asarray(prior, float), np.asarray(values, float)
k, s = np.asarray(known, bool), np.asarray(score, float)
if (b.ndim != 3 or p.shape != b.shape[:2] or v.shape != p.shape or k.shape != p.shape
or s.shape != p.shape or not all(np.isfinite(x).all() for x in (b,p,v,s))
or (b < 0).any() or ((p < 0)|(p > 1)).any() or ((v < 0)|(v > 1)).any() or (s <= 0).any()):
raise ValueError("Invalid finite control or strictly positive base scores")
h = b*np.where(k, v, p)[..., None]
scores = np.where(k, 0, s)
total = scores.sum(1, keepdims=True)
q = np.divide(scores, total, out=np.zeros_like(scores), where=total > 0)
return h.copy(), q
def eliminate(h, q, oracle, n, rng):
"""oracle(rows,j) supplies *current exact* RGB for one term per row.
Each selected term is assimilated after its martingale estimate is formed.
No duplicates; no queries for rows already complete. Exact completion is
determined by the initial support size, not by observed sample values.
"""
h, q = np.array(h, float, copy=True), np.array(q, float, copy=True)
if (h.ndim != 3 or q.shape != h.shape[:2] or not np.isfinite(h).all()
or not np.isfinite(q).all() or (q < 0).any()
or not np.all(np.isclose(q.sum(1), 1, atol=1e-12) | (q.sum(1) == 0))
or isinstance(n, bool) or not isinstance(n, (int, np.integer)) or n < 1):
raise ValueError("Finite control, normalized nonnegative support and fixed positive budget required")
initial_count = (q > 0).sum(1)
scores = q.copy()
estimates = np.zeros((len(h), h.shape[2]))
selections = []
for _ in range(n):
integral = h.sum(1)
active = np.flatnonzero(scores.sum(1) > 0)
y = integral.copy()
if len(active):
weights = scores[active]/scores[active].sum(1, keepdims=True)
cdf = np.minimum(np.cumsum(weights, 1), 1.0)
last = weights.shape[1]-1-np.argmax(weights[:, ::-1] > 0, axis=1)
# Floating-point summation must not give a trailing zero-support
# bin a tiny spurious interval near one.
cdf[np.arange(weights.shape[1])[None, :] >= last[:, None]] = 1.0
j = (rng.random(len(active))[:, None] >= cdf).sum(1)
f = np.asarray(oracle(active, j), float)
if f.shape != (len(active), h.shape[2]) or not np.isfinite(f).all():
raise ValueError("Oracle returned invalid physical values")
y[active] += (f-h[active, j])/weights[np.arange(len(active)), j, None]
h[active, j] = f
scores[active, j] = 0
selections.append((active.copy(), j.copy()))
estimates += y/n
complete = initial_count <= n
estimates[complete] = h.sum(1)[complete]
return estimates, selections
def exact_risk_two(truth, h, q):
"""Audit-only expected MSE for eliminate(..., n=2). No online access.
Works only when zero-support terms really are exact; otherwise raises.
"""
f, h, q = np.asarray(truth), np.asarray(h), np.asarray(q)
r = f-h
if np.max(np.abs(np.where((q == 0)[..., None], r, 0)), initial=0) > 1e-10:
raise ValueError("False certificate: nonzero residual has zero support")
s = np.divide(r*r, q[..., None], out=np.zeros_like(r), where=q[..., None] > 0).sum(1)
total = r.sum(1)
v1 = s-total*total
v2 = s*(1-(q*q).sum(1))[:, None]-(r*r).sum(1)-total*total+2*total*(q[..., None]*r).sum(1)
result = np.maximum((v1+v2).mean(-1)/4, 0)
result[(q > 0).sum(1) <= 2] = 0
return result
def covariance(residual, proposal):
"""One-sample covariance on positive support; used in proof witnesses."""
r, q = np.asarray(residual, float), np.asarray(proposal, float)
use = q > 0
if np.any(np.abs(r[~use]) > 1e-12):
raise ValueError("Uncertified zero support")
return (r[use].T/q[use])@r[use]-np.outer(r.sum(0), r.sum(0))