AOM / Moment Coverage Matrix¶
Date: 2026-06-06
This file tracks the requested end state: AOM portfolio methods, reusable
winning linear/moment heads, and global preprocessing-selection methods in
nirs4all-methods, with CPU and CUDA-build behavior separated.
Integrated Now¶
Surface |
User-facing entry |
Native ABI |
CPU |
CUDA build |
Status |
|---|---|---|---|---|---|
AOM logical Python facade |
|
no new ABI |
import tested |
CUDA-device smoke tested |
dedicated AOM import surface re-exporting campaign helpers, screen/refit pool helpers, native sklearn AOM presets and historical AOM portfolio classes while keeping the single |
Moment logical Python facade |
|
no new ABI |
import tested |
CUDA-device smoke tested |
dedicated moment import surface re-exporting sufficient-statistics helpers, |
AOM strict global selector |
|
yes |
tested |
smoke tested |
existing catalog method now exposes |
AOM preprocessing |
|
yes |
tested |
existing build path |
native operator-bank preprocessing primitive now has ABI-close Python binding, top-level alias, AOM facade inventory entry, catalog binding and CUDA smoke coverage for direct strict-linear identity, degree-1 detrend, Savitzky-Golay smooth/derivative, Norris-Williams, finite difference, Gaussian, Whittaker and FCK hard/soft gating; strict chains and model scoring remain covered by the sweep/campaign operator-moment paths |
POP-PLS |
|
yes |
tested |
smoke tested |
existing catalog method now exposes |
AOM robust-HPO strict screen |
|
yes |
tested |
smoke tested |
compact/wide product screen; compact has 12 chains and wide has 31 strict-linear chains including Gaussian, FCK and Whittaker variants; exports |
AOM configurable strict sweep |
|
yes |
tested |
smoke tested |
configurable compact/wide chain bank plus Ridge/PLS grids |
AOM user-defined strict chain sweep |
|
yes |
tested |
smoke tested |
arbitrary caller-provided strict-linear chains plus Ridge/PLS grids |
AOM fixed selected-chain final fit |
|
yes |
tested |
smoke tested |
catalogued individual winner reuse surface; fits one already-verified strict-linear chain/head/parameter on all rows without running CV, folds coefficients back to original input space, and is used by |
AOM campaign chain descriptors |
|
yes-backed |
tested |
build path tested |
every AOM sweep candidate row can be mapped back to the exact strict-linear preprocessing chain without dataset-name routing |
AOM candidate route provenance |
|
yes-backed |
tested |
smoke tested |
every AOM sweep/campaign candidate can be tied to materialized, dense, banded or structured moment scoring without changing the stable candidate score table shape |
AOM chunked strict-linear campaign helper |
|
Python-backed |
tested |
smoke tested |
deterministic compact/wide/lab strict-linear chain grids, including SavGol, Norris-Williams, finite-difference, Gaussian, FCK and Whittaker variants, plus chunked score-only global, per-head and per-score-route top-k aggregation from full chunk score tables, prefix-aware chunk packing via |
Staged strict-chain cartesian campaign |
|
Python-backed over native helpers |
tested |
CUDA-device smoke tested |
catalogued global staged preprocessing-selection method over |
Native sklearn sweep/direct estimators |
|
yes/Python-backed |
tested |
build path tested |
reusable sklearn-style wrappers over native direct heads, sweep MethodResults and campaign helpers; direct wrappers replay native Ridge/PLS/PCR/CPPLS/continuum/ECR predictions from input-space coefficients and reconstructed intercepts; AOM wrappers use exact |
AOM route policy switch |
|
yes |
tested |
smoke tested |
explicit route control; materialized forces the legacy strict-linear chain screen, while force_moments rejects any candidate-screen fallback outside operator moments |
AOM score-only screen output |
|
yes |
tested |
build path tested |
returns candidate scores, route counters, selected ids and fold ids without final selected-chain refit outputs; useful for large preprocessing ranking campaigns |
AOM PLS1 GCV proxy screen |
|
yes |
tested |
smoke tested |
explicit moment-only first-pass PLS screen that scores all-sample transformed moments with a deterministic PLS1 GCV RMSE proxy; PLS-only operator-moment campaigns batch eligible chains through one internal native proxy-scoring dispatch and skip held-out moment transforms; it is not exact fold CV and must be followed by exact-CV/holdout verification of retained rows |
PLS/Ridge screen fit-cost audit |
|
yes-backed |
tested |
smoke tested |
exposes how many fold-local/final Ridge and PLS fits and explicit proxy fits the current sweep/campaign actually pays, split by moment vs materialized/proxy route, by host vs CUDA-device PLS1 moment execution, and by bounded CUDA stream-parallel exact fold scheduling; score-only moment sweeps avoid full |
AOM Ridge/PLS1 operator-moment scoring |
|
no new ABI |
tested |
tested |
exact chain operators applied to raw moments; dense transforms are guarded, identity/SavGol/Norris/finite/Gaussian/FCK use a banded descriptor up to |
Live CPU/CUDA moment crossover |
|
benchmark/Python |
tested |
live timed |
launches separate CPU and CUDA Python processes against the rebuilt libs, times score-only Ridge/PLS |
AOM robust-HPO fold-local Python |
|
no |
tested |
Python CPU reference |
stateful-chain reference/preset layer |
AOM portfolio policy/gates |
|
no |
tested |
Python CPU reference |
source-free reference layer |
AOM-Ridge blender |
|
yes for native function |
tested |
smoke tested for native function and native sklearn wrapper; flexible Python estimator is CPU reference |
native compact/wide strict-linear Ridge OOF simplex blend now exports replayable |
AOM-Ridge global |
|
Python-backed over native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM Ridge global selector; converts strict single operators into one-op chains, selects one operator plus one positive Ridge alpha by native CV, and returns folded |
AOM-Ridge superblock |
|
Python-backed over native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM Ridge superblock reference over the moment-compatible single-operator bank; concatenates strict operator views, selects/fits Ridge alpha by fold-local CV or fixed alpha through the native Ridge binding, applies train-fold centering/block RMS scaling to validation folds, and folds the final superblock coefficients back into |
AOM-Ridge active superblock |
|
Python-backed over native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM Ridge active-superblock reference; screens a train-only active operator subset inside every alpha-CV fold using response signatures from the actual |
AOM-Ridge MKL-light superblock |
|
Python-backed over native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM Ridge MKL-light reference; learns non-negative train-only KTA weights over strict operator blocks inside every alpha-CV fold, refits weights on full calibration rows, fits native Ridge on the equivalent weighted superblock, and folds final coefficients back into |
AOM-PLS superblock |
|
Python-backed over native |
tested |
CUDA-device smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM-PLS superblock reference; concatenates strict operator views, selects the PLS component count by train CV, fits through the native PLS binding and folds final superblock coefficients back into |
AOM Ridge-PLS superblock |
|
Python-backed over native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict-linear AOM Ridge-PLS superblock reference; concatenates strict operator views, selects the PLS component count and Ridge-PLS penalty by train CV, fits through the native |
AOM chain Ridge-PLS |
|
Python-backed over native strict AOM operators + native |
tested |
CUDA-build smoke tested, not fused GPU yet |
catalogued donor-style strict/raw-base single-chain Ridge-PLS selector; applies each strict-linear AOM chain sequentially, selects chain, PLS component count and Ridge-PLS penalty by train CV, fits through native |
AOM operator PLS stack |
|
yes for native function |
tested |
smoke tested for native function and native sklearn wrapper; flexible Python estimator is CPU reference |
native compact/wide strict-operator PLS1 score stack with Ridge head now exports folded input-space coefficients; wide has 31 strict-linear operators including Gaussian, FCK and Whittaker variants; |
Row-additive moment substrate |
|
yes |
tested |
tested |
raw/centered |
Moment Ridge/PLS sweep |
|
yes |
tested |
tested |
exact Ridge CV; |
Direct Ridge head |
|
yes |
smoke tested |
smoke tested |
reusable linear/moment head with direct function and sklearn wrapper; |
Direct PLS head |
|
Python-backed over native sweep |
smoke tested |
CUDA-device smoke tested |
reusable moment PLS head over |
Direct PCR head |
|
yes |
smoke tested |
smoke tested |
reusable PCR/SVD head with direct |
CPPLS head |
|
yes |
smoke tested |
smoke tested |
reusable linear/moment head with direct function and sklearn wrapper; |
Continuum regression head |
|
yes |
smoke tested |
smoke tested |
reusable linear/moment head with direct function and sklearn wrapper; |
ECR head |
|
yes |
smoke tested |
smoke tested |
reusable linear/moment head with direct function and sklearn wrapper; |
Weighted PLS head |
|
yes |
smoke tested |
smoke tested |
reusable direct head; sqrt(w)-prescaled weighted PLS route; exports replayable |
Robust PLS head |
|
yes |
smoke tested |
smoke tested |
reusable direct head; Huber IRLS over weighted PLS fits; Python helper default |
Ridge-augmented PLS head |
|
yes |
smoke tested |
smoke tested |
reusable direct head; ridge-regularised augmented SIMPLS route; exports replayable |
Moment-model OOF stack |
|
Python-backed over native heads |
smoke tested |
CUDA-device smoke tested for PLS base |
train-only OOF Ridge meta-model over native Ridge/PLS/PCR/continuum/ECR/CPPLS predictions; the PLS base now reuses the direct |
Not Yet Integrated¶
Grid note: iter_aom_strict_chain_grid now exposes the same deterministic
compact/wide/lab strict-linear bank as build_aom_strict_chain_grid, but with
stable chain ids, start/stop slicing and optional chunks for incremental
campaign launchers. It is an inventory/runtime helper only and does not change
candidate scores.
Benchmark note: campaign timing scripts now expose
--backend-min-cuda-product alongside the CUDA PLS knobs, so the source-free
CPU/CUDA launch recommendation used in reports can be reproduced or overridden
from scripted runs without changing candidate scores.
Timing artifact note: the strict AOM portfolio now has committed CPU
build/dev-release timing pairs for the previously CUDA-only smoke artifacts:
aom_preprocess_timing.csv, aom_ridge_superblock_timing.csv,
aom_ridge_active_superblock_timing.csv,
aom_ridge_mkl_superblock_timing.csv, aom_pls_superblock_timing.csv,
aom_ridge_pls_superblock_timing.csv, aom_chain_ridge_pls_timing.csv,
aom_ridge_global_timing.csv and aom_staged_chain_campaign_timing.csv.
Release guards assert those CPU rows use the host/dev-release route while the
existing CUDA smokes keep the one-GPU build/cuda-on route. The strict AOM
portfolio timing artifacts for preprocess, selectors, diversity wrappers,
superblocks, robust HPO and staged campaign are refreshed against ABI 1.22.0
for both CPU/dev-release and CUDA/cuda-on evidence. The moment sweep/stack
timing artifacts, AOM sweep timing artifacts, and live
moment_gpu_crossover.csv/.md CPU-vs-one-GPU evidence are also refreshed
against ABI 1.22.0 and guarded by release tests for ABI, route counters and
CPU/CUDA library paths.
CUDA many-batched artifact note: the optional exact PLS many-job route is now
covered at multiple public surfaces.
moment_sweep_timing_cuda_many_batched_smoke.csv pins the direct moment sweep
route, aom_sweep_timing_cuda_many_batched_smoke.csv pins the AOM sweep route,
aom_screen_refit_scaling_cuda_many_batched_smoke.csv pins exact-CV refit
after a global screen, and
aom_staged_real_cohort_diesel_pls_many_batched_cuda_smoke.csv proves the real
held-out benchmark runner persists ABI 1.22.0, train-only selection and
screen/refit many-batched route counters. These artifacts prove current route
telemetry and exact-CV compatibility, not the deferred fused cartesian/IKPLS
CUDA engine.
Surface |
Required shape before completion |
Reason it is still open |
|---|---|---|
Fused/batched IKPLS mode for |
native batch/sweep ABI for device/host-fused free component CV over many PLS variants |
ABI 1.22.0 exposes |
full arbitrary-chain AOM moment screen |
strict-linear operator descriptors applying |
Banded descriptors now cover local linear operators, structured low-rank projection covers |
CUDA fused sweep |
grouped GEMM/operator kernels and backend parity vs CPU fp64 |
CUDA build works; fused moment/sweep kernels are not shipped |
WASM/WebGPU sweep |
optional lite backends |
design-only |
Invariants¶
models.pls.kernel/kernel_pls(non-linear kernel PLS) is intentionally excluded from the AOM/moment porting scope. The moment substrate operates on linear operators applied to the raw feature matrix; non-linear kernel functions (K = XX') do not fit the strict-linear AOM/operator-moment architecture and would require a separate kernel-moment substrate. Kernel PLS remains in the catalog but outside this porting track.Deployable selection must not route by dataset name, source name, database name, dataset id, or equivalent identity fields.
Python portfolio metadata is audit-only; tests assert metadata changes do not change selected route or predictions.
n4m.aom_ridge_blenderuses outer-fold OOF predictions to solve a non-negative simplex blend and is now catalogued asaom_pop.ridge_blender. The native surface is restricted to compact/wide strict-linear AOM chains and positive Ridge lambdas. The native result folds the weighted candidate Ridge coefficients back intoinput_coefficientsplusintercept, andNativeAOMRidgeBlenderRegressorpredicts from that state.AOMRidgeBlenderremains the Python reference layer for explicit custom estimators. Neither surface is a fused GPU blender yet.n4m.aom_ridge_superblockis deliberately narrower than donorAOMRidgeRegressor: it ports the strict-linear superblock idea only. It does not includebranch_global, MKL/kernel routing, row-reference-dependent preprocessing, nonlinear lifts or any dataset/source-name routing. It is a Python orchestration over nativeaom_preprocessand nativeridge; it is catalogued and timed, but still not a fused GPU superblock grinder.n4m.aom_ridge_active_superblockports the donor strict active-superblock idea without donor-private covariance helpers: active scores are defined on nativeaom_preprocessoutputs, screened fold-locally during alpha CV and then re-screened on full calibration data for the final fit. It is an active-pruning model, not a screen-recall guarantee for arbitrary 200k-chain preprocessing campaigns.n4m.aom_ridge_globalports the donor strict global Ridge idea: select one strict operator and one Ridge alpha by train CV, then expose a reusable final model. It is intentionally narrower than the existing broadNativeAOMMomentRidgeScreenRefitRegressorcampaign preset.n4m.aom_pls_superblockports the donor strict AOM-PLS superblock idea: concatenate fixed strict-linear operator views and fit a PLS head whose coefficients are folded back to raw input space. It is notsoftoperator weighting, active PLS pruning, MKL/kernel weighting, or a fused GPU many-operator grinder.n4m.aom_chain_ridge_plsports the donor strict/raw-base single-chain Ridge-PLS idea: each candidate is a sequential strict-linear chain, one PLS component count and one Ridge-PLS penalty scored by train CV. It deliberately excludes SNV, MSC, EMSC, OSC, row-reference-dependent preprocessing, nonlinear lifts, kernels and any dataset/source routing.n4m.aom_operator_pls_stackis catalogued asaom_pop.operator_pls_stack. It is single-target PLS1, uses fixed strict-linear compact/wide operator banks, and exposes the final score stack plus Ridge head. It also folds the selected strict-linear stack intoinput_coefficientsplusinput_intercept, soNativeAOMOperatorPLSStackRegressorcan predict on new spectra without rebuilding stack features.AOMOperatorPLSStackremains the Python reference layer for custom operator matrices and optional baseline admission gates.The native
aom_robust_hpomethod is a compact/wide product screen. It now folds the selected strict-linear chain coefficients back intoinput_coefficients, soX @ input_coefficients + interceptexactly replays the native predictions andNativeAOMRobustHPORegressorcan predict on new spectra. This is not a claim of 200k-chain fused GPU acceleration.n4m.aom_sweep_runis the configurable native strict-linear AOM sweep over fixed compact/wide banks. It allows custom Ridge/PLS grids and explicit folds, whilen4m.aom_chain_sweep_runaccepts arbitrary caller-provided strict-linear chains through a flat descriptor. Both exposemoment_policy="materialized"to force the legacy materialized route for timing comparisons or production route guarding, andmoment_policy="force_moments"/"moments_only"to fail fast whenever a candidate screen would need a materialized fallback. The selected chain may still be materialized once after scoring to populate public predictions and folded coefficients. Both now exportinput_coefficients, folded into the original feature space, so the native sklearn wrappers can predict on newXwithout Python-side chain replay.Both AOM sweep surfaces expose
score_only=Truefor large ranking passes. It keeps the candidate table, selected ids, route counters and fold ids, but skips selected-model output buffers and final refits. The result also keeps the flat chain descriptor (chain_offsets,op_kinds,param_offsets,chain_params), so broad campaigns can decode the exact preprocessing chain behind eachchain_idthroughn4m.decode_aom_chainsorn4m.aom_candidate_table. This is an output/cost control, not a new scoring rule; materialized candidate-screen routes still pay their fold-local scoring fits because they are not batched IKPLS yet.n4m.build_aom_strict_chain_gridandn4m.aom_chain_score_campaignare Python campaign helpers over the same native strict-linear ABI. They provide deterministic compact/wide/lab grids, custom cartesian family templates, chunkedscore_only=Trueexecution, global top-k aggregation, per-head top-k aggregation for mixed Ridge/PLS audits, per-score-route top-k aggregation for materialized/dense/banded/structured route audits, and optional checkpoint/resume.pls_score_mode="gcv_proxy"is fingerprinted separately from exact-CV campaigns and keeps proxy rows labelled throughscore_metric. Checkpoints are guarded by a fingerprint of the chain grid, folds, hyperparameters andX/ycontents, so an interrupted long screen can resume without mixing incompatible candidate scores. Loaded top-k rows are filtered to the chunks actually present in a checkpoint before new chunks are appended, which keeps manual partial checkpoints coherent for global, per-head and per-route top-k lists. The optionalmax_chunks_per_runbudget lets schedulers advance a campaign in bounded increments; reports exposecomplete,n_remaining_chunksandprocessed_chunks_this_run. They do not add a new selection heuristic and do not route by dataset identity.split_head_scoringcontrols how mixed Ridge/PLS chunks are scored. A single mixed native call uses none of the batched head-homogeneous fast paths, so"off"keepsn_ridge_moment_score_batch_calls,n_pls_moment_score_batch_callsandn_pls_gcv_proxy_batch_callsat0."auto"scores each mixed chunk as a Ridge-only call plus a PLS-only call and merges the rows, which turns on the Ridge moment batch (C*L*Kjobs forCchains,Lridge lambdas,Kfolds) and the PLS exact moment batch (pls_score_mode="cv",C*Kjobs) or GCV-proxy batch (pls_score_mode="gcv_proxy",Cjobs). The merge is score-preserving: the retained(chain_id, head, param)candidate scores and the selected winner are identical to"off", so it changes launch shape and route counters only, never scores, ranking or predictions. The low-level campaign helpers (aom_chain_score_campaign,aom_chain_screen_refit_campaign) default to"off"; the sklearn screen/refit estimators (NativeAOMScreenRefitRegressorand theNativeAOMMomentScreenRefitRegressormixed preset) default to"auto". For single-head screens"auto"is inert andn_split_head_chunksstays0.n4m.aom_moment_screen_refit_campaignis the functional fast-profile counterpart toNativeAOMMomentScreenRefitRegressorand is exposed from bothn4m.aomandn4m.moment. It wrapsaom_chain_screen_refit_campaignwith strict moment routes, prefix chunk ordering, split-head mixed scoring, PLS GCV-proxy screening, exact-CV refit andrefit_execution="auto". It addscampaign_preset="moment_fast_screen_refit"to the combined report but does not change the legacy defaults of the lower-level campaign helpers.Campaign and chunk reports expose normalized performance and route metrics (
candidates_per_second,ms_per_candidate, route fractions, etc.) derived from native counters. These fields are for CPU/GPU audit and run planning; they do not affect candidate scores or ranking.NativeAOMFixedCandidateRegressor.from_candidate(row)is the reusable bridge from a decoded campaign row to a fitted model.from_campaign(report, head=None|"ridge"|"pls", rank=0)selects the global or per-head campaign winner directly before delegating to the same fixed-candidate path. It refits exactly that chain/head/parameter throughaom_chain_sweep_runand predicts from folded input-space coefficients.n4m.aom_evaluate_candidatesrefits decoded top-k rows on an explicit train split and scores them on a caller-provided eval split. It reportscv_rank,eval_rankandrank_deltafor CV-vs-holdout analysis, but it does not change the native fit or route selection.n4m.aom_candidate_rank_diagnosticssummarizes screen-vs-holdout rank agreement from evaluated rows or reloaded reports. It reports rank correlation, rank drift and top-k overlap/recall. It is an audit tool for screen recall, not a selection rule.n4m.aom_candidate_report_recordsandn4m.aom_save_candidate_reportserialize campaign/eval candidate rows for offline comparison and replay. They preserve decoded chains, add a CSV-friendlychain_json, and drop prediction arrays by default. They do not introduce a ranking heuristic or any dataset-identity route.n4m.aom_load_candidate_reportreads JSON/JSONL/CSV candidate reports back into refittable rows. CSV rows restorechainfromchain_json, so saved campaign winners can be passed directly toNativeAOMFixedCandidateRegressor.from_candidate.n4m.aom_candidate_operator_summarygroups scored candidate rows by head, preprocessing operator, operator/head pair and chain length. It is an inspection aid for pruning or expanding future grids; it does not alter scores, top-k ordering or route selection.n4m.aom_candidate_preprocessing_impactadds stage/option/position impact summaries over the same scored rows, including improvement versus an identity baseline when such a row is present. It is an analysis surface only and does not introduce dataset-identity routing or a new selection rule.AOM sweep route counters are split by scoring route and model head:
n_ridge_operator_moment_candidates,n_pls_operator_moment_candidates,n_ridge_materialized_candidates, andn_pls_materialized_candidates. This makes broad campaigns auditable without inferring route provenance from candidate table rows.AOM sweep result rows also include
candidate_routes, with route codes0=materialized,1=dense_operator_moment,2=banded_operator_moment, and3=structured_operator_moment. Python decoded candidate rows exposescore_route_idandscore_route, and operator summaries includeby_score_route. These fields are diagnostics only and do not change candidate scores or rank order.PLS sweep fit counters are split by scoring route and by CV/final phase:
n_pls_moment_cv_fits,n_pls_materialized_cv_fits,n_pls_moment_final_fits, andn_pls_materialized_final_fits. Campaign reports also exposepls_cv_fits_per_chainandpls_cv_fits_per_candidate. These fields are diagnostics only; they do not affect scores, ranking, route policy or dataset selection.n4m_moments_*is now a reusable raw/centered sufficient-statistics layer;n4m_sweep_runuses moment fold subtraction where it is efficient, precomputed dual Ridge and optional held-out/train cross-kernel scoring whenp > n_train, and train/held-out moment scoring for compatible single-target NIPALS/regression PLS1 component grids. The wide dual Ridge train Gram, held-out cross-kernel, held-out prediction and coefficient reconstruction products use the sharedlinalg::gemmdispatch, so CUDA builds execute those products through cuBLAS. Compatible PLS1 moment-prefix dense products uselinalgin CPU/BLAS builds, but keep the scalar host-side path in CUDA builds because the current cuBLAS dispatch copies each micro-kernel host/device and benchmarked slower; this is an explicit guard until a device-resident batched IKPLS workspace exists. Other PLS regimes keep materialized prefix scoring with coefficient-prefix reuse across component counts.The CUDA PLS many-job dispatcher has an experimental opt-in tiled path (
N4M_CUDA_PLS_MANY_BATCHED=1) that uses strided-batched cuBLAS for the component products plus a native CUDA sign-normalization kernel, preserves exact scores, and falls back to the legacy sequential-many workspace path. Broader timings still do not justify making it the default. The production gap is now the remaining device-resident scalar glue and a fused IKPLS-style cartesian screen.AOM Ridge candidate rows with
p <= n_traintransform strict-linear chain operators into moment space and score held-out SSE from moments, including inside mixed Ridge+PLS sweeps. Dense medium-wide Ridge grids use this exact path when all lambdas are strictly positive andp <= 48; local linear banded operators extend the route top <= 256for Ridge in normal routing, top <= 512for strict Ridge screens undermoment_policy="force_moments", and top <= 1024for compatible single-target NIPALS PLS1.detrend_polychains use an exact structured low-rank projection transform and Whittaker chains use the exact structured pentadiagonal solve for(I + lambda D2'D2)^-1; both can compose with the local banded operators. CPUautoroutes Ridgep > n_trainrows through the exact materialized dual-Ridge scorer and PLS rows withmin_train < 4pthrough the exact materialized PLS prefix scorer; CUDAautokeeps the operator-moment route in those cells. Feature caps and backend route choices are compute-route guards, not scoring heuristics.moment_policy="force_moments"is the strict native screen mode: it accepts only chains/heads whose candidate scores are computed through operator moments and returnsUNSUPPORTEDinstead of silently leaving the moment substrate. This does not change the post-selection materialization used to expose predictions andinput_coefficients.The full moment-engine goal remains open until batched IKPLS, operator descriptors for the remaining regimes, and fused CUDA sweep/parity evidence exist.