From a40e140b662234890fee370d45d739d059f92772 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 18:16:27 +0100 Subject: [PATCH 1/9] perf(point_source_image): MAX_CONTAINING_SIZE headroom A/B in solver_config_sweep (phase 4c) --mcs-headroom runs control (library MCS 15) + mcs18/mcs20/mcs24 at the production geometry; --configs narrows it, and the default 4a grid is unchanged. Adds per-step uncapped NumPy containing counts on the prior, stress and stream draws with per-MCS draws exceeding the cap at every step, the mcs_no_unexplained_change gate (a row may differ from the control only where the control's cap was truncating), and a probe that the __defaults__ patch binds by name (step0_layout=None kept). Adds the RAL 8490H submit with a measured-wall WALL-BASIS row. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- ...image_solver_config_sweep_mcs_ral_cpu_fp64 | 139 ++++++ .../solver_config_sweep.py | 437 ++++++++++++++++-- 2 files changed, 546 insertions(+), 30 deletions(-) create mode 100644 hpc/batch_cpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_ral_cpu_fp64 diff --git a/hpc/batch_cpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_ral_cpu_fp64 b/hpc/batch_cpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_ral_cpu_fp64 new file mode 100644 index 000000000..c62958958 --- /dev/null +++ b/hpc/batch_cpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_ral_cpu_fp64 @@ -0,0 +1,139 @@ +#!/bin/bash -l +# +# 2026-09 point-source CPU speed-up campaign, phase 4c: the MAX_CONTAINING_SIZE +# headroom A/B (PyAutoArray#583) on RAL CPU. +# +# WHAT THIS MEASURES. scripts/point_source_image/likelihood_breakdown/ +# solver_config_sweep.py --mcs-headroom: the production FitPositionsImagePairAllSolved +# likelihood at the production geometry (+-9.9" / 0.2 / 1e-3) with the library's +# MAX_CONTAINING_SIZE (15, the control) against 18 / 20 / 24, each patched for +# tracing only (ArrayTriangles __defaults__ + module constant; fresh closure + +# jax.clear_caches() per route), interleaved 20 rounds x 20 calls, bootstrap 90 % +# CI, vmap 1/4/16, compile_s, XLA memory, FLOPs, the 200 prior + 200 stress +# completeness draws, the NumPy uncapped containing counts for EVERY refinement +# step on the prior / stress / stream draws, and +# gates.mcs_no_unexplained_change (a row may differ from the control only on a +# draw whose uncapped count exceeds the control's cap at some step). +# +# LIBRARY. Unchanged: every library is the shared mirror (/mnt/ral/jnightin/PyAuto, +# via activate.sh). The job refuses to run unless every library imports from the +# mirror and PyAutoArray includes #580 (4383ea81, the phase-4b step-0 route), and +# asserts the JSON source_revisions against the mirror HEADs afterwards. +# +# THREADS. OMP/MKL/OPENBLAS pinned to 1 (BLAS family only); the JAX CPU backend +# sizes its Eigen pool from the 8 CPUs of --cpus-per-task=8, as phases 1-4b. +# XLA_FLAGS are the phase-1 row's, byte for byte. +# +# NODE. Pinned to the Xeon Platinum 8490H node of phases 4a/4b (euclid-ral-compute-10-4, +# jobs 356367 / 357321). Check `sinfo -p ral -N -o "%N %T %C"` first: `idle*` +# nodes are unreachable. + +# WALL-BASIS: +# RAL job 357321 (this cell in phase-4b form, --step0-route with 4 routes, 8490H +# euclid-ral-compute-10-4 under load ~200, 8 CPUs, 200 + 200 draws, 20 x 20) ran +# 480 s. Phase 4c also runs 4 routes (control + 3 caps) plus the NumPy uncapped +# counts on 200 stress + 16 stream draws, so the basis is scaled to 600 s. +# Headroom 3 covers a quieter or busier node. +# cell: point_source_image/solver_config_sweep/simple device: cpu precision: fp64 +# source: measured-wall wall: 600 ref: ral-job-357321-point_source_image-solver_config_sweep headroom: 3.0 + +#SBATCH -J point_source_mcs_p4c +#SBATCH --partition=ral +#SBATCH --nodelist=euclid-ral-compute-10-4 +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=8 +#SBATCH --mem=32gb +#SBATCH --time=1:30:00 +#SBATCH -o output/output.%A.out +#SBATCH -e error/error.%A.err +#SBATCH --mail-type=END,FAIL +#SBATCH --mail-user=james.w.nightingale@durham.ac.uk + +export AP_ROOT="$(cd "${SLURM_SUBMIT_DIR:-$(dirname "$0")}/../.." && pwd)" +echo "AP_ROOT=$AP_ROOT" +source $AP_ROOT/activate.sh + +export OMP_NUM_THREADS=1 +export MKL_NUM_THREADS=1 +export OPENBLAS_NUM_THREADS=1 +export NPROC=${SLURM_CPUS_PER_TASK:-8} +export JAX_PLATFORMS=cpu +export JAX_ENABLE_X64=1 +export XLA_FLAGS="--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false" +export NUMBA_CACHE_DIR=$AP_ROOT/output/numba_cache_${SLURM_JOB_ID:-local} +mkdir -p "$NUMBA_CACHE_DIR" "$MPLCONFIGDIR" +# No persistent compile cache: compile_s is a gate and must be cold per route. +unset JAX_COMPILATION_CACHE_DIR + +CONFIG_NAME=hpc_ral_cpu_fp64 +RESULTS_DIR=$AP_ROOT/results/breakdown/point_source_image +mkdir -p "$RESULTS_DIR" + +echo "==========================================" +date +hostname +lscpu | grep 'Model name' || true +echo "partition: ${SLURM_JOB_PARTITION:-unset}" +echo "cpus-per-task: ${SLURM_CPUS_PER_TASK:-unset}" +echo "sched_affinity: $(python3 -c 'import os; print(len(os.sched_getaffinity(0)))')" +echo "loadavg: $(cat /proc/loadavg)" +echo "Cell: point_source_image/likelihood_breakdown/solver_config_sweep --mcs-headroom" +echo "Thread env: OMP=$OMP_NUM_THREADS MKL=$MKL_NUM_THREADS OPENBLAS=$OPENBLAS_NUM_THREADS NPROC=$NPROC" +echo "XLA_FLAGS: $XLA_FLAGS" +echo "PYTHONPATH: $PYTHONPATH" + +echo "=== source revisions ===" +for r in PyAutoNerves PyAutoFit PyAutoArray PyAutoGalaxy PyAutoLens; do + printf '%-14s %s\n' "$r (mirror)" "$(git -C /mnt/ral/jnightin/PyAuto/$r rev-parse HEAD 2>&1)" +done +echo "AP_ROOT rev: $(git -C $AP_ROOT rev-parse HEAD 2>&1)" +git -C /mnt/ral/jnightin/PyAuto/PyAutoArray merge-base --is-ancestor 4383ea81 HEAD \ + || { echo "FATAL: mirror PyAutoArray lacks #580 (4383ea81); HPCPullPyAuto first" >&2; exit 2; } + +cd $AP_ROOT + +echo "=== import provenance ===" +python3 - <<'PYEOF' || exit 3 +import autoarray, autofit, autogalaxy, autolens, jax, jaxlib, numpy +for m in (autoarray, autofit, autogalaxy, autolens): + print(f"{m.__name__:<11} {m.__version__:<12} {m.__file__}") + if not m.__file__.startswith("/mnt/ral/jnightin/PyAuto/"): + raise SystemExit(f"REFUSING: {m.__name__} from {m.__file__}, not the shared mirror") +from autoarray.structures.triangles import array as a +print("MAX_CONTAINING_SIZE", a.MAX_CONTAINING_SIZE, "_STEP0_CONTAINMENT", a._STEP0_CONTAINMENT) +if a.MAX_CONTAINING_SIZE != 15: + raise SystemExit(f"REFUSING: library MAX_CONTAINING_SIZE {a.MAX_CONTAINING_SIZE}, control must be 15") +print("jax", jax.__version__, "jaxlib", jaxlib.__version__, "numpy", numpy.__version__, jax.devices()) +PYEOF + +echo "==========================================" +echo "RUN ${CONFIG_NAME} -> ${RESULTS_DIR}" +date +echo "loadavg: $(cat /proc/loadavg)" +PYTHONUNBUFFERED=1 python3 scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py \ + --config-name "$CONFIG_NAME" --output-dir "$RESULTS_DIR" \ + --mcs-headroom \ + --n-draws 200 --n-stress 200 --rounds 20 --calls 20 + +echo "=== source_revisions check (JSON vs imported HEADs) ===" +python3 - "$RESULTS_DIR/solver_config_sweep_mcs_${CONFIG_NAME}.json" <<'PYEOF' +import json, subprocess, sys +path = sys.argv[1] +d = json.load(open(path)) +revs = d["source_revisions"] +def head(p): + return subprocess.check_output(["git", "-C", p, "rev-parse", "HEAD"], text=True).strip() +for r in ("PyAutoNerves", "PyAutoFit", "PyAutoArray", "PyAutoGalaxy", "PyAutoLens"): + h = head(f"/mnt/ral/jnightin/PyAuto/{r}") + if revs[r] != h: + raise SystemExit(f"MISMATCH {path}: {r} JSON {revs[r]} != {h}") +subprocess.check_call(["git", "-C", "/mnt/ral/jnightin/PyAuto/PyAutoArray", "merge-base", + "--is-ancestor", "4383ea81", revs["PyAutoArray"]]) +print("autoarray_imported_from", d.get("autoarray_imported_from")) +print("OK", path, "all_gates_pass", d.get("all_gates_pass")) +PYEOF + +echo "==========================================" +echo "loadavg: $(cat /proc/loadavg)" +echo "Finished." +date diff --git a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py index 3e1efe95c..44f0c1589 100644 --- a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py +++ b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py @@ -114,6 +114,26 @@ gradients and the ``vmap`` values (``gates["step0_route_bit_identity"]``). Output ``solver_config_sweep_step0_``. +MAX_CONTAINING_SIZE headroom (phase 4c) +--------------------------------------- + +``--mcs-headroom`` replaces the geometry sweep with the production-geometry A/B of the +cap ABOVE the library value (PyAutoArray#583): ``control`` (the library +``MAX_CONTAINING_SIZE``, 15) beside ``mcs18`` / ``mcs20`` / ``mcs24`` (``--configs`` +narrows the set), each patched for tracing through :func:`max_containing_size` and proved +from the traced ``(mcs, 2)`` shape; ``gates["patch_keeps_later_defaults"]`` re-proves the +``__defaults__`` patch binds by name (``step0_layout=None`` kept). Every row is timed, +completeness-checked, grad-checked and ``vmap``-ed at 1 / 4 / 16 and gets its own step-0 +prefix split (the containment pads to the cap). The NumPy uncapped containing counts are +taken on the prior, stress and timing-stream draws, and each row reports, for EVERY +refinement step, the max and the draws exceeding its cap. The gate is "no unexplained +change" rather than bit-identity (``gates["mcs_no_unexplained_change"]``): a draw may +differ from the control (finite positions, log L, gradient, ``vmap`` value) only when its +uncapped count exceeds the control cap (or the row's own) at some step -- the capped +trajectory is a subset of the uncapped one, so a count within the cap at every step means +the cap never bit. Every differing draw is listed with its per-step uncapped counts. +Output ``solver_config_sweep_mcs_``. + Output ------ @@ -196,6 +216,16 @@ def _profiling_root() -> Path: "at the production geometry (phase 4b, PyAutoArray#579)" ), ) +_cell_parser.add_argument( + "--mcs-headroom", + action="store_true", + help=( + "phase 4c (PyAutoArray#583): replace the geometry sweep with control (the library " + "MAX_CONTAINING_SIZE) + mcs18,mcs20,mcs24 at the production geometry; --configs " + "narrows that set. Adds the per-step uncapped counts, per-MCS draws exceeding the " + "cap and the no-unexplained-change gate" + ), +) _cell_parser.add_argument( "--quick", action="store_true", @@ -308,16 +338,35 @@ def _cfg( REFERENCE = _cfg("reference", "reference", extent=12.0, scale=0.05, precision=1.0e-4, mcs=60) REFERENCE_B = _cfg("reference_b", "reference", extent=11.0, scale=0.07, precision=1.0e-4, mcs=60) +# (d) MAX_CONTAINING_SIZE headroom (phase 4c, PyAutoArray#583): ABOVE the production cap, +# at the production geometry. Not in the default grid (selected by --mcs-headroom, or by +# name through --configs), so the phase-4a default run is unchanged. +MCS_HEADROOM_CONFIGS = [ + _cfg("mcs18", "max_containing_size_headroom", mcs=18), + _cfg("mcs20", "max_containing_size_headroom", mcs=20), + _cfg("mcs24", "max_containing_size_headroom", mcs=24), +] + if _args.list_configs: - for c in CONFIGS: + for c in CONFIGS + MCS_HEADROOM_CONFIGS: print(c) sys.exit(0) +MCS_MODE = bool(_args.mcs_headroom) +if MCS_MODE and _args.step0_route: + raise SystemExit("--mcs-headroom and --step0-route are separate A/Bs; pass one") +_POOL = ( + [c for c in CONFIGS if c["name"] == "control"] + MCS_HEADROOM_CONFIGS + if MCS_MODE + else CONFIGS + MCS_HEADROOM_CONFIGS +) if _args.configs: wanted = [c.strip() for c in _args.configs.split(",") if c.strip()] - unknown = [w for w in wanted if w not in {c["name"] for c in CONFIGS}] + unknown = [w for w in wanted if w not in {c["name"] for c in _POOL}] if unknown: raise SystemExit(f"--configs: unknown {unknown}; see --list-configs") - CONFIGS = [c for c in CONFIGS if c["name"] == "control" or c["name"] in wanted] + CONFIGS = [c for c in _POOL if c["name"] == "control" or c["name"] in wanted] +elif MCS_MODE: + CONFIGS = _POOL STEP0_ROUTES = None if _args.step0_route: if not hasattr(_triangles_array, "_STEP0_CONTAINMENT"): @@ -425,6 +474,42 @@ def max_containing_size(mcs: int): _ORIGINAL_INIT_DEFAULTS = _triangles_array.ArrayTriangles.__init__.__defaults__ +def patch_default_binding_probe(mcs: int) -> dict: + """Prove the ``__defaults__`` patch binds BY NAME: under the patch ``max_containing_size`` + reads ``mcs`` and every later default (``step0_layout=None``, PyAutoArray#579) keeps its + original value, for both patched functions (phase 4b's fix, re-verified in 4c).""" + import inspect + + out = {"mcs": int(mcs)} + ok = True + for label, fn in ( + ("__init__", _triangles_array.ArrayTriangles.__init__), + ("for_limits_and_scale", _triangles_array.ArrayTriangles.for_limits_and_scale), + ): + before = { + k: v.default + for k, v in inspect.signature(fn).parameters.items() + if v.default is not inspect.Parameter.empty + } + with max_containing_size(mcs): + during = { + k: v.default + for k, v in inspect.signature(fn).parameters.items() + if v.default is not inspect.Parameter.empty + } + expected = {**before, "max_containing_size": int(mcs)} + out[label] = {"during": {k: repr(v) for k, v in during.items()}} + ok = ok and during == expected + with max_containing_size(mcs): + tri = _triangles_array.ArrayTriangles( + indices=np.zeros((1, 3), dtype=int), vertices=np.zeros((3, 2)) + ) + out["constructed_max_containing_size"] = int(tri.max_containing_size) + out["constructed_step0_layout"] = repr(tri.step0_layout) + out["pass"] = bool(ok and tri.max_containing_size == int(mcs) and tri.step0_layout is None) + return out + + @contextlib.contextmanager def step0_containment(route): """Set the library's step-0 containment route for the duration of tracing. @@ -1138,6 +1223,15 @@ def _image_extent(pos_list): and getattr(_triangles_array, "_STEP0_CONTAINMENT", None) == LIBRARY_STEP0_DEFAULT, }, } +_probes = { + c["name"]: patch_default_binding_probe(c["max_containing_size"]) + for c in CONFIGS + if c["max_containing_size"] != PRODUCTION_MCS +} +gates["patch_keeps_later_defaults"] = { + "probes": _probes, + "pass": all(p["pass"] for p in _probes.values()), +} note( f"fiducial gate: {repr(fid)} == {FIDUCIAL_SOLVED_LOG_L!r}: {gates['fiducial_bit_exact']['pass']}" ) @@ -1145,7 +1239,7 @@ def _image_extent(pos_list): grad_gate = {} for cfg in CONFIGS: name = cfg["name"] - if not (admissibility[name] or name == "control" or STEP0_MODE): + if not (admissibility[name] or name == "control" or STEP0_MODE or MCS_MODE): continue def gfactory(cfg=cfg): @@ -1192,8 +1286,8 @@ def _fastest(names): vmap_block = None vvals = {} -if best is not None or STEP0_MODE: - vmap_names = CONFIG_NAMES if STEP0_MODE else ["control", best] +if best is not None or STEP0_MODE or MCS_MODE: + vmap_names = CONFIG_NAMES if (STEP0_MODE or MCS_MODE) else ["control", best] vroutes = [(n, b) for n in vmap_names for b in VMAP_BATCHES] vexec, vcompile, vargs = {}, {}, {} for n, b in vroutes: @@ -1392,6 +1486,9 @@ def fn(vector): geoms = {} for cfg in CONFIGS: key = (cfg["extent"], cfg["scale"], cfg.get("step0_route")) + if MCS_MODE: + # containing_indices pads to the route's MAX_CONTAINING_SIZE: time each cap. + key = key + (cfg["max_containing_size"],) geoms.setdefault(key, cfg) s0_exec = {} stages = ("source_centre", "ray_trace", "general_gather", "route_inputs", "containment") @@ -1463,17 +1560,22 @@ def fn(vector): note("uncapped containing counts (NumPy path) on the prior draws") -def containing_counts(cfg, draws): +def containing_count_matrix(cfg, draws, model=None, fit_cls=None): + """Per draw, the uncapped containing-triangle count of EVERY step (NumPy, no cap). + + The NumPy path keeps every containing triangle, so its trajectory is the untruncated + one. A capped (JAX) trajectory keeps a subset at each step, so its later sets are + subsets too: an uncapped count <= the cap at every step means the cap never bit. + """ + model = MODEL_SOLVED if model is None else model + fit_cls = al.FitPositionsImagePairAllSolved if fit_cls is None else fit_cls solver = make_solver(cfg) analysis = al.AnalysisPoint( - dataset=DATASET, - solver=solver, - fit_positions_cls=al.FitPositionsImagePairAllSolved, - use_jax=False, + dataset=DATASET, solver=solver, fit_positions_cls=fit_cls, use_jax=False ) per_draw = [] for v in draws: - fit = analysis.fit_from(instance=MODEL_SOLVED.instance_from_vector(vector=v)).positions + fit = analysis.fit_from(instance=model.instance_from_vector(vector=v)).positions shape = Point(*fit.source_plane_coordinate) counts = [] for step in solver.steps( @@ -1482,36 +1584,226 @@ def containing_counts(cfg, draws): t = np.asarray(step.filtered_triangles.triangles) counts.append(int(np.isfinite(t).all(axis=(1, 2)).sum())) per_draw.append(counts) - arr = np.asarray(per_draw) + return np.asarray(per_draw) + + +def summarise_counts(arr, cap): + """Per-step and over-steps statistics of an uncapped count matrix against ``cap``.""" worst = arr.max(axis=1) return { "n_draws": int(arr.shape[0]), + "cap": int(cap), "max_per_step": arr.max(axis=0).tolist(), "p99_per_step": np.percentile(arr, 99, axis=0).tolist(), "median_per_step": np.median(arr, axis=0).tolist(), "max_over_steps": int(arr.max()), - "draws_exceeding_cap": [int(i) for i in np.where(worst > cfg["max_containing_size"])[0]], - "n_draws_exceeding": {str(k): int((worst > k).sum()) for k in (6, 8, 10, 12, 15)}, + "draws_exceeding_cap": [int(i) for i in np.where(worst > cap)[0]], + "draws_exceeding_cap_per_step": [ + [int(i) for i in np.where(arr[:, s] > cap)[0]] for s in range(arr.shape[1]) + ], + "n_draws_exceeding_cap_per_step": [ + int((arr[:, s] > cap).sum()) for s in range(arr.shape[1]) + ], + "headroom_over_steps": int(cap) - int(arr.max()), + "n_draws_exceeding": { + str(k): int((worst > k).sum()) for k in (6, 8, 10, 12, 15, 17, 18, 20, 24) + }, "histogram_max_over_steps": { str(k): int(c) for k, c in zip(*np.unique(worst, return_counts=True)) }, } +def containing_counts(cfg, draws): + return summarise_counts(containing_count_matrix(cfg, draws), cfg["max_containing_size"]) + + uncapped_counts = {} -for name in dict.fromkeys(n for n in ("control", best, best_any_precision) if n): - cfg = next(c for c in CONFIGS if c["name"] == name) - uncapped_counts[name] = containing_counts(cfg, prior_draws) - u = uncapped_counts[name] - note( - f"uncapped {name}: max per step {u['max_per_step']}; draws exceeding cap " - f"{cfg['max_containing_size']}: {u['draws_exceeding_cap']}" - ) +count_matrices = {} +if MCS_MODE: + # Every MCS row shares the control geometry, so the uncapped trajectory is one matrix + # per sample; each MCS is summarised against its own cap. + _ctrl = next(c for c in CONFIGS if c["name"] == "control") + count_matrices["prior"] = containing_count_matrix(_ctrl, prior_draws) + count_matrices["stream"] = containing_count_matrix(_ctrl, stream) + if N_STRESS: + count_matrices["stress"] = containing_count_matrix( + _ctrl, stress_draws, model=MODEL_STRESS, fit_cls=al.FitPositionsImagePairAll + ) + for cfg in CONFIGS: + uncapped_counts[cfg["name"]] = { + s: summarise_counts(m, cfg["max_containing_size"]) for s, m in count_matrices.items() + } + for s, m in count_matrices.items(): + note( + f"uncapped {s}: max per step {m.max(axis=0).tolist()}; " + + ", ".join( + f"{c['name']} exceed/step " + f"{uncapped_counts[c['name']][s]['n_draws_exceeding_cap_per_step']}" + for c in CONFIGS + ) + ) +else: + for name in dict.fromkeys(n for n in ("control", best, best_any_precision) if n): + cfg = next(c for c in CONFIGS if c["name"] == name) + uncapped_counts[name] = containing_counts(cfg, prior_draws) + u = uncapped_counts[name] + note( + f"uncapped {name}: max per step {u['max_per_step']}; draws exceeding cap " + f"{cfg['max_containing_size']}: {u['draws_exceeding_cap']}" + ) + +# --- 8. MCS no-unexplained-change gate (phase 4c) -------------------------------- +# A row with a LARGER cap than the control may change the image set only where the +# control's cap was truncating: an uncapped count > the control cap at some step of that +# draw (or, for a cap still too small, > the row's own cap). Every other draw must be +# bit-identical to the control (finite positions, log L, gradients, vmap values). + + +def _explain(sample, i, cap): + counts = count_matrices[sample][i].tolist() + ctrl_steps = [s for s, n in enumerate(counts) if n > PRODUCTION_MCS] + own_steps = [s for s, n in enumerate(counts) if n > cap] + return { + "uncapped_counts_per_step": counts, + "control_truncated_steps": ctrl_steps, + "row_truncated_steps": own_steps, + "explained": bool(ctrl_steps or own_steps), + } + + +def _position_change(sample, i, name): + a = finite_positions(raw_positions[sample]["control"][i]) + b = finite_positions(raw_positions[sample][name][i]) + if _same(a, b): + return None + ref = raw_positions[sample]["reference"][i] + cc, cr = compare_sets(ref, a), compare_sets(ref, b) + da, db = distinct(a), distinct(b) + if da.size and db.size: + d = np.hypot(da[:, None, 0] - db[None, :, 0], da[:, None, 1] - db[None, :, 1]) + shift = float(max(d.min(axis=1).max(), d.min(axis=0).max())) + else: + shift = None + return { + "draw": int(i), + "control_raw": int(a.shape[0]), + "row_raw": int(b.shape[0]), + "control_distinct": int(da.shape[0]), + "row_distinct": int(db.shape[0]), + "reference_distinct": cc["ref_distinct"], + "control_matches_reference": cc["multiplicity_match"], + "row_matches_reference": cr["multiplicity_match"], + "control_max_err_vs_reference": max(cc["errors"]) if cc["errors"] else None, + "row_max_err_vs_reference": max(cr["errors"]) if cr["errors"] else None, + "distinct_set_hausdorff_vs_control": shift, + "image_set_changed": bool(cc["cfg_distinct"] != cr["cfg_distinct"]) + or (shift is not None and shift > DISTINCT_TOL), + } + + +mcs_change = {} +if MCS_MODE: + ctrl_stream = [values["control"][k] for k in sorted(values["control"])] + for cfg in CONFIGS: + name = cfg["name"] + if name == "control": + continue + cap = cfg["max_containing_size"] + changes = [] + for sample in [s for s in ("prior", "stress") if raw_positions[s].get(name)]: + for i in range(len(raw_positions[sample]["control"])): + ch = _position_change(sample, i, name) + logl_differs = sample == "prior" and not _same( + config_logl[name][i], config_logl["control"][i] + ) + if ch is None and not logl_differs: + continue + ch = ch or {"draw": int(i), "positions_bit_identical": True} + ch["sample"] = sample + if sample == "prior": + ch["log_l_control"] = config_logl["control"][i] + ch["log_l_row"] = config_logl[name][i] + ch.update(_explain(sample, i, cap)) + changes.append(ch) + stream_changes = [] + for k in sorted(values["control"]): + if not _same(values[name].get(k), values["control"][k]): + stream_changes.append( + { + "stream_index": int(k), + "log_l_control": values["control"][k], + "log_l_row": values[name].get(k), + **_explain("stream", k, cap), + } + ) + grad_changes = [] + if name in grad_gate: + for k in range(len(grad_gate["control"]["gradients"])): + if not _same(grad_gate[name]["gradients"][k], grad_gate["control"]["gradients"][k]): + grad_changes.append({"stream_index": int(k), **_explain("stream", k, cap)}) + vmap_changes = [] + for b in VMAP_BATCHES: + for bk, vals in (vvals.get((name, b)) or {}).items(): + cvals = (vvals.get(("control", b)) or {}).get(bk) + for j, (x, y) in enumerate(zip(vals, cvals or [])): + if not _same(x, y): + k = (bk * b + j) % len(stream) + vmap_changes.append( + { + "batch": b, + "batch_index": int(bk), + "stream_index": int(k), + **_explain("stream", k, cap), + } + ) + everything = changes + stream_changes + grad_changes + vmap_changes + unexplained = [c for c in everything if not c["explained"]] + fid_row = values[name].get(0) + mcs_change[name] = { + "max_containing_size": cap, + "fiducial_log_likelihood": fid_row, + "fiducial_repr": repr(fid_row), + "fiducial_bit_identical_to_expected": fid_row == FIDUCIAL_SOLVED_LOG_L, + "fiducial_bit_identical_to_control": fid_row == values["control"].get(0), + "fiducial_explanation": _explain("stream", 0, cap), + "stream_log_likelihood_bit_identical": [ + values[name].get(k) for k in sorted(values["control"]) + ] + == ctrl_stream, + "draw_changes": changes, + "n_image_set_changes": int(sum(bool(c.get("image_set_changed")) for c in changes)), + "stream_changes": stream_changes, + "grad_changes": grad_changes, + "vmap_changes": vmap_changes, + "n_unexplained": len(unexplained), + "unexplained": unexplained, + "pass": not unexplained, + } + note( + f"mcs gate {name}: {len(changes)} draw changes " + f"({mcs_change[name]['n_image_set_changes']} image-set), stream {len(stream_changes)}, " + f"grad {len(grad_changes)}, vmap {len(vmap_changes)}; unexplained {len(unexplained)}; " + f"fiducial {fid_row!r} bit-identical {fid_row == FIDUCIAL_SOLVED_LOG_L}" + ) + for c in changes: + note( + f" {name} {c['sample']} draw {c['draw']}: raw {c.get('control_raw')}->" + f"{c.get('row_raw')} distinct {c.get('control_distinct')}->{c.get('row_distinct')} " + f"(ref {c.get('reference_distinct')}); uncapped {c['uncapped_counts_per_step']}; " + f"explained {c['explained']}" + ) + gates["mcs_no_unexplained_change"] = mcs_change # =========================================================================== # Summary # =========================================================================== +CELL = ( + "solver_config_sweep_step0" + if STEP0_MODE + else ("solver_config_sweep_mcs" if MCS_MODE else "solver_config_sweep") +) config_name = _cli.config_name or ( "local_cpu_fp64" if jax.default_backend() == "cpu" else "unlabelled_device_fp64" ) @@ -1563,18 +1855,80 @@ def containing_counts(cfg, draws): } ) +mcs_headroom = None +if MCS_MODE: + _ctrl_compile = rows["control"]["compile"]["compile_s"] + mcs_headroom = {"control_max_containing_size": PRODUCTION_MCS, "rows": {}} + for t in table: + name = t["config"] + r = rows[name] + v16 = ((vmap_block or {}).get("rows") or {}).get(f"{name}_vmap16") or {} + u = uncapped_counts.get(name, {}) + mcs_headroom["rows"][name] = { + "mcs": t["mcs"], + "median_ms": t["median_ms"], + "control_over_row": r["speedup_vs_control"], + "row_over_control_median": 1.0 / t["speedup"] if t["speedup"] else None, + "compile_s": t["compile_s"], + "compile_ratio_vs_control": t["compile_s"] / _ctrl_compile if _ctrl_compile else None, + "temp_bytes": t["temp_bytes"], + "flops": t["flops"], + "vmap16_ms_per_likelihood": v16.get("median_ms_per_likelihood"), + "vmap16_control_over_row": v16.get("speedup_vs_control_same_batch"), + "prior_multiplicity_agreement": t["prior_multiplicity_agreement"], + "stress_multiplicity_agreement": t["stress_multiplicity_agreement"], + "prior_max_err": t["prior_max_err"], + "uncapped_max_per_step": {s: v["max_per_step"] for s, v in u.items()}, + "uncapped_max_over_steps": {s: v["max_over_steps"] for s, v in u.items()}, + "draws_exceeding_cap_per_step": { + s: v["draws_exceeding_cap_per_step"] for s, v in u.items() + }, + "n_draws_exceeding_cap": {s: len(v["draws_exceeding_cap"]) for s, v in u.items()}, + "fiducial_log_likelihood": r["fiducial_log_likelihood"], + "fiducial_bit_identical": r["fiducial_log_likelihood"] == FIDUCIAL_SOLVED_LOG_L, + "no_unexplained_change": (mcs_change.get(name) or {}).get("pass", True), + "n_image_set_changes": (mcs_change.get(name) or {}).get("n_image_set_changes", 0), + } + _umax = max( + (max(v["max_over_steps"] for v in uncapped_counts["control"].values())), + 0, + ) + mcs_headroom["uncapped_max_over_all_samples_and_steps"] = int(_umax) + mcs_headroom["decision_rule"] = ( + "smallest N >= 18 with uncapped max <= N - 3, no unexplained change, compile <= +20 %, " + "scalar median cost <= ~5 % (human picks N at the step-2 checkpoint)" + ) + mcs_headroom["rule_candidates"] = [ + n + for n, v in mcs_headroom["rows"].items() + if n != "control" + and v["mcs"] >= 18 + and _umax <= v["mcs"] - 3 + and v["no_unexplained_change"] + and (v["compile_ratio_vs_control"] or 0) <= 1.20 + and (v["row_over_control_median"] or 0) <= 1.05 + ] + all_gates_pass = bool( gates["fiducial_bit_exact"]["pass"] and gates["patch_restored"]["pass"] and all(g["pass"] for g in gates["max_containing_size_patch"].values() if g) and all(g["pass"] for g in grad_gate.values()) and all(g["pass"] for g in gates.get("step0_route_bit_identity", {}).values()) + and all(g["pass"] for g in gates.get("mcs_no_unexplained_change", {}).values()) + and gates["patch_keeps_later_defaults"]["pass"] ) summary = { - "cell": "solver_config_sweep_step0" if STEP0_MODE else "solver_config_sweep", - "issue": "PyAutoLabs/PyAutoArray#579" if STEP0_MODE else "PyAutoLabs/autolens_profiling#314", - "phase": "4b" if STEP0_MODE else "4a", + "cell": CELL, + "issue": ( + "PyAutoLabs/PyAutoArray#579" + if STEP0_MODE + else ("PyAutoLabs/PyAutoArray#583" if MCS_MODE else "PyAutoLabs/autolens_profiling#314") + ), + "phase": "4b" if STEP0_MODE else ("4c" if MCS_MODE else "4a"), + "mcs_headroom_mode": MCS_MODE, + "production_max_containing_size": PRODUCTION_MCS, "step0_routes": STEP0_ROUTES, "library_step0_default": LIBRARY_STEP0_DEFAULT, "config_name": config_name, @@ -1659,6 +2013,7 @@ def containing_counts(cfg, draws): "vmap": vmap_block, "step0_split": step0_split, "uncapped_containing_counts": uncapped_counts, + "mcs_headroom": mcs_headroom, "gates": gates, "all_gates_pass": all_gates_pass, "completeness_compile": { @@ -1671,10 +2026,8 @@ def containing_counts(cfg, draws): dict_path, chart_path = resolve_output_paths( _cli, default_dir=_ROOT / "results" / "breakdown" / "point_source_image", - default_basename="solver_config_sweep_step0_local" - if STEP0_MODE - else "solver_config_sweep_local", - cell="solver_config_sweep_step0" if STEP0_MODE else "solver_config_sweep", + default_basename=f"{CELL}_local", + cell=CELL, ) dict_path.write_text(json.dumps(_scrub(summary), indent=2, default=str)) @@ -1749,6 +2102,30 @@ def f(x, fmt): print(f" best admissible (precision-equivalent): {best}; any precision: {best_any_precision}") print(f" reference image extent: {reference_image_extent}") print(f" fiducial gate: {gates['fiducial_bit_exact']}") +if mcs_headroom: + print("-" * 150) + print( + f" {'config':<7} {'mcs':>3} {'med_ms':>7} {'row/ctrl':>8} {'ctrl/row [90% CI]':>22} " + f"{'compile':>7} {'temp_B':>10} {'flops':>10} {'v16ms/L':>8} {'mult':>5} {'s_mult':>6} " + f"{'img-chg':>7} {'ok':>3} uncapped max/step (prior) | exceed/step (prior; stress)" + ) + for n, v in mcs_headroom["rows"].items(): + c = v["control_over_row"] + print( + f" {n:<7} {v['mcs']:3d} {v['median_ms']:7.3f} {v['row_over_control_median']:8.4f} " + f"{c['ratio']:6.4f} [{c['ci90_low']:.4f}, {c['ci90_high']:.4f}] " + f"{v['compile_s']:7.2f} {str(v['temp_bytes']):>10} {str(v['flops']):>10} " + f"{(v['vmap16_ms_per_likelihood'] or float('nan')):8.4f} " + f"{v['prior_multiplicity_agreement']:5.3f} {(v['stress_multiplicity_agreement'] or float('nan')):6.3f} " + f"{v['n_image_set_changes']:7d} {str(v['no_unexplained_change'])[0]:>3} " + f"{v['uncapped_max_per_step'].get('prior')} | " + f"{[len(x) for x in v['draws_exceeding_cap_per_step'].get('prior', [])]}; " + f"{[len(x) for x in v['draws_exceeding_cap_per_step'].get('stress', [])]}" + ) + print( + f" uncapped max over all samples and steps: {mcs_headroom['uncapped_max_over_all_samples_and_steps']}" + ) + print(f" rule candidates: {mcs_headroom['rule_candidates']}") print(f" all_gates_pass: {all_gates_pass}") print(f" wall: {summary['wall_s']:.0f} s") print(f" Results JSON: {dict_path}") From d5a971e41f0d9ce95c138f47f249f1890851908e Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 18:26:51 +0100 Subject: [PATCH 2/9] perf(point_source_image): classify ulp-level gradient rounding in the MCS gate The first laptop witness flagged one stream gradient differing from the control by 3e-15 relative at all three caps, with log L bit-identical: the backward pass accumulates over the padded (MCS, ...) axis, so the padded length changes XLA's reduction order. Such changes are now listed with max_rel_delta_vs_control and an explicit explanation instead of failing the gate. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- .../solver_config_sweep.py | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py index 44f0c1589..4d88e7453 100644 --- a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py +++ b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py @@ -132,6 +132,10 @@ uncapped count exceeds the control cap (or the row's own) at some step -- the capped trajectory is a subset of the uncapped one, so a count within the cap at every step means the cap never bit. Every differing draw is listed with its per-step uncapped counts. +One further class is explained explicitly: a gradient within ``GRAD_ROUNDING_RTOL`` +(1e-12 relative) of the control's while the log L is bit-identical -- the backward pass +accumulates over the padded ``(mcs, ...)`` axis, so a different padded length changes +XLA's reduction order (the first laptop witness saw 3e-15 on one stream instance). Output ``solver_config_sweep_mcs_``. Output @@ -268,6 +272,9 @@ def _profiling_root() -> Path: PRODUCTION_MCS = int(_triangles_array.MAX_CONTAINING_SIZE) ADMISSIBLE_POSITION_TOL = 0.002 DISTINCT_TOL = 0.005 +# A gradient that differs from the control by <= this relative amount, with the log L +# bit-identical, is floating-point reduction order (phase 4c), not a solver change. +GRAD_ROUNDING_RTOL = 1.0e-12 BOOTSTRAP_SAMPLES = 2000 BOOTSTRAP_SEED = 12345 GRID_SHAPE = (100, 100) @@ -1740,8 +1747,23 @@ def _position_change(sample, i, name): grad_changes = [] if name in grad_gate: for k in range(len(grad_gate["control"]["gradients"])): - if not _same(grad_gate[name]["gradients"][k], grad_gate["control"]["gradients"][k]): - grad_changes.append({"stream_index": int(k), **_explain("stream", k, cap)}) + ga = np.asarray(grad_gate[name]["gradients"][k], dtype=float) + gc = np.asarray(grad_gate["control"]["gradients"][k], dtype=float) + if not _same(ga, gc): + ex = _explain("stream", k, cap) + rel = float(np.max(np.abs(ga - gc) / np.maximum(np.abs(gc), 1e-300))) + ex["max_rel_delta_vs_control"] = rel + if ( + not ex["explained"] + and rel <= GRAD_ROUNDING_RTOL + and _same(values[name].get(k), values["control"].get(k)) + ): + # log L bit-identical, gradient off by a few ulp: the backward + # pass accumulates cotangents over the padded (MCS, ...) axis, + # and a different padded length changes XLA's reduction order. + ex["explained"] = True + ex["explanation"] = "padded-length reduction rounding (log L bit-identical)" + grad_changes.append({"stream_index": int(k), **ex}) vmap_changes = [] for b in VMAP_BATCHES: for bk, vals in (vvals.get((name, b)) or {}).items(): From d6757ad0513196470329ae46c482ca308f0ff73d Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 18:28:17 +0100 Subject: [PATCH 3/9] perf(point_source_image): record per-MCS-row max gradient rel delta; scope the rounding allowance The GRAD_ROUNDING_RTOL allowance applies only to MCS rows (padded (mcs, 2) shape change reorders the backward sum) and only with log L bit-identical; step-0 route rows and the control stay strictly bit-identical. A log L difference is only ever an explained (truncation) change, never a tolerance. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- .../likelihood_breakdown/solver_config_sweep.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py index 4d88e7453..61a9359f9 100644 --- a/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py +++ b/scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py @@ -1797,6 +1797,14 @@ def _position_change(sample, i, name): "n_image_set_changes": int(sum(bool(c.get("image_set_changed")) for c in changes)), "stream_changes": stream_changes, "grad_changes": grad_changes, + # Observed max relative gradient difference vs the control over the grad + # instances. The GRAD_ROUNDING_RTOL allowance applies ONLY here (MCS rows, + # whose padded (mcs, 2) shape reorders the backward sum) and only with log L + # bit-identical; step-0 route rows and the control stay strictly bit-identical. + "grad_max_rel_delta_vs_control": (grad_gate.get(name) or {}).get( + "max_rel_delta_vs_control" + ), + "grad_rounding_rtol": GRAD_ROUNDING_RTOL, "vmap_changes": vmap_changes, "n_unexplained": len(unexplained), "unexplained": unexplained, @@ -1910,6 +1918,9 @@ def _position_change(sample, i, name): "fiducial_bit_identical": r["fiducial_log_likelihood"] == FIDUCIAL_SOLVED_LOG_L, "no_unexplained_change": (mcs_change.get(name) or {}).get("pass", True), "n_image_set_changes": (mcs_change.get(name) or {}).get("n_image_set_changes", 0), + "grad_max_rel_delta_vs_control": (grad_gate.get(name) or {}).get( + "max_rel_delta_vs_control" + ), } _umax = max( (max(v["max_over_steps"] for v in uncapped_counts["control"].values())), From 90afbebef93f5bf919b9a6ba4044b74f4adc4f31 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 18:39:13 +0100 Subject: [PATCH 4/9] results(point_source_image): MCS headroom laptop witness (phase 4c, not quotable) control (MCS 15) vs 18/20/24, 200 prior + 200 stress draws, 20 x 20: all_gates_pass true; fiducial 7.743201200876812 bit-identical at every cap; no image-set change on any draw. Uncapped prior max per step [17, 13, 11, 9, 7, 5, 5, 5]; only prior draw 12 exceeds 15 (step 0, 17), and its positions and log L are bit-identical at every cap. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- ...lver_config_sweep_mcs_laptop_cpu_fp64.json | 6072 +++++++++++++++++ ...olver_config_sweep_mcs_laptop_cpu_fp64.png | Bin 0 -> 94881 bytes 2 files changed, 6072 insertions(+) create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.json create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.png diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.json b/results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.json new file mode 100644 index 000000000..6761242e6 --- /dev/null +++ b/results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.json @@ -0,0 +1,6072 @@ +{ + "cell": "solver_config_sweep_mcs", + "issue": "PyAutoLabs/PyAutoArray#583", + "phase": "4c", + "mcs_headroom_mode": true, + "production_max_containing_size": 15, + "step0_routes": null, + "library_step0_default": "structured", + "config_name": "laptop_cpu_fp64", + "quotable": false, + "host_note": "laptop witness: WSL2, interactive load, NOT quotable", + "quick": false, + "library_versions": { + "autolens": "2026.8.17.1", + "autoarray": "2026.8.17.1", + "autofit": "2026.8.17.1" + }, + "package_versions": { + "jax": "0.10.2", + "jaxlib": "0.10.2" + }, + "source_revisions": { + "autolens_profiling": "d6757ad0513196470329ae46c482ca308f0ff73d", + "PyAutoNerves": "bf104102312852537159b7fad2f998ab6677b4e4", + "PyAutoFit": "c156a9d8e8eb9f82b6da169b1d50b7e64580fe98", + "PyAutoArray": "e281abf3257e9efd4915f1daa9acc0498be250a5", + "PyAutoGalaxy": "ba8a08fabcb13d9472f2bd43ef4fea6039284d50", + "PyAutoLens": "dcbd4b711120641cc0ecc6490d868795ad717b07" + }, + "autoarray_imported_from": "~/Code/PyAutoLabs-wt/pointsolver-mcs-headroom/PyAutoArray", + "autolens_imported_from": "~/Code/PyAutoLabs-wt/pointsolver-mcs-headroom/PyAutoLens", + "device": { + "backend": "cpu", + "device": "cpu:0", + "hostname": "DESKTOP-H143S82", + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "omp_num_threads": "8", + "cpu_count": 8, + "jax_compilation_cache_dir": null, + "autotune_cache_entries_at_start": 0, + "cache_fresh": false + }, + "jax_devices": [ + "cpu:0" + ], + "machine": { + "cpu_model": "Intel(R) Core(TM) i9-10885H CPU @ 2.40GHz", + "cpu_count_os": 8, + "nproc": 8, + "nproc_all": 8, + "nproc_note": "GNU nproc honours OMP_NUM_THREADS, so `nproc` can print 1 on a multi-core host; `nproc_all` is the core count.", + "ram_total": "16392692 kB", + "kernel": "5.10.16.3-microsoft-standard-WSL2", + "platform": "Linux-5.10.16.3-microsoft-standard-WSL2-x86_64-with-glibc2.35", + "python": "3.12.10", + "jax_thread_env": { + "NPROC": "8" + }, + "blas_thread_env": { + "OMP_NUM_THREADS": "8", + "OPENBLAS_NUM_THREADS": "8", + "MKL_NUM_THREADS": "8", + "VECLIB_MAXIMUM_THREADS": "1", + "NUMEXPR_NUM_THREADS": "1" + }, + "thread_env_note": "NPROC sizes XLA's CPU intra-op pool (the JAX rows); the BLAS knobs pin OpenBLAS/MKL/OpenMP (the numpy/scipy rows) and do not touch JAX. Two disjoint families; both are recorded on every CPU timing.", + "gpu": "NVIDIA GeForce RTX 2060 with Max-Q Design, 6144 MiB, 580.97" + }, + "thread_environment": { + "NPROC": "8", + "OMP_NUM_THREADS": "8", + "OPENBLAS_NUM_THREADS": "8", + "MKL_NUM_THREADS": "8" + }, + "sched_affinity": 8, + "os_cpu_count": 8, + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "jax_platforms": "cpu", + "jax_enable_x64": true, + "loadavg_start": [ + 2.83056640625, + 3.47900390625, + 3.16748046875 + ], + "loadavg_end": [ + 3.08349609375, + 3.67919921875, + 3.54296875 + ], + "protocol": { + "n_rounds": 20, + "n_calls_per_round": 20, + "n_warm": 3, + "n_stream": 16, + "seed": 314, + "n_prior_draws": 200, + "n_stress_draws": 200, + "step0_rounds": 10, + "vmap_batches": [ + 1, + 4, + 16 + ], + "route_order": "round-robin over every config, start rotated each round", + "cache_trap_guard": "fresh closure + fresh solver/analysis per route; jax.clear_caches()", + "bootstrap": { + "samples": 2000, + "seed": 12345, + "interval": "90%" + }, + "admissible": "100% distinct-multiplicity agreement with the reference on the prior draws AND max position error <= 0.002\"", + "admissible_position_tol": 0.002, + "position_noise_sigma": 0.05, + "distinct_tol": 0.005, + "prior_draws": "full prior: vector_from_unit_vector(U(1e-4, 1-1e-4)); source = solved beta*", + "stress_draws": "OUTSIDE the prior: Isothermal centre U(-0.05,0.05), theta_E U(1,2), ell_comps U(-0.2,0.2), source centre U(-0.4,0.4); plain FitPositionsImagePairAll positions", + "reference": { + "name": "reference", + "block": "reference", + "extent": 12.0, + "scale": 0.05, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "reference_b": { + "name": "reference_b", + "block": "reference", + "extent": 11.0, + "scale": 0.07, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "max_containing_size_patch": "ArrayTriangles.__init__ / for_limits_and_scale __defaults__ + module constant, tracing only, restored by value", + "pytrees": "autofit.jax.register_model(model) for both models before any trace" + }, + "configs": [ + { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs18", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs24", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": null + } + ], + "static": { + "control": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs18": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs20": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs24": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference": { + "extent_half_width": [ + 12.0, + 12.0 + ], + "limits": [ + -12.0, + 12.0, + -12.0, + 12.0 + ], + "scale": 0.05, + "pixel_scale_precision": 0.0001, + "n_steps": 9, + "n_steps_formula": "ceil(log2(0.05 / 0.0001))", + "last_step_triangle_side": 0.0001953125, + "step0_triangles": 535277, + "step0_rows": 268677, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference_b": { + "extent_half_width": [ + 11.0, + 11.0 + ], + "limits": [ + -11.0, + 11.0, + -11.0, + 11.0 + ], + "scale": 0.07, + "pixel_scale_precision": 0.0001, + "n_steps": 10, + "n_steps_formula": "ceil(log2(0.07 / 0.0001))", + "last_step_triangle_side": 0.00013671875, + "step0_triangles": 229585, + "step0_rows": 115473, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + } + }, + "reference_floor": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00015786921423151782, + "p99_position_error": 0.0001280749711777913, + "median_position_error": 5.9668954361473236e-05, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.09204751533968647, + "p99": 0.06845503627316121, + "median": 0.004628222675307825, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00015786921423129578, + "p99_position_error": 0.00014084184669768283, + "median_position_error": 5.966895436132821e-05, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "reference_max_finite_positions": { + "prior": 4, + "stress": 4 + }, + "reference_compile": { + "reference_prior": { + "lower_s": 12.346226900001056, + "compile_s": 12.829270300000644, + "first_call_s": 0.024761399999988498, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 48502648.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 17361496, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 433754112, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_stress": { + "lower_s": 1.991337499999645, + "compile_s": 2.91427079999994, + "first_call_s": 0.024987500000861473, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 47671892.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 17361048, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7901184, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_prior": { + "lower_s": 8.114930900002946, + "compile_s": 14.679701699998986, + "first_call_s": 0.015504300001339288, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 23082492.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 7566936, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 57135104, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_stress": { + "lower_s": 2.5168059000025096, + "compile_s": 3.5594302999998035, + "first_call_s": 0.01352960000076564, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 22251710.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 7566488, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 811008, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + } + }, + "default_vs_reference": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + }, + "agrees_on_every_prior_draw": true, + "agrees_on_every_stress_draw": true, + "stress_mismatch_examples": [] + }, + "admissibility": { + "control": true, + "mcs18": true, + "mcs20": true, + "mcs24": true + }, + "precision_equivalent": { + "control": true, + "mcs18": true, + "mcs20": true, + "mcs24": true + }, + "reference_image_extent": { + "prior": { + "max_abs_y": 1.77939453125, + "max_abs_x": 1.7773254429359933, + "max_abs_coord": 1.77939453125, + "p99_abs_coord": 1.7590830914129167, + "max_radius": 1.8116226317743076 + }, + "stress": { + "max_abs_y": 2.2498046875, + "max_abs_x": 2.300267215077964, + "max_abs_coord": 2.300267215077964, + "p99_abs_coord": 2.2027852305644777, + "max_radius": 2.5191249773380773 + } + }, + "extent_working": "prior: theta_E <= 1.6 + 4*0.05 = 1.8; |e| <= 0.0526 + 4*0.01 ~ 0.09 -> q ~ 0.83; SIE images lie within ~theta_E/sqrt(q) + |beta| ~ 1.98 + 0.1 ~ 2.1 arcsec of the centre, so boxes of +-6 / +-4 / +-3 / +-2.5 bracket it; reference_image_extent is the measured value", + "best_admissible": "mcs18", + "best_admissible_any_precision": "mcs18", + "table": [ + { + "config": "control", + "block": "control", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 15, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 2.1513500014407327, + "speedup": 1.0, + "speedup_ci90": [ + 0.9792813009410695, + 1.020824725604644 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 6.102138500002184, + "flops": 2801341.0, + "temp_bytes": 901656 + }, + { + "config": "mcs18", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 18, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 2.2298500007309485, + "speedup": 0.9647958386149367, + "speedup_ci90": [ + 0.9382644623531707, + 0.9858998839644482 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 7.218237199998839, + "flops": 2933102.0, + "temp_bytes": 904024 + }, + { + "config": "mcs20", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 20, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 2.2690500009048264, + "speedup": 0.9481280714760986, + "speedup_ci90": [ + 0.9228438819167644, + 0.9672158182516366 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 8.317399899999145, + "flops": 3017410.0, + "temp_bytes": 905240 + }, + { + "config": "mcs24", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 24, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 2.392300000792602, + "speedup": 0.8992810269313886, + "speedup_ci90": [ + 0.878696659875835, + 0.918558430150147 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 6.733799100002216, + "flops": 3195236.0, + "temp_bytes": 907736 + } + ], + "rows": { + "control": { + "config": { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 2.1513500014407327, + "p10_ms": 1.8285300000570714, + "p90_ms": 4.049530001429958, + "min_ms": 1.6002000011212658, + "max_ms": 13.159000001905952, + "mean_ms": 2.715547499983586 + }, + "speedup_vs_control": { + "ratio": 1.0, + "ci90_low": 0.9792813009410695, + "ci90_high": 1.020824725604644, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 1.0, + "p10": 1.0, + "p90": 1.0 + }, + "compile": { + "lower_s": 5.009423600000446, + "compile_s": 6.102138500002184, + "first_call_s": 0.003063699998165248, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [] + ], + "flops": 2801341.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 901656, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2703360, + "max_containing_size_proof": null + }, + "warm_ms": [ + 3.7468000009539537, + 2.0291000000725035, + 1.8127999974240083 + ], + "per_call_ms": [ + 2.623799999128096, + 1.758700000209501, + 1.7027000030793715, + 1.6902000024856534, + 1.7613000018172897, + 1.6335000000253785, + 1.970400000573136, + 1.7581000029167626, + 1.7695000024104957, + 1.7740000002959277, + 1.6775000003690366, + 1.6527999978279695, + 1.6491999995196238, + 1.7857999991974793, + 1.6002000011212658, + 1.7909000016516075, + 1.8016999965766445, + 1.7637999990256503, + 1.6273000001092441, + 1.8219000012322795, + 1.881100000900915, + 2.5284999974246603, + 1.670199999352917, + 1.965899999049725, + 2.163100001780549, + 1.9683999998960644, + 1.906600002257619, + 1.9988999993074685, + 1.7946000007214025, + 1.7668000000412576, + 1.8939000001410022, + 2.002500001253793, + 1.88700000217068, + 1.8132000004698057, + 2.0254000010027084, + 1.9109999993816018, + 1.819099998101592, + 1.8161000007239636, + 1.7671999994490761, + 1.8496999982744455, + 1.854900001490023, + 1.901199997519143, + 1.8103000002156477, + 1.7842999986896757, + 1.8697999985306524, + 1.8005999991146382, + 1.8806999978551175, + 1.8697000014071818, + 1.8124999987776391, + 1.7685999991954304, + 2.113300000928575, + 1.714199999696575, + 1.756300000124611, + 2.5002000002132263, + 1.8393999998806976, + 1.9183000003977213, + 1.8302999997104052, + 1.8944000003102701, + 1.7684000013105106, + 1.8624000003910623, + 1.8315000015718397, + 1.986600000236649, + 1.8464000022504479, + 2.2546000000147615, + 1.7918000012286939, + 1.828899999964051, + 1.8207000030088238, + 1.945300002262229, + 1.8511000016587786, + 1.8922000017482787, + 1.8734999976004474, + 2.7028999975300394, + 1.8840000011550728, + 1.8202999999630265, + 1.8445000023348257, + 2.2422000001824927, + 2.212600000348175, + 1.8396000014035963, + 1.8218000004708301, + 1.78089999826625, + 3.202899999450892, + 2.9576000015367754, + 3.0459000008704606, + 6.872400001157075, + 5.2080999994359445, + 2.046699999482371, + 3.3926999967661686, + 3.1427000030817, + 3.0784000009589363, + 2.071899998554727, + 1.993999998376239, + 2.907099998992635, + 2.4723999995330814, + 3.0468999975710176, + 3.2008999987738207, + 3.097200002230238, + 2.1324000008462463, + 2.8525999987323303, + 2.328200000192737, + 3.0637999989266973, + 3.8238000015553553, + 5.0645000010263175, + 3.6331000010250136, + 3.512600000249222, + 4.121600002690684, + 2.54779999886523, + 3.811499998846557, + 2.5539999987813644, + 3.565600000001723, + 3.775699999096105, + 2.5836999993771315, + 2.798499997879844, + 2.3350999981630594, + 2.3159000011219177, + 2.561599998443853, + 2.4060000032477546, + 2.8334000016911887, + 2.3870999975770246, + 2.274099999340251, + 2.2439999993366655, + 2.128600001015002, + 2.133599999069702, + 2.371300000959309, + 2.15329999991809, + 2.3478999974031467, + 2.588100000139093, + 2.62759999895934, + 2.727200000663288, + 2.2159000000101514, + 2.122199999575969, + 2.0930000027874485, + 2.127300002030097, + 2.6848999987123534, + 2.2855999995954335, + 3.006999999342952, + 2.1549999983108137, + 2.0810999994864687, + 2.205199998570606, + 2.2189000010257587, + 2.22129999747267, + 2.270100001624087, + 2.2379000001819804, + 2.367100001720246, + 2.2847999971418176, + 3.0900999990990385, + 2.9558000023826025, + 2.0994000005885027, + 2.1516000015253667, + 2.427699997497257, + 2.0237999997334555, + 2.0158999977866188, + 2.198799997131573, + 2.0331000014266465, + 2.0791999995708466, + 2.019200001086574, + 2.026300000579795, + 2.1388000022852793, + 2.6287000000593252, + 2.878999999666121, + 2.9345000002649613, + 2.379999998083804, + 2.0674999977927655, + 2.04459999804385, + 2.0022999997308943, + 2.958000000944594, + 2.400499997747829, + 3.111899997747969, + 2.122800000506686, + 2.013100001931889, + 2.0232999995641876, + 2.0675000014307443, + 2.047800000582356, + 2.3772999993525445, + 1.9958000011683907, + 2.091199999995297, + 2.0304999998188578, + 1.978899999812711, + 2.394099999946775, + 2.023900000494905, + 2.0129000004089903, + 1.9802999995590653, + 2.1035999998275656, + 1.9847999974444974, + 1.995599999645492, + 2.6495000020076986, + 2.0578000003297348, + 2.646200002345722, + 2.2308000006887596, + 2.0722999979625456, + 2.5553999985277187, + 1.8184000000474043, + 2.1866999995836522, + 1.9147000020893756, + 2.07849999787868, + 1.9097000003966969, + 1.825200000894256, + 1.981499997782521, + 2.6221000007353723, + 2.870100001018727, + 1.9967999978689477, + 2.347999998164596, + 1.984999998967396, + 2.62779999684426, + 1.8913999992946628, + 1.995599999645492, + 2.45349999750033, + 1.9117000010737684, + 2.036599998973543, + 1.9366000014997553, + 1.9616999998106621, + 2.439200001390418, + 1.9111000001430511, + 2.1028000010119285, + 1.9998999996460043, + 1.9302000000607222, + 1.981800000066869, + 1.8906000004790258, + 1.961099998879945, + 1.9011000003956724, + 2.0042000032844953, + 4.0687000000616536, + 3.5396000021137297, + 2.8945000012754463, + 3.737400002137292, + 10.399999999208376, + 3.892599997925572, + 4.305400001612725, + 4.491700001381105, + 4.2954999989888165, + 4.311000000598142, + 6.111899998359149, + 5.060200001025805, + 4.259099998307647, + 4.955200001859339, + 4.217499998048879, + 5.2187000001140404, + 3.219300000637304, + 3.1808000021555927, + 3.6624999993364327, + 3.8195999986783136, + 7.558299999800511, + 3.7688000011257827, + 5.6863999998313375, + 6.911599997692974, + 7.600699998874916, + 7.724799997959053, + 5.021799999667564, + 5.879800002730917, + 6.3861999988148455, + 5.939300001045922, + 4.944399999658344, + 6.2409999991359655, + 6.4468999989912845, + 11.69849999860162, + 8.23600000148872, + 9.402300001966069, + 11.284100000921171, + 6.936300000234041, + 9.116399996855762, + 7.080100000166567, + 7.014400001935428, + 13.159000001905952, + 4.047400001581991, + 3.7308999999368098, + 3.334299999551149, + 3.7915000029897783, + 3.6817999971390236, + 3.1486000007134862, + 3.5260000004200265, + 3.5059000001638196, + 3.3932000005734153, + 4.2338000021118205, + 4.0791999999783, + 3.5451000003376976, + 2.581200002168771, + 10.8007999988331, + 2.9952000004414003, + 2.4158999985957053, + 2.757899997959612, + 3.760400002647657, + 2.173400000174297, + 2.3143000034906436, + 3.1851999992795754, + 2.2160000007716008, + 2.748399998381501, + 2.214199997979449, + 2.3833999985072296, + 2.042500000243308, + 2.1677000004274305, + 3.0651999986730516, + 2.5439999990339857, + 2.1774999986519106, + 2.0791999995708466, + 2.118600001267623, + 2.1310999982233625, + 3.1137000005401205, + 2.145499998732703, + 2.33979999757139, + 2.1827999989909586, + 2.0671999991463963, + 1.9791000013356097, + 2.438600000459701, + 1.9594000004872214, + 2.045400000497466, + 2.2076999994169455, + 2.3665000007895287, + 2.099699999234872, + 2.086500000586966, + 2.0041999996465165, + 2.4339999981748406, + 2.009299998462666, + 2.529299999878276, + 2.051699997537071, + 2.013299999816809, + 2.852100002201041, + 2.9577999994216952, + 2.1864999980607536, + 2.1636999990732875, + 1.9924999978684355, + 1.9912999996449798, + 2.090399997541681, + 2.2181000022101216, + 2.3010000004433095, + 3.2874999997147825, + 2.2066999990784097, + 2.0876999988104217, + 1.9974000024376437, + 2.0103000024391804, + 2.0068000012543052, + 2.969599998323247, + 2.129399999830639, + 2.1070000002509914, + 2.1087999994051643, + 2.1487000012712087, + 2.0396999971126206, + 2.1741000018664636, + 2.1366999972087797, + 2.1043999986432027, + 2.0418000021891203, + 2.752100001089275, + 2.593100001831772, + 2.084599997033365, + 2.169700001104502, + 2.0389000019349623, + 1.9825000017590355, + 2.0160999993095174, + 2.18719999975292, + 2.5045000002137385, + 2.141900000424357, + 2.750499999820022, + 2.1668999979738146, + 2.151100001356099, + 2.080099999147933, + 2.106899999489542, + 2.28649999917252, + 2.238599998236168, + 2.22829999984242, + 2.0847999985562637, + 2.0557999996526632, + 2.1591999975498766, + 2.007999999477761, + 2.3010000004433095, + 2.426999999443069, + 2.137900002708193, + 2.0591000029526185, + 2.233499999420019, + 2.428100000543054, + 2.171000000089407, + 1.9753000015043654, + 2.102099999319762, + 1.9745999998121988, + 2.038499998889165, + 2.1696000003430527, + 2.170699997805059, + 2.1525999982259236, + 1.986600000236649, + 2.140000000508735, + 2.498300000297604, + 4.006999999546679, + 2.76780000058352, + 2.0022999997308943, + 2.016500002355315, + 1.9210000027669594, + 1.9322999978612643, + 1.955799998540897, + 2.0029000006616116, + 2.425599999696715, + 2.4594999995315447, + 2.0307000013417564, + 2.0206000008329283, + 1.9241000009060372, + 2.040899998974055, + 1.9415000024309848, + 2.141600001777988, + 2.041899999312591, + 1.9658000019262545, + 1.9947999971918762, + 1.9214999992982484, + 1.9151999986206647, + 1.9060000013269018 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs18": { + "config": { + "name": "mcs18", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 2.2298500007309485, + "p10_ms": 1.9577399991248967, + "p90_ms": 6.363170000258836, + "min_ms": 1.7606000001251232, + "max_ms": 16.719500003091525, + "mean_ms": 3.173188000037044 + }, + "speedup_vs_control": { + "ratio": 0.9647958386149367, + "ci90_low": 0.9382644623531707, + "ci90_high": 0.9858998839644482, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9455605532282982, + "p10": 0.8194738965342794, + "p90": 1.0412337479426526 + }, + "compile": { + "lower_s": 4.294247300000279, + "compile_s": 7.218237199998839, + "first_call_s": 0.0033039000009011943, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [] + ], + "flops": 2933102.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 904024, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 3514368, + "max_containing_size_proof": null + }, + "warm_ms": [ + 2.2556999974767677, + 2.200700000685174, + 1.872900000307709 + ], + "per_call_ms": [ + 1.8801000005623791, + 1.827600000979146, + 1.850399999966612, + 2.539900000556372, + 1.9114999995508697, + 2.2140000000945292, + 1.8230000023322646, + 1.7924999992828816, + 1.844300000811927, + 1.8928999998024665, + 2.565299997513648, + 1.9632000003184658, + 2.0304999998188578, + 2.0265000021026935, + 1.9677999989653472, + 1.9148999999742955, + 1.811699999962002, + 1.8903000018326566, + 1.9577999992179684, + 1.9584999972721562, + 1.909000002342509, + 2.1371999973780476, + 1.9294000012450852, + 2.5979999991250224, + 2.0270000022719614, + 1.9170999985362869, + 1.879300001746742, + 2.0034000008308794, + 2.041399999143323, + 2.0422999987204093, + 1.8871000029321294, + 2.368199999182252, + 1.9453999993856996, + 1.8057000015687663, + 2.1711000008508563, + 1.8810000001394656, + 1.8744000008155126, + 1.838699998188531, + 2.004400001169415, + 1.9673999995575286, + 1.9277999999758322, + 2.272699999593897, + 2.324700002645841, + 1.8850000014936086, + 1.8772999974316917, + 1.772199997503776, + 1.857499999459833, + 1.7606000001251232, + 1.797099997929763, + 2.013700002862606, + 2.5514000008115545, + 1.8130999997083563, + 2.566299997852184, + 1.9252000020060223, + 1.8479000027582515, + 2.542199999879813, + 2.2933000000193715, + 2.1006999995734077, + 2.197499998146668, + 2.3366999994323123, + 1.9653999988804571, + 1.9928000001527835, + 2.3437000018020626, + 2.1717000017815735, + 2.0819000019400846, + 2.0317999988037627, + 2.2137999985716306, + 1.9192999970982783, + 2.0222000021021813, + 2.766199999314267, + 2.14849999974831, + 2.162199998565484, + 1.9853999983752146, + 1.9085000021732412, + 1.835499999288004, + 2.450600000884151, + 1.8707999988691881, + 1.9963999984611291, + 1.8768000009004027, + 1.976300001842901, + 3.134200000204146, + 2.7648000032058917, + 6.217100002686493, + 2.814600000419887, + 2.3414999996020924, + 2.235899999504909, + 2.228500001365319, + 2.121200002875412, + 3.002299999934621, + 2.1735000009357464, + 3.341700001328718, + 2.866099999664584, + 2.556299998104805, + 8.07150000036927, + 3.89069999800995, + 2.785999997286126, + 2.378000001044711, + 3.2550999967497773, + 2.15829999797279, + 2.2860999997647014, + 2.2343999989971053, + 2.1378000019467436, + 2.298700001119869, + 13.110299998515984, + 3.653400002804119, + 2.9900000008638017, + 2.9510000022128224, + 3.0595999996876344, + 3.485299999738345, + 3.531700000166893, + 3.4271000004082453, + 2.7979000005871058, + 7.98429999849759, + 12.291700000787387, + 4.088899997441331, + 4.038800001580967, + 3.945299999031704, + 4.40589999925578, + 7.135799998650327, + 4.346900001110043, + 2.308799997990718, + 2.1900000028836075, + 2.128600001015002, + 2.1273999991535675, + 2.090999998472398, + 2.1956000018690247, + 2.3021000015432946, + 2.392300000792602, + 2.360999998927582, + 2.2186000023793895, + 2.4110000013024546, + 3.4482999981264584, + 3.3456000019214116, + 2.4415999978373293, + 3.763000000617467, + 2.770400002191309, + 3.2973000015772413, + 3.698900000017602, + 2.322299998922972, + 2.276399998663692, + 2.1582000008493196, + 2.183699998568045, + 2.30109999756678, + 2.1716999981435947, + 2.101799997035414, + 2.0571999993990175, + 2.1030999996582977, + 2.053399999567773, + 2.0153000004938804, + 2.9758999990008306, + 2.330300001631258, + 2.1304000001691747, + 2.132599998731166, + 2.080200003547361, + 2.0770999981323257, + 2.0598000010068063, + 2.049400001851609, + 2.500099999451777, + 2.1420000011858065, + 2.072200000839075, + 2.2323000011965632, + 2.2030000000086147, + 2.244700001028832, + 2.118500000506174, + 1.9900000006600749, + 1.9819999979517888, + 2.076200002193218, + 2.0542999991448596, + 2.040600000327686, + 2.187400001275819, + 2.9685000008612406, + 2.039099999819882, + 2.0215999975334853, + 2.199599999585189, + 2.0953999992343597, + 2.141900000424357, + 2.1477999980561435, + 2.1415000010165386, + 2.1015000020270236, + 2.060699996945914, + 2.2491000017907936, + 2.112999998644227, + 2.0722999979625456, + 2.094899999065092, + 2.1450999993248843, + 2.188300000852905, + 2.196199999161763, + 2.0948000019416213, + 2.099500001349952, + 2.2471999982371926, + 2.184000000852393, + 2.4231999996118248, + 2.3738999989291187, + 2.2088000005169306, + 2.0100000001548324, + 1.944699997693533, + 2.0254000010027084, + 1.963499998964835, + 1.978100000997074, + 2.0029000006616116, + 2.1267000010993797, + 2.122199999575969, + 2.6099999995494727, + 2.089599998726044, + 1.9461000010778662, + 2.5124000021605752, + 1.9642000006570015, + 2.635000000736909, + 2.282499997818377, + 2.1048999988124706, + 2.088900000671856, + 1.9571999982872512, + 2.173599998059217, + 2.817799999320414, + 3.1197999996948056, + 3.6503000010270625, + 3.585000002203742, + 3.528500001266366, + 8.87680000232649, + 3.784699998504948, + 2.517400000215275, + 4.179899999144254, + 3.3344000003125984, + 2.910900002461858, + 16.719500003091525, + 4.072700001415797, + 3.8260000001173466, + 4.451599997992162, + 3.5671000005095266, + 5.898300001717871, + 3.9742999979353044, + 3.899300001648953, + 4.1423999973631, + 4.074099997524172, + 3.7599999996018596, + 7.195099999080412, + 6.7579999995359685, + 4.01380000039353, + 4.350699997303309, + 4.204200002277503, + 8.146899999701418, + 13.723699998081429, + 16.245899998466484, + 16.501500002050307, + 15.341599999374012, + 7.113499999832129, + 6.177799998113187, + 6.485300000349525, + 5.7613999997556675, + 6.283800001256168, + 5.899800002225675, + 7.707000000664266, + 9.33209999857354, + 6.939500002772547, + 6.618700001126854, + 8.127599998260848, + 7.6502000010805205, + 8.937399998103501, + 6.688000001304317, + 6.6756000014720485, + 6.752299999789102, + 7.730000001174631, + 7.393399999273242, + 6.884800000989344, + 8.70010000289767, + 6.504099997982848, + 11.689099999784958, + 7.364299999608193, + 5.580799999734154, + 4.066199999215314, + 7.894599999417551, + 8.97149999946123, + 7.268700002896367, + 6.349600000248756, + 8.387600002606632, + 9.908299998642178, + 10.317300002498087, + 9.238300001015887, + 5.91829999757465, + 5.406200001743855, + 2.1645000015269034, + 2.2177999999257736, + 2.3338999999396037, + 2.190600000176346, + 3.164400000969181, + 2.6633999987097923, + 2.231200000096578, + 2.1761999996670056, + 2.3065999994287267, + 2.196399997046683, + 2.135499998985324, + 2.968400000099791, + 2.938400000857655, + 2.063699997961521, + 3.332700001919875, + 2.591500000562519, + 2.51149999894551, + 2.320499999768799, + 3.0962000018917024, + 2.246799998829374, + 2.081700000417186, + 2.258500000607455, + 2.0636000008380506, + 2.050700000836514, + 2.060999999230262, + 1.9983999991382007, + 2.0915999994031154, + 2.001900000323076, + 2.9088000010233372, + 2.11719999788329, + 2.1540000016102567, + 2.2602000026381575, + 1.9926999993913341, + 2.0088999990548473, + 2.015000001847511, + 2.088299999741139, + 2.4419000001216773, + 2.0067999976163264, + 2.0031999993079808, + 2.458499999193009, + 2.197000001615379, + 2.9130999973858707, + 2.0155999991402496, + 2.7325999981258065, + 2.1089000001666136, + 2.2065999983169604, + 1.9528000011632685, + 1.9730999993043952, + 2.1809999998367857, + 2.087500000925502, + 2.375400003074901, + 2.2371000013663433, + 2.110900000843685, + 2.127299998392118, + 1.970400000573136, + 2.7627999988908414, + 2.0598000010068063, + 2.805100000841776, + 1.9811000020126812, + 2.072399998723995, + 2.0521000005828682, + 2.35650000104215, + 2.360499998758314, + 3.6070999994990416, + 2.9719000012846664, + 2.1049000024504494, + 2.1067000016046222, + 2.032700002018828, + 2.9966000001877546, + 2.248400000098627, + 2.1315999983926304, + 3.228300000046147, + 3.067400000873022, + 2.1821999980602413, + 3.4677000003284775, + 2.3088999987521674, + 2.2950999991735443, + 2.3271999998542015, + 2.9847000005247537, + 2.198300000600284, + 2.357499997742707, + 2.723399997194065, + 2.451399999699788, + 3.1598000023222994, + 3.0583000007027294, + 2.4876000024960376, + 3.094800002145348, + 2.2427000003517605, + 3.096599997661542, + 3.1082000023161527, + 3.28339999759919, + 2.214500000263797, + 2.6574000003165565, + 2.466699999786215, + 2.3712000001978595, + 2.209500002209097, + 2.197500001784647, + 2.205200002208585, + 2.096000000165077, + 2.1244999988994095, + 2.3148000000219326, + 2.351399998588022, + 2.1896999969612807, + 2.131999997800449, + 2.149999996618135, + 1.9872999982908368, + 2.2233000017877202, + 2.1013999976275954, + 2.13630000143894, + 2.0946000004187226, + 2.0566999992297497, + 2.0487000001594424, + 2.084399999148445, + 2.0467000031203497, + 2.4272999980894383, + 2.144800000678515, + 2.4631999986013398, + 2.0791999995708466, + 2.0072999977855943, + 2.0504999993136153 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs20": { + "config": { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 2.2690500009048264, + "p10_ms": 1.9327199999679578, + "p90_ms": 6.129170000713203, + "min_ms": 1.7254999984288588, + "max_ms": 25.006799998664064, + "mean_ms": 3.297485750008491 + }, + "speedup_vs_control": { + "ratio": 0.9481280714760986, + "ci90_low": 0.9228438819167644, + "ci90_high": 0.9672158182516366, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9276502560539513, + "p10": 0.638177558149313, + "p90": 1.065798133965065 + }, + "compile": { + "lower_s": 4.831446299998788, + "compile_s": 8.317399899999145, + "first_call_s": 0.003169999999954598, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [] + ], + "flops": 3017410.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 905240, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1892352, + "max_containing_size_proof": null + }, + "warm_ms": [ + 2.171500000258675, + 1.9863000015902799, + 1.9971000001532957 + ], + "per_call_ms": [ + 2.063399999315152, + 1.8827999992936384, + 1.9114999995508697, + 2.10519999745884, + 1.8053999992844183, + 1.9212000006518792, + 2.0041999996465165, + 1.8469999995431863, + 1.893799999379553, + 1.960900000995025, + 2.1311000018613413, + 1.9339999998919666, + 1.86069999836036, + 1.9750999999814667, + 1.8653000006452203, + 1.8482000014046207, + 1.8396999985270668, + 1.9022000014956575, + 1.832099998864578, + 2.6307000007363968, + 1.9941999998991378, + 1.9490000013320241, + 1.8909999998868443, + 1.9123000020044856, + 2.0727999981318135, + 1.8860999989556149, + 1.861000000644708, + 1.8311000021640211, + 1.759999999194406, + 1.9690000008267816, + 1.837700001487974, + 1.7254999984288588, + 1.7824000024120323, + 1.981800000066869, + 2.0236000018485356, + 2.1214999978838023, + 1.894099998025922, + 1.8331999999645632, + 1.8280000003869645, + 1.8722000022535212, + 2.135999999154592, + 1.9658000019262545, + 1.9028999995498452, + 1.962999998795567, + 1.9027000016649254, + 1.9109000022581313, + 1.9119999997201376, + 1.8699999964155722, + 1.7784000010578893, + 1.8435999991197605, + 1.8356000000494532, + 2.026300000579795, + 1.975999999558553, + 1.7836999977589585, + 1.7768999969121069, + 1.7659999975876417, + 1.8273000023327768, + 1.8436999998812098, + 1.7932000009750482, + 1.9738999981200323, + 2.802800001518335, + 2.0487000001594424, + 2.157999999326421, + 2.019399998971494, + 1.9021000007342082, + 2.050699997198535, + 1.9682000020111445, + 2.1377000011852942, + 1.9549999997252598, + 2.0060999995621387, + 1.987599996937206, + 2.4756000020715874, + 2.9789999971399084, + 2.7055999998992775, + 2.6609000015014317, + 2.345299999433337, + 2.700699998968048, + 2.715800001169555, + 3.6484000011114404, + 2.8289000001677778, + 2.1965999985695817, + 2.2610000014537945, + 2.1938999998383224, + 2.231200000096578, + 2.11699999999837, + 2.131000001099892, + 2.5495000008959323, + 2.2718000000168104, + 2.0760000006703194, + 2.2131999976409134, + 2.1503999996639322, + 2.0917000001645647, + 2.0976999985578004, + 2.1517999994102865, + 2.198900001531001, + 2.214399999502348, + 2.404200000455603, + 2.3425999970640987, + 2.67580000218004, + 2.222400002210634, + 18.328499998460757, + 7.40619999851333, + 4.624299999704817, + 4.288000000087777, + 6.032099998265039, + 4.431800000020303, + 4.340899999078829, + 4.182699998636963, + 3.9407000003848225, + 3.7455999990925193, + 3.668400000606198, + 4.121599999052705, + 4.446499999176012, + 3.6089999994146638, + 3.719300002558157, + 2.8203000001667533, + 3.6663999999291264, + 14.721999999892432, + 2.587499999208376, + 3.579399999580346, + 2.449199997499818, + 2.5328000010631513, + 2.4776999998721294, + 2.4142999973264523, + 2.29609999951208, + 2.4387999983446207, + 2.3731000001134817, + 2.82599999991362, + 2.486299999873154, + 2.6319999997213017, + 2.621800002089003, + 2.6288000008207746, + 2.538600001571467, + 2.6723000009951647, + 3.698100001201965, + 2.781199997116346, + 2.505399999790825, + 3.428600000916049, + 2.434900001389906, + 2.8965999990759883, + 2.166999998735264, + 2.0182000007480383, + 2.076200002193218, + 2.4704999996174593, + 2.109500001097331, + 2.1350999995775055, + 2.135200000338955, + 2.2383999967132695, + 2.059999998891726, + 2.070300000923453, + 2.22849999772734, + 2.181799998652423, + 2.163299999665469, + 1.9829999982903246, + 2.092499998980202, + 2.029699997365242, + 2.062600000499515, + 2.092299997457303, + 2.0511000002443325, + 2.0721999972010963, + 2.1629000002576504, + 2.485299999534618, + 2.115900002536364, + 2.1179000032134354, + 2.2196999998413958, + 2.151100001356099, + 2.0057999972777907, + 2.143199999409262, + 2.4284999999508727, + 3.157600000122329, + 2.9068000003462657, + 2.193799999076873, + 2.135200000338955, + 2.2046000012778677, + 2.1437000032165088, + 2.887000002374407, + 2.187400001275819, + 2.322299998922972, + 2.1409000000858214, + 2.976800002215896, + 2.967000000353437, + 2.2452000011981, + 2.2559999997611158, + 2.2190999989106786, + 2.9132999989087693, + 2.2444999995059334, + 3.08489999952144, + 3.058400001464179, + 2.2811000017100014, + 2.9017000015301164, + 2.807199998642318, + 2.3379000012937468, + 2.3193000015453435, + 2.3187000006146263, + 2.118199998221826, + 2.2022000011929777, + 2.135500002623303, + 2.193600001191953, + 2.348800000618212, + 2.3685999985900708, + 2.201800001785159, + 2.316800000699004, + 2.167599999665981, + 2.1997000003466383, + 2.149500000086846, + 2.0985000010114163, + 2.263200000015786, + 2.1463000011863187, + 2.115399998729117, + 2.0489999988058116, + 2.197300000261748, + 2.352499999688007, + 2.2320999996736646, + 2.2623000004386995, + 2.201499999500811, + 2.042800002527656, + 2.0594999987224583, + 2.0401999972818885, + 2.2360000002663583, + 2.874600002542138, + 7.793999997375067, + 7.499100000131875, + 14.358399999764515, + 9.273600000597071, + 9.085800000320887, + 5.403800001658965, + 8.033999998588115, + 8.324899998115143, + 25.006799998664064, + 17.440600000554696, + 22.025800000847084, + 12.937499999679858, + 6.9922000002407, + 18.895000001066364, + 5.549099998461315, + 7.474599999113707, + 7.200899999588728, + 6.078700000216486, + 5.058799997641472, + 5.413200000475626, + 5.672899998899084, + 6.830899998021778, + 6.3575999993190635, + 9.379300001455704, + 6.3563000003341585, + 6.301299999904586, + 6.10459999734303, + 6.441800000175135, + 7.015200000751065, + 9.30010000229231, + 4.387900000438094, + 3.436599999986356, + 3.7855000009585638, + 5.0808999985747505, + 4.59440000122413, + 4.673700001148973, + 7.384000000456581, + 5.419199998868862, + 6.3649999974586535, + 5.618300001515308, + 6.12610000098357, + 7.322900000872323, + 12.172999999165768, + 3.6665000006905757, + 8.544500000425614, + 5.842200000188313, + 5.3622999985236675, + 4.961800001183292, + 5.3144000012252945, + 6.553300001542084, + 4.854800001339754, + 7.09610000194516, + 12.610600002517458, + 7.467799998266855, + 6.156799998279894, + 3.9728000010654796, + 7.12299999941024, + 8.255900000222027, + 6.618200000957586, + 7.196499998826766, + 5.495500001416076, + 3.582299999834504, + 4.051799998705974, + 3.9201999970828183, + 4.414600000018254, + 3.7712999983341433, + 4.099599998880876, + 4.315800000767922, + 3.3871000014187302, + 2.9714000011153985, + 2.443900000798749, + 2.344100001209881, + 2.638400001160335, + 2.6686999990488403, + 2.4584000020695385, + 2.5999000026786234, + 3.8372999988496304, + 2.9393000004347414, + 2.907400001276983, + 2.771499999653315, + 2.1309000003384426, + 2.4266000000352506, + 2.288200001203222, + 2.343000000109896, + 3.035400000953814, + 2.1503000025404617, + 2.038300001004245, + 2.4546999993617646, + 2.54040000072564, + 2.3094999996828847, + 2.369800000451505, + 3.2526000031793956, + 2.2458999992522877, + 2.283100002387073, + 2.216599998064339, + 2.172100001189392, + 2.3285999996005557, + 2.5338999985251576, + 2.4365999997826293, + 2.4121999995259102, + 2.2539000019605737, + 2.015199999732431, + 2.8531999996630475, + 2.057099998637568, + 1.9783999996434432, + 1.9928000001527835, + 2.052600000752136, + 2.131799999915529, + 2.013299999816809, + 2.056299999821931, + 2.116899999236921, + 2.1250000027066562, + 2.8982000003452413, + 2.269900000101188, + 2.2683999995933846, + 2.133899997716071, + 2.0698999978776556, + 2.9481000019586645, + 2.1873000005143695, + 2.3295999999390915, + 2.53800000064075, + 2.256299998407485, + 2.2423999980674125, + 2.401300000201445, + 2.296799997566268, + 2.1274000027915463, + 3.017399998498149, + 2.2613000001001637, + 2.1146999970369507, + 2.970999998069601, + 2.0848000021942426, + 2.0334000000730157, + 2.0753000026161317, + 2.131000001099892, + 2.1325000016076956, + 2.84299999839277, + 2.205200002208585, + 2.300799998920411, + 2.1040999999968335, + 2.3105000000214204, + 2.2190999989106786, + 2.3658999998588115, + 2.207599998655496, + 2.237199998489814, + 2.2567000014532823, + 2.133099998900434, + 2.28169999900274, + 2.098400000249967, + 2.5296999992860947, + 2.70999999702326, + 2.3543000024801586, + 2.2542999977304135, + 2.9848999984096736, + 3.099000001384411, + 3.1001999996078666, + 2.3938000013004057, + 2.1257999978843145, + 2.1989999986544717, + 2.6006999978562817, + 3.1111000025703106, + 2.1778000009362586, + 2.308999999513617, + 2.133699999831151, + 2.0922000003338326, + 2.0545000006677583, + 2.286299997649621, + 2.0581999997375533, + 2.1109999979671557, + 2.089100002194755, + 2.0528999993985053, + 2.2141000008559786, + 2.21130000136327, + 2.2697000022162683, + 2.104200000758283, + 2.11719999788329, + 2.252100002806401, + 2.043300002696924, + 2.085700001771329, + 2.256299998407485, + 2.0933000014338177 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs24": { + "config": { + "name": "mcs24", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 2.392300000792602, + "p10_ms": 2.0043699976667995, + "p90_ms": 5.001820000688896, + "min_ms": 1.8178999998781364, + "max_ms": 16.05619999827468, + "mean_ms": 3.0438304998824606 + }, + "speedup_vs_control": { + "ratio": 0.8992810269313886, + "ci90_low": 0.878696659875835, + "ci90_high": 0.918558430150147, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9023979482769156, + "p10": 0.8109415485111172, + "p90": 1.036599467592176 + }, + "compile": { + "lower_s": 4.6593486999991, + "compile_s": 6.733799100002216, + "first_call_s": 0.003453999997873325, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [] + ], + "flops": 3195236.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 907736, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 10272768, + "max_containing_size_proof": null + }, + "warm_ms": [ + 2.0416000006662216, + 2.0473999975365587, + 2.2153999998408835 + ], + "per_call_ms": [ + 1.972800000658026, + 1.9912999996449798, + 2.3718999982520472, + 1.9460999974398874, + 2.6182000001426786, + 1.8636999993759673, + 2.7779000010923482, + 2.0719999993161764, + 2.2486000016215257, + 1.8829000000550877, + 1.8178999998781364, + 1.8928999998024665, + 2.0001999982923735, + 2.0121999987168238, + 2.0661999988078605, + 1.8619000002217945, + 2.3178999981610104, + 2.353799998672912, + 2.0391999969433527, + 1.8658000008144882, + 2.035600002272986, + 2.07849999787868, + 2.330499999516178, + 1.9750999999814667, + 1.882699998532189, + 2.1202999996603467, + 1.9509000012476463, + 1.9624999986262992, + 1.9381999991310295, + 2.2865999999339692, + 2.009100000577746, + 2.1936999983154237, + 1.9729999985429458, + 2.0823999984713737, + 1.9241000009060372, + 1.9017000013263896, + 1.9221999973524362, + 2.718499999900814, + 1.991599998291349, + 2.1706000006815884, + 2.004099998885067, + 1.9912999996449798, + 1.9377000025997404, + 1.977799998712726, + 1.951900001586182, + 1.9983999991382007, + 2.084399999148445, + 2.1944000000075903, + 2.254700000776211, + 2.010099997278303, + 1.9572999990487006, + 1.9809000004897825, + 1.9730999993043952, + 1.9274999976914842, + 1.971500001673121, + 1.9147000020893756, + 1.8769999987853225, + 1.8746999994618818, + 1.8858000003092457, + 1.9966999971074983, + 2.021600001171464, + 2.808499997627223, + 2.2213999982341193, + 2.091499998641666, + 2.0440000007511117, + 1.9872000011673663, + 2.0423999994818587, + 1.9560999971872661, + 2.379300000029616, + 2.228800000011688, + 2.0361999995657243, + 2.240099998743972, + 2.1540999987337273, + 1.9156999987899326, + 2.231700000265846, + 2.035900000919355, + 3.2021999977587257, + 1.9572999990487006, + 2.0341999988886528, + 2.419799999188399, + 2.379100002144696, + 2.4054000023170374, + 2.293400000780821, + 2.358400000957772, + 2.107099997374462, + 2.1490999970410485, + 2.4073000022326596, + 6.8619000012404285, + 2.5928000031854026, + 3.306200000224635, + 2.2472000018751714, + 2.3488999977416825, + 3.2162999996216968, + 2.406600000540493, + 2.4879999982658774, + 2.22109999958775, + 2.444500001729466, + 2.330999999685446, + 2.436799997667549, + 2.5348999988636933, + 3.9711999997962266, + 3.8158999996085186, + 3.81070000003092, + 4.145599999901606, + 3.9436000006389804, + 5.19930000155, + 4.16169999880367, + 2.6770000004034955, + 2.627499998197891, + 3.8128999985929113, + 3.7511999980779365, + 3.8952000031713396, + 3.839700002572499, + 3.799799997068476, + 3.857399999105837, + 3.791400002228329, + 3.316600003017811, + 3.7967999996908475, + 5.083000000013271, + 5.248299999948358, + 2.766399997199187, + 3.5133000019413885, + 2.6816999998118263, + 3.315000001748558, + 2.4972999999590684, + 2.44110000130604, + 2.520999998523621, + 2.449000003252877, + 2.480799998011207, + 2.4999999986903276, + 2.7757999996538274, + 2.456099999108119, + 2.556299998104805, + 2.4755999984336086, + 2.510700000129873, + 2.3660999977437314, + 2.3680000012973323, + 2.3190000028989743, + 2.3510999999416526, + 2.3359000006166752, + 2.373000002990011, + 2.4110000013024546, + 2.660400001332164, + 2.6293000009900425, + 2.810199999657925, + 2.6983999996446073, + 2.636900000652531, + 2.5272999992012046, + 2.6371999992989004, + 2.7563000003283378, + 2.5795000001380686, + 2.406799998425413, + 2.4307999992743134, + 2.825300001859432, + 3.326300000480842, + 2.4498999991919845, + 2.893700002459809, + 3.4913000017695595, + 2.272199999424629, + 2.3862999987613875, + 2.3380999991786666, + 2.249199998914264, + 2.22349999967264, + 2.187400001275819, + 2.2193999975570478, + 3.0904000013833866, + 2.509899997676257, + 2.1170999971218407, + 2.513399998861132, + 2.2538000011991244, + 2.1549999983108137, + 2.159600000595674, + 2.314900000783382, + 2.239400000689784, + 3.3158999976876657, + 2.2897999988344964, + 2.191099996707635, + 2.1691999972972553, + 2.362100000027567, + 2.18959999983781, + 2.2986000003584195, + 2.490799997758586, + 2.5343999986944254, + 2.0919000016874634, + 2.1920999970461708, + 2.120699999068165, + 2.225600001111161, + 2.532700000301702, + 2.1868000003451016, + 2.0628000020224135, + 2.135200000338955, + 2.0839999997406267, + 2.0249000008334406, + 2.8566000000864733, + 2.1028000010119285, + 2.054900000075577, + 2.4130999991029967, + 2.130000000761356, + 2.091300000756746, + 2.235899999504909, + 2.294000001711538, + 2.1481000003404915, + 2.0684000010078307, + 2.2152000019559637, + 2.162299999326933, + 2.32260000120732, + 2.117800002451986, + 2.1735000009357464, + 2.4692000006325543, + 2.2071999992476776, + 2.0043999975314364, + 2.1272000012686476, + 2.319200000783894, + 2.381899997999426, + 2.316500002052635, + 2.1914999997534323, + 2.250800000183517, + 2.0124000002397224, + 2.2004999991622753, + 2.1373000017774757, + 3.4448999977030326, + 5.6024000004981644, + 3.4980999989784323, + 3.829500001302222, + 3.4895000026153866, + 4.622300002665725, + 3.7883000004512724, + 4.167900002357783, + 4.952300001605181, + 5.248499997833278, + 4.079400001501199, + 3.9450000003853347, + 5.783299999166047, + 3.482700001768535, + 4.043699998874217, + 2.997200001118472, + 4.6791999993729405, + 4.365400000096997, + 4.683300001488533, + 7.228499998745974, + 4.5136000007914845, + 4.530899997917004, + 5.19450000138022, + 5.405700001574587, + 4.900100000668317, + 6.52540000010049, + 6.4741999995021615, + 4.992800000763964, + 5.350600000383565, + 5.936900000961032, + 4.978799999662442, + 4.543600000033621, + 7.571700003609294, + 16.05619999827468, + 8.332399997016182, + 7.653799999388866, + 7.392900002741953, + 7.908200001111254, + 8.517000002029818, + 8.430199999565957, + 5.441799999971408, + 5.156000002898509, + 14.39820000086911, + 8.571999998821411, + 15.15320000180509, + 9.682399999292102, + 5.582199999480508, + 4.656000000977656, + 5.897999999433523, + 10.402899999462534, + 5.5525999996461906, + 6.495499997981824, + 4.267199998139404, + 5.404299998190254, + 5.804000000352971, + 5.4975000020931475, + 6.0570999994524755, + 6.43090000085067, + 8.39079999786918, + 10.610299999825656, + 2.4345000019820873, + 2.4851999987731688, + 2.9751000001851935, + 3.2705999983591028, + 4.138500000408385, + 4.017100000055507, + 2.6632000008248724, + 2.7021999994758517, + 2.981300000101328, + 2.855200000340119, + 2.4912000008043833, + 2.4814999997033738, + 2.6008999993791804, + 2.5705000007292256, + 2.7678999977069907, + 3.628200000093784, + 2.673399998457171, + 2.3669000001973473, + 2.669699999387376, + 2.444699999614386, + 3.1834000001254026, + 3.305599999293918, + 2.4578000011388212, + 2.7909000018553343, + 2.4185999973269645, + 2.704399998037843, + 2.6022999991255347, + 2.5413000003027264, + 2.3183999983302783, + 2.3306000002776273, + 2.346500001294771, + 2.6266999993822537, + 3.289000000222586, + 2.406799998425413, + 2.202800002123695, + 2.1345999994082376, + 2.1474999994097743, + 2.1342999971238896, + 3.0315000003611203, + 3.008099996804958, + 2.381400001468137, + 2.118500000506174, + 2.0631000006687827, + 2.736700000241399, + 2.616699999634875, + 2.3750999971525744, + 2.122300000337418, + 2.3053000004438218, + 2.2462000015366357, + 2.5144000028376468, + 2.026099999056896, + 2.0716999970318284, + 2.195900000515394, + 2.082300001347903, + 2.970899997308152, + 2.075399999739602, + 2.3995999981707428, + 2.2080000017012935, + 2.114900002197828, + 2.2066999990784097, + 2.3005000002740417, + 3.11860000147135, + 2.3072999974829145, + 2.330799998162547, + 2.2587999992538244, + 2.3017999992589466, + 2.2744999987480696, + 2.3908000002847984, + 2.505399999790825, + 2.24779999916791, + 2.128600001015002, + 3.263300000980962, + 2.276999999594409, + 2.241000001959037, + 2.3080999999365304, + 2.316499998414656, + 3.215299999283161, + 3.8067999994382262, + 2.495100001397077, + 2.8483999994932674, + 2.983899998071138, + 3.5129999996570405, + 3.5016000001633074, + 2.967999997053994, + 2.747099999396596, + 2.926200002548285, + 2.6104999997187406, + 2.414999999018619, + 2.3938000013004057, + 2.4311000015586615, + 2.895000001444714, + 2.4807000008877367, + 2.463299999362789, + 2.2359000031428877, + 2.2731999997631647, + 3.0829999996058177, + 2.360499998758314, + 2.3395999996864703, + 2.33259999731672, + 2.2968000012042467, + 2.3403999985021073, + 2.268199998070486, + 2.106399999320274, + 2.090699999826029, + 2.2197999969648663, + 2.2134999999252614, + 2.3056999998516403, + 2.4268000015581492, + 2.423999998427462, + 2.1546999996644445, + 3.0817999977443833, + 2.1919000027992297, + 2.1914999997534323, + 2.150599997548852, + 2.118500000506174, + 2.173400000174297, + 2.2075000015320256, + 2.2605000012845267, + 2.2773999990022276, + 2.287600000272505 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + } + }, + "vmap": { + "best": "mcs18", + "routes": [ + "control", + "mcs18", + "mcs20", + "mcs24" + ], + "batches": [ + 1, + 4, + 16 + ], + "rows": { + "control_vmap1": { + "config": "control", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 2.458599998135469, + "p10_ms": 2.1538599976338446, + "p90_ms": 3.3680599972285563, + "min_ms": 1.9800000009126961, + "max_ms": 4.8430000024382025, + "mean_ms": 2.6374679999480577 + }, + "median_ms_per_likelihood": 2.458599998135469, + "compile": { + "lower_s": 4.911366600001202, + "compile_s": 6.3334551000007195, + "first_call_s": 0.0030335999981616624, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2813353.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 901720, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2703360, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap4": { + "config": "control", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 5.912000000535045, + "p10_ms": 5.083849997026846, + "p90_ms": 8.173900001565926, + "min_ms": 4.747700000734767, + "max_ms": 16.761200000473764, + "mean_ms": 6.352773000044181 + }, + "median_ms_per_likelihood": 1.4780000001337612, + "compile": { + "lower_s": 5.426662900001247, + "compile_s": 7.735770600000251, + "first_call_s": 0.006503299999167211, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 10339222.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3200344, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1892352, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap16": { + "config": "control", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 17.714600000545033, + "p10_ms": 15.260009998382884, + "p90_ms": 22.785829999702404, + "min_ms": 14.060100002097897, + "max_ms": 29.845500001101755, + "mean_ms": 18.480108749990904 + }, + "median_ms_per_likelihood": 1.1071625000340646, + "compile": { + "lower_s": 5.461922000002232, + "compile_s": 6.678659100001823, + "first_call_s": 0.015458900001249276, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 40452632.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12396824, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2162688, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap1": { + "config": "mcs18", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 2.6666499998100335, + "p10_ms": 2.3055400011799065, + "p90_ms": 3.5503700022673006, + "min_ms": 2.0607000005838927, + "max_ms": 6.6173000013804995, + "mean_ms": 2.823844749946147 + }, + "median_ms_per_likelihood": 2.6666499998100335, + "compile": { + "lower_s": 5.006673800002318, + "compile_s": 6.657732499999838, + "first_call_s": 0.002866099999664584, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2950598.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 904088, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 10465280, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9219807617462413, + "ci90_low": 0.9023022930685445, + "ci90_high": 0.9475818467930676, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap4": { + "config": "mcs18", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 6.521800001792144, + "p10_ms": 5.652650001502479, + "p90_ms": 9.073870001157047, + "min_ms": 5.293199999869103, + "max_ms": 13.82749999902444, + "mean_ms": 6.969017250048637 + }, + "median_ms_per_likelihood": 1.630450000448036, + "compile": { + "lower_s": 5.092269699998724, + "compile_s": 7.37837109999964, + "first_call_s": 0.008411999999225372, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 10862882.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3208664, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 42299392, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9064982058496841, + "ci90_low": 0.882944844039733, + "ci90_high": 0.9268632600275265, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap16": { + "config": "mcs18", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 19.177800000761636, + "p10_ms": 16.836049999983516, + "p90_ms": 26.03945999944699, + "min_ms": 15.356100000644801, + "max_ms": 57.30979999862029, + "mean_ms": 20.861161500042726 + }, + "median_ms_per_likelihood": 1.1986125000476022, + "compile": { + "lower_s": 4.959746399999858, + "compile_s": 7.240277100001549, + "first_call_s": 0.016584600001806393, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 42523956.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12430488, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 39940096, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9237034487710534, + "ci90_low": 0.8951268148898872, + "ci90_high": 0.9489680783675685, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap1": { + "config": "mcs20", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 2.6280500005668728, + "p10_ms": 2.301079997778288, + "p90_ms": 3.549919999568375, + "min_ms": 2.041399999143323, + "max_ms": 8.072100001299987, + "mean_ms": 2.7883049999582 + }, + "median_ms_per_likelihood": 2.6280500005668728, + "compile": { + "lower_s": 5.304819799999677, + "compile_s": 8.902885700001207, + "first_call_s": 0.003514500000164844, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 3039132.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 905304, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 45006848, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9355225348091348, + "ci90_low": 0.9175222443476189, + "ci90_high": 0.9543752960377412, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap4": { + "config": "mcs20", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 6.45385000098031, + "p10_ms": 5.5569199972524075, + "p90_ms": 8.710709998558743, + "min_ms": 5.16559999960009, + "max_ms": 10.383000000729226, + "mean_ms": 6.806327000094825 + }, + "median_ms_per_likelihood": 1.6134625002450775, + "compile": { + "lower_s": 6.4614026000017475, + "compile_s": 9.108826100000442, + "first_call_s": 0.008231200001318939, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 11200138.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3214040, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 34803712, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9160423622546293, + "ci90_low": 0.8926292054343022, + "ci90_high": 0.9398930442458693, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap16": { + "config": "mcs20", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 19.611499999882653, + "p10_ms": 17.144570000527892, + "p90_ms": 25.852559998747896, + "min_ms": 15.623299997969298, + "max_ms": 46.622300000308314, + "mean_ms": 20.726078250008868 + }, + "median_ms_per_likelihood": 1.2257187499926658, + "compile": { + "lower_s": 6.488115399999515, + "compile_s": 11.012196499999845, + "first_call_s": 0.02235119999750168, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 43857436.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12452888, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 55103488, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9032761390332729, + "ci90_low": 0.8812568226128986, + "ci90_high": 0.9323631273122064, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap1": { + "config": "mcs24", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 2.6604999984556343, + "p10_ms": 2.3769800001900876, + "p90_ms": 3.5279800009448086, + "min_ms": 2.1855000013601966, + "max_ms": 9.73829999929876, + "mean_ms": 2.852804749936695 + }, + "median_ms_per_likelihood": 2.6604999984556343, + "compile": { + "lower_s": 6.026902400000836, + "compile_s": 7.417872499998339, + "first_call_s": 0.003304599998955382, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 3226778.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 907800, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 52301824, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.924112008856469, + "ci90_low": 0.9044074709033827, + "ci90_high": 0.9391292128918096, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap4": { + "config": "mcs24", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 6.786949999877834, + "p10_ms": 6.058160000611679, + "p90_ms": 8.981100001619781, + "min_ms": 5.570299999817507, + "max_ms": 26.551999999355758, + "mean_ms": 7.241366000089329 + }, + "median_ms_per_likelihood": 1.6967374999694584, + "compile": { + "lower_s": 4.498698200000945, + "compile_s": 9.323924100001022, + "first_call_s": 0.00637769999957527, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 11916962.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3225304, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 51445760, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.8710834764719737, + "ci90_low": 0.8487048760766449, + "ci90_high": 0.8893603351081593, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap16": { + "config": "mcs24", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 20.497850000538165, + "p10_ms": 17.834480000965414, + "p90_ms": 26.325629998609656, + "min_ms": 16.814800001156982, + "max_ms": 44.75029999957769, + "mean_ms": 21.57805500001814 + }, + "median_ms_per_likelihood": 1.2811156250336353, + "compile": { + "lower_s": 5.197892599997431, + "compile_s": 9.234506500000862, + "first_call_s": 0.019853899997542612, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 46693644.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12497752, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 46833664, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.8642174667138233, + "ci90_low": 0.8452551560527195, + "ci90_high": 0.8829195953555903, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + } + } + }, + "step0_split": { + "control": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.3038499999092892, + "ray_trace": 0.6859499990241602, + "general_gather": 1.754699998855358, + "route_inputs": 1.0554500004218426, + "containment": 1.4412000000447733 + }, + "ray_trace_ms": 0.382099999114871, + "containment_ms": 0.7552500010206131, + "route_input_materialisation_ms": 0.36950000139768235, + "general_gather_reference_ms": 1.0687499998311978, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 1.1373500001354842, + "containment_share_of_step0": 0.6640436109646509, + "step0_share_of_likelihood": 0.5286680453546911, + "containment_share_of_likelihood": 0.35105863783895297 + }, + "mcs18": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.3054999997402774, + "ray_trace": 0.7002499987720512, + "general_gather": 1.734299999952782, + "route_inputs": 1.0058999996545026, + "containment": 1.4169999994919635 + }, + "ray_trace_ms": 0.39474999903177377, + "containment_ms": 0.7167500007199124, + "route_input_materialisation_ms": 0.3056500008824514, + "general_gather_reference_ms": 1.0340500011807308, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 1.1114999997516861, + "containment_share_of_step0": 0.6448493035357962, + "step0_share_of_likelihood": 0.49846402196889233, + "containment_share_of_likelihood": 0.321434177404292 + }, + "mcs20": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.3044500008400064, + "ray_trace": 0.671600000714534, + "general_gather": 1.6629500005365117, + "route_inputs": 1.0203500005445676, + "containment": 1.4078000021982007 + }, + "ray_trace_ms": 0.36714999987452757, + "containment_ms": 0.7362000014836667, + "route_input_materialisation_ms": 0.34874999983003363, + "general_gather_reference_ms": 0.9913499998219777, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 1.1033500013581943, + "containment_share_of_step0": 0.6672406766460545, + "step0_share_of_likelihood": 0.48626077033040815, + "containment_share_of_likelihood": 0.3244529654216933 + }, + "mcs24": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.317299998641829, + "ray_trace": 0.6735000006301561, + "general_gather": 1.6927500000747386, + "route_inputs": 1.0425500004203059, + "containment": 1.4070500001253095 + }, + "ray_trace_ms": 0.35620000198832713, + "containment_ms": 0.7335499994951533, + "route_input_materialisation_ms": 0.36904999979014974, + "general_gather_reference_ms": 1.0192499994445825, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 1.0897500014834804, + "containment_share_of_step0": 0.6731360389966223, + "step0_share_of_likelihood": 0.45552397321507804, + "containment_share_of_likelihood": 0.3066296029980011 + } + }, + "uncapped_containing_counts": { + "control": { + "prior": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [ + 12 + ], + "draws_exceeding_cap_per_step": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": -2, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 15, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 2, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 8, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs18": { + "prior": { + "n_draws": 200, + "cap": 18, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 1, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 18, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 5, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 18, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 11, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs20": { + "prior": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 3, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 20, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 7, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 13, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs24": { + "prior": { + "n_draws": 200, + "cap": 24, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 7, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 24, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 11, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 24, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 17, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + } + }, + "mcs_headroom": { + "control_max_containing_size": 15, + "rows": { + "control": { + "mcs": 15, + "median_ms": 2.1513500014407327, + "control_over_row": { + "ratio": 1.0, + "ci90_low": 0.9792813009410695, + "ci90_high": 1.020824725604644, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0, + "compile_s": 6.102138500002184, + "compile_ratio_vs_control": 1.0, + "temp_bytes": 901656, + "flops": 2801341.0, + "vmap16_ms_per_likelihood": 1.1071625000340646, + "vmap16_control_over_row": null, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 1, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 0.0 + }, + "mcs18": { + "mcs": 18, + "median_ms": 2.2298500007309485, + "control_over_row": { + "ratio": 0.9647958386149367, + "ci90_low": 0.9382644623531707, + "ci90_high": 0.9858998839644482, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0364887160330236, + "compile_s": 7.218237199998839, + "compile_ratio_vs_control": 1.1829028790474447, + "temp_bytes": 904024, + "flops": 2933102.0, + "vmap16_ms_per_likelihood": 1.1986125000476022, + "vmap16_control_over_row": { + "ratio": 0.9237034487710534, + "ci90_low": 0.8951268148898872, + "ci90_high": 0.9489680783675685, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 5.577931581727151e-15 + }, + "mcs20": { + "mcs": 20, + "median_ms": 2.2690500009048264, + "control_over_row": { + "ratio": 0.9481280714760986, + "ci90_low": 0.9228438819167644, + "ci90_high": 0.9672158182516366, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0547098330747071, + "compile_s": 8.317399899999145, + "compile_ratio_vs_control": 1.3630303376424788, + "temp_bytes": 905240, + "flops": 3017410.0, + "vmap16_ms_per_likelihood": 1.2257187499926658, + "vmap16_control_over_row": { + "ratio": 0.9032761390332729, + "ci90_low": 0.8812568226128986, + "ci90_high": 0.9323631273122064, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 5.577931581727151e-15 + }, + "mcs24": { + "mcs": 24, + "median_ms": 2.392300000792602, + "control_over_row": { + "ratio": 0.8992810269313886, + "ci90_low": 0.878696659875835, + "ci90_high": 0.918558430150147, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.1119994418344332, + "compile_s": 6.733799100002216, + "compile_ratio_vs_control": 1.103514628519134, + "temp_bytes": 907736, + "flops": 3195236.0, + "vmap16_ms_per_likelihood": 1.2811156250336353, + "vmap16_control_over_row": { + "ratio": 0.8642174667138233, + "ci90_low": 0.8452551560527195, + "ci90_high": 0.8829195953555903, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 5.577931581727151e-15 + } + }, + "uncapped_max_over_all_samples_and_steps": 17, + "decision_rule": "smallest N >= 18 with uncapped max <= N - 3, no unexplained change, compile <= +20 %, scalar median cost <= ~5 % (human picks N at the step-2 checkpoint)", + "rule_candidates": [] + }, + "gates": { + "fiducial_bit_exact": { + "value": 7.743201200876812, + "expected": 7.743201200876812, + "repr": "7.743201200876812", + "pass": true + }, + "max_containing_size_patch": { + "control": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + }, + "mcs18": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + }, + "mcs20": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + }, + "mcs24": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + }, + "patch_restored": { + "module_constant": 15, + "init_default": [ + 15, + null + ], + "step0_containment": "structured", + "pass": true + }, + "patch_keeps_later_defaults": { + "probes": { + "mcs18": { + "mcs": 18, + "__init__": { + "during": { + "max_containing_size": "18", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "18" + } + }, + "constructed_max_containing_size": 18, + "constructed_step0_layout": "None", + "pass": true + }, + "mcs20": { + "mcs": 20, + "__init__": { + "during": { + "max_containing_size": "20", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "20" + } + }, + "constructed_max_containing_size": 20, + "constructed_step0_layout": "None", + "pass": true + }, + "mcs24": { + "mcs": 24, + "__init__": { + "during": { + "max_containing_size": "24", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "24" + } + }, + "constructed_max_containing_size": 24, + "constructed_step0_layout": "None", + "pass": true + } + }, + "pass": true + }, + "grad": { + "control": { + "compile_s": 9.311914000001707, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783334, + 2.804131922250644, + 1781.7386158499905 + ], + [ + 249.25847095708434, + 214.72130119062592, + 374.3919459816191, + 813.0025446226265, + 3314.449436325265 + ], + [ + -30.04618316624788, + 41.85589438434542, + 53.1291530813268, + -17.18919451496142, + 1304.418583766583 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 0.0 + }, + "mcs18": { + "compile_s": 9.591369800000393, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783334, + 2.804131922250644, + 1781.7386158499905 + ], + [ + 249.25847095708434, + 214.72130119062592, + 374.3919459816191, + 813.0025446226265, + 3314.449436325265 + ], + [ + -30.04618316624788, + 41.85589438434542, + 53.1291530813268, + -17.189194514961365, + 1304.4185837665757 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 5.577931581727151e-15 + }, + "mcs20": { + "compile_s": 11.69662370000151, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783334, + 2.804131922250644, + 1781.7386158499905 + ], + [ + 249.25847095708434, + 214.72130119062592, + 374.3919459816191, + 813.0025446226265, + 3314.449436325265 + ], + [ + -30.04618316624788, + 41.85589438434542, + 53.1291530813268, + -17.189194514961365, + 1304.4185837665757 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 5.577931581727151e-15 + }, + "mcs24": { + "compile_s": 9.453830200000084, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783334, + 2.804131922250644, + 1781.7386158499905 + ], + [ + 249.25847095708434, + 214.72130119062592, + 374.3919459816191, + 813.0025446226265, + 3314.449436325265 + ], + [ + -30.04618316624788, + 41.85589438434542, + 53.1291530813268, + -17.189194514961365, + 1304.4185837665757 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 5.577931581727151e-15 + } + }, + "mcs_no_unexplained_change": { + "mcs18": { + "max_containing_size": 18, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 5.577931581727151e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 5.577931581727151e-15, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + }, + "mcs20": { + "max_containing_size": 20, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 5.577931581727151e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 5.577931581727151e-15, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + }, + "mcs24": { + "max_containing_size": 24, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 5.577931581727151e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 5.577931581727151e-15, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + } + } + }, + "all_gates_pass": true, + "completeness_compile": { + "control_prior": { + "lower_s": 6.306249199999002, + "compile_s": 9.79381690000082, + "first_call_s": 0.003896599999279715, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [], + [ + 15, + 2 + ] + ], + "flops": 2801341.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 264, + "temp_size_in_bytes": 901592, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 4997120, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "control_stress": { + "lower_s": 1.9176465999989887, + "compile_s": 3.2248970000000554, + "first_call_s": 0.0053943999992043246, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 15, + 2 + ] + ], + "flops": 2746879.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 240, + "temp_size_in_bytes": 901144, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 999424, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "mcs18_prior": { + "lower_s": 9.580901699999231, + "compile_s": 9.470442899997579, + "first_call_s": 0.003923200001736404, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [], + [ + 18, + 2 + ] + ], + "flops": 2933102.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 312, + "temp_size_in_bytes": 903960, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 5677056, + "max_containing_size_proof": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + } + }, + "mcs18_stress": { + "lower_s": 2.0285106000010273, + "compile_s": 3.7138917000011133, + "first_call_s": 0.0035988999989058357, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 18, + 2 + ] + ], + "flops": 2855615.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 288, + "temp_size_in_bytes": 903512, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2158592, + "max_containing_size_proof": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + } + }, + "mcs20_prior": { + "lower_s": 7.428172900003119, + "compile_s": 12.904785700000502, + "first_call_s": 0.0035427000002528075, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [], + [ + 20, + 2 + ] + ], + "flops": 3017410.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 344, + "temp_size_in_bytes": 905176, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2162688, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "mcs20_stress": { + "lower_s": 2.1371691999993345, + "compile_s": 3.4034716999995, + "first_call_s": 0.004303999998228392, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 20, + 2 + ] + ], + "flops": 2922293.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 320, + "temp_size_in_bytes": 904728, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 811008, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "mcs24_prior": { + "lower_s": 6.8089966000006825, + "compile_s": 13.164485299999797, + "first_call_s": 0.0034386000006634276, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [], + [ + 24, + 2 + ] + ], + "flops": 3195236.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 408, + "temp_size_in_bytes": 907672, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 8380416, + "max_containing_size_proof": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + }, + "mcs24_stress": { + "lower_s": 1.8822347999994236, + "compile_s": 3.277073700002802, + "first_call_s": 0.003331299998535542, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 24, + 2 + ] + ], + "flops": 3059387.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 384, + "temp_size_in_bytes": 907224, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1081344, + "max_containing_size_proof": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + } + }, + "progress": [ + "[ 5.5 s] configs: control(n=8,rows=11859), mcs18(n=8,rows=11859), mcs20(n=8,rows=11859), mcs24(n=8,rows=11859), reference(n=9,rows=268677), reference_b(n=10,rows=115473)", + "[ 47.4 s] reference reference solved on 200 prior + 200 stress draws (compile 2.9 s)", + "[ 82.9 s] reference reference_b solved on 200 prior + 200 stress draws (compile 3.6 s)", + "[ 82.9 s] reference floor: {\"prior\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.00015786921423151782, \"p99_position_error\": 0.0001280749711777913, \"median_position_error\": 5.9668954361473236e-05, \"ref_distinct_histogram\": {\"2\": 21, \"4\": 179}, \"abs_delta_logl_vs_reference\": {\"max\": 0.09204751533968647, \"p99\": 0.06845503627316121, \"median\": 0.004628222675307825, \"n_nonfinite_mismatch\": 0}}, \"stress\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.00015786921423129578, \"p99_position_error\": 0.00014084184669768283, \"median_position_error\": 5.966895436132821e-05, \"ref_distinct_histogram\": {\"2\": 163, \"4\": 37}}}", + "[ 187.1 s] completeness control prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 187.2 s] completeness mcs18 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 187.2 s] completeness mcs20 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 187.3 s] completeness mcs24 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 187.3 s] reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359933, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.7590830914129167, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}}", + "[ 187.3 s] timing: compiling every route (fresh closure + clear_caches)", + "[ 240.2 s] timing: 20 rounds x 20 calls x 4 routes done", + "[ 241.2 s] fiducial gate: 7.743201200876812 == 7.743201200876812: True", + "[ 311.3 s] grad gate: control=True, mcs18=True, mcs20=True, mcs24=True", + "[ 311.3 s] best admissible (precision-equivalent): mcs18; any precision: mcs18", + "[ 526.9 s] vmap: control_vmap1 2.459 ms/L, control_vmap4 1.478 ms/L, control_vmap16 1.107 ms/L, mcs18_vmap1 2.667 ms/L, mcs18_vmap4 1.630 ms/L, mcs18_vmap16 1.199 ms/L, mcs20_vmap1 2.628 ms/L, mcs20_vmap4 1.613 ms/L, mcs20_vmap16 1.226 ms/L, mcs24_vmap1 2.660 ms/L, mcs24_vmap4 1.697 ms/L, mcs24_vmap16 1.281 ms/L", + "[ 526.9 s] step-0 split: ray trace vs ray trace + containment per geometry", + "[ 557.5 s] step-0 split: control trace 0.382 contain 0.755, mcs18 trace 0.395 contain 0.717, mcs20 trace 0.367 contain 0.736, mcs24 trace 0.356 contain 0.734", + "[ 557.5 s] uncapped containing counts (NumPy path) on the prior draws", + "[ 612.4 s] uncapped prior: max per step [17, 13, 11, 9, 7, 5, 5, 5]; control exceed/step [1, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 612.4 s] uncapped stream: max per step [13, 9, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 612.4 s] uncapped stress: max per step [7, 5, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 612.4 s] mcs gate mcs18: 0 draw changes (0 image-set), stream 0, grad 1, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True", + "[ 612.5 s] mcs gate mcs20: 0 draw changes (0 image-set), stream 0, grad 1, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True", + "[ 612.5 s] mcs gate mcs24: 0 draw changes (0 image-set), stream 0, grad 1, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True" + ], + "wall_s": 614.2379062 +} \ No newline at end of file diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.png b/results/breakdown/point_source_image/solver_config_sweep_mcs_laptop_cpu_fp64.png new file mode 100644 index 0000000000000000000000000000000000000000..e95899d444e26267e11d98575d412e0631f3f2ef GIT binary patch literal 94881 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 literal 0 HcmV?d00001 From 94eac23fefc15c5515a04906ca4a8f0098ace35a Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 18:41:13 +0100 Subject: [PATCH 5/9] results(point_source_image): MCS headroom on RAL 8490H, job 358976 (phase 4c) euclid-ral-compute-10-4, 8 CPUs, loadavg ~206-210 (236 cores), wall 397 s, all_gates_pass true, provenance asserted (mirror PyAutoArray e281abf3, includes #580). Control 1.466 ms; row/control median mcs18 1.050, mcs20 1.062, mcs24 1.090; compile +4.5 / +7.0 / +14.4 %. Zero image-set, position or log L changes on 200 prior + 200 stress + 16 stream draws; fiducial 7.743201200876812 bit-identical at every cap; two gradient instances differ by <= 6.1e-14 relative (padded-length reduction order). Uncapped max per step [17, 13, 11, 9, 7, 5, 5, 5]; only prior draw 12 exceeds 15 (step 0). Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- ...ver_config_sweep_mcs_hpc_ral_cpu_fp64.json | 6126 +++++++++++++++++ ...lver_config_sweep_mcs_hpc_ral_cpu_fp64.png | Bin 0 -> 93849 bytes ..._ral_job_358976_mcs_headroom_8490h_cpu.out | 90 + 3 files changed, 6216 insertions(+) create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.png create mode 100644 results/notes/point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json new file mode 100644 index 000000000..dbc3a5f9c --- /dev/null +++ b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json @@ -0,0 +1,6126 @@ +{ + "cell": "solver_config_sweep_mcs", + "issue": "PyAutoLabs/PyAutoArray#583", + "phase": "4c", + "mcs_headroom_mode": true, + "production_max_containing_size": 15, + "step0_routes": null, + "library_step0_default": "structured", + "config_name": "hpc_ral_cpu_fp64", + "quotable": true, + "host_note": null, + "quick": false, + "library_versions": { + "autolens": "2026.8.17.1", + "autoarray": "2026.8.17.1", + "autofit": "2026.8.17.1" + }, + "package_versions": { + "jax": "0.10.2", + "jaxlib": "0.10.2" + }, + "source_revisions": { + "autolens_profiling": "d6757ad0513196470329ae46c482ca308f0ff73d", + "PyAutoNerves": "bf104102312852537159b7fad2f998ab6677b4e4", + "PyAutoFit": "c156a9d8e8eb9f82b6da169b1d50b7e64580fe98", + "PyAutoArray": "e281abf3257e9efd4915f1daa9acc0498be250a5", + "PyAutoGalaxy": "ba8a08fabcb13d9472f2bd43ef4fea6039284d50", + "PyAutoLens": "dcbd4b711120641cc0ecc6490d868795ad717b07" + }, + "autoarray_imported_from": "/mnt/ral/jnightin/PyAuto/PyAutoArray", + "autolens_imported_from": "/mnt/ral/jnightin/PyAuto/PyAutoLens", + "device": { + "backend": "cpu", + "device": "cpu:0", + "hostname": "euclid-ral-compute-10-4", + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "omp_num_threads": "1", + "cpu_count": 236, + "jax_compilation_cache_dir": null, + "autotune_cache_entries_at_start": 0, + "cache_fresh": false + }, + "jax_devices": [ + "cpu:0" + ], + "machine": { + "cpu_model": "Intel(R) Xeon(R) Platinum 8490H", + "cpu_count_os": 236, + "nproc": 1, + "nproc_all": 236, + "nproc_note": "GNU nproc honours OMP_NUM_THREADS, so `nproc` can print 1 on a multi-core host; `nproc_all` is the core count.", + "ram_total": "1010827848 kB", + "kernel": "5.14.0-687.50.1.el9_8.x86_64", + "platform": "Linux-5.14.0-687.50.1.el9_8.x86_64-x86_64-with-glibc2.34", + "python": "3.12.4", + "jax_thread_env": { + "NPROC": "8" + }, + "blas_thread_env": { + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1", + "VECLIB_MAXIMUM_THREADS": null, + "NUMEXPR_NUM_THREADS": null + }, + "thread_env_note": "NPROC sizes XLA's CPU intra-op pool (the JAX rows); the BLAS knobs pin OpenBLAS/MKL/OpenMP (the numpy/scipy rows) and do not touch JAX. Two disjoint families; both are recorded on every CPU timing.", + "gpu": null + }, + "thread_environment": { + "NPROC": "8", + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1" + }, + "sched_affinity": 8, + "os_cpu_count": 236, + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "jax_platforms": "cpu", + "jax_enable_x64": true, + "loadavg_start": [ + 206.33, + 208.14, + 209.96 + ], + "loadavg_end": [ + 206.97, + 208.63, + 209.6 + ], + "protocol": { + "n_rounds": 20, + "n_calls_per_round": 20, + "n_warm": 3, + "n_stream": 16, + "seed": 314, + "n_prior_draws": 200, + "n_stress_draws": 200, + "step0_rounds": 10, + "vmap_batches": [ + 1, + 4, + 16 + ], + "route_order": "round-robin over every config, start rotated each round", + "cache_trap_guard": "fresh closure + fresh solver/analysis per route; jax.clear_caches()", + "bootstrap": { + "samples": 2000, + "seed": 12345, + "interval": "90%" + }, + "admissible": "100% distinct-multiplicity agreement with the reference on the prior draws AND max position error <= 0.002\"", + "admissible_position_tol": 0.002, + "position_noise_sigma": 0.05, + "distinct_tol": 0.005, + "prior_draws": "full prior: vector_from_unit_vector(U(1e-4, 1-1e-4)); source = solved beta*", + "stress_draws": "OUTSIDE the prior: Isothermal centre U(-0.05,0.05), theta_E U(1,2), ell_comps U(-0.2,0.2), source centre U(-0.4,0.4); plain FitPositionsImagePairAll positions", + "reference": { + "name": "reference", + "block": "reference", + "extent": 12.0, + "scale": 0.05, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "reference_b": { + "name": "reference_b", + "block": "reference", + "extent": 11.0, + "scale": 0.07, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "max_containing_size_patch": "ArrayTriangles.__init__ / for_limits_and_scale __defaults__ + module constant, tracing only, restored by value", + "pytrees": "autofit.jax.register_model(model) for both models before any trace" + }, + "configs": [ + { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs18", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs24", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": null + } + ], + "static": { + "control": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs18": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs20": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs24": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference": { + "extent_half_width": [ + 12.0, + 12.0 + ], + "limits": [ + -12.0, + 12.0, + -12.0, + 12.0 + ], + "scale": 0.05, + "pixel_scale_precision": 0.0001, + "n_steps": 9, + "n_steps_formula": "ceil(log2(0.05 / 0.0001))", + "last_step_triangle_side": 0.0001953125, + "step0_triangles": 535277, + "step0_rows": 268677, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference_b": { + "extent_half_width": [ + 11.0, + 11.0 + ], + "limits": [ + -11.0, + 11.0, + -11.0, + 11.0 + ], + "scale": 0.07, + "pixel_scale_precision": 0.0001, + "n_steps": 10, + "n_steps_formula": "ceil(log2(0.07 / 0.0001))", + "last_step_triangle_side": 0.00013671875, + "step0_triangles": 229585, + "step0_rows": 115473, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + } + }, + "reference_floor": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00015786921423151782, + "p99_position_error": 0.0001280749711777913, + "median_position_error": 5.9668954361473236e-05, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.09204751533968647, + "p99": 0.06845503627316121, + "median": 0.004628222675307825, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00015786921423129578, + "p99_position_error": 0.00014084184669768283, + "median_position_error": 5.966895436132821e-05, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "reference_max_finite_positions": { + "prior": 4, + "stress": 4 + }, + "reference_compile": { + "reference_prior": { + "lower_s": 8.10629336501006, + "compile_s": 8.0810591429763, + "first_call_s": 0.02069706202019006, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 48502648.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 17361496, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 431091712, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_stress": { + "lower_s": 1.671535400004359, + "compile_s": 2.049293748976197, + "first_call_s": 0.02280497399624437, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 47671892.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 17361048, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7651328, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_prior": { + "lower_s": 6.014580646005925, + "compile_s": 9.236773604992777, + "first_call_s": 0.011127012025099248, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 23082492.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 7566936, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 55472128, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_stress": { + "lower_s": 1.525054736994207, + "compile_s": 2.449266309005907, + "first_call_s": 0.008860863017616794, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 22251710.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 7566488, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1003520, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + } + }, + "default_vs_reference": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + }, + "agrees_on_every_prior_draw": true, + "agrees_on_every_stress_draw": true, + "stress_mismatch_examples": [] + }, + "admissibility": { + "control": true, + "mcs18": true, + "mcs20": true, + "mcs24": true + }, + "precision_equivalent": { + "control": true, + "mcs18": true, + "mcs20": true, + "mcs24": true + }, + "reference_image_extent": { + "prior": { + "max_abs_y": 1.77939453125, + "max_abs_x": 1.7773254429359933, + "max_abs_coord": 1.77939453125, + "p99_abs_coord": 1.7590830914129167, + "max_radius": 1.8116226317743076 + }, + "stress": { + "max_abs_y": 2.2498046875, + "max_abs_x": 2.300267215077964, + "max_abs_coord": 2.300267215077964, + "p99_abs_coord": 2.2027852305644777, + "max_radius": 2.5191249773380773 + } + }, + "extent_working": "prior: theta_E <= 1.6 + 4*0.05 = 1.8; |e| <= 0.0526 + 4*0.01 ~ 0.09 -> q ~ 0.83; SIE images lie within ~theta_E/sqrt(q) + |beta| ~ 1.98 + 0.1 ~ 2.1 arcsec of the centre, so boxes of +-6 / +-4 / +-3 / +-2.5 bracket it; reference_image_extent is the measured value", + "best_admissible": "mcs18", + "best_admissible_any_precision": "mcs18", + "table": [ + { + "config": "control", + "block": "control", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 15, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 1.4655035047326237, + "speedup": 1.0, + "speedup_ci90": [ + 0.9822866649230252, + 1.018805779813082 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 4.2897308630053885, + "flops": 2801341.0, + "temp_bytes": 901656 + }, + { + "config": "mcs18", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 18, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 1.5380874829133973, + "speedup": 0.9528089403319977, + "speedup_ci90": [ + 0.9343722069591963, + 0.9650918127139239 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 4.48203518500668, + "flops": 2933102.0, + "temp_bytes": 904024 + }, + { + "config": "mcs20", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 20, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 1.5568764792988077, + "speedup": 0.9413100680875229, + "speedup_ci90": [ + 0.9218777639303929, + 0.9526963092541254 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 4.589658130978933, + "flops": 3017410.0, + "temp_bytes": 905240 + }, + { + "config": "mcs24", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 24, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 1.597105001565069, + "speedup": 0.9175999720096778, + "speedup_ci90": [ + 0.900012713886453, + 0.9274080410750413 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "prior_p99_err": 0.0007893460711577849, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711579142, + "compile_s": 4.906929579999996, + "flops": 3195236.0, + "temp_bytes": 907736 + } + ], + "rows": { + "control": { + "config": { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 1.4655035047326237, + "p10_ms": 1.318663705023937, + "p90_ms": 1.7091418034397068, + "min_ms": 1.2054000108037144, + "max_ms": 2.1208709804341197, + "mean_ms": 1.4846185802161926 + }, + "speedup_vs_control": { + "ratio": 1.0, + "ci90_low": 0.9822866649230252, + "ci90_high": 1.018805779813082, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 1.0, + "p10": 1.0, + "p90": 1.0 + }, + "compile": { + "lower_s": 2.4476347390154842, + "compile_s": 4.2897308630053885, + "first_call_s": 0.0026751630066428334, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [] + ], + "flops": 2801341.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 901656, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1871872, + "max_containing_size_proof": null + }, + "warm_ms": [ + 3.6388220032677054, + 1.453315984690562, + 1.4314569998532534 + ], + "per_call_ms": [ + 1.659029017901048, + 1.5009259805083275, + 1.371577993268147, + 1.3544310058932751, + 1.6392219986300915, + 1.3716570101678371, + 1.647252996917814, + 1.3963250094093382, + 1.4170320064295083, + 1.3827989751007408, + 1.2204419763293117, + 1.6271350032184273, + 1.358299981802702, + 1.3132820022292435, + 1.4424349938053638, + 1.3363040052354336, + 1.4267649967223406, + 1.3751080259680748, + 1.4819469943176955, + 1.3464509975165129, + 1.4005829871166497, + 1.3936680043116212, + 1.6967650153674185, + 1.551183988340199, + 1.4188839995767921, + 1.3829720264766365, + 1.3881610066164285, + 1.4199059805832803, + 1.4713130076415837, + 1.7811119905672967, + 1.6063660150393844, + 1.6547520062886178, + 1.2480209989007562, + 1.73450299189426, + 1.3596600037999451, + 1.4675179845653474, + 1.2588110112119466, + 1.3270959898363799, + 1.5008460031822324, + 1.3035559968557209, + 1.5039410209283233, + 1.5759360103402287, + 1.5754140040371567, + 1.4757939788978547, + 1.3803900219500065, + 1.3006470107939094, + 1.7465499986428767, + 1.4833739842288196, + 1.3084140082355589, + 1.3818940205965191, + 1.7623720050323755, + 1.6473070136271417, + 1.593253982719034, + 1.3188330049160868, + 1.500519982073456, + 1.4745079970452935, + 1.4036500069778413, + 1.6667309973854572, + 1.3350780063774437, + 1.3774339749943465, + 1.389623008435592, + 1.6951720172073692, + 1.491440023528412, + 1.415242993971333, + 1.6403509944211692, + 1.5101750032044947, + 1.5704440011177212, + 1.2286310084164143, + 1.210964983329177, + 1.5300550148822367, + 1.2355119979474694, + 1.2054000108037144, + 1.4119099942035973, + 1.2321449758019298, + 1.331067003775388, + 1.5000069979578257, + 1.3633299968205392, + 1.5870280039962381, + 1.4559160044882447, + 1.3621399994008243, + 1.3915479939896613, + 1.7606199835427105, + 1.5692610177211463, + 1.5082460013218224, + 1.3782139867544174, + 1.5384389844257385, + 1.4712330012116581, + 1.2165310035925359, + 1.2879820133093745, + 1.7678050207905471, + 1.5341569960583001, + 1.3854739954695106, + 1.4984259905759245, + 1.3231280026957393, + 1.3860790058970451, + 1.5888890193309635, + 1.6638570232316852, + 1.5526940114796162, + 1.3953990128356963, + 1.3432669802568853, + 1.6602019895799458, + 1.4914569910615683, + 1.797273987904191, + 1.8278880161233246, + 1.6079940251074731, + 1.4574490196537226, + 1.6822109755594283, + 1.4729860122315586, + 1.3876249722670764, + 1.5136410074774176, + 1.3424050121102482, + 1.5078519936650991, + 1.4291119878180325, + 1.4211520028766245, + 1.6095309983938932, + 1.828660984756425, + 1.4791240100748837, + 1.323998993029818, + 1.6327690100297332, + 1.3974260073155165, + 1.628347992664203, + 1.408481999533251, + 1.3240150001365691, + 1.2567710073199123, + 1.3408689992502332, + 1.3737500121351331, + 1.3152699975762516, + 1.361595990601927, + 1.359426009003073, + 1.6005939978640527, + 1.5778270026203245, + 1.501869992353022, + 1.3158679939806461, + 1.4378459891304374, + 1.284215017221868, + 1.595537003595382, + 1.3726949982810766, + 1.618476992007345, + 1.4542510034516454, + 1.7433780012652278, + 1.6773899842519313, + 1.4850830193609, + 1.4684739871881902, + 1.3930739951319993, + 1.516288990387693, + 1.2934539990965277, + 1.7329779802821577, + 1.3671719934791327, + 1.5353639901150018, + 1.361936010653153, + 1.5915679978206754, + 1.3406449870672077, + 1.2817259994335473, + 1.4685179921798408, + 1.3171400059945881, + 1.459833001717925, + 1.319110975600779, + 1.4421069936361164, + 1.697588013485074, + 1.6612779872957617, + 1.4386170078068972, + 1.540266996016726, + 1.4998209953773767, + 1.4761789934709668, + 1.466104993596673, + 1.4723240165039897, + 1.5260220097843558, + 1.658535999013111, + 1.4935589861124754, + 1.554098998894915, + 1.6107300180010498, + 1.426761009497568, + 1.5245710092131048, + 1.4945870207156986, + 1.3738849957007915, + 1.3162939867470413, + 1.3674889924004674, + 1.420026004780084, + 1.5448880149051547, + 1.4330550038721412, + 1.4056969957891852, + 1.3708269980270416, + 1.7541340203024447, + 1.43542600562796, + 1.4913550112396479, + 1.5119579911697656, + 1.4960219850763679, + 1.2949979864060879, + 1.4244090125430375, + 1.4269509993027896, + 1.270676002604887, + 1.2518870062194765, + 1.4501400000881404, + 1.3636260118801147, + 1.218591001816094, + 1.674756989814341, + 1.6863420023582876, + 1.4173090166877955, + 1.463336986489594, + 1.3783900067210197, + 1.4181090227793902, + 1.4746419910807163, + 1.6108790005091578, + 1.7527809832245111, + 1.8170970142818987, + 1.4786760148126632, + 1.7239649896509945, + 1.502647006418556, + 1.5871769865043461, + 1.3424889766611159, + 1.3977769995108247, + 1.3058490003459156, + 1.7083300044760108, + 1.4101040142122656, + 1.3448639947455376, + 1.3708709739148617, + 1.6276749956887215, + 1.3199630193412304, + 1.3454339932650328, + 1.3548970164265484, + 1.3914470036979765, + 1.4563239819835871, + 1.8568889936432242, + 1.3594299962278455, + 1.4522059937007725, + 1.479336991906166, + 1.4382819936145097, + 1.4914589992258698, + 1.5472499944735318, + 1.5599850157741457, + 1.3023020001128316, + 1.5026520122773945, + 1.2711809831671417, + 1.251256006071344, + 1.5110659878700972, + 1.2821860145777464, + 1.2715269986074418, + 1.4266259968280792, + 1.8482500163372606, + 1.2860870047006756, + 1.3426599907688797, + 1.445816014893353, + 1.8660499772522599, + 1.6015139990486205, + 1.5493680257350206, + 1.3380209857132286, + 1.4999480044934899, + 1.2925920018460602, + 1.663881994318217, + 1.4502959966193885, + 1.533279981231317, + 1.7624979955144227, + 1.3386820210143924, + 1.77911898936145, + 1.4649020158685744, + 1.3997970090713352, + 1.370227982988581, + 1.7713270208332688, + 1.397421001456678, + 1.5399609983433038, + 1.5051219961605966, + 1.3533290184568614, + 1.706928014755249, + 1.4043900009710342, + 1.5417080139741302, + 1.4320869813673198, + 1.3027240056544542, + 1.6810680099297315, + 1.37601702590473, + 1.478585007134825, + 1.6069209959823638, + 1.4931509795133024, + 1.3401180040091276, + 1.417487015714869, + 1.4035479980520904, + 1.2973789998795837, + 1.368800993077457, + 1.4880069938953966, + 1.3985210098326206, + 1.4103449939284474, + 1.4285979850683361, + 1.4699700113851577, + 1.7830629949457943, + 1.4505829894915223, + 1.3846140063833445, + 1.375830004690215, + 1.346582022961229, + 1.4731830160599202, + 1.2727940047625452, + 1.2798169918823987, + 1.4758450270164758, + 1.3279030099511147, + 1.4186670014169067, + 1.4896510110702366, + 1.4664170157629997, + 1.422578003257513, + 1.2972189870197326, + 1.5916029806248844, + 1.481314015109092, + 1.4083980058785528, + 1.4422250096686184, + 1.4240040036384016, + 1.3702770229429007, + 1.779493992216885, + 1.4297779998742044, + 1.4180770085658878, + 1.353673986159265, + 1.3805950002279133, + 1.4061330002732575, + 1.4874770131427795, + 1.8934010004159063, + 1.3909769768361002, + 1.3381059980019927, + 1.4477410004474223, + 1.2892230006400496, + 1.4268399972934276, + 1.4932329941075295, + 1.7975280061364174, + 1.3195339997764677, + 1.3870530237909406, + 1.618896989384666, + 1.3520570064429194, + 1.7694609996397048, + 1.8415730155538768, + 1.474214979680255, + 1.3729789934586734, + 1.827206986490637, + 1.484676991822198, + 1.5161949850153178, + 1.3869089889340103, + 1.7336210003122687, + 1.4017999928910285, + 1.7164479941129684, + 1.4942950219847262, + 1.4999799896031618, + 1.484745997004211, + 1.375760999508202, + 1.421936001861468, + 1.4714349817950279, + 1.472936011850834, + 1.5780350076965988, + 1.5289180155377835, + 1.4182479935698211, + 1.6334390093106776, + 1.5690290019847453, + 1.5558149898424745, + 1.4240820019040257, + 1.5045419859234244, + 1.3227649906184524, + 1.6684939910192043, + 1.5109999803826213, + 1.4807800180278718, + 1.3810730015393347, + 1.4724420034326613, + 1.7581610009074211, + 1.5067540225572884, + 1.5422930009663105, + 1.3699560076929629, + 1.780122023774311, + 1.4088389871176332, + 1.4836539921816438, + 1.5675649920012802, + 1.6204820130951703, + 1.7244010232388973, + 1.400228007696569, + 1.4937579981051385, + 1.8647300021257252, + 2.1208709804341197, + 1.5895439719315618, + 1.3776049891021103, + 1.5283529937732965, + 1.4243659970816225, + 1.4317510067485273, + 1.9855060090776533, + 1.9047219830099493, + 1.96758599486202, + 1.8266700208187103, + 1.573077985085547, + 1.561806013341993, + 1.607121987035498, + 1.4170669892337173, + 1.5061070153024048, + 1.390402001561597, + 1.5301269886549562, + 1.3605979911517352, + 1.8320329836569726, + 1.5322990075219423, + 1.6054979932960123, + 1.3715230161324143, + 1.5418590046465397, + 1.3447119854390621, + 1.5544249908998609, + 1.5966350038070232, + 1.4417950005736202, + 1.5869060007389635, + 1.3903420185670257, + 1.545387989608571, + 1.6131099837366492, + 1.387938973493874, + 1.5482289891224355 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs18": { + "config": { + "name": "mcs18", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 18, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 1.5380874829133973, + "p10_ms": 1.376734909717925, + "p90_ms": 1.7788620898500085, + "min_ms": 1.1892180191352963, + "max_ms": 2.0736379956360906, + "mean_ms": 1.5571231881767744 + }, + "speedup_vs_control": { + "ratio": 0.9528089403319977, + "ci90_low": 0.9343722069591963, + "ci90_high": 0.9650918127139239, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9464519079327076, + "p10": 0.9016420992633889, + "p90": 0.9934562292311198 + }, + "compile": { + "lower_s": 2.4681691489822697, + "compile_s": 4.48203518500668, + "first_call_s": 0.0027270290011074394, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [] + ], + "flops": 2933102.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 904024, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 4284416, + "max_containing_size_proof": null + }, + "warm_ms": [ + 1.7643829924054444, + 1.735769008519128, + 1.6495610179845244 + ], + "per_call_ms": [ + 1.6983059758786112, + 1.5652380243409425, + 1.4559239789377898, + 1.7470549792051315, + 1.506603992311284, + 1.438710984075442, + 1.5680649958085269, + 1.5896630065981299, + 1.4081850240472704, + 1.5014639939181507, + 1.9524100061971694, + 1.4440109953284264, + 1.3460420013871044, + 1.3098100025672466, + 1.3538340281229466, + 1.3889610127080232, + 1.3568199938163161, + 1.229059009347111, + 1.2065930059179664, + 1.5234840102493763, + 1.4041039976291358, + 1.3745029864367098, + 1.4146059984341264, + 1.8230499990750104, + 1.4283019991125911, + 1.6554609755985439, + 1.3551590091083199, + 1.3058809854555875, + 1.4416860067285597, + 1.8053679959848523, + 1.3997819914948195, + 1.701627013972029, + 1.4548329927492887, + 1.4176289841998369, + 1.3413020060397685, + 1.4553110231645405, + 1.4745949883945286, + 1.4655779814347625, + 1.4792869915254414, + 1.3950639986433089, + 1.8884839955717325, + 1.5167529927566648, + 1.597627007868141, + 1.666636992013082, + 1.9132680026814342, + 1.6095440078061074, + 1.5673319867346436, + 1.8119019805453718, + 1.42585500725545, + 1.661932998104021, + 1.5478350105695426, + 1.5592709823977202, + 1.9487850076984614, + 1.4064229908399284, + 2.0360740018077195, + 1.6237620147876441, + 1.5758369991090149, + 1.6799590084701777, + 1.7999520059674978, + 1.623492018552497, + 1.462218991946429, + 1.7999630072154105, + 1.6931779973674566, + 1.6445149958599359, + 1.5893589879851788, + 1.3948800042271614, + 1.8637799948919564, + 1.6149849980138242, + 1.464344997657463, + 1.6163370164576918, + 1.5224200033117086, + 1.4112789940554649, + 1.3896220189053565, + 1.460797997424379, + 1.5209000266622752, + 1.523342012660578, + 1.6324669995810837, + 1.7423990066163242, + 1.6544559912290424, + 1.5327190048992634, + 1.430078991688788, + 1.611162006156519, + 1.4550999912898988, + 1.5687490231357515, + 1.373657985823229, + 1.5473859966732562, + 1.4815219910815358, + 1.407557021593675, + 1.5690889849793166, + 1.4777530159335583, + 1.5679050120525062, + 1.4978069812059402, + 1.6407649964094162, + 1.5948629879858345, + 1.5241609944496304, + 1.4495419745799154, + 1.3629169843625277, + 1.4536899980157614, + 1.939039007993415, + 1.5357689990196377, + 1.4483240083791316, + 1.5994040004443377, + 1.3695939851459116, + 1.771267008734867, + 1.574165013153106, + 1.297204988077283, + 1.374112005578354, + 1.524734980193898, + 1.2132049887441099, + 1.2398559774737805, + 1.2837349786423147, + 1.210893999086693, + 1.2091539974790066, + 1.4213910035323352, + 1.3573250034824014, + 1.7147049948107451, + 1.4133930089883506, + 1.4786809915676713, + 1.2652760196942836, + 1.3102060183882713, + 1.4375089958775789, + 1.45280800643377, + 1.592695014551282, + 1.5963379992172122, + 1.736475998768583, + 1.8274140020366758, + 1.5925460029393435, + 1.519948011264205, + 1.553438021801412, + 1.6881900082807988, + 1.5142280026338995, + 1.5422139840666205, + 1.4307750097941607, + 1.4418519858736545, + 1.541915989946574, + 1.5542279870714992, + 1.584593002917245, + 1.4157770201563835, + 1.455902005545795, + 1.5031849907245487, + 1.7883830005303025, + 1.5534170088358223, + 1.469494978664443, + 1.5932480164337903, + 1.5653629961889237, + 1.7793890147004277, + 1.549462991533801, + 1.392161997500807, + 1.4800180215388536, + 1.6301790019497275, + 1.3756270054727793, + 1.6038320027291775, + 1.5366029983852059, + 1.5798980020917952, + 1.7807200201787055, + 1.531541027361527, + 1.5502430032938719, + 1.4226880157366395, + 1.5459060086868703, + 1.370787009363994, + 1.4277079899329692, + 1.77885199082084, + 1.627791003556922, + 1.3768580101896077, + 1.4119200059212744, + 1.4170650101732463, + 1.473873999202624, + 2.0117679960094392, + 1.6987660201266408, + 1.6052309947554022, + 1.428849995136261, + 1.6083199880085886, + 1.520362013252452, + 1.7445600242353976, + 1.6053980216383934, + 1.5585200162604451, + 1.6535989998374134, + 1.5226099931169301, + 1.6027979727368802, + 1.5130570100154728, + 1.4483020058833063, + 1.6448230016976595, + 1.2489040091168135, + 1.4204239996615797, + 1.4329250261653215, + 1.4669430092908442, + 1.25076700351201, + 1.6462439962197095, + 1.5046089829411358, + 1.5900820144452155, + 1.4905610005371273, + 1.446218986529857, + 1.5109870000742376, + 1.414650003425777, + 1.7656470008660108, + 1.5169010148383677, + 1.4703079941682518, + 1.455749006709084, + 1.5559140010736883, + 1.8134659912902862, + 1.4445550041273236, + 1.8734709883574396, + 1.64127501193434, + 1.511320995632559, + 1.4056400104891509, + 1.4988519833423197, + 1.4835739857517183, + 1.4398900093510747, + 1.3449499965645373, + 1.569423999171704, + 1.456466008676216, + 1.6163499967660755, + 1.460092986235395, + 1.75808000494726, + 1.460350991692394, + 1.4822729863226414, + 1.6913069994188845, + 1.4432079915422946, + 1.395892002619803, + 1.6961040091700852, + 1.514053001301363, + 1.3915929885115474, + 1.6876659938134253, + 1.9050849950872362, + 1.5161090123001486, + 1.3981910014990717, + 1.5097040159162134, + 1.1892180191352963, + 1.3016689918003976, + 1.7789529811125249, + 1.5046580228954554, + 1.3319509744178504, + 1.5381669800262898, + 1.3831480173394084, + 1.4120150008238852, + 1.9134320027660578, + 1.682967005763203, + 1.735626981826499, + 1.5763689880259335, + 1.4940020046196878, + 1.4405100082512945, + 1.641950977500528, + 1.5393859939649701, + 1.5845879970584065, + 1.623938005650416, + 1.9203910196665674, + 1.5708289865870029, + 1.8554480047896504, + 1.6966390248853713, + 1.3946399849373847, + 1.582616998348385, + 1.4921569963917136, + 1.6475339944008738, + 1.9636949873529375, + 1.690113014774397, + 1.3532540178857744, + 1.8585619982331991, + 1.4722690102644265, + 1.4948589960113168, + 1.5671580040361732, + 1.5094209811650217, + 1.5710289881099015, + 1.6479210171382874, + 1.4647000061813742, + 1.7243880138266832, + 1.4295069850049913, + 1.5348019951488823, + 1.4902170223649591, + 1.637793000554666, + 1.9583300163503736, + 1.5103690093383193, + 1.7749050166457891, + 1.6200279933400452, + 1.7303260101471096, + 1.633324020076543, + 1.511919981567189, + 1.6086990071926266, + 1.4262100157793611, + 1.5932730166241527, + 1.373999024508521, + 1.483483996707946, + 1.4614580140914768, + 1.8124739872291684, + 1.6221709956880659, + 1.595502020791173, + 1.4714990102220327, + 1.5400330012198538, + 1.3331299996934831, + 1.3643029960803688, + 1.713497011223808, + 1.5200490015558898, + 1.3409520033746958, + 1.4825300022494048, + 1.4969850017223507, + 1.2943149777129292, + 1.3658549869433045, + 1.777127996319905, + 1.3977900089230388, + 1.5128660015761852, + 1.5512070094700903, + 1.4723930216860026, + 1.3778299908153713, + 1.579215022502467, + 1.5788119926583022, + 1.5877700061537325, + 1.623746007680893, + 1.4110190095379949, + 1.6083109949249774, + 1.5504850016441196, + 1.732114003971219, + 1.7398660129401833, + 1.661892980337143, + 1.9178450165782124, + 1.461020001443103, + 1.4830220025032759, + 1.4271989930421114, + 1.3615080097224563, + 1.5987390070222318, + 1.7073990020435303, + 1.7433740140404552, + 1.5440470015164465, + 1.8560619791969657, + 1.9925069937016815, + 1.927345001604408, + 1.7767869867384434, + 1.6439020109828562, + 1.4965870068408549, + 1.5758279769215733, + 1.5805849980097264, + 1.6900500049814582, + 1.547152001876384, + 1.5749279991723597, + 1.5866370231378824, + 1.5332009934354573, + 1.629131002118811, + 1.4478169905487448, + 1.5464269963558763, + 1.5209039847832173, + 1.5380079858005047, + 1.5221679932437837, + 1.5368259919341654, + 1.6086459800135344, + 1.9961890066042542, + 1.6756739933043718, + 1.6739249986130744, + 1.6018559981603175, + 1.608952006790787, + 1.6253830108325928, + 1.897038018796593, + 2.0736379956360906, + 1.4860859955660999, + 1.809983019484207, + 1.5085339837241918, + 1.5820589906070381, + 1.3172010076232255, + 1.413377991411835, + 1.7822250083554536, + 1.5543699846602976, + 1.7420929798390716, + 1.5087770007085055, + 1.5563179913442582, + 1.5759530069772154, + 1.6058990149758756, + 1.5326410066336393, + 1.6700880078133196, + 1.5269079885911196, + 1.506305008661002, + 1.4536949747707695, + 1.550849003251642, + 1.5307389840018004, + 1.4020089874975383, + 1.596734015038237, + 1.5483110037166625, + 1.507651002611965, + 1.4800310018472373, + 1.5047529886942357, + 1.4235280104912817, + 1.560865988722071, + 1.8424939771648496, + 1.4104920264799148, + 1.5048490022309124, + 1.6227099986281246, + 1.6839560121297836, + 1.9492789870128036, + 1.7592010262887925, + 1.6582119860686362, + 1.751169009367004, + 1.4912000042386353, + 1.6058780020102859, + 1.9207120058126748, + 1.5914789983071387, + 1.5182030037976801, + 1.4551859931088984, + 1.7502219998277724, + 1.636264001717791, + 1.4720849867444485, + 1.6070189885795116, + 1.7402830126229674, + 1.539007993414998, + 1.426528993761167 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs20": { + "config": { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 1.5568764792988077, + "p10_ms": 1.398755409172736, + "p90_ms": 1.7963838967261838, + "min_ms": 1.183280983241275, + "max_ms": 2.128074993379414, + "mean_ms": 1.5835517863888526 + }, + "speedup_vs_control": { + "ratio": 0.9413100680875229, + "ci90_low": 0.9218777639303929, + "ci90_high": 0.9526963092541254, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9252315310867928, + "p10": 0.8985483135600961, + "p90": 0.9819653541561818 + }, + "compile": { + "lower_s": 2.471036101982463, + "compile_s": 4.589658130978933, + "first_call_s": 0.0028382730088196695, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [] + ], + "flops": 3017410.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 905240, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 5050368, + "max_containing_size_proof": null + }, + "warm_ms": [ + 1.6889709804672748, + 1.609438011655584, + 1.661568006966263 + ], + "per_call_ms": [ + 1.7277580045629293, + 1.5723120013717562, + 1.5862199943512678, + 1.5350750181823969, + 1.815809984691441, + 1.5669179847463965, + 1.57741698785685, + 1.5000730054453015, + 1.6400190070271492, + 1.5567999798804522, + 1.384467992465943, + 1.449286995921284, + 1.2938360159751028, + 1.3277200050652027, + 1.3285200111567974, + 1.2304919946473092, + 1.278905023355037, + 1.183280983241275, + 1.2111430114600807, + 1.5569529787171632, + 1.5200890193227679, + 1.4311909908428788, + 1.626322016818449, + 1.3797969731967896, + 1.9339389982633293, + 1.5988740196917206, + 1.3902609935030341, + 1.7768249963410199, + 1.4505319995805621, + 1.4417679922189564, + 1.5118829905986786, + 1.6116720216814429, + 1.3358770229388028, + 1.3601599785033613, + 1.4969310141168535, + 1.3418019807431847, + 1.5364480204880238, + 1.42631700146012, + 1.4090719923842698, + 1.4437729842029512, + 1.7763370124157518, + 1.4941109984647483, + 1.488078007241711, + 1.627822988666594, + 1.6398410080000758, + 1.5746249991934747, + 1.3891679991502315, + 1.3384999765548855, + 1.7955219955183566, + 1.723844005027786, + 1.6847650113049895, + 1.2909320066682994, + 1.3384330086410046, + 1.4779680059291422, + 1.3553850003518164, + 1.3589890149887651, + 1.482174004195258, + 1.5384730068035424, + 1.3521469954866916, + 1.5282680105883628, + 1.4466890133917332, + 1.4890019956510514, + 1.6452899726573378, + 1.4088409952819347, + 1.671316014835611, + 1.5189230034593493, + 1.5445860044565052, + 1.5214699960779399, + 1.3929599954281002, + 1.9557710038498044, + 1.6052010178100318, + 1.5174930158536881, + 1.6766689950600266, + 1.4893359912093729, + 1.5580390172544867, + 1.3899289770051837, + 1.6034309810493141, + 1.618437992874533, + 1.383750990498811, + 1.542187004815787, + 1.4668129733763635, + 1.8375309882685542, + 1.992662000702694, + 2.001329994527623, + 1.5688849962316453, + 1.5694029862061143, + 1.4664650079794228, + 1.5689920110162348, + 1.4261990145314485, + 1.3760819856543094, + 1.5466129989363253, + 1.4360040077008307, + 1.4751929847989231, + 1.4755149895790964, + 1.517002994660288, + 1.6668729949742556, + 1.4925749856047332, + 1.7632849921938032, + 1.8883549782913178, + 1.4439990045502782, + 1.399180997395888, + 1.6708800103515387, + 1.6456190205644816, + 1.5212279977276921, + 1.546059997053817, + 1.349933008896187, + 1.4960120024625212, + 1.6333199746441096, + 1.6181889805011451, + 1.455684978282079, + 1.528391003375873, + 1.678116008406505, + 1.4171910006552935, + 1.363868999760598, + 1.746126014040783, + 1.731508004013449, + 1.7416240007150918, + 1.5803389833308756, + 1.705495989881456, + 1.4332300052046776, + 1.5400319825857878, + 1.6088330012280494, + 1.5571620024275035, + 1.5398780233226717, + 1.566808990901336, + 1.5985830104909837, + 1.3435290020424873, + 1.3572619936894625, + 1.4569029735866934, + 1.492337993113324, + 1.387377007631585, + 1.9115899922326207, + 1.6494890151079744, + 1.3842610060237348, + 1.4888349978718907, + 1.3442019990179688, + 1.371266000205651, + 1.738681981805712, + 1.763464999385178, + 1.507617998868227, + 1.6020530019886792, + 1.7875829944387078, + 1.4637959829997271, + 1.5176559973042458, + 1.6301190189551562, + 1.6525020182598382, + 1.7289860115852207, + 1.4525930164381862, + 1.5075870032887906, + 1.5645140083506703, + 1.5851509815547615, + 1.7544069851282984, + 1.8120220047421753, + 1.7383140220772475, + 1.624523982172832, + 1.6821719764266163, + 1.505005988292396, + 1.6810699889902025, + 1.4259729941841215, + 1.7577869875822216, + 1.4654950064141303, + 1.6272579960059375, + 1.4955509977880865, + 1.7901189858093858, + 1.4950039912946522, + 1.6425540088675916, + 1.5508700162172318, + 1.70273199910298, + 1.6134589968714863, + 1.3580220111180097, + 1.5208690019790083, + 1.4146680186968297, + 1.38524902286008, + 1.4572879881598055, + 1.5335920033976436, + 1.4397870108950883, + 1.5333089977502823, + 1.5286099805962294, + 1.495142001658678, + 1.5087309875525534, + 1.4875710185151547, + 1.852618996053934, + 1.8297630012966692, + 1.5496559790335596, + 1.4140580024104565, + 1.5064949984662235, + 1.5418670081999153, + 1.6496269963681698, + 1.6866959922481328, + 1.4855999907013029, + 1.5720230003353208, + 1.3814939884468913, + 1.7722619813866913, + 1.5593110001645982, + 1.649860991165042, + 1.5102309989742935, + 1.664181996602565, + 1.4635940024163574, + 1.8212069990113378, + 1.7224519979208708, + 1.6232010093517601, + 1.6114350000862032, + 1.5147730009630322, + 1.6380700108129531, + 1.5145030047278851, + 1.6480729973409325, + 1.4802140067331493, + 1.4530940097756684, + 1.5314079937525094, + 1.8041410075966269, + 1.5947459905873984, + 1.651058002607897, + 1.4741960039827973, + 1.5068659849930555, + 1.4870370214339346, + 1.8112319812644273, + 1.6235219954978675, + 1.7626780027057976, + 1.642885006731376, + 1.5498989960178733, + 1.4550719934049994, + 1.7354630108457059, + 1.4218169962987304, + 1.4182740123942494, + 1.5637800097465515, + 1.4477020013146102, + 1.6004199860617518, + 1.5858480182942003, + 1.3965860125608742, + 1.4135189994703978, + 1.946329022757709, + 1.3988630089443177, + 2.128074993379414, + 1.6216379881370813, + 1.5102719771675766, + 1.4728390087839216, + 1.5420870040543377, + 1.4046619762666523, + 1.626181008759886, + 1.899249997222796, + 1.5037280099932104, + 1.5272820019163191, + 1.5145799843594432, + 1.6277079994324595, + 1.6774240066297352, + 1.5842969878576696, + 1.5275009791366756, + 1.4650149969384074, + 1.620730006834492, + 1.552751986309886, + 1.4457209908869117, + 1.667912001721561, + 1.6116999904625118, + 1.4486059953924268, + 1.661752990912646, + 1.3977870112285018, + 1.540754979941994, + 1.960043009603396, + 1.5242710069287568, + 1.5400690026581287, + 1.5344000130426139, + 1.910933991894126, + 1.5149509999901056, + 1.664519979385659, + 1.9102109945379198, + 1.6728579939808697, + 1.7397009942214936, + 1.6152799944393337, + 1.444086985429749, + 1.4144229935482144, + 1.3792040117550641, + 1.5303959953598678, + 1.6203240083996207, + 1.5752479957882315, + 1.9343969761393964, + 1.9829520024359226, + 1.5095429844222963, + 1.768500020261854, + 1.4051409962121397, + 1.60629500169307, + 1.7631839727982879, + 1.642204006202519, + 1.5949129883665591, + 1.5358579985331744, + 1.57954401220195, + 1.4372139994520694, + 1.4831730222795159, + 1.8692860030569136, + 1.414544996805489, + 1.5559190069325268, + 1.5376569936051965, + 1.4503999846056104, + 1.682644011452794, + 1.525861007394269, + 1.508284010924399, + 1.465054985601455, + 1.555587979964912, + 1.363718998618424, + 1.3559549988713115, + 1.8143209745176136, + 1.4534030051436275, + 1.9853079866152257, + 1.6855489811860025, + 1.5976459835655987, + 1.7373989976476878, + 1.6380609886255115, + 2.007597009651363, + 1.9320340070407838, + 1.5487280033994466, + 1.4541560085490346, + 1.6981980006676167, + 1.4572229993063956, + 1.4889359881635755, + 1.5765329881105572, + 1.4274890127126127, + 1.4456069911830127, + 1.603279000846669, + 1.626958983251825, + 1.6565670084673911, + 1.5733919863123447, + 1.5032109804451466, + 1.5498229768127203, + 1.889758015749976, + 1.5294880140572786, + 1.5814449870958924, + 1.7261909961234778, + 1.791849994333461, + 1.575775007950142, + 1.5756110078655183, + 1.4892559847794473, + 1.4948280004318804, + 1.6477109747938812, + 1.9552060111891478, + 1.737976010190323, + 1.6274570079986006, + 1.7052339971996844, + 1.8062619783449918, + 1.705539005342871, + 1.5331300091929734, + 1.937093009473756, + 1.8317369977012277, + 2.023023000219837, + 1.9436599977780133, + 1.6382350004278123, + 1.6622369876131415, + 1.530642999568954, + 1.7745330114848912, + 1.5092910034582019, + 1.9409350061323494, + 1.6030039987526834, + 1.995502010686323, + 1.65688298875466, + 1.6583279939368367, + 1.6123699897434562, + 1.5998550225049257, + 1.459336985135451, + 1.628454978344962, + 1.6608650039415807, + 1.757513004122302, + 1.4935490034986287, + 1.5104789927136153, + 1.539045013487339, + 1.6769850044511259, + 1.4467530127149075, + 1.7698610026855022, + 1.5145090001169592, + 1.430306991096586, + 1.7779520130716264, + 1.569301006384194, + 1.5318480145651847, + 1.7787599936127663, + 1.5032230003271252, + 1.4709020033478737, + 1.666005002334714, + 1.7219450091943145, + 2.118106000125408, + 1.6370690136682242, + 1.477393991081044, + 1.6562969831284136, + 1.6101189830806106, + 1.527981017716229, + 1.9027759844902903, + 1.6332399973180145, + 1.8119360029231757, + 1.702590991044417, + 1.6363759932573885, + 1.6723489970900118, + 1.62718998035416, + 1.6493310104124248, + 1.7582070140633732, + 1.4361540088430047, + 1.5330309979617596, + 1.7030310118570924, + 1.4125200104899704, + 1.9096769974566996, + 1.560748991323635, + 1.4500019897241145, + 1.6075699822977185, + 1.5518470027018338, + 1.6265769954770803 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs24": { + "config": { + "name": "mcs24", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 24, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 1.597105001565069, + "p10_ms": 1.439958717674017, + "p90_ms": 1.8769890157273041, + "min_ms": 1.2566010118462145, + "max_ms": 2.37214399385266, + "mean_ms": 1.630428896023659 + }, + "speedup_vs_control": { + "ratio": 0.9175999720096778, + "ci90_low": 0.900012713886453, + "ci90_high": 0.9274080410750413, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 0.9151080114451793, + "p10": 0.8678924856274991, + "p90": 0.9510558274679333 + }, + "compile": { + "lower_s": 2.619909862987697, + "compile_s": 4.906929579999996, + "first_call_s": 0.0030041450227145106, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [] + ], + "flops": 3195236.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 907736, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 8974336, + "max_containing_size_proof": null + }, + "warm_ms": [ + 1.6416379949077964, + 1.741185027640313, + 1.6929540142882615 + ], + "per_call_ms": [ + 1.4676619903184474, + 1.5033700037747622, + 1.3186020078137517, + 1.4362160000018775, + 1.449698000214994, + 1.755790988681838, + 1.591685984749347, + 1.6167809953913093, + 1.5790750039741397, + 1.4542220160365105, + 1.639852998778224, + 1.4088830212131143, + 1.286526006879285, + 1.2566010118462145, + 1.6551669978071004, + 1.3780919834971428, + 1.7036159988492727, + 1.583127013873309, + 1.5881200088188052, + 1.52091498603113, + 1.4322310162242502, + 1.4900880050845444, + 1.76181600545533, + 1.5068310021888465, + 1.4700710016768426, + 1.4870390004944056, + 1.405170012731105, + 1.5313519979827106, + 1.601258001755923, + 1.6132080054376274, + 1.4344399969559163, + 1.5023320156615227, + 1.6058500041253865, + 1.594897999893874, + 1.3706089812330902, + 1.5711669984739274, + 1.7321829800494015, + 1.5985239879228175, + 1.3719220005441457, + 1.5517420251853764, + 1.556145987706259, + 1.52824999531731, + 1.5787520096637309, + 1.9882000051438808, + 1.6945469833444804, + 1.9370079971849918, + 1.550880988361314, + 1.5887570043560117, + 1.7731150146573782, + 1.9471889827400446, + 1.5520190063398331, + 1.484756008721888, + 1.4626400079578161, + 1.443538989406079, + 1.5431600040756166, + 1.549024018459022, + 1.4389840071089566, + 1.5079799923114479, + 1.4288200181908906, + 2.017644001170993, + 1.8479620048310608, + 1.6859720053616911, + 1.5261310036294162, + 1.5711250016465783, + 1.483820000430569, + 1.5598709869664162, + 1.4633199898526073, + 1.4878499787300825, + 1.4893329935148358, + 1.537100994028151, + 1.6034209984354675, + 1.850105996709317, + 1.5556160069536418, + 1.548874017316848, + 1.494987984187901, + 1.4376009930856526, + 2.0955890067853034, + 1.7033639887813479, + 1.6974539903458208, + 1.4851689920760691, + 1.860463002230972, + 1.64535001385957, + 1.4702320040669292, + 1.4698459999635816, + 1.5146880177780986, + 1.7040600068867207, + 1.5009509806986898, + 1.7430440057069063, + 2.0353130239527673, + 1.7507410084363073, + 1.4746320084668696, + 1.4187080087140203, + 1.5517040155828, + 1.5449129859916866, + 1.5645370003767312, + 1.5501749876420945, + 1.5085990016814321, + 1.385207986459136, + 1.459074002923444, + 1.4026010176166892, + 1.8933450046461076, + 1.7235059931408614, + 1.7420490039512515, + 1.8945379997603595, + 1.7113919893745333, + 1.648864010348916, + 2.0713289850391448, + 1.5472639934159815, + 1.579727017087862, + 1.602530013769865, + 1.7573320074006915, + 1.9008380186278373, + 1.6503840161021799, + 1.6562739911023527, + 1.8888429913204163, + 1.5094160044100136, + 1.9483700161799788, + 1.591463020304218, + 1.5679029747843742, + 1.6328630154021084, + 1.8042979936581105, + 1.6040679765865207, + 1.5034590032882988, + 1.4576099929399788, + 1.4537199749611318, + 1.6892570129130036, + 1.6283570148516446, + 1.944092015037313, + 1.8198649922851473, + 1.565348997246474, + 1.682183996308595, + 1.7008149879984558, + 1.542559009976685, + 1.5480039874091744, + 1.8965349881909788, + 1.5884479798842221, + 1.865394995547831, + 1.4417330094147474, + 1.3718159752897918, + 1.638093002839014, + 1.5188459947239608, + 1.5816020022612065, + 1.6059890040196478, + 1.6550849832128733, + 1.6049029945861548, + 1.4858170179650187, + 1.4968219911679626, + 1.6811669920571148, + 1.5760530077386647, + 1.4241469907574356, + 1.4400670188479125, + 1.4063010166864842, + 2.37214399385266, + 1.633687992580235, + 1.7858339997474104, + 1.6302230069413781, + 1.4568290207535028, + 1.6430179821327329, + 1.6961029905360192, + 1.429451018339023, + 1.5574319986626506, + 1.6056140011642128, + 2.0615480025298893, + 1.7494260100647807, + 1.4617840060964227, + 1.517511991551146, + 1.7074299976229668, + 1.4811060100328177, + 2.016314014326781, + 1.5844559820834547, + 1.5931920206639916, + 1.654680003412068, + 1.77437299862504, + 1.7367130203638226, + 1.5779859968461096, + 1.606934005394578, + 1.6874830180313438, + 1.3398280134424567, + 1.482469990151003, + 1.4180019788909703, + 1.6247409803327173, + 1.6051289858296514, + 2.2259810066316277, + 1.63903902284801, + 1.5282130043487996, + 1.6453640128020197, + 1.9921420025639236, + 1.6751569928601384, + 2.071460010483861, + 1.7071510083042085, + 1.6099099884741008, + 1.8546649953350425, + 1.4758510224055499, + 1.779603015165776, + 1.4292139967437834, + 1.7080020043067634, + 1.5611840062774718, + 1.7285950016230345, + 1.589445018908009, + 1.4912000042386353, + 1.9186290155630559, + 1.9823000184260309, + 1.656592998187989, + 2.095600008033216, + 1.7129530024249107, + 2.1912270167376846, + 1.6566549893468618, + 1.567365980008617, + 1.5684410172980279, + 1.7356880125589669, + 1.706443988950923, + 1.5046090120449662, + 1.5859270060900599, + 1.4602919982280582, + 1.6076260071713477, + 1.5412709908559918, + 1.4016169880051166, + 1.6097179905045778, + 1.76535701029934, + 1.4096680097281933, + 1.6182450053747743, + 1.731814001686871, + 1.5076779818627983, + 1.6245509905274957, + 1.5739020018372685, + 1.6320210124831647, + 1.5378730022348464, + 1.6023060015868396, + 1.49490698822774, + 1.5526080096606165, + 1.4768679975531995, + 1.6169210139196366, + 1.921779999975115, + 1.5007729816716164, + 1.4916879881639034, + 1.5640660130884498, + 1.6498129989486188, + 1.6574400069657713, + 1.539449003757909, + 1.8223590159323066, + 1.9124289974570274, + 1.8442670116201043, + 1.7918509838636965, + 1.8816060037352145, + 1.7789760022424161, + 1.6459230100736022, + 1.7227440257556736, + 1.5649929991923273, + 1.4987440081313252, + 1.7908139852806926, + 1.7086690058931708, + 1.9062369829043746, + 1.632233994314447, + 1.4906680153217167, + 1.5900189755484462, + 1.6989799914881587, + 1.5712280001025647, + 1.7147809849120677, + 1.6175190103240311, + 1.5451550134457648, + 1.521547994343564, + 1.7742049822118133, + 1.4407600101549178, + 1.4315599983092397, + 1.4225859777070582, + 1.4718439779244363, + 1.5756869979668409, + 1.5657080220989883, + 1.479416008805856, + 1.5438030241057277, + 1.5905220061540604, + 1.5247399860527366, + 1.3729680213145912, + 1.4231959939934313, + 1.6502689977642149, + 1.5419659903272986, + 1.5108429943211377, + 1.5111099928617477, + 1.5751050086691976, + 1.539794000564143, + 1.7570660274941474, + 1.5672420267947018, + 1.5869670023676008, + 1.3966429978609085, + 1.432327990187332, + 1.4275330177042633, + 1.446337002562359, + 1.560892997076735, + 1.4660140150226653, + 1.4945899893064052, + 1.7821399960666895, + 1.7084369901567698, + 1.5375540242530406, + 1.9287579925730824, + 1.8049209902528673, + 1.6944629896897823, + 1.5615170123055577, + 1.5069920045789331, + 1.6312419902533293, + 1.599201001226902, + 1.5396270027849823, + 1.619346992811188, + 1.4299180184025317, + 1.544161990750581, + 1.4135950186755508, + 1.4869839942548424, + 1.4162730076350272, + 1.4119429979473352, + 1.6407299845013767, + 1.4151179930195212, + 1.9105170213151723, + 1.504668005509302, + 1.6301760042551905, + 1.4855370100121945, + 1.5083749894984066, + 1.4046610158402473, + 1.757702004397288, + 1.392272999510169, + 1.4992929936852306, + 1.617699017515406, + 1.6839370073284954, + 1.977635984076187, + 1.781091996235773, + 2.1102270111441612, + 1.576066017150879, + 1.7592969816178083, + 1.4849649742245674, + 1.70427598641254, + 1.6894479922484607, + 1.6216799849644303, + 1.7263629997614771, + 1.688134012511, + 2.06157797947526, + 1.7978260002564639, + 1.509708003140986, + 1.5599869948346168, + 1.7402280063834041, + 1.7277339939028025, + 1.6096689796540886, + 1.811206981074065, + 1.6177939833141863, + 1.5928669890854508, + 2.0067510195076466, + 1.8355950014665723, + 2.0311650005169213, + 1.7166160105261952, + 1.8764760170597583, + 1.6465350054204464, + 1.727769005810842, + 1.7584730230737478, + 1.904325996292755, + 1.6588479920756072, + 1.549722015624866, + 1.6523569938726723, + 1.5973510162439197, + 1.9958880147896707, + 1.733754004817456, + 1.5760640089865774, + 1.5935819828882813, + 2.1327319846022874, + 1.5810320037417114, + 1.6104500100482255, + 1.5297640056814998, + 1.5574429999105632, + 1.6555600159335881, + 1.6315819812007248, + 1.696494990028441, + 1.4817669871263206, + 1.7238309956155717, + 2.0600819843821228, + 1.7897160141728818, + 1.5898169949650764, + 1.6708390030544251, + 1.748858019709587, + 1.574199995957315, + 1.750611001625657, + 1.6745940083637834, + 1.5968589868862182, + 2.0318950118962675, + 1.8406150047667325, + 1.5370120236184448, + 1.7451650055591017, + 1.6019539907574654, + 1.6481709899380803, + 1.7486890137661248, + 1.5216929896268994, + 1.5197370084933937, + 1.582870987476781, + 1.6429329989477992, + 1.858170988271013, + 1.8594389839563519, + 1.6223769926000386, + 1.7058929952327162, + 1.5824350120965391, + 1.6865490179043263, + 1.6365500050596893, + 1.7094300128519535, + 1.6151370073202997, + 1.5045329928398132, + 1.509184017777443 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876812, + "stream_log_likelihood": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0008513474499103632, + "p99_position_error": 0.0007893460711577849, + "median_position_error": 0.00040657539052049436, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609120645, + "median": 0.030920850414809298, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711579142, + "p99_position_error": 0.0007893460711576755, + "median_position_error": 0.0004065753905207063, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + } + }, + "vmap": { + "best": "mcs18", + "routes": [ + "control", + "mcs18", + "mcs20", + "mcs24" + ], + "batches": [ + 1, + 4, + 16 + ], + "rows": { + "control_vmap1": { + "config": "control", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 1.4495005161734298, + "p10_ms": 1.2531039188615978, + "p90_ms": 1.7158517963252962, + "min_ms": 1.1369280109647661, + "max_ms": 2.277750987559557, + "mean_ms": 1.4762707293994026 + }, + "median_ms_per_likelihood": 1.4495005161734298, + "compile": { + "lower_s": 3.3375132299843244, + "compile_s": 5.033083348011132, + "first_call_s": 0.0026494069898035377, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2813353.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 901720, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 3215360, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap4": { + "config": "control", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 3.964828996686265, + "p10_ms": 3.5396839055465534, + "p90_ms": 4.516517507727258, + "min_ms": 3.307094011688605, + "max_ms": 5.27446300839074, + "mean_ms": 3.9990184400085127 + }, + "median_ms_per_likelihood": 0.9912072491715662, + "compile": { + "lower_s": 3.3289998849795666, + "compile_s": 5.348689678998198, + "first_call_s": 0.005169693991774693, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 10339222.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3200344, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 3534848, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap16": { + "config": "control", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 13.140824012225494, + "p10_ms": 10.957640802371316, + "p90_ms": 14.618824573699385, + "min_ms": 10.07982000010088, + "max_ms": 15.87671399465762, + "mean_ms": 13.19496433781751 + }, + "median_ms_per_likelihood": 0.8213015007640934, + "compile": { + "lower_s": 3.4782426330202725, + "compile_s": 5.550916251988383, + "first_call_s": 0.015390693995868787, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 40452632.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12396824, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2007040, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap1": { + "config": "mcs18", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 1.5649794950149953, + "p10_ms": 1.2897089938633144, + "p90_ms": 1.8583328172098847, + "min_ms": 1.1948950123041868, + "max_ms": 2.284514019265771, + "mean_ms": 1.5684827880613739 + }, + "median_ms_per_likelihood": 1.5649794950149953, + "compile": { + "lower_s": 3.3560524829954375, + "compile_s": 5.344949574995553, + "first_call_s": 0.00307402599719353, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2950598.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 904088, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 16396288, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9262105483110761, + "ci90_low": 0.9098906856070057, + "ci90_high": 0.9456747748744179, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap4": { + "config": "mcs18", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 4.234923995682038, + "p10_ms": 3.7898874026723206, + "p90_ms": 4.766668600495905, + "min_ms": 3.5218659904785454, + "max_ms": 5.881256976863369, + "mean_ms": 4.262586374679813 + }, + "median_ms_per_likelihood": 1.0587309989205096, + "compile": { + "lower_s": 3.4029921400069725, + "compile_s": 5.661442991986405, + "first_call_s": 0.005808254994917661, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 10862882.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3208664, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 40890368, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9362219961276367, + "ci90_low": 0.9186088841825412, + "ci90_high": 0.9549319889859773, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs18_vmap16": { + "config": "mcs18", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 13.695960995391943, + "p10_ms": 11.58428451162763, + "p90_ms": 15.42402379855048, + "min_ms": 10.581708018435165, + "max_ms": 17.04902498750016, + "mean_ms": 13.84992560982937 + }, + "median_ms_per_likelihood": 0.8559975622119964, + "compile": { + "lower_s": 3.535950798977865, + "compile_s": 5.781637423002394, + "first_call_s": 0.013609179004561156, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 42523956.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12430488, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 42160128, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9594671025017356, + "ci90_low": 0.9455121015366467, + "ci90_high": 0.9929415357948094, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap1": { + "config": "mcs20", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 1.5477784909307957, + "p10_ms": 1.2977391947060823, + "p90_ms": 1.8478707992471755, + "min_ms": 1.2102810142096132, + "max_ms": 2.2853990085422993, + "mean_ms": 1.5597796887595905 + }, + "median_ms_per_likelihood": 1.5477784909307957, + "compile": { + "lower_s": 3.430391770991264, + "compile_s": 5.317896382999606, + "first_call_s": 0.0028939830081071705, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 3039132.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 905304, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 46211072, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.93650385030337, + "ci90_low": 0.9158320361203155, + "ci90_high": 0.9622733708426275, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap4": { + "config": "mcs20", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 4.3057559814769775, + "p10_ms": 3.8801504852017388, + "p90_ms": 4.877437688992359, + "min_ms": 3.6848370218649507, + "max_ms": 5.5442359880544245, + "mean_ms": 4.34951027353236 + }, + "median_ms_per_likelihood": 1.0764389953692444, + "compile": { + "lower_s": 3.3625987129926216, + "compile_s": 6.002069764013868, + "first_call_s": 0.005300518008880317, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 11200138.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3214040, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 35926016, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9208206442126879, + "ci90_low": 0.9017302418985326, + "ci90_high": 0.9384155644725527, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap16": { + "config": "mcs20", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 14.264940997236408, + "p10_ms": 12.118321101297624, + "p90_ms": 16.007461777189746, + "min_ms": 11.079532006988302, + "max_ms": 17.56552400183864, + "mean_ms": 14.41096842456318 + }, + "median_ms_per_likelihood": 0.8915588123272755, + "compile": { + "lower_s": 3.559113263996551, + "compile_s": 5.976888339006109, + "first_call_s": 0.014704155008075759, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 43857436.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12452888, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 51593216, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9211972215497636, + "ci90_low": 0.9028483398356169, + "ci90_high": 0.9543164718784634, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap1": { + "config": "mcs24", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 1.633648993447423, + "p10_ms": 1.3665171776665375, + "p90_ms": 1.9232380960602313, + "min_ms": 1.254843984497711, + "max_ms": 2.2306850005406886, + "mean_ms": 1.6360265461116796 + }, + "median_ms_per_likelihood": 1.633648993447423, + "compile": { + "lower_s": 3.4512862190022133, + "compile_s": 5.800241413002368, + "first_call_s": 0.0030461529968306422, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 3226778.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 907800, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 54517760, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.8872778191566156, + "ci90_low": 0.8709935440785286, + "ci90_high": 0.9050854183722021, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap4": { + "config": "mcs24", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 4.666966502554715, + "p10_ms": 4.19982218882069, + "p90_ms": 5.225766313378699, + "min_ms": 3.9013890200294554, + "max_ms": 6.218124006409198, + "mean_ms": 4.701198294569622 + }, + "median_ms_per_likelihood": 1.1667416256386787, + "compile": { + "lower_s": 3.430010804993799, + "compile_s": 6.402116206998471, + "first_call_s": 0.005664138006977737, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 11916962.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 3225304, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 37064704, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.8495516294183605, + "ci90_low": 0.8333841509580358, + "ci90_high": 0.8666872838897086, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs24_vmap16": { + "config": "mcs24", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 14.799120006500743, + "p10_ms": 13.210776590858586, + "p90_ms": 16.19304569903761, + "min_ms": 11.564007989363745, + "max_ms": 18.399093009065837, + "mean_ms": 14.791498770282487 + }, + "median_ms_per_likelihood": 0.9249450004062965, + "compile": { + "lower_s": 3.5421290719823446, + "compile_s": 6.744323274004273, + "first_call_s": 0.013158175977878273, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 46693644.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 12497752, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 59502592, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876812, + -4.1609527513907665, + 7.657972665309639, + 9.36455094905725, + 7.051561357429164, + 9.219327498422563, + 0.8907045816755463, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966814, + 0.702590691739907, + 7.669569297550711, + -0.4639011650528264, + -5.412376751794213, + 5.343244353416, + -20.481275097418568 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.887946310757206, + "ci90_low": 0.863907395373902, + "ci90_high": 0.9246087054628342, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + } + } + }, + "step0_split": { + "control": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.12157049786765128, + "ray_trace": 0.4276464896975085, + "general_gather": 1.3682614808203653, + "route_inputs": 0.703496509231627, + "containment": 0.9287250140914693 + }, + "ray_trace_ms": 0.30607599182985723, + "containment_ms": 0.5010785243939608, + "route_input_materialisation_ms": 0.2758500195341185, + "general_gather_reference_ms": 0.9406149911228567, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.8071545162238181, + "containment_share_of_step0": 0.6207962841342951, + "step0_share_of_likelihood": 0.5507694206238564, + "containment_share_of_likelihood": 0.3419156097380886 + }, + "mcs18": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.1193240168504417, + "ray_trace": 0.418381008785218, + "general_gather": 1.3538249913835898, + "route_inputs": 0.6836070097051561, + "containment": 0.974822003627196 + }, + "ray_trace_ms": 0.2990569919347763, + "containment_ms": 0.556440994841978, + "route_input_materialisation_ms": 0.2652260009199381, + "general_gather_reference_ms": 0.9354439825983718, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.8554979867767543, + "containment_share_of_step0": 0.6504293445955046, + "step0_share_of_likelihood": 0.5562089258774129, + "containment_share_of_likelihood": 0.36177460711661524 + }, + "mcs20": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.11961098061874509, + "ray_trace": 0.4229589976603165, + "general_gather": 1.3855059951310977, + "route_inputs": 0.6828305049566552, + "containment": 0.9502744942437857 + }, + "ray_trace_ms": 0.30334801704157144, + "containment_ms": 0.5273154965834692, + "route_input_materialisation_ms": 0.2598715072963387, + "general_gather_reference_ms": 0.9625469974707812, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.8306635136250407, + "containment_share_of_step0": 0.6348123974799958, + "step0_share_of_likelihood": 0.5335449052446076, + "containment_share_of_likelihood": 0.3387009204615665 + }, + "mcs24": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.1228534965775907, + "ray_trace": 0.41318850708194077, + "general_gather": 1.3542575034080073, + "route_inputs": 0.6915164849488065, + "containment": 0.9339310054201633 + }, + "ray_trace_ms": 0.29033501050435007, + "containment_ms": 0.5207424983382225, + "route_input_materialisation_ms": 0.2783279778668657, + "general_gather_reference_ms": 0.9410689963260666, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.8110775088425726, + "containment_share_of_step0": 0.6420378973167864, + "step0_share_of_likelihood": 0.5078423197271089, + "containment_share_of_likelihood": 0.3260540151260722 + } + }, + "uncapped_containing_counts": { + "control": { + "prior": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [ + 12 + ], + "draws_exceeding_cap_per_step": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": -2, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 15, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 2, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 8, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs18": { + "prior": { + "n_draws": 200, + "cap": 18, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 1, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 18, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 5, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 18, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 11, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs20": { + "prior": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 3, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 20, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 7, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 13, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs24": { + "prior": { + "n_draws": 200, + "cap": 24, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 7, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 24, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 11, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 24, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 17, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + } + }, + "mcs_headroom": { + "control_max_containing_size": 15, + "rows": { + "control": { + "mcs": 15, + "median_ms": 1.4655035047326237, + "control_over_row": { + "ratio": 1.0, + "ci90_low": 0.9822866649230252, + "ci90_high": 1.018805779813082, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0, + "compile_s": 4.2897308630053885, + "compile_ratio_vs_control": 1.0, + "temp_bytes": 901656, + "flops": 2801341.0, + "vmap16_ms_per_likelihood": 0.8213015007640934, + "vmap16_control_over_row": null, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 1, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 0.0 + }, + "mcs18": { + "mcs": 18, + "median_ms": 1.5380874829133973, + "control_over_row": { + "ratio": 0.9528089403319977, + "ci90_low": 0.9343722069591963, + "ci90_high": 0.9650918127139239, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0495283552351629, + "compile_s": 4.48203518500668, + "compile_ratio_vs_control": 1.044828994671839, + "temp_bytes": 904024, + "flops": 2933102.0, + "vmap16_ms_per_likelihood": 0.8559975622119964, + "vmap16_control_over_row": { + "ratio": 0.9594671025017356, + "ci90_low": 0.9455121015366467, + "ci90_high": 0.9929415357948094, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 6.081392078214739e-14 + }, + "mcs20": { + "mcs": 20, + "median_ms": 1.5568764792988077, + "control_over_row": { + "ratio": 0.9413100680875229, + "ci90_low": 0.9218777639303929, + "ci90_high": 0.9526963092541254, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0623492023533951, + "compile_s": 4.589658130978933, + "compile_ratio_vs_control": 1.069917502414922, + "temp_bytes": 905240, + "flops": 3017410.0, + "vmap16_ms_per_likelihood": 0.8915588123272755, + "vmap16_control_over_row": { + "ratio": 0.9211972215497636, + "ci90_low": 0.9028483398356169, + "ci90_high": 0.9543164718784634, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 6.081392078214739e-14 + }, + "mcs24": { + "mcs": 24, + "median_ms": 1.597105001565069, + "control_over_row": { + "ratio": 0.9175999720096778, + "ci90_low": 0.900012713886453, + "ci90_high": 0.9274080410750413, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0897995101393194, + "compile_s": 4.906929579999996, + "compile_ratio_vs_control": 1.143878191127869, + "temp_bytes": 907736, + "flops": 3195236.0, + "vmap16_ms_per_likelihood": 0.9249450004062965, + "vmap16_control_over_row": { + "ratio": 0.887946310757206, + "ci90_low": 0.863907395373902, + "ci90_high": 0.9246087054628342, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.0008513474499103632, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 6.081392078214739e-14 + } + }, + "uncapped_max_over_all_samples_and_steps": 17, + "decision_rule": "smallest N >= 18 with uncapped max <= N - 3, no unexplained change, compile <= +20 %, scalar median cost <= ~5 % (human picks N at the step-2 checkpoint)", + "rule_candidates": [] + }, + "gates": { + "fiducial_bit_exact": { + "value": 7.743201200876812, + "expected": 7.743201200876812, + "repr": "7.743201200876812", + "pass": true + }, + "max_containing_size_patch": { + "control": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + }, + "mcs18": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + }, + "mcs20": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + }, + "mcs24": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + }, + "patch_restored": { + "module_constant": 15, + "init_default": [ + 15, + null + ], + "step0_containment": "structured", + "pass": true + }, + "patch_keeps_later_defaults": { + "probes": { + "mcs18": { + "mcs": 18, + "__init__": { + "during": { + "max_containing_size": "18", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "18" + } + }, + "constructed_max_containing_size": 18, + "constructed_step0_layout": "None", + "pass": true + }, + "mcs20": { + "mcs": 20, + "__init__": { + "during": { + "max_containing_size": "20", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "20" + } + }, + "constructed_max_containing_size": 20, + "constructed_step0_layout": "None", + "pass": true + }, + "mcs24": { + "mcs": 24, + "__init__": { + "during": { + "max_containing_size": "24", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "24" + } + }, + "constructed_max_containing_size": 24, + "constructed_step0_layout": "None", + "pass": true + } + }, + "pass": true + }, + "grad": { + "control": { + "compile_s": 6.793033783993451, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.786492377833373, + 2.8041319222503596, + 1781.7386158499905 + ], + [ + 249.2584709570848, + 214.72130119062615, + 374.39194598162, + 813.0025446226292, + 3314.4494363252807 + ], + [ + -30.046183166223308, + 41.855894384352354, + 53.12915308135319, + -17.189194514945925, + 1304.41858376655 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 0.0 + }, + "mcs18": { + "compile_s": 7.442761393002002, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783335, + 2.80413192225053, + 1781.7386158499905 + ], + [ + 249.2584709570848, + 214.72130119062615, + 374.39194598162, + 813.0025446226292, + 3314.4494363252807 + ], + [ + -30.046183166223535, + 41.855894384352354, + 53.12915308135318, + -17.189194514945868, + 1304.41858376655 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 6.081392078214739e-14 + }, + "mcs20": { + "compile_s": 7.768679987988435, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783335, + 2.80413192225053, + 1781.7386158499905 + ], + [ + 249.2584709570848, + 214.72130119062615, + 374.39194598162, + 813.0025446226292, + 3314.4494363252807 + ], + [ + -30.046183166223535, + 41.855894384352354, + 53.12915308135318, + -17.189194514945868, + 1304.41858376655 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 6.081392078214739e-14 + }, + "mcs24": { + "compile_s": 7.952023865975207, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304412241, + 53.13429595959836, + 31.78649237783335, + 2.80413192225053, + 1781.7386158499905 + ], + [ + 249.2584709570848, + 214.72130119062615, + 374.39194598162, + 813.0025446226292, + 3314.4494363252807 + ], + [ + -30.046183166223535, + 41.855894384352354, + 53.12915308135318, + -17.189194514945868, + 1304.41858376655 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 6.081392078214739e-14 + } + }, + "mcs_no_unexplained_change": { + "mcs18": { + "max_containing_size": 18, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 0, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 6.081392078214739e-14, + "explanation": "padded-length reduction rounding (log L bit-identical)" + }, + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 7.567472852885895e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 6.081392078214739e-14, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + }, + "mcs20": { + "max_containing_size": 20, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 0, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 6.081392078214739e-14, + "explanation": "padded-length reduction rounding (log L bit-identical)" + }, + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 7.567472852885895e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 6.081392078214739e-14, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + }, + "mcs24": { + "max_containing_size": 24, + "fiducial_log_likelihood": 7.743201200876812, + "fiducial_repr": "7.743201200876812", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 0, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 6.081392078214739e-14, + "explanation": "padded-length reduction rounding (log L bit-identical)" + }, + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 7.567472852885895e-15, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 6.081392078214739e-14, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + } + } + }, + "all_gates_pass": true, + "completeness_compile": { + "control_prior": { + "lower_s": 3.458940712007461, + "compile_s": 5.7101003139978275, + "first_call_s": 0.002807413024129346, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [], + [ + 15, + 2 + ] + ], + "flops": 2801341.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 264, + "temp_size_in_bytes": 901592, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7430144, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "control_stress": { + "lower_s": 1.1007693150022533, + "compile_s": 1.8274762749788351, + "first_call_s": 0.002640432008774951, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 15, + 2 + ] + ], + "flops": 2746879.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 240, + "temp_size_in_bytes": 901144, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1118208, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "mcs18_prior": { + "lower_s": 3.411665604013251, + "compile_s": 5.774980157992104, + "first_call_s": 0.002947326982393861, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864, + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [], + [ + 18, + 2 + ] + ], + "flops": 2933102.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 312, + "temp_size_in_bytes": 903960, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7696384, + "max_containing_size_proof": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + } + }, + "mcs18_stress": { + "lower_s": 0.996797936008079, + "compile_s": 1.9050439029815607, + "first_call_s": 0.0028693990025203675, + "traced_rows_per_step": [ + 11859, + 864, + 864, + 864, + 864, + 864, + 864, + 864 + ], + "output_shapes": [ + [ + 18, + 2 + ] + ], + "flops": 2855615.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 288, + "temp_size_in_bytes": 903512, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1122304, + "max_containing_size_proof": { + "positions_shape": [ + 18, + 2 + ], + "expected_rows": 18, + "pass": true + } + }, + "mcs20_prior": { + "lower_s": 3.576269935001619, + "compile_s": 5.863647318998119, + "first_call_s": 0.002957240998512134, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [], + [ + 20, + 2 + ] + ], + "flops": 3017410.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 344, + "temp_size_in_bytes": 905176, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7614464, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "mcs20_stress": { + "lower_s": 0.9983673219976481, + "compile_s": 1.8576520439819433, + "first_call_s": 0.0028822370222769678, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 20, + 2 + ] + ], + "flops": 2922293.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 320, + "temp_size_in_bytes": 904728, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1040384, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "mcs24_prior": { + "lower_s": 3.6680872490105685, + "compile_s": 6.136533268989297, + "first_call_s": 0.002946319989860058, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [], + [ + 24, + 2 + ] + ], + "flops": 3195236.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 408, + "temp_size_in_bytes": 907672, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7811072, + "max_containing_size_proof": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + }, + "mcs24_stress": { + "lower_s": 1.0189049979962874, + "compile_s": 1.863690369995311, + "first_call_s": 0.0027793049812316895, + "traced_rows_per_step": [ + 11859, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152, + 1152 + ], + "output_shapes": [ + [ + 24, + 2 + ] + ], + "flops": 3059387.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 384, + "temp_size_in_bytes": 907224, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 0, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1015808, + "max_containing_size_proof": { + "positions_shape": [ + 24, + 2 + ], + "expected_rows": 24, + "pass": true + } + } + }, + "progress": [ + "[ 4.7 s] configs: control(n=8,rows=11859), mcs18(n=8,rows=11859), mcs20(n=8,rows=11859), mcs24(n=8,rows=11859), reference(n=9,rows=268677), reference_b(n=10,rows=115473)", + "[ 32.5 s] reference reference solved on 200 prior + 200 stress draws (compile 2.0 s)", + "[ 55.9 s] reference reference_b solved on 200 prior + 200 stress draws (compile 2.4 s)", + "[ 55.9 s] reference floor: {\"prior\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.00015786921423151782, \"p99_position_error\": 0.0001280749711777913, \"median_position_error\": 5.9668954361473236e-05, \"ref_distinct_histogram\": {\"2\": 21, \"4\": 179}, \"abs_delta_logl_vs_reference\": {\"max\": 0.09204751533968647, \"p99\": 0.06845503627316121, \"median\": 0.004628222675307825, \"n_nonfinite_mismatch\": 0}}, \"stress\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.00015786921423129578, \"p99_position_error\": 0.00014084184669768283, \"median_position_error\": 5.966895436132821e-05, \"ref_distinct_histogram\": {\"2\": 163, \"4\": 37}}}", + "[ 109.1 s] completeness control prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 109.2 s] completeness mcs18 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 109.2 s] completeness mcs20 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 109.2 s] completeness mcs24 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142", + "[ 109.2 s] reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359933, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.7590830914129167, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}}", + "[ 109.2 s] timing: compiling every route (fresh closure + clear_caches)", + "[ 140.6 s] timing: 20 rounds x 20 calls x 4 routes done", + "[ 141.1 s] fiducial gate: 7.743201200876812 == 7.743201200876812: True", + "[ 189.4 s] grad gate: control=True, mcs18=True, mcs20=True, mcs24=True", + "[ 189.4 s] best admissible (precision-equivalent): mcs18; any precision: mcs18", + "[ 335.6 s] vmap: control_vmap1 1.450 ms/L, control_vmap4 0.991 ms/L, control_vmap16 0.821 ms/L, mcs18_vmap1 1.565 ms/L, mcs18_vmap4 1.059 ms/L, mcs18_vmap16 0.856 ms/L, mcs20_vmap1 1.548 ms/L, mcs20_vmap4 1.076 ms/L, mcs20_vmap16 0.892 ms/L, mcs24_vmap1 1.634 ms/L, mcs24_vmap4 1.167 ms/L, mcs24_vmap16 0.925 ms/L", + "[ 335.6 s] step-0 split: ray trace vs ray trace + containment per geometry", + "[ 355.6 s] step-0 split: control trace 0.306 contain 0.501, mcs18 trace 0.299 contain 0.556, mcs20 trace 0.303 contain 0.527, mcs24 trace 0.290 contain 0.521", + "[ 355.6 s] uncapped containing counts (NumPy path) on the prior draws", + "[ 397.1 s] uncapped prior: max per step [17, 13, 11, 9, 7, 5, 5, 5]; control exceed/step [1, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 397.1 s] uncapped stream: max per step [13, 9, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 397.1 s] uncapped stress: max per step [7, 5, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 397.2 s] mcs gate mcs18: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True", + "[ 397.2 s] mcs gate mcs20: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True", + "[ 397.2 s] mcs gate mcs24: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True" + ], + "wall_s": 397.20861472698743 +} \ No newline at end of file diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.png b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.png new file mode 100644 index 0000000000000000000000000000000000000000..b41641c31a567214a20c71888d36f581d9ea5bbd GIT binary patch literal 93849 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 literal 0 HcmV?d00001 diff --git a/results/notes/point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out b/results/notes/point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out new file mode 100644 index 000000000..ca091707e --- /dev/null +++ b/results/notes/point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out @@ -0,0 +1,90 @@ +AP_ROOT=/mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom +========================================== +Sun 27 Sep 18:33:36 BST 2026 +euclid-ral-compute-10-4 +Model name: Intel(R) Xeon(R) Platinum 8490H +partition: ral +cpus-per-task: 8 +sched_affinity: 8 +loadavg: 206.33 208.14 209.96 213/3240 160359 +Cell: point_source_image/likelihood_breakdown/solver_config_sweep --mcs-headroom +Thread env: OMP=1 MKL=1 OPENBLAS=1 NPROC=8 +XLA_FLAGS: --xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false +PYTHONPATH: /mnt/ral/jnightin/PyAuto:/mnt/ral/jnightin/PyAuto/PyAutoNerves:/mnt/ral/jnightin/PyAuto/PyAutoFit:/mnt/ral/jnightin/PyAuto/PyAutoArray:/mnt/ral/jnightin/PyAuto/PyAutoGalaxy:/mnt/ral/jnightin/PyAuto/PyAutoLens +=== source revisions === +PyAutoNerves (mirror) bf104102312852537159b7fad2f998ab6677b4e4 +PyAutoFit (mirror) c156a9d8e8eb9f82b6da169b1d50b7e64580fe98 +PyAutoArray (mirror) e281abf3257e9efd4915f1daa9acc0498be250a5 +PyAutoGalaxy (mirror) ba8a08fabcb13d9472f2bd43ef4fea6039284d50 +PyAutoLens (mirror) dcbd4b711120641cc0ecc6490d868795ad717b07 +AP_ROOT rev: d6757ad0513196470329ae46c482ca308f0ff73d +=== import provenance === +autoarray 2026.8.17.1 /mnt/ral/jnightin/PyAuto/PyAutoArray/autoarray/__init__.py +autofit 2026.8.17.1 /mnt/ral/jnightin/PyAuto/PyAutoFit/autofit/__init__.py +autogalaxy 2026.8.17.1 /mnt/ral/jnightin/PyAuto/PyAutoGalaxy/autogalaxy/__init__.py +autolens 2026.8.17.1 /mnt/ral/jnightin/PyAuto/PyAutoLens/autolens/__init__.py +MAX_CONTAINING_SIZE 15 _STEP0_CONTAINMENT structured +jax 0.10.2 jaxlib 0.10.2 numpy 2.2.6 [CpuDevice(id=0)] +========================================== +RUN hpc_ral_cpu_fp64 -> /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image +Sun 27 Sep 18:33:38 BST 2026 +loadavg: 206.33 208.14 209.96 207/3240 160400 +[ 4.7 s] configs: control(n=8,rows=11859), mcs18(n=8,rows=11859), mcs20(n=8,rows=11859), mcs24(n=8,rows=11859), reference(n=9,rows=268677), reference_b(n=10,rows=115473) +[ 32.5 s] reference reference solved on 200 prior + 200 stress draws (compile 2.0 s) +[ 55.9 s] reference reference_b solved on 200 prior + 200 stress draws (compile 2.4 s) +[ 55.9 s] reference floor: {"prior": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423151782, "p99_position_error": 0.0001280749711777913, "median_position_error": 5.9668954361473236e-05, "ref_distinct_histogram": {"2": 21, "4": 179}, "abs_delta_logl_vs_reference": {"max": 0.09204751533968647, "p99": 0.06845503627316121, "median": 0.004628222675307825, "n_nonfinite_mismatch": 0}}, "stress": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423129578, "p99_position_error": 0.00014084184669768283, "median_position_error": 5.966895436132821e-05, "ref_distinct_histogram": {"2": 163, "4": 37}}} +[ 109.1 s] completeness control prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142 +[ 109.2 s] completeness mcs18 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142 +[ 109.2 s] completeness mcs20 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142 +[ 109.2 s] completeness mcs24 prior mult 1.000 raw 1.000 maxerr 0.0008513474499103632 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711579142 +[ 109.2 s] reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359933, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.7590830914129167, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}} +[ 109.2 s] timing: compiling every route (fresh closure + clear_caches) +[ 140.6 s] timing: 20 rounds x 20 calls x 4 routes done +[ 141.1 s] fiducial gate: 7.743201200876812 == 7.743201200876812: True +[ 189.4 s] grad gate: control=True, mcs18=True, mcs20=True, mcs24=True +[ 189.4 s] best admissible (precision-equivalent): mcs18; any precision: mcs18 +[ 335.6 s] vmap: control_vmap1 1.450 ms/L, control_vmap4 0.991 ms/L, control_vmap16 0.821 ms/L, mcs18_vmap1 1.565 ms/L, mcs18_vmap4 1.059 ms/L, mcs18_vmap16 0.856 ms/L, mcs20_vmap1 1.548 ms/L, mcs20_vmap4 1.076 ms/L, mcs20_vmap16 0.892 ms/L, mcs24_vmap1 1.634 ms/L, mcs24_vmap4 1.167 ms/L, mcs24_vmap16 0.925 ms/L +[ 335.6 s] step-0 split: ray trace vs ray trace + containment per geometry +[ 355.6 s] step-0 split: control trace 0.306 contain 0.501, mcs18 trace 0.299 contain 0.556, mcs20 trace 0.303 contain 0.527, mcs24 trace 0.290 contain 0.521 +[ 355.6 s] uncapped containing counts (NumPy path) on the prior draws +[ 397.1 s] uncapped prior: max per step [17, 13, 11, 9, 7, 5, 5, 5]; control exceed/step [1, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 397.1 s] uncapped stream: max per step [13, 9, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 397.1 s] uncapped stress: max per step [7, 5, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs18 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs24 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 397.2 s] mcs gate mcs18: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True +[ 397.2 s] mcs gate mcs20: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True +[ 397.2 s] mcs gate mcs24: 0 draw changes (0 image-set), stream 0, grad 2, vmap 0; unexplained 0; fiducial 7.743201200876812 bit-identical True + +====================================================================================================================================================== +POINTSOLVER CONFIG SWEEP (hpc_ral_cpu_fp64, rounds=20, calls=20, prior draws=200, stress draws=200) +====================================================================================================================================================== + config block ext scale prec mcs nd n rows med_ms speedup [90% CI] admp mult raw maxerr p99err dlogL_ref s_mult s_maxerr + control control 9.90 0.20 0.0010 15 1 8 11859 1.466 1.000 [0.982, 1.019] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 + mcs18 max_containing_size_headroom 9.90 0.20 0.0010 18 1 8 11859 1.538 0.953 [0.934, 0.965] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 + mcs20 max_containing_size_headroom 9.90 0.20 0.0010 20 1 8 11859 1.557 0.941 [0.922, 0.953] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 + mcs24 max_containing_size_headroom 9.90 0.20 0.0010 24 1 8 11859 1.597 0.918 [0.900, 0.927] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 +------------------------------------------------------------------------------------------------------------------------------------------------------ + default agrees with reference on every prior draw: True + default agrees with reference on every stress draw: True + reference floor: {"prior": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423151782, "p99_position_error": 0.0001280749711777913, "median_position_error": 5.9668954361473236e-05, "ref_distinct_histogram": {"2": 21, "4": 179}, "abs_delta_logl_vs_reference": {"max": 0.09204751533968647, "p99": 0.06845503627316121, "median": 0.004628222675307825, "n_nonfinite_mismatch": 0}}, "stress": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423129578, "p99_position_error": 0.00014084184669768283, "median_position_error": 5.966895436132821e-05, "ref_distinct_histogram": {"2": 163, "4": 37}}} + best admissible (precision-equivalent): mcs18; any precision: mcs18 + reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359933, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.7590830914129167, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}} + fiducial gate: {'value': 7.743201200876812, 'expected': 7.743201200876812, 'repr': '7.743201200876812', 'pass': True} +------------------------------------------------------------------------------------------------------------------------------------------------------ + config mcs med_ms row/ctrl ctrl/row [90% CI] compile temp_B flops v16ms/L mult s_mult img-chg ok uncapped max/step (prior) | exceed/step (prior; stress) + control 15 1.466 1.0000 1.0000 [0.9823, 1.0188] 4.29 901656 2801341.0 0.8213 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [1, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + mcs18 18 1.538 1.0495 0.9528 [0.9344, 0.9651] 4.48 904024 2933102.0 0.8560 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [0, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + mcs20 20 1.557 1.0623 0.9413 [0.9219, 0.9527] 4.59 905240 3017410.0 0.8916 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [0, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + mcs24 24 1.597 1.0898 0.9176 [0.9000, 0.9274] 4.91 907736 3195236.0 0.9249 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [0, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + uncapped max over all samples and steps: 17 + rule candidates: [] + all_gates_pass: True + wall: 397 s + Results JSON: /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json + Results PNG: /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.png +=== source_revisions check (JSON vs imported HEADs) === +autoarray_imported_from /mnt/ral/jnightin/PyAuto/PyAutoArray +OK /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json all_gates_pass True +========================================== +loadavg: 206.97 208.63 209.60 197/3225 160483 +Finished. +Sun 27 Sep 18:40:18 BST 2026 From add12a2ca57227c24a9544b9039b8c1c892f2baf Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 19:15:10 +0100 Subject: [PATCH 6/9] hpc(point_source_image): A100 no-regression submit for MCS 20 (phase 4c) --mcs-headroom --configs control,mcs20 on the RAL A100 against the shared mirror (MAX_CONTAINING_SIZE 15 is the control; 20 is the traced patch, so no library branch is needed). JAX_PLATFORMS=cuda + JAX_PLATFORM_NAME=cuda, backend asserted gpu. WALL-BASIS: measured-wall 432 s (phase-4b A100 job 357322), headroom 3. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- ...ce_image_solver_config_sweep_mcs_a100_fp64 | 144 ++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 hpc/batch_gpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64 diff --git a/hpc/batch_gpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64 b/hpc/batch_gpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64 new file mode 100644 index 000000000..c6dc04fc8 --- /dev/null +++ b/hpc/batch_gpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64 @@ -0,0 +1,144 @@ +#!/bin/bash -l +# +# 2026-09 point-source CPU speed-up campaign, phase 4c: the MAX_CONTAINING_SIZE +# headroom A/B (PyAutoArray#583): the A100 no-regression leg for the chosen cap +# (N = 20). The A100 is launch-bound for this likelihood (phases 3 / 4b), so ~1x +# is the expectation. +# +# WHAT THIS MEASURES. scripts/point_source_image/likelihood_breakdown/ +# solver_config_sweep.py --mcs-headroom --configs control,mcs20: the production +# FitPositionsImagePairAllSolved likelihood at the production geometry +# (+-9.9" / 0.2 / 1e-3) with the library's MAX_CONTAINING_SIZE (15, the control) +# against 20, patched for tracing only (ArrayTriangles __defaults__ + module +# constant; fresh closure + jax.clear_caches() per row), interleaved 20 rounds x +# 20 calls, bootstrap 90 % CI, vmap 1/4/16, compile_s, XLA memory, FLOPs, the +# 200 prior + 200 stress completeness draws, the NumPy uncapped containing counts +# for every refinement step, and gates.mcs_no_unexplained_change. +# +# LIBRARY. Unchanged: the row measures the control-vs-MCS-20 patch, so it needs +# no library branch. Every library is the shared mirror (/mnt/ral/jnightin/PyAuto, +# via activate.sh); the job refuses to run unless every library imports from the +# mirror, the mirror PyAutoArray includes #580 (4383ea81) and its +# MAX_CONTAINING_SIZE is still 15, and asserts the JSON source_revisions +# afterwards. +# +# BACKEND. JAX_PLATFORMS=cuda (NOT "cuda,cpu": a list can silently fall back to +# CPU) and JAX_PLATFORM_NAME=cuda; the job asserts jax.default_backend()=="gpu". +# The harness's fiducial gate is backend-aware (A100 7.743201200876806). +# XLA_FLAGS are byte-identical to the CPU submit's. + +# WALL-BASIS: +# RAL job 357322 (this cell in phase-4b form, --step0-route with 4 routes, A100 +# 80 GB euclid-ral-gpu-1, 200 + 200 draws, 20 x 20) ran 432 s (7:32 job wall); +# the A100 is launch-bound, so the completeness draws dominate. Phase 4c runs 2 +# rows (control + mcs20) plus the NumPy uncapped counts, so 432 s stays the basis. +# cell: point_source_image/solver_config_sweep/simple device: gpu precision: fp64 +# source: measured-wall wall: 432 ref: ral-job-357322-point_source_image-solver_config_sweep headroom: 3.0 + +#SBATCH -J point_source_mcs_p4c_gpu +#SBATCH --partition=gpu +#SBATCH --gres=gpu:1 +#SBATCH --ntasks=1 +#SBATCH --cpus-per-task=8 +#SBATCH --mem=32gb +#SBATCH --time=3:00:00 +#SBATCH -o output/output.%A.out +#SBATCH -e error/error.%A.err +#SBATCH --mail-type=END,FAIL +#SBATCH --mail-user=james.w.nightingale@durham.ac.uk + +export AP_ROOT="$(cd "${SLURM_SUBMIT_DIR:-$(dirname "$0")}/../.." && pwd)" +echo "AP_ROOT=$AP_ROOT" +source $AP_ROOT/activate.sh + +export OMP_NUM_THREADS=1 +export MKL_NUM_THREADS=1 +export OPENBLAS_NUM_THREADS=1 +export NPROC=${SLURM_CPUS_PER_TASK:-8} +export JAX_PLATFORM_NAME=cuda +export JAX_PLATFORMS=cuda +export XLA_PYTHON_CLIENT_PREALLOCATE=false +export JAX_ENABLE_X64=1 +export XLA_FLAGS="--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false" +export NUMBA_CACHE_DIR=$AP_ROOT/output/numba_cache_${SLURM_JOB_ID:-local} +mkdir -p "$NUMBA_CACHE_DIR" "$MPLCONFIGDIR" +# No persistent compile cache: compile_s is a gate and must be cold per row. +unset JAX_COMPILATION_CACHE_DIR + +CONFIG_NAME=hpc_ral_a100_fp64 +RESULTS_DIR=$AP_ROOT/results/breakdown/point_source_image +mkdir -p "$RESULTS_DIR" + +echo "==========================================" +date +hostname +lscpu | grep 'Model name' || true +nvidia-smi --query-gpu=name,driver_version,memory.total,utilization.gpu --format=csv || true +echo "gpus: ${CUDA_VISIBLE_DEVICES:-unset}" +echo "partition: ${SLURM_JOB_PARTITION:-unset}" +echo "cpus-per-task: ${SLURM_CPUS_PER_TASK:-unset}" +echo "sched_affinity: $(python3 -c 'import os; print(len(os.sched_getaffinity(0)))')" +echo "loadavg: $(cat /proc/loadavg)" +echo "Cell: point_source_image/likelihood_breakdown/solver_config_sweep --mcs-headroom --configs control,mcs20" +echo "Thread env: OMP=$OMP_NUM_THREADS MKL=$MKL_NUM_THREADS OPENBLAS=$OPENBLAS_NUM_THREADS NPROC=$NPROC" +echo "XLA_FLAGS: $XLA_FLAGS" +echo "PYTHONPATH: $PYTHONPATH" + +echo "=== source revisions ===" +for r in PyAutoNerves PyAutoFit PyAutoArray PyAutoGalaxy PyAutoLens; do + printf '%-14s %s\n' "$r (mirror)" "$(git -C /mnt/ral/jnightin/PyAuto/$r rev-parse HEAD 2>&1)" +done +echo "AP_ROOT rev: $(git -C $AP_ROOT rev-parse HEAD 2>&1)" +git -C /mnt/ral/jnightin/PyAuto/PyAutoArray merge-base --is-ancestor 4383ea81 HEAD \ + || { echo "FATAL: mirror PyAutoArray lacks #580 (4383ea81); HPCPullPyAuto first" >&2; exit 2; } + +cd $AP_ROOT + +echo "=== import provenance ===" +python3 - <<'PYEOF' || exit 3 +import autoarray, autofit, autogalaxy, autolens, jax, jaxlib, numpy +for m in (autoarray, autofit, autogalaxy, autolens): + print(f"{m.__name__:<11} {m.__version__:<12} {m.__file__}") + if not m.__file__.startswith("/mnt/ral/jnightin/PyAuto/"): + raise SystemExit(f"REFUSING: {m.__name__} from {m.__file__}, not the shared mirror") +from autoarray.structures.triangles import array as a +print("MAX_CONTAINING_SIZE", a.MAX_CONTAINING_SIZE, "_STEP0_CONTAINMENT", a._STEP0_CONTAINMENT) +if a.MAX_CONTAINING_SIZE != 15: + raise SystemExit(f"REFUSING: library MAX_CONTAINING_SIZE {a.MAX_CONTAINING_SIZE}, control must be 15") +print("jax", jax.__version__, "jaxlib", jaxlib.__version__, "numpy", numpy.__version__, jax.devices()) +if jax.default_backend() != "gpu": + raise SystemExit(f"REFUSING: JAX backend is {jax.default_backend()}, not gpu") +PYEOF + +echo "==========================================" +echo "RUN ${CONFIG_NAME} -> ${RESULTS_DIR}" +date +echo "loadavg: $(cat /proc/loadavg)" +PYTHONUNBUFFERED=1 python3 scripts/point_source_image/likelihood_breakdown/solver_config_sweep.py \ + --config-name "$CONFIG_NAME" --output-dir "$RESULTS_DIR" \ + --mcs-headroom --configs control,mcs20 \ + --n-draws 200 --n-stress 200 --rounds 20 --calls 20 + +echo "=== source_revisions check (JSON vs imported HEADs) ===" +python3 - "$RESULTS_DIR/solver_config_sweep_mcs_${CONFIG_NAME}.json" <<'PYEOF' +import json, subprocess, sys +path = sys.argv[1] +d = json.load(open(path)) +revs = d["source_revisions"] +def head(p): + return subprocess.check_output(["git", "-C", p, "rev-parse", "HEAD"], text=True).strip() +for r in ("PyAutoNerves", "PyAutoFit", "PyAutoArray", "PyAutoGalaxy", "PyAutoLens"): + h = head(f"/mnt/ral/jnightin/PyAuto/{r}") + if revs[r] != h: + raise SystemExit(f"MISMATCH {path}: {r} JSON {revs[r]} != {h}") +subprocess.check_call(["git", "-C", "/mnt/ral/jnightin/PyAuto/PyAutoArray", "merge-base", + "--is-ancestor", "4383ea81", revs["PyAutoArray"]]) +print("autoarray_imported_from", d.get("autoarray_imported_from")) +print("OK", path, "all_gates_pass", d.get("all_gates_pass")) +PYEOF + +echo "==========================================" +echo "loadavg: $(cat /proc/loadavg)" +nvidia-smi --query-gpu=name,memory.used --format=csv || true +echo "Finished." +date From 864cf7a650ccb90a5fdb90d2110564f95ac4d1f9 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 19:43:11 +0100 Subject: [PATCH 7/9] results(point_source_image): MCS 20 A100 no-regression row, job 359102 (phase 4c) euclid-ral-gpu-1 A100 80 GB, JAX_PLATFORMS=cuda + JAX_PLATFORM_NAME=cuda, mirror libraries (PyAutoArray e281abf3, MCS 15 control), wall 270 s, all_gates_pass true. mcs20 / control median 0.997 (control/row 1.003 [0.999, 1.005]), vmap-16 flat, compile +3.2 %; fiducial 7.743201200876806 bit-identical; zero image-set changes; max gradient rel delta 1.98e-14 (padded-length rounding, log L bit-identical). Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- ...er_config_sweep_mcs_hpc_ral_a100_fp64.json | 3285 +++++++++++++++++ ...ver_config_sweep_mcs_hpc_ral_a100_fp64.png | Bin 0 -> 89078 bytes ...09_27_ral_job_359102_mcs_headroom_a100.out | 87 + 3 files changed, 3372 insertions(+) create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json create mode 100644 results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.png create mode 100644 results/notes/point_source_cpu_2026_09_27_ral_job_359102_mcs_headroom_a100.out diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json new file mode 100644 index 000000000..346df9372 --- /dev/null +++ b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json @@ -0,0 +1,3285 @@ +{ + "cell": "solver_config_sweep_mcs", + "issue": "PyAutoLabs/PyAutoArray#583", + "phase": "4c", + "mcs_headroom_mode": true, + "production_max_containing_size": 15, + "step0_routes": null, + "library_step0_default": "structured", + "config_name": "hpc_ral_a100_fp64", + "quotable": true, + "host_note": null, + "quick": false, + "library_versions": { + "autolens": "2026.8.17.1", + "autoarray": "2026.8.17.1", + "autofit": "2026.8.17.1" + }, + "package_versions": { + "jax": "0.10.2", + "jaxlib": "0.10.2" + }, + "source_revisions": { + "autolens_profiling": "add12a2ca57227c24a9544b9039b8c1c892f2baf", + "PyAutoNerves": "bf104102312852537159b7fad2f998ab6677b4e4", + "PyAutoFit": "c156a9d8e8eb9f82b6da169b1d50b7e64580fe98", + "PyAutoArray": "e281abf3257e9efd4915f1daa9acc0498be250a5", + "PyAutoGalaxy": "ba8a08fabcb13d9472f2bd43ef4fea6039284d50", + "PyAutoLens": "dcbd4b711120641cc0ecc6490d868795ad717b07" + }, + "autoarray_imported_from": "/mnt/ral/jnightin/PyAuto/PyAutoArray", + "autolens_imported_from": "/mnt/ral/jnightin/PyAuto/PyAutoLens", + "device": { + "backend": "gpu", + "device": "cuda:0", + "hostname": "euclid-ral-gpu-1", + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "omp_num_threads": "1", + "cpu_count": 124, + "jax_compilation_cache_dir": null, + "autotune_cache_entries_at_start": 0, + "cache_fresh": false, + "nvidia_smi": "NVIDIA A100 80GB PCIe, 503 MiB, 81920 MiB" + }, + "jax_devices": [ + "cuda:0" + ], + "machine": { + "cpu_model": "AMD EPYC 7702 64-Core Processor", + "cpu_count_os": 124, + "nproc": 1, + "nproc_all": 124, + "nproc_note": "GNU nproc honours OMP_NUM_THREADS, so `nproc` can print 1 on a multi-core host; `nproc_all` is the core count.", + "ram_total": "928298200 kB", + "kernel": "5.14.0-687.50.1.el9_8.x86_64", + "platform": "Linux-5.14.0-687.50.1.el9_8.x86_64-x86_64-with-glibc2.34", + "python": "3.12.4", + "jax_thread_env": { + "NPROC": "8" + }, + "blas_thread_env": { + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1", + "VECLIB_MAXIMUM_THREADS": null, + "NUMEXPR_NUM_THREADS": null + }, + "thread_env_note": "NPROC sizes XLA's CPU intra-op pool (the JAX rows); the BLAS knobs pin OpenBLAS/MKL/OpenMP (the numpy/scipy rows) and do not touch JAX. Two disjoint families; both are recorded on every CPU timing.", + "gpu": "NVIDIA A100 80GB PCIe, 81920 MiB, 610.57.04" + }, + "thread_environment": { + "NPROC": "8", + "OMP_NUM_THREADS": "1", + "OPENBLAS_NUM_THREADS": "1", + "MKL_NUM_THREADS": "1" + }, + "sched_affinity": 8, + "os_cpu_count": 124, + "xla_flags": "--xla_disable_hlo_passes=constant_folding --xla_gpu_autotune_level=0 --xla_gpu_enable_triton_gemm=false", + "jax_platforms": "cuda", + "jax_enable_x64": true, + "loadavg_start": [ + 0.08, + 0.14, + 0.89 + ], + "loadavg_end": [ + 1.54, + 1.25, + 1.19 + ], + "protocol": { + "n_rounds": 20, + "n_calls_per_round": 20, + "n_warm": 3, + "n_stream": 16, + "seed": 314, + "n_prior_draws": 200, + "n_stress_draws": 200, + "step0_rounds": 10, + "vmap_batches": [ + 1, + 4, + 16 + ], + "route_order": "round-robin over every config, start rotated each round", + "cache_trap_guard": "fresh closure + fresh solver/analysis per route; jax.clear_caches()", + "bootstrap": { + "samples": 2000, + "seed": 12345, + "interval": "90%" + }, + "admissible": "100% distinct-multiplicity agreement with the reference on the prior draws AND max position error <= 0.002\"", + "admissible_position_tol": 0.002, + "position_noise_sigma": 0.05, + "distinct_tol": 0.005, + "prior_draws": "full prior: vector_from_unit_vector(U(1e-4, 1-1e-4)); source = solved beta*", + "stress_draws": "OUTSIDE the prior: Isothermal centre U(-0.05,0.05), theta_E U(1,2), ell_comps U(-0.2,0.2), source centre U(-0.4,0.4); plain FitPositionsImagePairAll positions", + "reference": { + "name": "reference", + "block": "reference", + "extent": 12.0, + "scale": 0.05, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "reference_b": { + "name": "reference_b", + "block": "reference", + "extent": 11.0, + "scale": 0.07, + "precision": 0.0001, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": null + }, + "max_containing_size_patch": "ArrayTriangles.__init__ / for_limits_and_scale __defaults__ + module constant, tracing only, restored by value", + "pytrees": "autofit.jax.register_model(model) for both models before any trace" + }, + "configs": [ + { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + } + ], + "static": { + "control": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "mcs20": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference": { + "extent_half_width": [ + 12.0, + 12.0 + ], + "limits": [ + -12.0, + 12.0, + -12.0, + 12.0 + ], + "scale": 0.05, + "pixel_scale_precision": 0.0001, + "n_steps": 9, + "n_steps_formula": "ceil(log2(0.05 / 0.0001))", + "last_step_triangle_side": 0.0001953125, + "step0_triangles": 535277, + "step0_rows": 268677, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "reference_b": { + "extent_half_width": [ + 11.0, + 11.0 + ], + "limits": [ + -11.0, + 11.0, + -11.0, + 11.0 + ], + "scale": 0.07, + "pixel_scale_precision": 0.0001, + "n_steps": 10, + "n_steps_formula": "ceil(log2(0.07 / 0.0001))", + "last_step_triangle_side": 0.00013671875, + "step0_triangles": 229585, + "step0_rows": 115473, + "max_containing_size": 60, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + } + }, + "reference_floor": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0001578692142314068, + "p99_position_error": 0.0001280749711778143, + "median_position_error": 5.966895436149997e-05, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.09204751533957278, + "p99": 0.06845503627316349, + "median": 0.004628222675297167, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00015786921423129578, + "p99_position_error": 0.00014084184669768283, + "median_position_error": 5.966895436134919e-05, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "reference_max_finite_positions": { + "prior": 4, + "stress": 4 + }, + "reference_compile": { + "reference_prior": { + "lower_s": 8.824624914006563, + "compile_s": 9.714348429988604, + "first_call_s": 0.019039912993321195, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 51715080.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 8609360, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 12869616, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 391417856, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_stress": { + "lower_s": 1.866796639020322, + "compile_s": 4.420876614982262, + "first_call_s": 0.016040018992498517, + "traced_rows_per_step": [ + 268677, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 51709944.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 8607056, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 12869232, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 27594752, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_prior": { + "lower_s": 6.625454708002508, + "compile_s": 10.674533693003468, + "first_call_s": 0.018712477991357446, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [], + [ + 60, + 2 + ] + ], + "flops": 23815908.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 984, + "temp_size_in_bytes": 3706200, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 5527648, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 53866496, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + }, + "reference_b_stress": { + "lower_s": 1.518880204996094, + "compile_s": 4.973686965997331, + "first_call_s": 0.014564655983122066, + "traced_rows_per_step": [ + 115473, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880, + 2880 + ], + "output_shapes": [ + [ + 60, + 2 + ] + ], + "flops": 23810776.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 960, + "temp_size_in_bytes": 3704920, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 5527520, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 4046848, + "max_containing_size_proof": { + "positions_shape": [ + 60, + 2 + ], + "expected_rows": 60, + "pass": true + } + } + }, + "default_vs_reference": { + "prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00085134744991033, + "p99_position_error": 0.0007893460711577928, + "median_position_error": 0.00040657539052049664, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609119508, + "median": 0.030920850414811074, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711581035, + "p99_position_error": 0.0007893460711577219, + "median_position_error": 0.0004065753905207064, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + }, + "agrees_on_every_prior_draw": true, + "agrees_on_every_stress_draw": true, + "stress_mismatch_examples": [] + }, + "admissibility": { + "control": true, + "mcs20": true + }, + "precision_equivalent": { + "control": true, + "mcs20": true + }, + "reference_image_extent": { + "prior": { + "max_abs_y": 1.77939453125, + "max_abs_x": 1.7773254429359935, + "max_abs_coord": 1.77939453125, + "p99_abs_coord": 1.759083091412917, + "max_radius": 1.8116226317743076 + }, + "stress": { + "max_abs_y": 2.2498046875, + "max_abs_x": 2.300267215077964, + "max_abs_coord": 2.300267215077964, + "p99_abs_coord": 2.2027852305644777, + "max_radius": 2.5191249773380773 + } + }, + "extent_working": "prior: theta_E <= 1.6 + 4*0.05 = 1.8; |e| <= 0.0526 + 4*0.01 ~ 0.09 -> q ~ 0.83; SIE images lie within ~theta_E/sqrt(q) + |beta| ~ 1.98 + 0.1 ~ 2.1 arcsec of the centre, so boxes of +-6 / +-4 / +-3 / +-2.5 bracket it; reference_image_extent is the measured value", + "best_admissible": "mcs20", + "best_admissible_any_precision": "mcs20", + "table": [ + { + "config": "control", + "block": "control", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 15, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 0.82721549551934, + "speedup": 1.0, + "speedup_ci90": [ + 0.9971076048979485, + 1.002939640709459 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.00085134744991033, + "prior_p99_err": 0.0007893460711577928, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711581035, + "compile_s": 5.596312906011008, + "flops": 2787435.0, + "temp_bytes": 390472 + }, + { + "config": "mcs20", + "block": "max_containing_size_headroom", + "extent": 9.9, + "scale": 0.2, + "precision": 0.001, + "mcs": 20, + "neighbor_degree": 1, + "n_steps": 8, + "step0_rows": 11859, + "step0_triangles": 23283, + "median_ms": 0.8246354846050963, + "speedup": 1.003128668317589, + "speedup_ci90": [ + 0.9993716673644834, + 1.005052427898097 + ], + "admissible": true, + "precision_equivalent": true, + "last_step_triangle_side": 0.0015625, + "prior_multiplicity_agreement": 1.0, + "prior_raw_count_agreement": 1.0, + "prior_max_err": 0.00085134744991033, + "prior_p99_err": 0.0007893460711577928, + "prior_abs_dlogl_ref_max": 0.8682473458375171, + "prior_abs_dlogl_control_max": 0.0, + "stress_multiplicity_agreement": 1.0, + "stress_max_err": 0.0007893460711581035, + "compile_s": 5.776895373011939, + "flops": 2949201.0, + "temp_bytes": 389192 + } + ], + "rows": { + "control": { + "config": { + "name": "control", + "block": "control", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 15, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 0.82721549551934, + "p10_ms": 0.8141599013470113, + "p90_ms": 0.8898060827050358, + "min_ms": 0.8073800127021968, + "max_ms": 1.4531229971908033, + "mean_ms": 0.8474503699835623 + }, + "speedup_vs_control": { + "ratio": 1.0, + "ci90_low": 0.9971076048979485, + "ci90_high": 1.002939640709459, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 1.0, + "p10": 1.0, + "p90": 1.0 + }, + "compile": { + "lower_s": 2.6449790830083657, + "compile_s": 5.596312906011008, + "first_call_s": 0.011646110011497512, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [] + ], + "flops": 2787435.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 390472, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 3710976, + "max_containing_size_proof": null + }, + "warm_ms": [ + 10.129608999704942, + 1.0647570015862584, + 0.9049990039784461 + ], + "per_call_ms": [ + 0.9296579810325056, + 1.4106520102359354, + 0.932009017560631, + 0.9302899998147041, + 0.9473579993937165, + 1.2554749846458435, + 1.025378005579114, + 0.9494590049143881, + 0.9584480139892548, + 0.9402800060342997, + 0.9554479911457747, + 1.1821259977295995, + 0.9392700158059597, + 0.9334190108347684, + 0.9303679980803281, + 0.8985699969343841, + 0.916459015570581, + 0.9516389982309192, + 0.9021289879456162, + 0.8987289911601692, + 0.941457983572036, + 0.8819289796520025, + 0.8696300210431218, + 0.8771790016908199, + 1.0792470129672438, + 0.8633890247438103, + 0.8896889921743423, + 0.869120005518198, + 0.8732990245334804, + 0.8869599842000753, + 0.8858790097292513, + 0.8817999914754182, + 1.4531229971908033, + 0.8698090096004307, + 0.8897789812181145, + 0.9271400049328804, + 0.8662290056236088, + 0.8674399869050831, + 0.8929890173021704, + 1.0889779950957745, + 0.8900499960873276, + 1.1866349959746003, + 0.9027290216181427, + 0.875658995937556, + 0.8683589985594153, + 0.9721789974719286, + 0.8785889949649572, + 0.9287790162488818, + 0.8802390075288713, + 0.870910007506609, + 0.8873399929143488, + 0.8724290237296373, + 0.8387999841943383, + 0.8331399876624346, + 0.8299099863506854, + 0.8309099939651787, + 0.8182799792848527, + 0.820811023004353, + 0.8278400055132806, + 0.8192610112018883, + 0.8231399988289922, + 0.8249010134022683, + 0.8431689930148423, + 0.8389909926336259, + 0.8355600002687424, + 0.8279589819721878, + 0.8265910146292299, + 0.8283790084533393, + 0.8226110076066107, + 0.8239799935836345, + 0.8357309852726758, + 0.8368300041183829, + 0.8363200176972896, + 0.811609992524609, + 0.8255910070147365, + 0.8328490075655282, + 0.8302700007334352, + 0.8302899950649589, + 0.8243000193033367, + 0.8132699877023697, + 0.8073800127021968, + 0.8235909917857498, + 0.9804180008359253, + 0.8379700011573732, + 0.8117899997159839, + 0.8468209998682141, + 0.8262799819931388, + 0.8153910166583955, + 0.827340001706034, + 0.8235700079239905, + 0.8319999906234443, + 0.8095099765341729, + 0.8155199757311493, + 0.82330999430269, + 0.8247109944932163, + 0.8391899755224586, + 0.840830005472526, + 0.8387299894820899, + 0.8271309779956937, + 1.1391759908292443, + 0.8427709981333464, + 0.8450690074823797, + 0.8180309960152954, + 0.8190000080503523, + 0.8387709967792034, + 0.8200200099963695, + 0.9048100037034601, + 0.823269976535812, + 0.823759997729212, + 0.8154899987857789, + 1.0927969997283071, + 0.8219409792218357, + 0.8134800009429455, + 0.8501709962729365, + 0.8438199874944985, + 0.8333410078193992, + 0.8226190111599863, + 0.8302500064019114, + 0.8191499800886959, + 0.826339004561305, + 0.8591899822931737, + 0.837578991195187, + 0.8384099928662181, + 0.8149300119839609, + 0.8218899893108755, + 0.8246699871961027, + 0.8260710164904594, + 0.8295200241263956, + 0.8254710119217634, + 0.8178100106306374, + 0.8200700103770941, + 0.814490020275116, + 0.8192399982362986, + 0.8235500135924667, + 0.8203299948945642, + 0.8415509946644306, + 0.8375989855267107, + 0.8197409915737808, + 0.8599590219091624, + 0.8363910019397736, + 0.8301709895022213, + 0.8275299915112555, + 0.8228999795392156, + 0.8459699747618288, + 0.8472290064673871, + 0.8350310090463609, + 0.8370489813387394, + 0.8639710140414536, + 0.8564589952584356, + 0.8255309949163347, + 0.845580012537539, + 0.8271500119008124, + 0.8273299899883568, + 0.8204100013244897, + 0.8173400128725916, + 0.80951998825185, + 0.830409990157932, + 0.8180300064850599, + 0.8363999950233847, + 0.8376900223083794, + 0.8146210166160017, + 0.8118799887597561, + 0.8249300008174032, + 1.1693770065903664, + 0.8135699899867177, + 0.8460509998258203, + 1.1526349990162998, + 0.8339409832842648, + 0.8365099783986807, + 0.8151000074576586, + 0.8423599938396364, + 0.8201099990401417, + 0.8141610014718026, + 0.8358890190720558, + 0.8380709914490581, + 0.8158300188370049, + 0.8216909773182124, + 0.8273300190921873, + 0.8202409953810275, + 0.9847669862210751, + 0.8411909802816808, + 0.8175200200639665, + 0.8216099813580513, + 0.8198909927159548, + 0.8212690008804202, + 0.8840800146572292, + 0.8273699786514044, + 0.8494810026604682, + 0.8358400082215667, + 0.8325800008606166, + 0.8344099915120751, + 0.8186310005839914, + 0.8174999966286123, + 0.8082700078375638, + 0.8235010027419776, + 0.8400400110986084, + 0.836799998069182, + 0.8157000120263547, + 0.8156310068443418, + 0.812919985037297, + 0.8234809793066233, + 0.8265499782282859, + 0.8225410128943622, + 0.8190689841285348, + 0.8332800061907619, + 0.8379300124943256, + 0.8375600154977292, + 0.849089992698282, + 0.821929017547518, + 0.819870998384431, + 0.8370690047740936, + 0.8246310171671212, + 0.8194900001399219, + 0.8234410197474062, + 0.8173499954864383, + 0.8134600066114217, + 0.8212190004996955, + 0.8180900185834616, + 0.8242210024036467, + 0.844569003675133, + 0.82230000407435, + 0.8350289717782289, + 0.8418110082857311, + 0.827159994514659, + 0.8177010167855769, + 0.8139399869833142, + 0.809071003459394, + 0.8313700091093779, + 0.8221999742090702, + 0.8216500282287598, + 0.8094610238913447, + 0.8228200022131205, + 0.8234500128310174, + 0.8371009898837656, + 0.8414789917878807, + 0.8193510002456605, + 0.8161799923982471, + 0.8328899857588112, + 0.8353999874088913, + 0.8294199942611158, + 0.8151200017891824, + 0.8096600067801774, + 0.8180800068657845, + 0.8199699805118144, + 0.8343209919985384, + 0.8352489967364818, + 0.8138109988067299, + 0.8488599851261824, + 0.8281810150947422, + 0.8269499812740833, + 0.8374509925488383, + 0.8115500095300376, + 0.8174199901986867, + 0.8203500183299184, + 0.8156200055964291, + 0.8390999864786863, + 0.8361499931197613, + 0.8135899843182415, + 0.8150399953592569, + 0.8154810057021677, + 0.8184000034816563, + 0.8079709950834513, + 0.8328699914272875, + 0.8256309956777841, + 0.8257890003733337, + 0.8189009968191385, + 0.8189690124709159, + 0.8142000006046146, + 0.8171200170181692, + 0.8189500076696277, + 0.8346410177182406, + 0.8341499778907746, + 1.1457559885457158, + 0.8354700112249702, + 0.8217100112233311, + 0.8150299836415797, + 0.8182300080079585, + 0.8239599992521107, + 0.8374689787160605, + 0.8325009839609265, + 0.8101099811028689, + 0.8281109912786633, + 0.8293100108858198, + 0.8251700201071799, + 0.8243100019171834, + 0.8204100013244897, + 0.8108800102490932, + 0.8170799992512912, + 0.894677999895066, + 0.838999985717237, + 0.825060997158289, + 0.812289013992995, + 0.8147509943228215, + 0.8295100124087185, + 0.827270996524021, + 0.8186600171029568, + 0.8076709927991033, + 0.8083799912128597, + 0.8217809954658151, + 0.8203799952752888, + 0.817290012491867, + 0.8289999968837947, + 0.8409300062339753, + 0.838400999782607, + 0.8207090140786022, + 0.8229410159401596, + 0.8229299855884165, + 0.8315710001625121, + 0.8215599809773266, + 0.815200008219108, + 0.8090900082606822, + 0.8117210236378014, + 0.8195299888029695, + 0.8130600035656244, + 0.8432189933955669, + 0.8380399958696216, + 0.8199709991458803, + 0.8214690024033189, + 0.8137609984260052, + 0.8298000029753894, + 0.8199499861802906, + 0.8162090089172125, + 0.810981000540778, + 0.8158900018315762, + 0.8198299910873175, + 0.821850000647828, + 0.8404589898418635, + 0.8383600215893239, + 0.8154499810189009, + 0.8192009991034865, + 0.8197200077120215, + 0.825700000859797, + 0.8287399832624942, + 0.8250810205936432, + 0.819800014141947, + 0.8094510121736676, + 0.8291600097436458, + 0.81415000022389, + 0.8109100162982941, + 0.8369289862457663, + 0.828990014269948, + 0.8458700031042099, + 0.828579009976238, + 0.8205909980461001, + 0.8118700061459094, + 0.8204909972846508, + 0.8231000101659447, + 0.8164989994838834, + 0.8443999977316707, + 0.8413489849772304, + 0.8191009983420372, + 0.8158400014508516, + 0.8315710001625121, + 0.8277090091723949, + 0.8249509846791625, + 0.825249997433275, + 0.8170310175046325, + 0.813560007372871, + 0.8187310013454407, + 0.8275189902633429, + 0.8384899992961437, + 0.8345310052391142, + 0.8108499750960618, + 0.8156399999279529, + 0.8280299953185022, + 0.8244210039265454, + 0.8158700075000525, + 0.8135510142892599, + 0.8180799777619541, + 0.8195910195354372, + 0.8194299880415201, + 0.8415599877480417, + 0.839188985992223, + 0.8378400234505534, + 0.8134410018101335, + 0.8132299990393221, + 0.8310310076922178, + 0.8308689866680652, + 0.8351709984708577, + 0.8312689897138625, + 0.8216700225602835, + 0.8274099964182824, + 0.834999984363094, + 0.8380200015380979, + 0.8343099907506257, + 0.8191910164896399, + 0.8215199923142791, + 0.8363210072275251, + 0.8317199826706201, + 0.8161510049831122, + 0.8128299959935248, + 0.8177910058293492, + 0.8249300008174032, + 0.8202600001823157, + 0.8416399941779673, + 0.8404100080952048, + 0.8227899961639196, + 0.8207299979403615, + 0.8290710102301091, + 0.8297300082631409 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876806, + "stream_log_likelihood": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252, + 7.051561357429162, + 9.219327498422556, + 0.8907045816755392, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966778, + 0.7025906917399034, + 7.669569297550706, + -0.46390116505282464, + -5.412376751794209, + 5.343244353415997, + -20.481275097418546 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00085134744991033, + "p99_position_error": 0.0007893460711577928, + "median_position_error": 0.00040657539052049664, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609119508, + "median": 0.030920850414811074, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711581035, + "p99_position_error": 0.0007893460711577219, + "median_position_error": 0.0004065753905207064, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + }, + "mcs20": { + "config": { + "name": "mcs20", + "block": "max_containing_size_headroom", + "extent": null, + "scale": 0.2, + "precision": 0.001, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": null + }, + "static": { + "extent_half_width": [ + 9.9, + 9.9 + ], + "limits": [ + -9.9, + 9.9, + -9.9, + 9.9 + ], + "scale": 0.2, + "pixel_scale_precision": 0.001, + "n_steps": 8, + "n_steps_formula": "ceil(log2(0.2 / 0.001))", + "last_step_triangle_side": 0.0015625, + "step0_triangles": 23283, + "step0_rows": 11859, + "max_containing_size": 20, + "neighbor_degree": 1, + "step0_route": "library default (structured)" + }, + "stats": { + "n": 400, + "median_ms": 0.8246354846050963, + "p10_ms": 0.8138031087582931, + "p90_ms": 0.8952040021540597, + "min_ms": 0.8032800105866045, + "max_ms": 1.3879739854019135, + "mean_ms": 0.8407666024140781 + }, + "speedup_vs_control": { + "ratio": 1.003128668317589, + "ci90_low": 0.9993716673644834, + "ci90_high": 1.005052427898097, + "bootstrap_samples": 2000 + }, + "paired_round_speedup": { + "median": 1.0005674156408433, + "p10": 0.9943684241834234, + "p90": 1.0149299133525604 + }, + "compile": { + "lower_s": 2.67522696199012, + "compile_s": 5.776895373011939, + "first_call_s": 0.01208825601497665, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [] + ], + "flops": 2949201.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 389192, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 483328, + "max_containing_size_proof": null + }, + "warm_ms": [ + 1.0649779869709164, + 0.9710179874673486, + 0.9016589901875705 + ], + "per_call_ms": [ + 1.3879739854019135, + 0.9075099951587617, + 0.9454480023123324, + 0.9077000140678138, + 0.9065300109796226, + 0.8973090152721852, + 0.8941600099205971, + 0.916948018129915, + 0.9119099995587021, + 0.9074799891095608, + 0.8953389769885689, + 0.9263599931728095, + 0.902079016668722, + 0.9045889892149717, + 0.9005100000649691, + 0.9005390165839344, + 0.9148200042545795, + 0.8937589882407337, + 0.9046590130310506, + 0.8862800023052841, + 0.9099789895117283, + 0.8937699894886464, + 0.8943589928094298, + 0.8991879876703024, + 0.9007890184875578, + 0.9066280035767704, + 0.8928999886848032, + 0.9051589877344668, + 0.8931590127758682, + 0.8843500108923763, + 0.9129380050580949, + 0.8958200050983578, + 0.9032179950736463, + 0.893029005965218, + 0.8965700108092278, + 0.9190290002152324, + 0.8946300076786429, + 0.9068289946299046, + 0.9100890019908547, + 0.8797799819149077, + 0.8517300011590123, + 0.8464310085400939, + 0.8232099935412407, + 0.8128810150083154, + 0.8351700089406222, + 0.8474900096189231, + 0.8358689956367016, + 0.8197099959943444, + 0.8148009947035462, + 0.8226099889725447, + 0.8237409929279238, + 0.8184899925254285, + 0.8342609799001366, + 1.1346259852871299, + 0.8443010156042874, + 0.8397589845117182, + 0.8168290078174323, + 0.9992189879994839, + 0.8370600116904825, + 0.8385099936276674, + 0.8106600143946707, + 0.818300002720207, + 0.8404600084759295, + 0.8375000033993274, + 0.8286699885502458, + 0.8573189843446016, + 0.8137410040944815, + 0.8329999982379377, + 0.8271310070995241, + 0.8456189825665206, + 0.8410710142925382, + 1.0941060027107596, + 0.8439699886366725, + 0.8393999887630343, + 0.8334699959959835, + 0.8191600209102035, + 0.8331600110977888, + 0.8239710005000234, + 0.8425589767284691, + 0.8458810043521225, + 0.8322689973283559, + 0.8202309836633503, + 0.8208900108002126, + 0.8357010083273053, + 0.8339589985553175, + 0.8278909954242408, + 0.8148500055540353, + 0.8088409958872944, + 0.8305489900521934, + 0.8234609849750996, + 0.8951890049502254, + 0.8282199851237237, + 0.8119810081552714, + 0.8153899980243295, + 0.8200709999073297, + 0.8191899978555739, + 0.8340310014318675, + 0.8372699958272278, + 0.8481300028506666, + 0.943099003052339, + 0.8243700140155852, + 0.824690010631457, + 0.8498500101268291, + 0.8162799931596965, + 0.8286199881695211, + 0.8278909954242408, + 0.8151799847837538, + 0.8381510269828141, + 0.8366699912585318, + 0.8343199733644724, + 0.8179199940059334, + 0.8486499718856066, + 0.8275900036096573, + 0.8308110118377954, + 0.8240399765782058, + 0.8158700075000525, + 0.8102600113488734, + 0.8138790144585073, + 0.8183410100173205, + 0.8181000011973083, + 0.8287899836432189, + 0.820430024759844, + 0.8123900042846799, + 0.8152500085998327, + 0.8194709953386337, + 0.8160890138242394, + 0.830670993309468, + 0.8355500176548958, + 0.8351610158570111, + 0.8148400229401886, + 0.8138410048559308, + 0.8155399991665035, + 0.8215309935621917, + 0.8228300139307976, + 0.8245609933510423, + 0.8242100011557341, + 0.8152700029313564, + 0.8102899882942438, + 0.8269500103779137, + 0.8202909957617521, + 0.8316090097650886, + 0.8368009875994176, + 0.8181000011973083, + 0.8135809912346303, + 0.8088900067377836, + 0.8142009901348501, + 0.8224289922509342, + 0.8254600106738508, + 0.8168999920599163, + 0.8144199964590371, + 0.8175799739547074, + 0.8226899954024702, + 0.8161109872162342, + 0.8233599946834147, + 0.83751100464724, + 0.8368190028704703, + 0.8346110116690397, + 0.8189590007532388, + 0.8212910033762455, + 0.8170299988705665, + 0.8211099775508046, + 0.8175800030585378, + 0.835899991216138, + 0.8565899915993214, + 0.8174100075848401, + 0.8157099946402013, + 0.8232099935412407, + 0.8280710026156157, + 1.002548000542447, + 0.8164200116880238, + 0.8194510010071099, + 0.8163099992088974, + 0.8329600095748901, + 0.8352800214197487, + 0.8171900117304176, + 0.8124299929477274, + 0.8119410194922239, + 0.8253400155808777, + 0.8913199999369681, + 0.8391489973291755, + 0.8032800105866045, + 0.817740976344794, + 0.8221300086006522, + 0.837280007544905, + 0.8408990106545389, + 0.8185510232578963, + 0.8664189954288304, + 0.8399499929510057, + 0.8290800033137202, + 0.8139210112858564, + 0.806719996035099, + 0.8097999962046742, + 0.8222699980251491, + 0.838519015815109, + 0.8373409800697118, + 0.8338699990417808, + 0.8234409906435758, + 0.8182099845726043, + 0.8271900005638599, + 0.8259600144810975, + 0.823870999738574, + 0.82356997882016, + 0.83575100870803, + 0.8332589932251722, + 0.8307710231747478, + 0.8277200104203075, + 0.8101109997369349, + 0.8306099916808307, + 0.9993969870265573, + 0.8319210028275847, + 0.8185000042431056, + 0.856639991980046, + 0.8331599819939584, + 0.8226099889725447, + 0.8192599925678223, + 0.8125300228130072, + 0.8200700103770941, + 0.8245899807661772, + 0.8157709962688386, + 0.8420490194112062, + 0.8104309963528067, + 0.8263899944722652, + 0.8353599987458438, + 0.8336199971381575, + 0.8208799990825355, + 0.8166999905370176, + 0.8081109845079482, + 0.810719997389242, + 0.817069987533614, + 0.8196310081984848, + 0.8404389955103397, + 0.8404410036746413, + 0.8244000200647861, + 0.8151810034178197, + 0.8117899997159839, + 0.8228109800256789, + 0.8364490058738738, + 0.8202409953810275, + 0.8120200072880834, + 0.8122599974740297, + 0.8278799941763282, + 0.8174609974958003, + 0.8133900118991733, + 0.8106610039249063, + 0.814600003650412, + 0.8134800009429455, + 0.8074699726421386, + 0.84082898683846, + 0.8348709961865097, + 0.8163700113072991, + 0.827420997666195, + 0.8162400044966489, + 0.8528600155841559, + 0.8263289928436279, + 0.8262009941972792, + 1.1370459978934377, + 0.8186299819499254, + 0.8366410038433969, + 0.829248980153352, + 0.8205510093830526, + 0.8162800222635269, + 0.8087109890766442, + 0.8121199789457023, + 0.8055699872784317, + 0.8158200071193278, + 0.832649995572865, + 0.8865899872034788, + 0.819839013274759, + 0.815011007944122, + 0.82162901526317, + 0.8240809838753194, + 0.8225399942602962, + 0.8172510133590549, + 0.8092999923974276, + 0.8293710125144571, + 0.8184599864762276, + 0.8145689789671451, + 0.8072599885053933, + 0.8363600063603371, + 0.8352800214197487, + 0.8323189977090806, + 0.839110987726599, + 0.8230189851019531, + 0.8155909890774637, + 0.8119999838527292, + 0.8201010059565306, + 0.822640024125576, + 0.8240710012614727, + 0.8431090100202709, + 0.9601789934094995, + 0.8154899987857789, + 0.8424799889326096, + 0.8321409986820072, + 0.8172300003934652, + 0.8246809884440154, + 0.8175699913408607, + 0.8319610205944628, + 0.8258800080511719, + 0.8198810101021081, + 0.8134889940265566, + 0.8142699953168631, + 1.0779080039355904, + 0.8152399968821555, + 0.848530005896464, + 0.840090011479333, + 0.833509984659031, + 0.8365800022147596, + 0.8211210079025477, + 0.8210790110751987, + 0.8179799770005047, + 0.8366300025954843, + 0.8379400242120028, + 0.8379410137422383, + 0.8138100092764944, + 0.8358110208064318, + 0.8197390125133097, + 0.8206109923776239, + 0.8198599971365184, + 0.8157009724527597, + 0.8092799980659038, + 0.8253210107795894, + 0.8254100102931261, + 0.8265709911938757, + 0.8251490071415901, + 0.826370989670977, + 0.8241499890573323, + 0.8187399944290519, + 0.8161090081557631, + 0.8136410033330321, + 0.817849999293685, + 0.8200909942388535, + 0.8169099746737629, + 0.8385399996768683, + 0.8406300039496273, + 0.8230200037360191, + 0.8236009743995965, + 0.8185899932868779, + 0.8219400187954307, + 0.8250100072473288, + 0.8224409830290824, + 0.8100899867713451, + 0.8165710023604333, + 0.84863998927176, + 0.8143300074152648, + 0.8373789896722883, + 0.837689993204549, + 0.8152399968821555, + 0.8174899849109352, + 0.8158010023180395, + 0.8278700115624815, + 0.8261509938165545, + 0.8228890073951334, + 0.8186909835785627, + 0.808550015790388, + 0.8174609974958003, + 0.8215800044126809, + 0.8165400067809969, + 0.8392599993385375, + 0.8368800044991076, + 0.8185909828171134, + 0.8158810087479651, + 1.0131569870281965, + 0.8369400165975094, + 0.8494599896948785, + 0.8298600150737911, + 0.8291109988931566, + 0.8278000168502331, + 0.8245199860539287, + 0.8149399945978075, + 0.8143209852278233, + 0.8232600230257958, + 0.8217110007535666, + 0.8385090040974319, + 0.8380399958696216, + 0.8177609997801483, + 0.8242200128734112, + 1.1825870024040341, + 0.8228100195992738, + 0.8259809983428568, + 0.8341089996974915, + 0.8356799953617156, + 0.8198800205718726, + 0.8135200187098235, + 0.8373100135941058, + 0.8301199995912611, + 0.822861009510234, + 0.8196190174203366, + 0.8166510087903589, + 0.8122799918055534, + 0.8209100051317364, + 0.8185190090443939, + 0.8367809932678938, + 0.8416099881287664, + 0.8397999918088317, + 0.8209600055124611, + 0.8154899987857789, + 0.8331110002472997, + 0.8233400003518909, + 0.8233010012190789, + 0.8181299781426787 + ], + "deterministic": true, + "fiducial_log_likelihood": 7.743201200876806, + "stream_log_likelihood": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252, + 7.051561357429162, + 9.219327498422556, + 0.8907045816755392, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966778, + 0.7025906917399034, + 7.669569297550706, + -0.46390116505282464, + -5.412376751794209, + 5.343244353415997, + -20.481275097418546 + ], + "admissible": true, + "completeness_prior": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.00085134744991033, + "p99_position_error": 0.0007893460711577928, + "median_position_error": 0.00040657539052049664, + "ref_distinct_histogram": { + "2": 21, + "4": 179 + }, + "abs_delta_logl_vs_reference": { + "max": 0.8682473458375171, + "p99": 0.5684387609119508, + "median": 0.030920850414811074, + "n_nonfinite_mismatch": 0 + }, + "abs_delta_logl_vs_control": { + "max": 0.0, + "p99": 0.0, + "median": 0.0, + "n_nonfinite_mismatch": 0 + } + }, + "completeness_stress": { + "n_draws": 200, + "multiplicity_agreement": 1.0, + "raw_count_agreement": 1.0, + "n_multiplicity_mismatch": 0, + "mismatch_examples": [], + "max_position_error": 0.0007893460711581035, + "p99_position_error": 0.0007893460711577219, + "median_position_error": 0.0004065753905207064, + "ref_distinct_histogram": { + "2": 163, + "4": 37 + } + } + } + }, + "vmap": { + "best": "mcs20", + "routes": [ + "control", + "mcs20" + ], + "batches": [ + 1, + 4, + 16 + ], + "rows": { + "control_vmap1": { + "config": "control", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 0.837230501929298, + "p10_ms": 0.8232548978412524, + "p90_ms": 0.916772018535994, + "min_ms": 0.8153499802574515, + "max_ms": 1.4524929865729064, + "mean_ms": 0.8572954822739121 + }, + "median_ms_per_likelihood": 0.837230501929298, + "compile": { + "lower_s": 3.584643264010083, + "compile_s": 6.299862708023284, + "first_call_s": 0.01570203300798312, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2785711.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 390216, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 1810432, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap4": { + "config": "control", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 0.9400499984622002, + "p10_ms": 0.9272839990444481, + "p90_ms": 0.9970458166208119, + "min_ms": 0.9157489985227585, + "max_ms": 1.3725640019401908, + "mean_ms": 0.9566655652452027 + }, + "median_ms_per_likelihood": 0.23501249961555004, + "compile": { + "lower_s": 3.6884494550176896, + "compile_s": 6.228791216009995, + "first_call_s": 0.01695743898744695, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 10540188.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 1528136, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 6189056, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "control_vmap16": { + "config": "control", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 1.135111495386809, + "p10_ms": 1.118800905533135, + "p90_ms": 1.1854690965265036, + "min_ms": 1.109897013520822, + "max_ms": 1.906827004859224, + "mean_ms": 1.1533125777350506 + }, + "median_ms_per_likelihood": 0.07094446846167557, + "compile": { + "lower_s": 3.598918973002583, + "compile_s": 6.4952908199920785, + "first_call_s": 0.01848788099596277, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 42100100.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 6084936, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2420736, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252, + 7.051561357429162, + 9.219327498422556, + 0.8907045816755392, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966778, + 0.7025906917399034, + 7.669569297550706, + -0.46390116505282464, + -5.412376751794209, + 5.343244353415997, + -20.481275097418546 + ], + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap1": { + "config": "mcs20", + "batch": 1, + "stats_per_batch": { + "n": 400, + "median_ms": 0.8383445092476904, + "p10_ms": 0.8259468042524531, + "p90_ms": 0.8809238963294774, + "min_ms": 0.8173800015356392, + "max_ms": 1.3445449876599014, + "mean_ms": 0.8547483747679507 + }, + "median_ms_per_likelihood": 0.8383445092476904, + "compile": { + "lower_s": 3.7684873919934034, + "compile_s": 6.537505056010559, + "first_call_s": 0.01684740898781456, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 1 + ] + ], + "flops": 2948137.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 8, + "temp_size_in_bytes": 389192, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2940928, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9986711819471543, + "ci90_low": 0.9955334941648103, + "ci90_high": 1.0011041810836419, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap4": { + "config": "mcs20", + "batch": 4, + "stats_per_batch": { + "n": 400, + "median_ms": 1.0154230112675577, + "p10_ms": 0.9989479935029522, + "p90_ms": 1.0701798950321972, + "min_ms": 0.9896279952954501, + "max_ms": 1.7579490086063743, + "mean_ms": 1.0321403300622478 + }, + "median_ms_per_likelihood": 0.25385575281688944, + "compile": { + "lower_s": 3.647498212987557, + "compile_s": 6.834454366995487, + "first_call_s": 0.0172415139968507, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 4 + ] + ], + "flops": 11339309.0, + "memory_analysis": { + "argument_size_in_bytes": 160, + "output_size_in_bytes": 32, + "temp_size_in_bytes": 1529672, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 5599232, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252 + ], + "speedup_vs_control_same_batch": { + "ratio": 0.9257718094144143, + "ci90_low": 0.9232852757383118, + "ci90_high": 0.9291893343983038, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + }, + "mcs20_vmap16": { + "config": "mcs20", + "batch": 16, + "stats_per_batch": { + "n": 400, + "median_ms": 1.1315465089865029, + "p10_ms": 1.1158149951370433, + "p90_ms": 1.182122022146359, + "min_ms": 1.1049760214518756, + "max_ms": 1.5559209859929979, + "mean_ms": 1.1464655973395566 + }, + "median_ms_per_likelihood": 0.07072165681165643, + "compile": { + "lower_s": 3.638995105982758, + "compile_s": 6.894294431986054, + "first_call_s": 0.017467631987528875, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 16 + ] + ], + "flops": 44561780.0, + "memory_analysis": { + "argument_size_in_bytes": 640, + "output_size_in_bytes": 128, + "temp_size_in_bytes": 6084936, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 12935168, + "max_containing_size_proof": null + }, + "values_first_batch": [ + 7.743201200876806, + -4.160952751390761, + 7.657972665309621, + 9.364550949057252, + 7.051561357429162, + 9.219327498422556, + 0.8907045816755392, + -34.37790701671691, + -24.578291065194456, + -0.4990240338966778, + 0.7025906917399034, + 7.669569297550706, + -0.46390116505282464, + -5.412376751794209, + 5.343244353415997, + -20.481275097418546 + ], + "speedup_vs_control_same_batch": { + "ratio": 1.0031505434129255, + "ci90_low": 0.9993125423451218, + "ci90_high": 1.0053230974298109, + "bootstrap_samples": 2000 + }, + "max_abs_delta_vs_scalar": 0.0 + } + } + }, + "step0_split": { + "control": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.16650799079798162, + "ray_trace": 0.152318985783495, + "general_gather": 0.15326350694522262, + "route_inputs": 0.23776201123837382, + "containment": 0.2435019996482879 + }, + "ray_trace_ms": -0.014189005014486611, + "containment_ms": 0.09118301386479288, + "route_input_materialisation_ms": 0.08544302545487881, + "general_gather_reference_ms": 0.0009445211617276073, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.07699400885030627, + "containment_share_of_step0": 1.184287131250345, + "step0_share_of_likelihood": 0.0930761201492824, + "containment_share_of_likelihood": 0.11022885131950608 + }, + "mcs20": { + "extent": null, + "scale": 0.2, + "step0_rows": 11859, + "step0_triangles": 23283, + "prefix_median_ms": { + "source_centre": 0.16666800365783274, + "ray_trace": 0.15388301108032465, + "general_gather": 0.15247301780618727, + "route_inputs": 0.23699701705481857, + "containment": 0.24267200205940753 + }, + "ray_trace_ms": -0.012784992577508092, + "containment_ms": 0.08878899097908288, + "route_input_materialisation_ms": 0.08311400597449392, + "general_gather_reference_ms": -0.0014099932741373777, + "step0_route": "library default (structured)", + "method": "prefix medians; ray_trace = jnp.sum(plane.vertices) minus source_centre; containment = containing_indices minus ray_trace (includes the vertices[indices] gather + Point.mask + jnp.where) and is the headline before/after number; route_input_materialisation = the route's six barycentric input components returned as outputs (captured at trace time) minus ray_trace; general_gather_reference = plane.triangles minus ray_trace, route-independent", + "step0_ms": 0.07600399840157479, + "containment_share_of_step0": 1.168214736676843, + "step0_share_of_likelihood": 0.09216678134821205, + "containment_share_of_likelihood": 0.1076705922030537 + } + }, + "uncapped_containing_counts": { + "control": { + "prior": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [ + 12 + ], + "draws_exceeding_cap_per_step": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": -2, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 15, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 2, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 15, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 8, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + }, + "mcs20": { + "prior": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "p99_per_step": [ + 15.0, + 11.019999999999982, + 9.019999999999982, + 7.019999999999982, + 5.019999999999982, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 17, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 3, + "n_draws_exceeding": { + "6": 185, + "8": 117, + "10": 51, + "12": 23, + "15": 1, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 3, + "5": 12, + "7": 68, + "9": 66, + "11": 28, + "13": 16, + "15": 6, + "17": 1 + } + }, + "stream": { + "n_draws": 16, + "cap": 20, + "max_per_step": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 13.0, + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 9.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "max_over_steps": 13, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 7, + "n_draws_exceeding": { + "6": 16, + "8": 13, + "10": 3, + "12": 2, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "7": 3, + "9": 10, + "11": 1, + "13": 2 + } + }, + "stress": { + "n_draws": 200, + "cap": 20, + "max_per_step": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "p99_per_step": [ + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0, + 5.0 + ], + "median_per_step": [ + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0, + 3.0 + ], + "max_over_steps": 7, + "draws_exceeding_cap": [], + "draws_exceeding_cap_per_step": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "n_draws_exceeding_cap_per_step": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "headroom_over_steps": 13, + "n_draws_exceeding": { + "6": 1, + "8": 0, + "10": 0, + "12": 0, + "15": 0, + "17": 0, + "18": 0, + "20": 0, + "24": 0 + }, + "histogram_max_over_steps": { + "3": 161, + "5": 38, + "7": 1 + } + } + } + }, + "mcs_headroom": { + "control_max_containing_size": 15, + "rows": { + "control": { + "mcs": 15, + "median_ms": 0.82721549551934, + "control_over_row": { + "ratio": 1.0, + "ci90_low": 0.9971076048979485, + "ci90_high": 1.002939640709459, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 1.0, + "compile_s": 5.596312906011008, + "compile_ratio_vs_control": 1.0, + "temp_bytes": 390472, + "flops": 2787435.0, + "vmap16_ms_per_likelihood": 0.07094446846167557, + "vmap16_control_over_row": null, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.00085134744991033, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [ + 12 + ], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 1, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876806, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 0.0 + }, + "mcs20": { + "mcs": 20, + "median_ms": 0.8246354846050963, + "control_over_row": { + "ratio": 1.003128668317589, + "ci90_low": 0.9993716673644834, + "ci90_high": 1.005052427898097, + "bootstrap_samples": 2000 + }, + "row_over_control_median": 0.996881089718195, + "compile_s": 5.776895373011939, + "compile_ratio_vs_control": 1.032268114745151, + "temp_bytes": 389192, + "flops": 2949201.0, + "vmap16_ms_per_likelihood": 0.07072165681165643, + "vmap16_control_over_row": { + "ratio": 1.0031505434129255, + "ci90_low": 0.9993125423451218, + "ci90_high": 1.0053230974298109, + "bootstrap_samples": 2000 + }, + "prior_multiplicity_agreement": 1.0, + "stress_multiplicity_agreement": 1.0, + "prior_max_err": 0.00085134744991033, + "uncapped_max_per_step": { + "prior": [ + 17, + 13, + 11, + 9, + 7, + 5, + 5, + 5 + ], + "stream": [ + 13, + 9, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "stress": [ + 7, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ] + }, + "uncapped_max_over_steps": { + "prior": 17, + "stream": 13, + "stress": 7 + }, + "draws_exceeding_cap_per_step": { + "prior": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stream": [ + [], + [], + [], + [], + [], + [], + [], + [] + ], + "stress": [ + [], + [], + [], + [], + [], + [], + [], + [] + ] + }, + "n_draws_exceeding_cap": { + "prior": 0, + "stream": 0, + "stress": 0 + }, + "fiducial_log_likelihood": 7.743201200876806, + "fiducial_bit_identical": true, + "no_unexplained_change": true, + "n_image_set_changes": 0, + "grad_max_rel_delta_vs_control": 1.9841564586859975e-14 + } + }, + "uncapped_max_over_all_samples_and_steps": 17, + "decision_rule": "smallest N >= 18 with uncapped max <= N - 3, no unexplained change, compile <= +20 %, scalar median cost <= ~5 % (human picks N at the step-2 checkpoint)", + "rule_candidates": [ + "mcs20" + ] + }, + "gates": { + "fiducial_bit_exact": { + "value": 7.743201200876806, + "expected": 7.743201200876806, + "repr": "7.743201200876806", + "pass": true + }, + "max_containing_size_patch": { + "control": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + }, + "mcs20": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "patch_restored": { + "module_constant": 15, + "init_default": [ + 15, + null + ], + "step0_containment": "structured", + "pass": true + }, + "patch_keeps_later_defaults": { + "probes": { + "mcs20": { + "mcs": 20, + "__init__": { + "during": { + "max_containing_size": "20", + "step0_layout": "None" + } + }, + "for_limits_and_scale": { + "during": { + "max_containing_size": "20" + } + }, + "constructed_max_containing_size": 20, + "constructed_step0_layout": "None", + "pass": true + } + }, + "pass": true + }, + "grad": { + "control": { + "compile_s": 16.324218413006747, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304409438, + 53.13429595961162, + 31.78649237786796, + 2.8041319222743963, + 1781.7386158499723 + ], + [ + 249.25847095707593, + 214.72130119062194, + 374.3919459816108, + 813.0025446225928, + 3314.449436325227 + ], + [ + -30.046183166260203, + 41.85589438433415, + 53.129153081302505, + -17.18919451496857, + 1304.4185837665627 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 0.0 + }, + "mcs20": { + "compile_s": 13.64223806100199, + "all_finite": true, + "non_zero_per_instance": [ + true, + true, + true + ], + "gradients": [ + [ + -41.62226304409438, + 53.13429595961162, + 31.78649237786796, + 2.8041319222743963, + 1781.7386158499723 + ], + [ + 249.25847095707593, + 214.72130119062194, + 374.3919459816108, + 813.0025446225928, + 3314.449436325227 + ], + [ + -30.046183166260203, + 41.85589438433415, + 53.12915308130249, + -17.18919451496823, + 1304.4185837665627 + ] + ], + "pass": true, + "max_rel_delta_vs_control": 1.9841564586859975e-14 + } + }, + "mcs_no_unexplained_change": { + "mcs20": { + "max_containing_size": 20, + "fiducial_log_likelihood": 7.743201200876806, + "fiducial_repr": "7.743201200876806", + "fiducial_bit_identical_to_expected": true, + "fiducial_bit_identical_to_control": true, + "fiducial_explanation": { + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": false + }, + "stream_log_likelihood_bit_identical": true, + "draw_changes": [], + "n_image_set_changes": 0, + "stream_changes": [], + "grad_changes": [ + { + "stream_index": 2, + "uncapped_counts_per_step": [ + 9, + 5, + 5, + 5, + 5, + 5, + 5, + 5 + ], + "control_truncated_steps": [], + "row_truncated_steps": [], + "explained": true, + "max_rel_delta_vs_control": 1.9841564586859975e-14, + "explanation": "padded-length reduction rounding (log L bit-identical)" + } + ], + "grad_max_rel_delta_vs_control": 1.9841564586859975e-14, + "grad_rounding_rtol": 1e-12, + "vmap_changes": [], + "n_unexplained": 0, + "unexplained": [], + "pass": true + } + } + }, + "all_gates_pass": true, + "completeness_compile": { + "control_prior": { + "lower_s": 3.894830945006106, + "compile_s": 6.513903237995692, + "first_call_s": 0.013498048996552825, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720, + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [], + [ + 15, + 2 + ] + ], + "flops": 2787435.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 264, + "temp_size_in_bytes": 390472, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 7184384, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "control_stress": { + "lower_s": 1.0971377220121212, + "compile_s": 3.6677255230024457, + "first_call_s": 0.010043560003396124, + "traced_rows_per_step": [ + 11859, + 720, + 720, + 720, + 720, + 720, + 720, + 720 + ], + "output_shapes": [ + [ + 15, + 2 + ] + ], + "flops": 2785566.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 240, + "temp_size_in_bytes": 388936, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 567872, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2158592, + "max_containing_size_proof": { + "positions_shape": [ + 15, + 2 + ], + "expected_rows": 15, + "pass": true + } + }, + "mcs20_prior": { + "lower_s": 3.8791395830048714, + "compile_s": 6.670178764004959, + "first_call_s": 0.01329923199955374, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960, + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [], + [ + 20, + 2 + ] + ], + "flops": 2949042.0, + "memory_analysis": { + "argument_size_in_bytes": 40, + "output_size_in_bytes": 344, + "temp_size_in_bytes": 389192, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 568256, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 2547712, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + }, + "mcs20_stress": { + "lower_s": 1.099406025983626, + "compile_s": 3.646023312001489, + "first_call_s": 0.00994791099219583, + "traced_rows_per_step": [ + 11859, + 960, + 960, + 960, + 960, + 960, + 960, + 960 + ], + "output_shapes": [ + [ + 20, + 2 + ] + ], + "flops": 2947896.0, + "memory_analysis": { + "argument_size_in_bytes": 64, + "output_size_in_bytes": 320, + "temp_size_in_bytes": 387144, + "alias_size_in_bytes": 0, + "generated_code_size_in_bytes": 567872, + "host_temp_size_in_bytes": 0 + }, + "rss_delta_bytes": 471040, + "max_containing_size_proof": { + "positions_shape": [ + 20, + 2 + ], + "expected_rows": 20, + "pass": true + } + } + }, + "progress": [ + "[ 5.3 s] configs: control(n=8,rows=11859), mcs20(n=8,rows=11859), reference(n=9,rows=268677), reference_b(n=10,rows=115473)", + "[ 31.5 s] reference reference solved on 200 prior + 200 stress draws (compile 4.4 s)", + "[ 56.5 s] reference reference_b solved on 200 prior + 200 stress draws (compile 5.0 s)", + "[ 56.5 s] reference floor: {\"prior\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.0001578692142314068, \"p99_position_error\": 0.0001280749711778143, \"median_position_error\": 5.966895436149997e-05, \"ref_distinct_histogram\": {\"2\": 21, \"4\": 179}, \"abs_delta_logl_vs_reference\": {\"max\": 0.09204751533957278, \"p99\": 0.06845503627316349, \"median\": 0.004628222675297167, \"n_nonfinite_mismatch\": 0}}, \"stress\": {\"n_draws\": 200, \"multiplicity_agreement\": 1.0, \"raw_count_agreement\": 1.0, \"n_multiplicity_mismatch\": 0, \"max_position_error\": 0.00015786921423129578, \"p99_position_error\": 0.00014084184669768283, \"median_position_error\": 5.966895436134919e-05, \"ref_distinct_histogram\": {\"2\": 163, \"4\": 37}}}", + "[ 88.9 s] completeness control prior mult 1.000 raw 1.000 maxerr 0.00085134744991033 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711581035", + "[ 88.9 s] completeness mcs20 prior mult 1.000 raw 1.000 maxerr 0.00085134744991033 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711581035", + "[ 88.9 s] reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359935, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.759083091412917, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}}", + "[ 88.9 s] timing: compiling every route (fresh closure + clear_caches)", + "[ 106.8 s] timing: 20 rounds x 20 calls x 2 routes done", + "[ 107.1 s] fiducial gate: 7.743201200876806 == 7.743201200876806: True", + "[ 146.7 s] grad gate: control=True, mcs20=True", + "[ 146.7 s] best admissible (precision-equivalent): mcs20; any precision: mcs20", + "[ 212.4 s] vmap: control_vmap1 0.837 ms/L, control_vmap4 0.235 ms/L, control_vmap16 0.071 ms/L, mcs20_vmap1 0.838 ms/L, mcs20_vmap4 0.254 ms/L, mcs20_vmap16 0.071 ms/L", + "[ 212.4 s] step-0 split: ray trace vs ray trace + containment per geometry", + "[ 222.8 s] step-0 split: control trace -0.014 contain 0.091, mcs20 trace -0.013 contain 0.089", + "[ 222.8 s] uncapped containing counts (NumPy path) on the prior draws", + "[ 270.4 s] uncapped prior: max per step [17, 13, 11, 9, 7, 5, 5, 5]; control exceed/step [1, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 270.4 s] uncapped stream: max per step [13, 9, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 270.4 s] uncapped stress: max per step [7, 5, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0]", + "[ 270.4 s] mcs gate mcs20: 0 draw changes (0 image-set), stream 0, grad 1, vmap 0; unexplained 0; fiducial 7.743201200876806 bit-identical True" + ], + "wall_s": 270.44988925699727 +} \ No newline at end of file diff --git a/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.png b/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.png new file mode 100644 index 0000000000000000000000000000000000000000..6dfc2134ee0da13c64bb05a324aee306b899d8b7 GIT binary patch literal 89078 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 /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image +Sun 27 Sep 19:18:41 BST 2026 +loadavg: 0.08 0.14 0.89 1/1244 190918 +[ 5.3 s] configs: control(n=8,rows=11859), mcs20(n=8,rows=11859), reference(n=9,rows=268677), reference_b(n=10,rows=115473) +[ 31.5 s] reference reference solved on 200 prior + 200 stress draws (compile 4.4 s) +[ 56.5 s] reference reference_b solved on 200 prior + 200 stress draws (compile 5.0 s) +[ 56.5 s] reference floor: {"prior": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.0001578692142314068, "p99_position_error": 0.0001280749711778143, "median_position_error": 5.966895436149997e-05, "ref_distinct_histogram": {"2": 21, "4": 179}, "abs_delta_logl_vs_reference": {"max": 0.09204751533957278, "p99": 0.06845503627316349, "median": 0.004628222675297167, "n_nonfinite_mismatch": 0}}, "stress": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423129578, "p99_position_error": 0.00014084184669768283, "median_position_error": 5.966895436134919e-05, "ref_distinct_histogram": {"2": 163, "4": 37}}} +[ 88.9 s] completeness control prior mult 1.000 raw 1.000 maxerr 0.00085134744991033 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711581035 +[ 88.9 s] completeness mcs20 prior mult 1.000 raw 1.000 maxerr 0.00085134744991033 |dlogL|ref 0.8682473458375171 stress mult 1.0 maxerr 0.0007893460711581035 +[ 88.9 s] reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359935, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.759083091412917, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}} +[ 88.9 s] timing: compiling every route (fresh closure + clear_caches) +[ 106.8 s] timing: 20 rounds x 20 calls x 2 routes done +[ 107.1 s] fiducial gate: 7.743201200876806 == 7.743201200876806: True +[ 146.7 s] grad gate: control=True, mcs20=True +[ 146.7 s] best admissible (precision-equivalent): mcs20; any precision: mcs20 +[ 212.4 s] vmap: control_vmap1 0.837 ms/L, control_vmap4 0.235 ms/L, control_vmap16 0.071 ms/L, mcs20_vmap1 0.838 ms/L, mcs20_vmap4 0.254 ms/L, mcs20_vmap16 0.071 ms/L +[ 212.4 s] step-0 split: ray trace vs ray trace + containment per geometry +[ 222.8 s] step-0 split: control trace -0.014 contain 0.091, mcs20 trace -0.013 contain 0.089 +[ 222.8 s] uncapped containing counts (NumPy path) on the prior draws +[ 270.4 s] uncapped prior: max per step [17, 13, 11, 9, 7, 5, 5, 5]; control exceed/step [1, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 270.4 s] uncapped stream: max per step [13, 9, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 270.4 s] uncapped stress: max per step [7, 5, 5, 5, 5, 5, 5, 5]; control exceed/step [0, 0, 0, 0, 0, 0, 0, 0], mcs20 exceed/step [0, 0, 0, 0, 0, 0, 0, 0] +[ 270.4 s] mcs gate mcs20: 0 draw changes (0 image-set), stream 0, grad 1, vmap 0; unexplained 0; fiducial 7.743201200876806 bit-identical True + +====================================================================================================================================================== +POINTSOLVER CONFIG SWEEP (hpc_ral_a100_fp64, rounds=20, calls=20, prior draws=200, stress draws=200) +====================================================================================================================================================== + config block ext scale prec mcs nd n rows med_ms speedup [90% CI] admp mult raw maxerr p99err dlogL_ref s_mult s_maxerr + control control 9.90 0.20 0.0010 15 1 8 11859 0.827 1.000 [0.997, 1.003] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 + mcs20 max_containing_size_headroom 9.90 0.20 0.0010 20 1 8 11859 0.825 1.003 [0.999, 1.005] TT 1.000 1.000 8.51e-04 7.89e-04 8.68e-01 1.000 7.89e-04 +------------------------------------------------------------------------------------------------------------------------------------------------------ + default agrees with reference on every prior draw: True + default agrees with reference on every stress draw: True + reference floor: {"prior": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.0001578692142314068, "p99_position_error": 0.0001280749711778143, "median_position_error": 5.966895436149997e-05, "ref_distinct_histogram": {"2": 21, "4": 179}, "abs_delta_logl_vs_reference": {"max": 0.09204751533957278, "p99": 0.06845503627316349, "median": 0.004628222675297167, "n_nonfinite_mismatch": 0}}, "stress": {"n_draws": 200, "multiplicity_agreement": 1.0, "raw_count_agreement": 1.0, "n_multiplicity_mismatch": 0, "max_position_error": 0.00015786921423129578, "p99_position_error": 0.00014084184669768283, "median_position_error": 5.966895436134919e-05, "ref_distinct_histogram": {"2": 163, "4": 37}}} + best admissible (precision-equivalent): mcs20; any precision: mcs20 + reference image extent: {'prior': {'max_abs_y': 1.77939453125, 'max_abs_x': 1.7773254429359935, 'max_abs_coord': 1.77939453125, 'p99_abs_coord': 1.759083091412917, 'max_radius': 1.8116226317743076}, 'stress': {'max_abs_y': 2.2498046875, 'max_abs_x': 2.300267215077964, 'max_abs_coord': 2.300267215077964, 'p99_abs_coord': 2.2027852305644777, 'max_radius': 2.5191249773380773}} + fiducial gate: {'value': 7.743201200876806, 'expected': 7.743201200876806, 'repr': '7.743201200876806', 'pass': True} +------------------------------------------------------------------------------------------------------------------------------------------------------ + config mcs med_ms row/ctrl ctrl/row [90% CI] compile temp_B flops v16ms/L mult s_mult img-chg ok uncapped max/step (prior) | exceed/step (prior; stress) + control 15 0.827 1.0000 1.0000 [0.9971, 1.0029] 5.60 390472 2787435.0 0.0709 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [1, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + mcs20 20 0.825 0.9969 1.0031 [0.9994, 1.0051] 5.78 389192 2949201.0 0.0707 1.000 1.000 0 T [17, 13, 11, 9, 7, 5, 5, 5] | [0, 0, 0, 0, 0, 0, 0, 0]; [0, 0, 0, 0, 0, 0, 0, 0] + uncapped max over all samples and steps: 17 + rule candidates: ['mcs20'] + all_gates_pass: True + wall: 270 s + Results JSON: /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json + Results PNG: /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.png +=== source_revisions check (JSON vs imported HEADs) === +autoarray_imported_from /mnt/ral/jnightin/PyAuto/PyAutoArray +OK /mnt/ral/jnightin/autolens_profiling_wt/pointsolver-mcs-headroom/results/breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json all_gates_pass True +========================================== +loadavg: 1.50 1.24 1.19 1/1246 192647 +name, memory.used [MiB] +NVIDIA A100 80GB PCIe, 0 MiB +Finished. +Sun 27 Sep 19:23:14 BST 2026 From eb351718e89d208c497962a1c057cc5c09943fd2 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 19:43:11 +0100 Subject: [PATCH 8/9] notes(point_source_cpu): Phase 4c ledger -- MAX_CONTAINING_SIZE 15 -> 20 RAL 8490H quotable table (job 358976, loaded node, ratios valid), laptop witness, A100 row (job 359102), completeness and per-step uncapped counts (max 17, prior draw 12 step 0, explained), the scoped gradient allowance (1e-12, observed max 6.08e-14), fiducial bit-identical, the human decision N = 20 at +6.2 % (cost-leg miss accepted), suites, pins, the 31/31 targeted smoke and the revisions. Refs PyAutoLabs/PyAutoArray#583 Co-Authored-By: Claude Opus 5.5 --- results/notes/point_source_cpu_campaign.md | 168 +++++++++++++++++++++ 1 file changed, 168 insertions(+) diff --git a/results/notes/point_source_cpu_campaign.md b/results/notes/point_source_cpu_campaign.md index 40d49bb6e..43819a860 100644 --- a/results/notes/point_source_cpu_campaign.md +++ b/results/notes/point_source_cpu_campaign.md @@ -1474,3 +1474,171 @@ hpc/sync submit --cpu submit_breakdown_point_source_image_solver_config_sweep_st hpc/sync submit --cpu submit_breakdown_point_source_image_solver_config_sweep_step0_gpu_node_cpu_fp64 # EPYC fallback hpc/sync submit --gpu submit_breakdown_point_source_image_solver_config_sweep_step0_a100_fp64 # A100 ``` + +## Phase 4c — `MAX_CONTAINING_SIZE` headroom 15 → 20 (2026-09-27) + +Issue: [PyAutoArray #583](https://github.com/PyAutoLabs/PyAutoArray/issues/583). Branch +`feature/pointsolver-mcs-headroom` in PyAutoArray, PyAutoLens and autolens_profiling. **A correctness +fix, not a speed lever.** The JAX `PointSolver` keeps at most `MAX_CONTAINING_SIZE` containing triangles +per refinement step and silently truncates the rest (`jnp.where(..., size=MAX_CONTAINING_SIZE)`). +Phase 4a counted a step-0 maximum of 17 on the prior, so 15 was already truncating. The geometry is +otherwise unchanged (±9.9″ / 0.2 / 1e-3). + +### What changed + +- **PyAutoArray** `autoarray/structures/triangles/array.py`: `MAX_CONTAINING_SIZE = 20` (was 15). + `ArrayTriangles.__init__` / `for_limits_and_scale` bind it as their default, and + `CoordinateArrayTriangles.with_vertices` inherits that default. No other 15 in + `structures/triangles/` is tied to the cap. New test + `test_coordinate_jax.py::test__containing_set_above_the_old_cap_is_not_truncated[16|17]`: the static + lattice traced through `z → z**k` gives a k-sheet fold. Under `jit` all 16 or 17 containing + triangles are kept at the default, padded to `(20,)`, and the old cap of 15, passed explicitly, + drops some. **Red at 15** (keeps 15 of 16 / 17), green at 20. +- **PyAutoLens** `autolens/point/solver/shape_solver.py`: the `ShapeSolver` JAX rejection message is + built from `autoarray.structures.triangles.array.MAX_CONTAINING_SIZE`. That module is NumPy-only, so + the message is still a plain string, the same with or without JAX. The docstring names the constant + instead of "(15)", and `test_shape_solver.py` pins the rendered constant. +- **Harness** (`solver_config_sweep.py --mcs-headroom`, commits `a40e140` / `d5a971e` / `d6757ad`): + `mcs18` / `mcs20` / `mcs24` rows against the library control (15), each patched for tracing only. + NumPy uncapped containing counts for **every** refinement step on the prior, stress and stream + draws. `gates.mcs_no_unexplained_change`: a row may differ from the control only on a draw whose + uncapped count exceeds the control's cap at some step. `--configs` narrows the set. + +### Decision rule and the human call + +Pre-registered rule: the smallest N ≥ 18 whose uncapped max over all steps and draws is ≤ N − 3, with +no unexplained change, compile ≤ +20 % and at most about +5 % on the scalar median. +- On the quotable 8490H row, mcs20 clears every leg except the cost leg: it costs **+6.2 %**. + mcs18 fails the margin leg (17 > 18 − 3) and costs +5.0 %. `rule_candidates` is therefore empty + on the 8490H and laptop rows. +- **Human decision (2026-09-27, recorded on #583): N = 20, accepting the +6.2 % cost-leg miss.** + The fix is for correctness, and 20 is the smallest cap that clears the observed 17 with a + three-triangle margin. + +### Quotable row: RAL CPU, Xeon Platinum 8490H — job 358976 + +`euclid-ral-compute-10-4`, 8 CPUs, fp64, NPROC 8, BLAS 1, phase-1 XLA_FLAGS. Wall 397 s, +`all_gates_pass: true`. Every library came from the shared mirror, asserted: PyAutoArray `e281abf3` +(includes #580), PyAutoLens `dcbd4b71`, PyAutoGalaxy `ba8a08fa`, PyAutoFit `c156a9d8`, PyAutoNerves +`bf104102`; profiling `d6757ad`. JSON +[`solver_config_sweep_mcs_hpc_ral_cpu_fp64.json`](../breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_cpu_fp64.json); +log [`point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out`](point_source_cpu_2026_09_27_ral_job_358976_mcs_headroom_8490h_cpu.out). + +**The node was loaded**, with loadavg ≈ 206–210 on 236 cores. The rows are interleaved round by +round, so the ratios stand. The absolute ms are not comparable to phase 4a. + +| row | median ms | row / control | control / row [90 % CI] | paired-round | vmap-1 / 4 / 16 ms/L | compile s (vs ctrl) | XLA temp KB | FLOPs M | +|---|---:|---:|---:|---:|---|---:|---:|---:| +| control (15) | 1.466 | 1.000 | 1.000 [0.982, 1.019] | 1.000 | 1.450 / 0.991 / 0.821 | 4.29 | 881 | 2.80 | +| mcs18 | 1.538 | 1.050 | 0.953 [0.934, 0.965] | 0.946 | 1.565 / 1.059 / 0.856 | 4.48 (+4.5 %) | 883 | 2.93 | +| **mcs20** (chosen) | 1.557 | **1.062** | 0.941 [0.922, 0.953] | 0.925 | 1.548 / 1.076 / 0.892 | 4.59 (**+7.0 %**) | 884 | 3.02 | +| mcs24 | 1.597 | 1.090 | 0.918 [0.900, 0.927] | 0.915 | 1.634 / 1.167 / 0.925 | 4.91 (+14.4 %) | 886 | 3.20 | + +- Cost grows roughly linearly with the cap: +1.0–1.7 % per extra slot on the scalar call and about + +1.5 % in FLOPs per slot. XLA temp memory is flat (+0.3 %). +- mcs20 under vmap-16 costs +8.6 % (0.892 vs 0.821 ms/L). + +### Laptop witness (not quotable) + +`solver_config_sweep_mcs_laptop_cpu_fp64.json`: i9-10885H under WSL2, profiling `d6757ad`, loadavg ≈ 3. +- Row / control: mcs18 1.036, **mcs20 1.055**, mcs24 1.112. Control 2.151 ms. +- vmap-16: 1.107 / 1.199 / 1.226 / 1.281 ms/L. +- Compile +18.3 / +36.3 / +10.4 %. One cold compile per row on WSL2 is noise: the ordering is not + monotonic, and the 8490H shows +4.5 / +7.0 / +14.4 %. +- Otherwise the same verdict: `all_gates_pass: true` and zero image-set changes. + +### A100 no-regression row — job 359102 + +- Hardware: `euclid-ral-gpu-1`, NVIDIA A100 80 GB PCIe (driver 610.57.04), host EPYC 7702, idle + (loadavg 0.08 → 1.54). Wall 270 s. +- Run: `JAX_PLATFORMS=cuda` + `JAX_PLATFORM_NAME=cuda`, and the job asserted the `gpu` backend. + Configs `control,mcs20`, with the same mirror revisions as the 8490H row. Profiling `add12a2`. +- Submit + `hpc/batch_gpu/submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64`. + `all_gates_pass: true`. +- JSON + [`solver_config_sweep_mcs_hpc_ral_a100_fp64.json`](../breakdown/point_source_image/solver_config_sweep_mcs_hpc_ral_a100_fp64.json); + log [`point_source_cpu_2026_09_27_ral_job_359102_mcs_headroom_a100.out`](point_source_cpu_2026_09_27_ral_job_359102_mcs_headroom_a100.out). + +| row | median ms | row / control | control / row [90 % CI] | paired-round | vmap-1 / 4 / 16 ms/L | compile s (vs ctrl) | XLA temp KB | +|---|---:|---:|---:|---:|---|---:|---:| +| control (15) | 0.827 | 1.000 | 1.000 [0.997, 1.003] | 1.000 | 0.837 / 0.235 / 0.071 | 5.60 | 381 | +| mcs20 | 0.825 | 0.997 | 1.003 [0.999, 1.005] | 1.001 | 0.838 / 0.254 / 0.071 | 5.78 (+3.2 %) | 380 | + +**No regression on the launch-bound A100:** the scalar call is ~1.00× and vmap-16 is flat. vmap-4 +reads +8 % (0.254 vs 0.235 ms/L), a 19 µs single-cell difference that vmap-1 and vmap-16 do not +show. The fiducial `7.743201200876806` (the established A100 value) is bit-identical at both caps. + +### Completeness, truncation and draw 12 + +- Every row on every run: 200/200 prior and 200/200 stress, multiplicity agreement 1.0, max position + error 8.51e-4″ (unchanged from phase 4a). **Zero image-set, position or log L changes** against the + control on 200 prior + 200 stress + 16 stream draws. +- Uncapped containing counts per step (8490H; identical on the laptop and A100, NumPy path): + + | sample | max per step 0–7 | p99 per step | median | draws > 15 per step | + |---|---|---|---|---| + | prior (200) | 17 / 13 / 11 / 9 / 7 / 5 / 5 / 5 | 15 / 11 / 9 / 7 / 5 / 5 / 5 / 5 | 9 / 5 / … / 5 | 1 / 0 / 0 / 0 / 0 / 0 / 0 / 0 | + | stress (200) | 7 / 5 / 5 / 5 / 5 / 5 / 5 / 5 | 5 | 3 | none | + | stream (16) | 13 / 9 / 5 / 5 / 5 / 5 / 5 / 5 | — | 9 / 5 / … | none | + + The uncapped maximum over all samples and steps is **17**. With 20 no draw exceeds the cap at any + step, a margin of 3. +- **Draw 12 explained.** It is the only draw over 15, at step 0 only (17 containing triangles). At + MCS 15 the two highest-index entries are dropped (`jnp.where(size=...)` keeps the first 15 in + index order). They are the spurious fold-line candidates of phase 4a. Its later steps (≤ 13) are + never truncated, and its positions and log L are **bit-identical at 15, 18, 20 and 24**. The old + cap was truncating, but on this draw the truncation happened to be harmless. At 20 nothing is + dropped. The gate records it as a draw the control's cap truncated, with no change. + +### Gradient allowance (scoped) + +A padded `(MCS, 2)` positions array changes the length of the backward pass's reductions, so XLA +may reorder a sum. +- `gates.mcs_no_unexplained_change` therefore allows a `jax.grad` difference against the control of + at most `GRAD_ROUNDING_RTOL = 1e-12` relative, and only under two conditions: + - the row is an MCS row; step-0 route rows and the control stay strictly bit-identical; + - the log L is bit-identical. +- A log L difference is never tolerated. It is only ever an explained truncation change. +- **Observed maximum:** 6.08e-14 on the 8490H (stream instances 0 and 2), 5.58e-15 on the laptop and + 1.98e-14 on the A100, all "padded-length reduction rounding (log L bit-identical)". +- `jax.grad` is finite and non-zero on every row. The patch is restored, and the traced positions + shape is `(mcs, 2)` on every row (`gates.max_containing_size_patch`). + +### Fiducial + +`7.743201200876812` (CPU: 8490H and laptop) and `7.743201200876806` (A100) are **bit-identical at +every cap**. The padded rows are `inf` sentinels that contribute nothing, so no re-pin is needed. +`FIDUCIAL_SOLVED_LOG_L_BY_BACKEND` is unchanged. + +### Library suites, pins and downstream (branch libraries, laptop) + +- Suites: PyAutoArray **1738 passed**; PyAutoLens **759 passed, 1 xfailed** (the deferred + `ShapeSolver` JAX parity xfail). Both ran with the branch PyAutoArray first on `PYTHONPATH`. +- autolens_workspace_test pins: `scripts/point_source/jax_likelihood/{point,image_plane,source_plane,fluxes_time_delays}.py` + and `scripts/point_source/jax_grad/gradient.py` **all pass unchanged** against the branch PyAutoArray + + PyAutoLens (`MAX_CONTAINING_SIZE` 20 asserted at import). The exact `-83.38049777774609` point pin + holds and every gradient check passes, so **no pin changes** and no workspace_test PR. The scripts + ran in scratch detached worktrees of workspace main. +- No workspace, workspace_test or HowToLens script assumes a `(15, 2)` positions shape. The grep for + `(15, 2)`, `MAX_CONTAINING_SIZE` and `max_containing_size` finds nothing. +- Targeted smoke, the #580 selection of 31 point-source scripts, under each workspace's + `profile_smoke.yaml`: HowToLens **3/3**, autolens_workspace **19/19**, autolens_workspace_test + **9/9**: 31/31 pass. + +### Revisions + +| repo | revision | +|---|---| +| PyAutoArray (branch, local) | `462ad094` (on `e281abf3`) | +| PyAutoLens (branch, local) | `ae95341d` (on `dcbd4b71`) | +| RAL mirror (both jobs) | PyAutoArray `e281abf3`, PyAutoLens `dcbd4b71`, PyAutoGalaxy `ba8a08fa`, PyAutoFit `c156a9d8`, PyAutoNerves `bf104102` | +| autolens_profiling | `d6757ad` (8490H job 358976, laptop), `add12a2` (A100 job 359102) | + +### Reproduce (RAL) + +```bash +# RAL worktree of feature/pointsolver-mcs-headroom; libraries are the shared mirror (MCS 15 = control) +hpc/sync submit --cpu submit_breakdown_point_source_image_solver_config_sweep_mcs_ral_cpu_fp64 # quotable, 8490H +hpc/sync submit --gpu submit_breakdown_point_source_image_solver_config_sweep_mcs_a100_fp64 # A100 +``` From c7be5afa8d60bec2d76eb71a841bde9131e33193 Mon Sep 17 00:00:00 2001 From: Jammy2211 Date: Sun, 27 Sep 2026 19:43:49 +0100 Subject: [PATCH 9/9] =?UTF-8?q?notes:=20phase=204c=20=E2=80=94=20mark=20dr?= =?UTF-8?q?aw-12=20fold-line=20attribution=20as=20carried=20from=204a,=20n?= =?UTF-8?q?ot=20re-verified?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- results/notes/point_source_cpu_campaign.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/results/notes/point_source_cpu_campaign.md b/results/notes/point_source_cpu_campaign.md index 43819a860..bb885437a 100644 --- a/results/notes/point_source_cpu_campaign.md +++ b/results/notes/point_source_cpu_campaign.md @@ -1586,7 +1586,8 @@ show. The fiducial `7.743201200876806` (the established A100 value) is bit-ident step, a margin of 3. - **Draw 12 explained.** It is the only draw over 15, at step 0 only (17 containing triangles). At MCS 15 the two highest-index entries are dropped (`jnp.where(size=...)` keeps the first 15 in - index order). They are the spurious fold-line candidates of phase 4a. Its later steps (≤ 13) are + index order). Phase 4a identified them as spurious fold-line candidates; that was not + re-verified triangle by triangle here, and the bit-identical result below does not depend on it. Its later steps (≤ 13) are never truncated, and its positions and log L are **bit-identical at 15, 18, 20 and 24**. The old cap was truncating, but on this draw the truncation happened to be harmless. At 20 nothing is dropped. The gate records it as a draw the control's cap truncated, with no change.