Specify edge-normalized GazeWeave Transport
Source:R/gaze_weave_transport_v3_spec.R
gaze_transport_spec.RdTransport separates matched coverage, normalized correspondence, selected source and target mass, spatial fidelity, directed local order, correspondence smoothing, and candidate-invariant registration. Coverage is integrated by Gauss-Legendre quadrature under a fixed beta prior.
Usage
gaze_transport_spec(
spatial = gaze_gaussian_mixture(c(0.75, 1.5), weights = c(0.7, 0.3)),
chronology = gaze_order_neighbours(neighbours = 2),
coverage_prior = c(2, 2),
coverage_nodes = 12L,
temporal_weight = 2,
selection_weights = c(0.5, 0.5),
entropy_schedule = c(0.15, 0.05, 0.015),
temperature_bounds = c(0.05, 20),
warp = gaze_warp_none(),
screen = NULL,
maxit = 1000L,
step_size = 2,
tolerance = 1e-06,
projection_maxit = 1000L,
projection_tolerance = 1e-08,
projection_method = c("auto", "standard", "log"),
multistart = 1L,
backend = c("auto", "optimized", "reference"),
polish = c("none", "audit"),
polish_maxit = 200L,
polish_gap_tolerance = 1e-07,
polish_relative_tolerance = 1e-08,
reliability = c("none", "effective_fixations"),
reliability_kappa_bounds = c(0, 100),
calibration_folds = 2L,
calibration_seed = 20260822L,
log_temperature_prior_sd = 1,
log1p_kappa_prior_sd = 1,
revision = "2026.10",
calibration_control = NULL
)Arguments
- spatial
A [gaze_gaussian_mixture()] specification.
- chronology
Ordinal chronology from [gaze_order_neighbours()].
- coverage_prior
Two positive beta-prior shape parameters.
- coverage_nodes
Number of default coverage quadrature nodes.
- temporal_weight
Non-negative directed local-order weight.
- selection_weights
Non-negative reference and source selection weights.
- entropy_schedule
Positive correspondence-smoothing continuation values; the last value defines the optimized objective. The smooth first stage of the default reduces, but does not remove, the dependence of the local optimum reached on `step_size`.
- temperature_bounds
Calibration temperature bounds.
- warp
Candidate-invariant cross-fitted warp specification.
- screen
Optional screen geometry.
- maxit, step_size
Mirror-descent iteration limit and largest step.
- tolerance
Stopping tolerance in units of the regularized objective (nats): a stage stops when a first-order model predicts at most `tolerance` of remaining decrease at the current plan (see `revision`). On a 60-pair review set, a tight continuation of nodes stopped at the default `1e-6` found a further decrease of at most `1e-6` at the 95th percentile; tighter values did not remove the rare slow nodes and multiplied projection-limited stalls, and looser ones (`1e-5` or more) stopped some nodes at worse local solutions.
- projection_maxit, projection_tolerance, projection_method
Fixed-mass projection controls.
- multistart
One or two common structural starts. Both backends always add the adjacent-coverage continuation, and `2` adds a spatial start (natively supported). On the review set, `2` lowered the 95th-percentile gap to a multistart oracle only from 0.0056 to 0.0053 nats at 1.48 times the runtime, and on a second review set it never moved a score by more than 2e-5, so it is opt-in.
- backend
Pair solver backend. `"reference"` is the readable R oracle; `"optimized"` uses the estimator-preserving batched implementation; `"auto"` uses the optimized backend with a reference fallback. A specification the native backend cannot solve (`projection_method = "log"` or `"standard"`) is routed to the reference backend for every pair, a node that reaches `maxit` is recorded as `"not_converged"` and scored rather than raising an error, and a per-pair numerical fallback raises a warning of class `gaze_transport_backend_fallback`. The backend used is recorded in every alignment's `convergence` element.
- polish
Optional scientific-objective Frank-Wolfe audit. The default keeps the entropic solution; `"audit"` polishes every coverage node.
- polish_maxit, polish_gap_tolerance, polish_relative_tolerance
Conditional-gradient stopping controls.
- reliability
Response-blind calibration policy. `"effective_fixations"` learns effective-fixation shrinkage (kappa) on inner out-of-fold predictions and includes the temperature-only solution as an exact boundary. It requires `gaze_calibration_control(method = "global")`. The default, `"none"`, leaves sparse rows to the evidence-scaled temperature (see [gaze_calibration_control()]).
- reliability_kappa_bounds
Non-negative bounds for the shrinkage scale.
- calibration_folds, calibration_seed
Inner calibration-fold policy.
- log_temperature_prior_sd, log1p_kappa_prior_sd
Penalties of the global calibration (`gaze_calibration_control(method = "global")`).
- revision
Solver revision, recorded in the specification and in every alignment and fit. The only supported revision is `"2026.10"`, the corrected solver and estimand. The chronology residual is `1 - 2A / (R + S + 1e-3)`, continuous as the selected edge mass vanishes. The stopping rule is first-order: a stage stops when the plan is feasible, no cell outside the support is trapped, and a first-order model predicts at most `tolerance` of remaining decrease. It does not certify a local optimum: slow directions and saddles can remain (on the review set about 1 1.4e-3). Trapped cells are reseeded. Mirror steps are capped so the exponent never saturates. A line search limited by projection noise records the stage as `"stalled_projection_limited"` and `maxit` as `"not_converged"`; both are scored. Standard Sinkhorn is finished by a dual Newton projection and then log-domain Sinkhorn. Every coverage node is solved from the independent and the continuation start, replacing the reference backend's silent cold restart. The result is a local optimum of a non-convex objective. Scores fall short of a multistart oracle (one-sided, mostly in null and sparse-source pairs): by up to 0.12 nats with 95th percentile 0.0056 on one 60-pair review set, and up to 0.117 with 95th percentile 0.023 (null pairs 0.033, matched 0.006) on a second 88-pair, half-null set. `backend = "auto"` warns about and records every numerical fallback. The polish Frank-Wolfe gap is `NA` with a reason on a selection boundary. The earlier solver revision `"2026.08"` was retired in eyesim 0.3.0 because of documented defects (a discontinuous chronology residual, a relative-change stopping rule, and silent backend fallbacks and cold restarts); requesting it is an error. Specifications saved before revisions existed, which were solved as `"2026.08"`, are an error too: re-create them with `gaze_transport_spec()`. Install the git tag `gazeweave-2026.08-frozen` to reproduce 2026.08 results, including the frozen validation courts.
- calibration_control
A [gaze_calibration_control()]. `NULL` uses its defaults.
Experimental
GazeWeave is experimental. Its interface, defaults and result columns may change in future releases; record the package version with any results.
Examples
spec <- gaze_transport_spec(
spatial = gaze_gaussian_mixture(c(30, 60), unit = "px"),
screen = gaze_screen(800, 600, unit = "px")
)
spec
#> GazeWeave Transport specification
#> coverage: 12 Gauss-Legendre nodes; Beta(2, 2) prior
#> chronology: next 2 ordinal neighbours
#> backend: auto
#> solver revision: 2026.10