Skip to content

mps CB walls: strided writes, cumsum, bool copy on Metal; named refusals (#32, stacked on #83) - #84

Merged
b-re-w merged 11 commits into
developfrom
feat/mps-cb
Oct 16, 2026
Merged

b-re-w merged 11 commits into
developfrom
feat/mps-cb

Conversation

@b-re-w

@b-re-w b-re-w commented Oct 15, 2026

Copy link
Copy Markdown
Member

Refs #32 (partial: the end-to-end CB greedy criterion is not met). Stacked on #83 (#49); merge #83 first.

Defect fixed

  • Strided in-place writes on mps (zero_/fill_/copy_/add_ into views, x[..., :k] = 0): computed on Metal one contiguous run per slice_set, no host download; layouts needing more than 65536 runs refuse by name.
  • cumsum, any, copy_ into bool on mps: no longer raw candle to_dtype F32 F64/U8 F64 errors; computed on device.
  • pow.Tensor_Scalar with exponent other than 2 on mps: named refusal (candle's fast-math Metal powf gives 3.0 ** 3 = 26.99999237, so computing in f32 would be wrong). A sweep of every implemented op outside the readback gate found no other raw candle Metal error.

Still refused by name: int32 compute on mps (no int32 Metal kernels in candle-metal-kernels); index.Tensor, gather, scatter.src, sort, multinomial, view.dtype (Metal gather/scatter do not bounds-check).

Test added: tests/devices/mps/test_mpscb.py (5); test_mpsinplace.py refusal test replaced by two (runs written on device; too-many-runs refusal); test_shim.py / test_mpsfwd.py updated from the candle error to the named refusal and cumsum computing.

Evidence (local, this Mac, worktree)

  • Red before: cumsum ... candle: Metal contiguous to_dtype F32 F64; zero_ on [:, 0:2] ... non-contiguous view is implemented for the CPU backend only.
  • Nullified: forcing split = 0 turns 4 tests red; removing the pow refusal turns 2 red.
  • Gate: suites=125/125 ok=2021 FAIL=3; after the run, the mpsfwd FAIL was fixed (suite re-run green). The other two are worktree environment (test_toolguard_wheel_staging, test_wheelmatrix, no .caches/target-python, AGENTS.md §13.2).

Not done: device index.Tensor (every forward hits it), so CB greedy on mps does not complete; sin/cos accuracy point; cumsum on mps accumulates in f32 where upstream cpu uses f64.

…l; cpu min/max signed zero (#49)

- amax on Metal: max_keepdim, then the first index equal to it (or the
  first NaN) and a gather, so all -inf rows answer -inf and NaN propagates.
- compare ops off the cpu keep their common dtype instead of widening to
  f64 (candle has no Metal F32->F64 cast); scalars narrow to the operand's
  dtype as upstream does. to(bool) on mps uses ne(0) in its own dtype.
- cpu min()/max() return upstream's zero sign (-0 for min, +0 for max when
  present); min.dim/max.dim keep the first equal element.
- golden: opt-in signed_zero cases and a zero-sign fault mode.
- randn/normal_ on mps already compute on the device; a test pins it.

Red before: amax all -inf gave -FLT_MAX; eq.Tensor raised Metal to_dtype
F32 F64; min([0,-0,0,-0]) gave 0.0. Nullified: each of the three fixes
removed turns its test red.
…ses by name (#32)

- write_on_device splits a non-contiguous receiver into contiguous runs and
  slice_sets each on the device; past 65536 runs it refuses by name.
- fill_.Tensor accepts a 0-dim cpu value beside an mps receiver (x[..., :k] = 0).
- cumsum, any and copy_ into bool stay in their own/opmath dtype off the cpu
  instead of widening to f64 (candle has no Metal F32->F64 cast).
- pow.Tensor_Scalar with an exponent other than 2 on Metal refuses by name:
  candle fast-math Metal powf gives 3.0 ** 3 = 26.99999237.
- int32 compute and index/gather/scatter/sort/multinomial/view.dtype stay
  refused by name (no int32 Metal kernels; Metal gather/scatter unchecked).

Red before: cumsum f32 raised Metal to_dtype F32 F64; zero_ on [:, 0:2]
refused. Nullified: dropping the run split, or the pow refusal, turns the
suites red.
…nce (#49, #40)

The hosted x86_64 runner's upstream answered min([-0., 0., -0., 0.]) = +0.0
where arm64 upstream (the table, and the shim) answers -0.0. Pinned by name
with known_x86_64_linux_divergence: still a failure everywhere but x86_64
Linux, an ok there the day it agrees.
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Gate on CI (issue #24)

Full gate: 127 suites = 119 run on at least one CI runner + 8 local-only. The local gate (tests/run.sh on the Mac) is still the only run that covers all 127.

runner exit ran not run here PASS PARTIAL UNVERIFIED (all skipped) FAIL missing/empty ledger
linux 0 119 8 85 31 3 0 0 suites=127/127 ok=1734 FAIL=0 SKIP=276 (printed and re-read
macos ? 62 5 52 8 1 0 61 R line
  • linux CI PLAN: runner=linux ran=119/127 not-run=8 (UNVERIFIED on this runner, local-only here): devices/coreml/test_ane_subgraph_components.py, devices/coreml/test_anedecode.py, devices/coreml/test_anesubgraph.py, devices/coreml/test_anetracer.py, devices/coreml/test_coremlops.py, gate/test_toolguard_run_preflight.py, release/test_toolguard_wheel_staging.py, release/test_wheelmatrix.py
  • linux VULKAN COVERAGE: UNVERIFIED -- no Vulkan test executed in this run. A green gate here says nothing about any Vulkan kernel.
  • linux DOCWATCH: PASS -- 1511/1511 evaluated marker(s) hold, 30 skipped
  • macos no CI PLAN: line (the gate stopped before it)
  • macos no VULKAN COVERAGE: line (the gate stopped before it)
  • macos no DOCWATCH: line (the gate stopped before it)

Local-only: verified by no CI runner (8)

  • devices/coreml/test_ane_subgraph_components.py -- imports coremltools at module scope, so without it the suite dies at import, and what it measures is subgraph placement on the Apple Neural Engine, which no hosted runner has. It also has no _skip runner of its own.
  • devices/coreml/test_anedecode.py -- needs CoreML's MLComputePlan answering for the Apple Neural Engine (AGENTS.md §13.3), which no hosted runner has; and its fixture reports a missing coremltools with a hand-rolled print followed by ok, so on a runner it would print ok having run nothing. Local-only until its skips go through _skip, and even then it would only skip.
  • devices/coreml/test_anesubgraph.py -- needs CoreML's MLComputePlan answering for the Apple Neural Engine (AGENTS.md §13.3), which no hosted runner has; and its fixture reports a missing coremltools with a hand-rolled print followed by ok, so on a runner it would print ok having run nothing. Local-only until its skips go through _skip, and even then it would only skip.
  • devices/coreml/test_anetracer.py -- needs CoreML's MLComputePlan answering for the Apple Neural Engine (AGENTS.md §13.3), which no hosted runner has; and its fixture reports a missing coremltools with a hand-rolled print followed by ok, so on a runner it would print ok having run nothing. Local-only until its skips go through _skip, and even then it would only skip.
  • devices/coreml/test_coremlops.py -- needs CoreML's MLComputePlan answering for the Apple Neural Engine (AGENTS.md §13.3), which no hosted runner has; and its fixture reports a missing coremltools with a hand-rolled print followed by ok, so on a runner it would print ok having run nothing. Local-only until its skips go through _skip, and even then it would only skip.
  • gate/test_toolguard_run_preflight.py -- needs the release machine's toolchain, which a hosted runner does not have: the pinned interpreter at .caches/spike-venv (transformers 5.15.1, AGENTS.md §15.2), the rust cross targets and the target CPython distributions under tools/wheel. Measured on run 37078300696 (macos): 3 of 3 tests FAIL with known-good interpreter missing: .../.caches/spike-venv/bin/python.
  • release/test_toolguard_wheel_staging.py -- needs the release machine's toolchain, which a hosted runner does not have: the pinned interpreter at .caches/spike-venv (transformers 5.15.1, AGENTS.md §15.2), the rust cross targets and the target CPython distributions under tools/wheel. Measured on run 37078300696 (macos): its one test FAILs with FileNotFoundError on the same interpreter.
  • release/test_wheelmatrix.py -- needs the release machine's toolchain, which a hosted runner does not have: the pinned interpreter at .caches/spike-venv (transformers 5.15.1, AGENTS.md §15.2), the rust cross targets and the target CPython distributions under tools/wheel. Measured on run 37078300696 (macos): 20 of 22 ok; test_every_target_names_a_rust_target_that_is_installed needs the nine cross targets the release machine has, and test_build_pys_own_self_test_passes asserts LINUX SELF-TEST: PASS, which build.py prints only where the target CPython distribution exists (it skips loudly otherwise). The 20 lose CI coverage until those two take the runner's toolchain into account; follow-up.

Suites that verified nothing, or failed, on a runner

suite runner verdict ok FAIL SKIP
devices/coreml/test_anepath.py linux UNVERIFIED 0 0 6
devices/mps/test_mpscb.py linux UNVERIFIED 0 0 5
devices/mps/test_mpsextreme.py linux UNVERIFIED 0 0 3
devices/coreml/test_anepath.py macos UNVERIFIED 0 0 6
distributed/test_gloopin.py macos EMPTY 0 0 0
export/test_export.py macos MISSING 0 0 0
export/test_export4.py macos MISSING 0 0 0
export/test_export5.py macos MISSING 0 0 0
export/test_export6.py macos MISSING 0 0 0
export/test_liftfresh.py macos MISSING 0 0 0
export/test_structseq.py macos MISSING 0 0 0
export/test_varmean.py macos MISSING 0 0 0
gate/test_benchguard_ab_upstream.py macos MISSING 0 0 0
gate/test_gatelock.py macos MISSING 0 0 0
gate/test_skipvis.py macos MISSING 0 0 0
gate/test_split_probe.py macos MISSING 0 0 0
gate/test_tmpleak.py macos MISSING 0 0 0
gate/test_toolguard_run_preflight.py macos MISSING 0 0 0
golden/test_x86pins.py macos MISSING 0 0 0
models/test_cbpath.py macos MISSING 0 0 0
models/test_cbwalls.py macos MISSING 0 0 0
models/test_higgs.py macos MISSING 0 0 0
models/test_qwen3.py macos MISSING 0 0 0
models/test_stream.py macos MISSING 0 0 0
models/test_voice3.py macos MISSING 0 0 0
models/test_voice4.py macos MISSING 0 0 0
numerics/test_agree.py macos MISSING 0 0 0
numerics/test_agree2.py macos MISSING 0 0 0
numerics/test_int8.py macos MISSING 0 0 0
numerics/test_remeasure2.py macos MISSING 0 0 0
ops/test_canine.py macos MISSING 0 0 0
ops/test_complex.py macos MISSING 0 0 0
ops/test_cplx2.py macos MISSING 0 0 0
ops/test_equal_allclose.py macos MISSING 0 0 0
ops/test_fft.py macos MISSING 0 0 0
ops/test_glu.py macos MISSING 0 0 0
ops/test_indexsel.py macos MISSING 0 0 0
ops/test_last7.py macos MISSING 0 0 0
ops/test_metaemb.py macos MISSING 0 0 0
ops/test_metafam.py macos MISSING 0 0 0
ops/test_metastride.py macos MISSING 0 0 0
ops/test_pad.py macos MISSING 0 0 0
ops/test_repeat.py macos MISSING 0 0 0
ops/test_rnn.py macos MISSING 0 0 0
ops/test_scatter.py macos MISSING 0 0 0
ops/test_signedzero.py macos MISSING 0 0 0
ops/test_strided.py macos MISSING 0 0 0
ops/test_tail1.py macos MISSING 0 0 0
ops/test_tail2.py macos MISSING 0 0 0
ops/test_tail3.py macos MISSING 0 0 0
ops/test_tail4.py macos MISSING 0 0 0
ops/test_vmap.py macos MISSING 0 0 0
release/test_cigate.py macos MISSING 0 0 0
release/test_cipub.py macos MISSING 0 0 0
release/test_docrefs.py macos MISSING 0 0 0
release/test_layout.py macos MISSING 0 0 0
release/test_platver_harnesses.py macos MISSING 0 0 0
release/test_publish.py macos MISSING 0 0 0
release/test_release.py macos MISSING 0 0 0
release/test_style.py macos MISSING 0 0 0
release/test_toolguard_wheel_staging.py macos MISSING 0 0 0
release/test_wheelmatrix.py macos MISSING 0 0 0
training/test_stage0.py macos MISSING 0 0 0
training/test_stagetype.py macos MISSING 0 0 0
training/test_train.py macos MISSING 0 0 0
Every suite, every runner
suite linux macos
_support/test_shim.py PARTIAL (462 ok / 0 FAIL / 18 SKIP) PARTIAL (472 ok / 0 FAIL / 8 SKIP)
api/test_import.py PASS (3 ok / 0 FAIL / 0 SKIP) PASS (3 ok / 0 FAIL / 0 SKIP)
api/test_threadstate.py PASS (4 ok / 0 FAIL / 0 SKIP) PASS (4 ok / 0 FAIL / 0 SKIP)
api/test_tnnamespace.py PASS (4 ok / 0 FAIL / 0 SKIP) PASS (4 ok / 0 FAIL / 0 SKIP)
api/test_tntransformers.py PASS (14 ok / 0 FAIL / 0 SKIP) PASS (14 ok / 0 FAIL / 0 SKIP)
bindings/test_aliasinc.py PASS (8 ok / 0 FAIL / 0 SKIP) PASS (8 ok / 0 FAIL / 0 SKIP)
bindings/test_argform.py PASS (13 ok / 0 FAIL / 0 SKIP) PASS (13 ok / 0 FAIL / 0 SKIP)
bindings/test_bfallback.py PASS (9 ok / 0 FAIL / 0 SKIP) PASS (9 ok / 0 FAIL / 0 SKIP)
bindings/test_bind2.py PASS (6 ok / 0 FAIL / 0 SKIP) PASS (6 ok / 0 FAIL / 0 SKIP)
bindings/test_bind3.py PASS (17 ok / 0 FAIL / 0 SKIP) PASS (17 ok / 0 FAIL / 0 SKIP)
bindings/test_bind4.py PASS (19 ok / 0 FAIL / 0 SKIP) PASS (19 ok / 0 FAIL / 0 SKIP)
bindings/test_bind5.py PASS (27 ok / 0 FAIL / 0 SKIP) PASS (27 ok / 0 FAIL / 0 SKIP)
bindings/test_bindings.py PASS (14 ok / 0 FAIL / 0 SKIP) PASS (14 ok / 0 FAIL / 0 SKIP)
bindings/test_bkeyset.py PASS (9 ok / 0 FAIL / 0 SKIP) PASS (9 ok / 0 FAIL / 0 SKIP)
bindings/test_convbackend.py PASS (3 ok / 0 FAIL / 0 SKIP) PASS (3 ok / 0 FAIL / 0 SKIP)
bindings/test_dispatch.py PASS (12 ok / 0 FAIL / 0 SKIP) PASS (12 ok / 0 FAIL / 0 SKIP)
bindings/test_metakey.py PASS (5 ok / 0 FAIL / 0 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
bindings/test_methodspell.py PASS (5 ok / 0 FAIL / 0 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
bindings/test_setitem.py PASS (11 ok / 0 FAIL / 0 SKIP) PASS (11 ok / 0 FAIL / 0 SKIP)
devices/coreml/test_ane_subgraph_components.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) NOT RUN (0 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_anedecode.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) NOT RUN (0 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_anepath.py UNVERIFIED (0 ok / 0 FAIL / 6 SKIP) UNVERIFIED (0 ok / 0 FAIL / 6 SKIP)
devices/coreml/test_anesubgraph.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) NOT RUN (0 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_anetracer.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) NOT RUN (0 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_bf16ane.py PARTIAL (1 ok / 0 FAIL / 20 SKIP) PARTIAL (1 ok / 0 FAIL / 20 SKIP)
devices/coreml/test_coremlops.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) NOT RUN (0 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_emptyplan.py PASS (17 ok / 0 FAIL / 0 SKIP) PASS (17 ok / 0 FAIL / 0 SKIP)
devices/coreml/test_npmarshal.py PARTIAL (6 ok / 0 FAIL / 1 SKIP) PARTIAL (6 ok / 0 FAIL / 1 SKIP)
devices/coreml/test_npu2.py PARTIAL (3 ok / 0 FAIL / 12 SKIP) PARTIAL (3 ok / 0 FAIL / 12 SKIP)
devices/cuda/test_cuda.py PASS (18 ok / 0 FAIL / 0 SKIP) PASS (18 ok / 0 FAIL / 0 SKIP)
devices/mps/test_absmps.py PARTIAL (2 ok / 0 FAIL / 2 SKIP) PASS (4 ok / 0 FAIL / 0 SKIP)
devices/mps/test_constset.py PARTIAL (3 ok / 0 FAIL / 7 SKIP) PASS (10 ok / 0 FAIL / 0 SKIP)
devices/mps/test_gemmint.py PARTIAL (4 ok / 0 FAIL / 2 SKIP) PASS (6 ok / 0 FAIL / 0 SKIP)
devices/mps/test_i8mps.py PARTIAL (1 ok / 0 FAIL / 4 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
devices/mps/test_intmps.py PARTIAL (3 ok / 0 FAIL / 5 SKIP) PASS (8 ok / 0 FAIL / 0 SKIP)
devices/mps/test_metalcount.py PARTIAL (1 ok / 0 FAIL / 3 SKIP) PASS (4 ok / 0 FAIL / 0 SKIP)
devices/mps/test_metalplace.py PARTIAL (1 ok / 0 FAIL / 4 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsattn.py PARTIAL (4 ok / 0 FAIL / 6 SKIP) PASS (10 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpscb.py UNVERIFIED (0 ok / 0 FAIL / 5 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsconst.py PARTIAL (3 ok / 0 FAIL / 10 SKIP) PASS (13 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsextreme.py UNVERIFIED (0 ok / 0 FAIL / 3 SKIP) PASS (3 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsfwd.py PARTIAL (2 ok / 0 FAIL / 7 SKIP) PASS (9 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsgen.py PARTIAL (2 ok / 0 FAIL / 5 SKIP) PASS (7 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsinplace.py PARTIAL (1 ok / 0 FAIL / 9 SKIP) PASS (10 ok / 0 FAIL / 0 SKIP)
devices/mps/test_mpsrefuse.py PARTIAL (4 ok / 0 FAIL / 2 SKIP) PASS (6 ok / 0 FAIL / 0 SKIP)
devices/mps/test_viewdtype.py PARTIAL (5 ok / 0 FAIL / 1 SKIP) PASS (6 ok / 0 FAIL / 0 SKIP)
devices/npu/test_intelnpu.py PARTIAL (43 ok / 0 FAIL / 7 SKIP) PARTIAL (43 ok / 0 FAIL / 7 SKIP)
devices/npu/test_npublob.py PASS (13 ok / 0 FAIL / 0 SKIP) PASS (13 ok / 0 FAIL / 0 SKIP)
devices/npu/test_npudim.py PASS (8 ok / 0 FAIL / 0 SKIP) PASS (8 ok / 0 FAIL / 0 SKIP)
devices/npu/test_npufuse.py PARTIAL (11 ok / 0 FAIL / 3 SKIP) PARTIAL (11 ok / 0 FAIL / 3 SKIP)
devices/npu/test_npuvendor.py PASS (17 ok / 0 FAIL / 0 SKIP) PASS (17 ok / 0 FAIL / 0 SKIP)
devices/npu/test_npuwire.py PASS (12 ok / 0 FAIL / 0 SKIP) PASS (12 ok / 0 FAIL / 0 SKIP)
devices/npu/test_ovcache.py PASS (12 ok / 0 FAIL / 0 SKIP) PASS (12 ok / 0 FAIL / 0 SKIP)
devices/npu/test_ovpar.py PASS (14 ok / 0 FAIL / 0 SKIP) PASS (14 ok / 0 FAIL / 0 SKIP)
devices/qnn/test_qnn.py PARTIAL (15 ok / 0 FAIL / 12 SKIP) PARTIAL (16 ok / 0 FAIL / 11 SKIP)
devices/qnn/test_qnn_ops.py PASS (10 ok / 0 FAIL / 0 SKIP) PASS (10 ok / 0 FAIL / 0 SKIP)
devices/qnn/test_qnn_plan.py PASS (12 ok / 0 FAIL / 0 SKIP) PASS (12 ok / 0 FAIL / 0 SKIP)
devices/qnn/test_qnnci.py PASS (30 ok / 0 FAIL / 0 SKIP) PASS (30 ok / 0 FAIL / 0 SKIP)
devices/qnn/test_qnnprobe.py PASS (4 ok / 0 FAIL / 0 SKIP) PASS (4 ok / 0 FAIL / 0 SKIP)
devices/test_devicens.py PASS (25 ok / 0 FAIL / 0 SKIP) PASS (25 ok / 0 FAIL / 0 SKIP)
devices/test_dtmdev.py PARTIAL (1 ok / 0 FAIL / 4 SKIP) PASS (5 ok / 0 FAIL / 0 SKIP)
devices/test_dtypedev.py PARTIAL (6 ok / 0 FAIL / 5 SKIP) PASS (11 ok / 0 FAIL / 0 SKIP)
devices/vulkan/test_vulkan4.py PARTIAL (5 ok / 0 FAIL / 71 SKIP) PARTIAL (5 ok / 0 FAIL / 71 SKIP)
devices/vulkan/test_vulkancov.py PASS (8 ok / 0 FAIL / 0 SKIP) PASS (8 ok / 0 FAIL / 0 SKIP)
distributed/test_asyncwork.py PASS (9 ok / 0 FAIL / 0 SKIP) PASS (9 ok / 0 FAIL / 0 SKIP)
distributed/test_collect2.py PASS (16 ok / 0 FAIL / 0 SKIP) PASS (16 ok / 0 FAIL / 0 SKIP)
distributed/test_gloopin.py PASS (6 ok / 0 FAIL / 0 SKIP) EMPTY (0 ok / 0 FAIL / 0 SKIP)
export/test_export.py PASS (15 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_export4.py PASS (18 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_export5.py PASS (21 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_export6.py PASS (11 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_liftfresh.py PASS (9 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_structseq.py PASS (7 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
export/test_varmean.py PASS (7 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_benchguard_ab_upstream.py PASS (6 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_gatelock.py PASS (10 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_skipvis.py PASS (4 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_split_probe.py PASS (2 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_tmpleak.py PASS (3 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
gate/test_toolguard_run_preflight.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
golden/test_x86pins.py PASS (5 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_cbpath.py PASS (5 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_cbwalls.py PARTIAL (9 ok / 0 FAIL / 6 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_higgs.py PASS (23 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_qwen3.py PARTIAL (9 ok / 0 FAIL / 13 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_stream.py PARTIAL (6 ok / 0 FAIL / 9 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_voice3.py PARTIAL (37 ok / 0 FAIL / 2 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
models/test_voice4.py PARTIAL (12 ok / 0 FAIL / 2 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
numerics/test_agree.py PASS (16 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
numerics/test_agree2.py PASS (13 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
numerics/test_int8.py PASS (15 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
numerics/test_remeasure2.py PASS (4 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_canine.py PASS (4 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_complex.py PASS (12 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_cplx2.py PASS (10 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_equal_allclose.py PASS (21 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_fft.py PASS (16 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_glu.py PASS (5 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_indexsel.py PASS (3 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_last7.py PASS (17 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_metaemb.py PASS (20 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_metafam.py PASS (15 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_metastride.py PASS (13 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_pad.py PASS (23 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_repeat.py PASS (18 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_rnn.py PASS (26 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_scatter.py PASS (23 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_signedzero.py PARTIAL (2 ok / 0 FAIL / 1 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_strided.py PASS (12 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_tail1.py PASS (32 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_tail2.py PASS (11 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_tail3.py PASS (17 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_tail4.py PASS (25 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
ops/test_vmap.py PASS (8 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_cigate.py PASS (19 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_cipub.py PASS (38 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_docrefs.py PASS (11 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_layout.py PASS (6 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_platver_harnesses.py PASS (9 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_publish.py PASS (4 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_release.py PARTIAL (10 ok / 0 FAIL / 1 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_style.py PASS (5 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_toolguard_wheel_staging.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
release/test_wheelmatrix.py NOT RUN (0 ok / 0 FAIL / 1 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
training/test_stage0.py PASS (12 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
training/test_stagetype.py PASS (6 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)
training/test_train.py PASS (11 ok / 0 FAIL / 0 SKIP) MISSING (0 ok / 0 FAIL / 0 SKIP)

A SKIP is unverified on that runner, never passed. UNVERIFIED means the suite ran and every one of its tests skipped by name.

…#49)

PR #83's x86_64 CI: upstream's max() zero sign differs from the shim's
there, so the signed-zero case fails clean and flipping the shim's zero
lands on upstream's answer, read as a MISS of zero-sign. A corruption of a
case that already fails says nothing about the comparator; the golden run
reports the failing case itself. Here (arm64) zero-sign is still CAUGHT and
the self-test PASSes.
…#69)

PR #94's x86_64 CI named them: on x86 upstream's vectorised reduction
answers max(...) = -0.0 and min(...) = +0.0 where arm64 upstream and the
shim answer the other zero. Pinned by exact name like PR #90's 54; the pin
suite now expects 70. Every suite there passed (FAIL=0).
b-re-w added a commit that referenced this pull request Oct 16, 2026
mps index.Tensor / gather on Metal with device-side bounds check (#32, stacked on #84)
@b-re-w
b-re-w merged commit d11fcd8 into develop Oct 16, 2026
2 of 4 checks passed
@b-re-w
b-re-w deleted the feat/mps-cb branch October 16, 2026 14:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant