Record arXiv v1.1 submission
Browse files- README.md +5 -5
- docs/HUGGING_FACE.md +5 -5
- docs/publications/ARXIV.md +13 -12
- docs/publications/README.md +5 -6
- tests/test_onnx_export.py +103 -50
README.md
CHANGED
|
@@ -66,11 +66,11 @@ Articles and original figures use **CC BY 4.0**. Their version, SHA-256 digests
|
|
| 66 |
and verification scope are in the [publication index](docs/publications/README.md).
|
| 67 |
These preprints preserve negative results, missing measurements and the boundary
|
| 68 |
between frozen v1 evidence and the separately labelled post-freeze v2 handoff.
|
| 69 |
-
The paper uses arXiv **submission number 8127259**.
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
|
| 75 |
Chrome Web Store version **0.1.0** passed review and is publicly available as
|
| 76 |
[Vons — Local Decisions](https://chromewebstore.google.com/detail/vons-%E2%80%94-local-decisions/cbmjkokoojinfgafahncmjlfmicinide),
|
|
|
|
| 66 |
and verification scope are in the [publication index](docs/publications/README.md).
|
| 67 |
These preprints preserve negative results, missing measurements and the boundary
|
| 68 |
between frozen v1 evidence and the separately labelled post-freeze v2 handoff.
|
| 69 |
+
The paper uses arXiv **submission number 8127259**. The v1.1 PDF and metadata
|
| 70 |
+
were processed successfully on **2026-09-25** and submitted on **2026-09-26**.
|
| 71 |
+
The arXiv account currently reports **on hold** for moderation. This tracking
|
| 72 |
+
number is not a public arXiv article identifier. No public announcement or
|
| 73 |
+
peer-review acceptance is claimed.
|
| 74 |
|
| 75 |
Chrome Web Store version **0.1.0** passed review and is publicly available as
|
| 76 |
[Vons — Local Decisions](https://chromewebstore.google.com/detail/vons-%E2%80%94-local-decisions/cbmjkokoojinfgafahncmjlfmicinide),
|
docs/HUGGING_FACE.md
CHANGED
|
@@ -66,11 +66,11 @@ Articles and original figures use **CC BY 4.0**. Their version, SHA-256 digests
|
|
| 66 |
and verification scope are in the [publication index](../docs/publications/README.md).
|
| 67 |
These preprints preserve negative results, missing measurements and the boundary
|
| 68 |
between frozen v1 evidence and the separately labelled post-freeze v2 handoff.
|
| 69 |
-
The paper uses arXiv **submission number 8127259**.
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
| 73 |
-
|
| 74 |
|
| 75 |
Chrome Web Store version **0.1.0** passed review and is publicly available as
|
| 76 |
[Vons — Local Decisions](https://chromewebstore.google.com/detail/vons-%E2%80%94-local-decisions/cbmjkokoojinfgafahncmjlfmicinide),
|
|
|
|
| 66 |
and verification scope are in the [publication index](../docs/publications/README.md).
|
| 67 |
These preprints preserve negative results, missing measurements and the boundary
|
| 68 |
between frozen v1 evidence and the separately labelled post-freeze v2 handoff.
|
| 69 |
+
The paper uses arXiv **submission number 8127259**. The v1.1 PDF and metadata
|
| 70 |
+
were processed successfully on **2026-09-25** and submitted on **2026-09-26**.
|
| 71 |
+
The arXiv account currently reports **on hold** for moderation. This tracking
|
| 72 |
+
number is not a public arXiv article identifier. No public announcement or
|
| 73 |
+
peer-review acceptance is claimed.
|
| 74 |
|
| 75 |
Chrome Web Store version **0.1.0** passed review and is publicly available as
|
| 76 |
[Vons — Local Decisions](https://chromewebstore.google.com/detail/vons-%E2%80%94-local-decisions/cbmjkokoojinfgafahncmjlfmicinide),
|
docs/publications/ARXIV.md
CHANGED
|
@@ -5,15 +5,15 @@ release, alongside the [v1.1 Technical Report](vons-tech-report-v1.1.pdf). The
|
|
| 5 |
paper uses **submission number 8127259**. On **2026-09-25**, the v1.1 PDF replaced
|
| 6 |
the prior v1.0 file, arXiv reported **Submission processed OK**, and the title,
|
| 7 |
author, abstract, comments, categories and CC BY 4.0 selection were reviewed.
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
[moderation policy](https://info.arxiv.org/help/moderation/index.html).
|
| 15 |
|
| 16 |
-
##
|
| 17 |
|
| 18 |
| Field | Submitted value |
|
| 19 |
| --- | --- |
|
|
@@ -24,9 +24,9 @@ content moderation, not journal peer review; see its
|
|
| 24 |
| License | CC BY 4.0 |
|
| 25 |
| PDF | `vons-paper-v1.1.pdf`, 21 pages |
|
| 26 |
| SHA-256 | `8e9ff7d768979411db2333f37111692b5b8426bdaec21d35954c7038d047f321` |
|
| 27 |
-
| Current account status | `
|
| 28 |
|
| 29 |
-
The
|
| 30 |
results, separately labelled post-freeze remediation results and manuscript
|
| 31 |
limitations. Comments record 21 pages, 2 figures and the public Hugging Face
|
| 32 |
source/Tech Report location. Journal reference and DOI remain blank. The Tech
|
|
@@ -34,9 +34,10 @@ Report is available alongside the paper in this repository; it is not prepared
|
|
| 34 |
as a second arXiv paper.
|
| 35 |
|
| 36 |
The prior v1.0 package reached on-hold status before this replacement was
|
| 37 |
-
prepared.
|
| 38 |
-
submission.
|
| 39 |
-
|
|
|
|
| 40 |
|
| 41 |
Exact local PDF hashes match the reviewed final manuscripts, and all 50 v1.1
|
| 42 |
pages have been inspected. The documents were generated with Typst, not TeX/LaTeX.
|
|
|
|
| 5 |
paper uses **submission number 8127259**. On **2026-09-25**, the v1.1 PDF replaced
|
| 6 |
the prior v1.0 file, arXiv reported **Submission processed OK**, and the title,
|
| 7 |
author, abstract, comments, categories and CC BY 4.0 selection were reviewed.
|
| 8 |
+
After the processed PDF was opened and explicitly approved, the article was
|
| 9 |
+
submitted on **2026-09-26**. The account first reported **Article submitted**
|
| 10 |
+
with status **processing**, then changed to **on hold** for moderation. This is
|
| 11 |
+
a submission tracking number, not a public arXiv article identifier. No public
|
| 12 |
+
article URL or acceptance is announced. arXiv performs content moderation, not
|
| 13 |
+
journal peer review; see its
|
| 14 |
[moderation policy](https://info.arxiv.org/help/moderation/index.html).
|
| 15 |
|
| 16 |
+
## Submitted replacement artifact
|
| 17 |
|
| 18 |
| Field | Submitted value |
|
| 19 |
| --- | --- |
|
|
|
|
| 24 |
| License | CC BY 4.0 |
|
| 25 |
| PDF | `vons-paper-v1.1.pdf`, 21 pages |
|
| 26 |
| SHA-256 | `8e9ff7d768979411db2333f37111692b5b8426bdaec21d35954c7038d047f321` |
|
| 27 |
+
| Current account status | `on hold`, awaiting arXiv moderation |
|
| 28 |
|
| 29 |
+
The submitted abstract is an abridged version preserving the frozen negative
|
| 30 |
results, separately labelled post-freeze remediation results and manuscript
|
| 31 |
limitations. Comments record 21 pages, 2 figures and the public Hugging Face
|
| 32 |
source/Tech Report location. Journal reference and DOI remain blank. The Tech
|
|
|
|
| 34 |
as a second arXiv paper.
|
| 35 |
|
| 36 |
The prior v1.0 package reached on-hold status before this replacement was
|
| 37 |
+
prepared. The submitted v1.1 replacement is now on hold under the same
|
| 38 |
+
submission number. Follow any instructions sent by arXiv and do not create a
|
| 39 |
+
duplicate submission. Add a public article link only after arXiv assigns and
|
| 40 |
+
announces one.
|
| 41 |
|
| 42 |
Exact local PDF hashes match the reviewed final manuscripts, and all 50 v1.1
|
| 43 |
pages have been inspected. The documents were generated with Typst, not TeX/LaTeX.
|
docs/publications/README.md
CHANGED
|
@@ -52,10 +52,9 @@ original figures. Software rights are governed separately by the
|
|
| 52 |
[Vons Community and Commercial License 1.0](../../LICENSE); article licensing
|
| 53 |
does not grant commercial software rights.
|
| 54 |
|
| 55 |
-
The paper uses arXiv **submission number 8127259**.
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
claimed. See the
|
| 61 |
[arXiv submission record](ARXIV.md).
|
|
|
|
| 52 |
[Vons Community and Commercial License 1.0](../../LICENSE); article licensing
|
| 53 |
does not grant commercial software rights.
|
| 54 |
|
| 55 |
+
The paper uses arXiv **submission number 8127259**. The v1.1 PDF and metadata
|
| 56 |
+
were processed successfully on **2026-09-25** and submitted on **2026-09-26**.
|
| 57 |
+
The arXiv account currently reports **on hold** for moderation. This tracking
|
| 58 |
+
number is not a public arXiv article identifier. No public arXiv URL, DOI,
|
| 59 |
+
announcement or peer-review acceptance is claimed. See the
|
|
|
|
| 60 |
[arXiv submission record](ARXIV.md).
|
tests/test_onnx_export.py
CHANGED
|
@@ -226,60 +226,113 @@ def test_pooled_diffusion_manifest_keeps_static_options(tmp_path: Path) -> None:
|
|
| 226 |
|
| 227 |
|
| 228 |
def test_shape_helper_handles_dynamic_and_static_dimensions() -> None:
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
|
| 235 |
-
|
| 236 |
-
|
| 237 |
-
|
| 238 |
-
|
| 239 |
-
|
| 240 |
-
|
| 241 |
-
|
| 242 |
-
|
| 243 |
-
|
| 244 |
-
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
| 254 |
-
|
| 255 |
-
|
| 256 |
-
|
| 257 |
-
|
| 258 |
-
|
| 259 |
-
|
| 260 |
-
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
|
| 269 |
-
|
| 270 |
-
self.tensor_type = _TensorType(dims)
|
| 271 |
-
|
| 272 |
-
self.type = _Type(dims)
|
| 273 |
|
| 274 |
-
|
| 275 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 276 |
|
| 277 |
-
|
| 278 |
-
|
|
|
|
|
|
|
| 279 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 280 |
assert infos[0]["shape"] == [1, "options", "sequence_length"]
|
| 281 |
-
assert infos[1]["shape"] == [
|
| 282 |
-
assert infos[0]["name"] == "ids"
|
| 283 |
|
| 284 |
|
| 285 |
def test_variable_export_sequence_width_64_and_128(tmp_path: Path) -> None:
|
|
|
|
| 226 |
|
| 227 |
|
| 228 |
def test_shape_helper_handles_dynamic_and_static_dimensions() -> None:
|
| 229 |
+
"""_shape decodes protobuf ``HasField``-distinguished ``dim_value``/
|
| 230 |
+
``dim_param`` dimensions (including the tensor_type.HasField("shape")
|
| 231 |
+
precondition). Uses real onnx protobuf structs so the HasField gate
|
| 232 |
+
matches what bundle.py actually reads at runtime."""
|
| 233 |
+
onnx = pytest.importorskip("onnx")
|
| 234 |
+
ids = onnx.helper.make_tensor_value_info(
|
| 235 |
+
"ids",
|
| 236 |
+
onnx.TensorProto.INT64,
|
| 237 |
+
[onnx.helper.make_tensor_dimension(1),
|
| 238 |
+
onnx.helper.make_tensor_dimension("options"),
|
| 239 |
+
onnx.helper.make_tensor_dimension("sequence_length")],
|
| 240 |
+
)
|
| 241 |
+
mask = onnx.helper.make_tensor_value_info(
|
| 242 |
+
"mask",
|
| 243 |
+
onnx.TensorProto.INT64,
|
| 244 |
+
[4, 32, 512],
|
| 245 |
+
)
|
| 246 |
+
infos = _value_infos([ids, mask], onnx)
|
| 247 |
+
assert infos[0]["shape"] == [1, "options", "sequence_length"]
|
| 248 |
+
assert infos[1]["shape"] == [4, 32, 512]
|
| 249 |
+
assert infos[0]["name"] == "ids"
|
| 250 |
+
assert infos[0]["dtype"] == "INT64"
|
| 251 |
+
|
| 252 |
+
|
| 253 |
+
def test_onnxruntime_variable_sequence_width_64_and_128_yield_finite_equivalent_outputs(
|
| 254 |
+
tmp_path: Path,
|
| 255 |
+
) -> None:
|
| 256 |
+
"""Regression: an actual onnxruntime InferenceSession with a causal,
|
| 257 |
+
attention-masked op produces finite, output-equivalent results when
|
| 258 |
+
the same 4 live tokens are wrapped in a 64-wide vs 128-wide dynamic
|
| 259 |
+
sequence container.
|
| 260 |
+
|
| 261 |
+
Uses real ort + real onnx protobuf, no stubs: build a tiny graph that
|
| 262 |
+
computes ``sum(attention_mask * input_ids, axis=-1)``, which is a
|
| 263 |
+
strict function of the live prefix only. Feeding the identical 4 live
|
| 264 |
+
tokens at widths 64 vs 128 must produce (a) finite outputs and (b)
|
| 265 |
+
byte-identical scores because the zero-masked positions contribute
|
| 266 |
+
nothing (the canonical attention-masked equivalence used downstream).
|
| 267 |
+
"""
|
| 268 |
+
onnx = pytest.importorskip("onnx")
|
| 269 |
+
ort = pytest.importorskip("onnxruntime")
|
|
|
|
|
|
|
|
|
|
| 270 |
|
| 271 |
+
inputs = [
|
| 272 |
+
onnx.helper.make_tensor_value_info(
|
| 273 |
+
"input_ids",
|
| 274 |
+
onnx.TensorProto.INT64,
|
| 275 |
+
[onnx.helper.make_tensor_dimension(1),
|
| 276 |
+
onnx.helper.make_tensor_dimension("options"),
|
| 277 |
+
onnx.helper.make_tensor_dimension("sequence_length")],
|
| 278 |
+
),
|
| 279 |
+
onnx.helper.make_tensor_value_info(
|
| 280 |
+
"attention_mask",
|
| 281 |
+
onnx.TensorProto.INT64,
|
| 282 |
+
[onnx.helper.make_tensor_dimension(1),
|
| 283 |
+
onnx.helper.make_tensor_dimension("options"),
|
| 284 |
+
onnx.helper.make_tensor_dimension("sequence_length")],
|
| 285 |
+
),
|
| 286 |
+
]
|
| 287 |
+
outputs = [onnx.helper.make_tensor_value_info("scores", onnx.TensorProto.INT64, [1, "options"])]
|
| 288 |
+
|
| 289 |
+
cast_ids = onnx.helper.make_node("Cast", ["input_ids"], ["ids_f32"], to=onnx.TensorProto.FLOAT)
|
| 290 |
+
cast_mask = onnx.helper.make_node("Cast", ["attention_mask"], ["mask_f32"], to=onnx.TensorProto.FLOAT)
|
| 291 |
+
mul = onnx.helper.make_node("Mul", ["ids_f32", "mask_f32"], ["masked_f32"])
|
| 292 |
+
reduce_sum = onnx.helper.make_node("ReduceSum", ["masked_f32"], ["sum_f32"], axes=[-1], keepdims=0)
|
| 293 |
+
cast_out = onnx.helper.make_node("Cast", ["sum_f32"], ["scores_int"], to=onnx.TensorProto.INT64)
|
| 294 |
+
squeeze = onnx.helper.make_node("Squeeze", ["scores_int"], ["scores"], axes=[-1])
|
| 295 |
+
|
| 296 |
+
graph = onnx.helper.make_graph(
|
| 297 |
+
[cast_ids, cast_mask, mul, reduce_sum, cast_out, squeeze],
|
| 298 |
+
"causal-masked-equivalence",
|
| 299 |
+
inputs,
|
| 300 |
+
outputs,
|
| 301 |
+
)
|
| 302 |
+
model = onnx.helper.make_model_gen_version(graph, opset_imports=[onnx.helper.make_opsetid("", 19)])
|
| 303 |
+
onnx.checker.check_model(model)
|
| 304 |
+
graph_path = tmp_path / "equiv.onnx"
|
| 305 |
+
graph_path.write_bytes(model.SerializeToString())
|
| 306 |
|
| 307 |
+
session_options = ort.SessionOptions()
|
| 308 |
+
session_options.log_severity_level = 3
|
| 309 |
+
providers = ["CPUExecutionProvider"]
|
| 310 |
+
session = ort.InferenceSession(str(graph_path), session_options, providers=providers)
|
| 311 |
|
| 312 |
+
live_tokens = [101, 2023, 2003, 102]
|
| 313 |
+
n_live = len(live_tokens)
|
| 314 |
+
n_options = 2
|
| 315 |
+
for width in (64, 128):
|
| 316 |
+
assert n_live <= width
|
| 317 |
+
ids_flat = live_tokens + [0] * (width - n_live)
|
| 318 |
+
mask_flat = [1] * n_live + [0] * (width - n_live)
|
| 319 |
+
ids = [ids_flat[:], ids_flat[:]]
|
| 320 |
+
mask = [mask_flat[:], mask_flat[:]]
|
| 321 |
+
import numpy as np
|
| 322 |
+
|
| 323 |
+
feed = {
|
| 324 |
+
"input_ids": np.array([ids], dtype=np.int64),
|
| 325 |
+
"attention_mask": np.array([mask], dtype=np.int64),
|
| 326 |
+
}
|
| 327 |
+
(scores_out,) = session.run(["scores"], feed)
|
| 328 |
+
assert np.all(np.isfinite(scores_out)), f"width={width} produced non-finite output"
|
| 329 |
+
assert scores_out.shape == (1, n_options), f"width={width} unexpected shape {scores_out.shape}"
|
| 330 |
+
expected_sum = sum(live_tokens)
|
| 331 |
+
assert np.all(scores_out == expected_sum), f"width={width} scores={scores_out} expected={expected_sum}"
|
| 332 |
+
|
| 333 |
+
infos = _value_infos(session.get_inputs(), onnx)
|
| 334 |
assert infos[0]["shape"] == [1, "options", "sequence_length"]
|
| 335 |
+
assert infos[1]["shape"] == [1, "options", "sequence_length"]
|
|
|
|
| 336 |
|
| 337 |
|
| 338 |
def test_variable_export_sequence_width_64_and_128(tmp_path: Path) -> None:
|