haebom commited on
Commit
8f102fc
·
verified ·
1 Parent(s): 32e0996

Record arXiv v1.1 submission

Browse files
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**. On **2026-09-25**, the v1.1
70
- PDF and metadata were processed successfully and left at the final **Submit**
71
- confirmation boundary; editing the previous on-hold submission returned it to
72
- **incomplete** status. This tracking number is not a public arXiv article
73
- identifier. No announcement or 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),
 
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**. On **2026-09-25**, the v1.1
70
- PDF and metadata were processed successfully and left at the final **Submit**
71
- confirmation boundary; editing the previous on-hold submission returned it to
72
- **incomplete** status. This tracking number is not a public arXiv article
73
- identifier. No announcement or 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),
 
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
- The processed PDF was opened and the workflow was left at the final **Submit**
9
- button for explicit action-time approval. Editing the prior on-hold submission
10
- returned the account status to **incomplete**; the final submission has not been
11
- made. This is a submission tracking number, not a public arXiv article
12
- identifier. No public article URL or acceptance is announced. arXiv performs
13
- content moderation, not journal peer review; see its
14
  [moderation policy](https://info.arxiv.org/help/moderation/index.html).
15
 
16
- ## Prepared replacement artifact
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 | `incomplete`, awaiting final Submit confirmation |
28
 
29
- The prepared 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,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. Follow any instructions sent by arXiv and do not create a duplicate
38
- submission. Add a public article link only after arXiv assigns and announces
39
- one.
 
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**. On **2026-09-25**, the v1.1
56
- PDF and metadata were processed successfully and left at the final **Submit**
57
- confirmation boundary; editing the previous on-hold submission returned it to
58
- **incomplete** status. This tracking number is not a public arXiv article
59
- identifier. No public arXiv URL, DOI, announcement or peer-review acceptance is
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
- class _Dim:
230
- def __init__(self, *, value=None, param=None):
231
- self._value = value
232
- self._param = param
233
-
234
- def HasField(self, name):
235
- if name == "dim_value":
236
- return self._value is not None
237
- if name == "dim_param":
238
- return self._param is not None
239
- return False
240
-
241
- @property
242
- def dim_value(self):
243
- return self._value
244
-
245
- @property
246
- def dim_param(self):
247
- return self._param
248
-
249
- class _Shape:
250
- def __init__(self, dims):
251
- self.dim = [_Dim(value=d) if isinstance(d, int) else _Dim(param=d) for d in dims]
252
-
253
- def HasField(self, name):
254
- return name == "dim"
255
-
256
- class _TensorType:
257
- def __init__(self, dims):
258
- self.shape = _Shape(dims)
259
- self.elem_type = 1
260
-
261
- def HasField(self, name):
262
- return name == "shape"
263
-
264
- class _ValueInfo:
265
- def __init__(self, name, dims):
266
- self.name = name
267
-
268
- class _Type:
269
- def __init__(self, dims):
270
- self.tensor_type = _TensorType(dims)
271
-
272
- self.type = _Type(dims)
273
 
274
- class _FakeOnnx:
275
- TensorProto = type("TensorProto", (), {"DataType": type("DataType", (), {"Name": staticmethod(lambda x: f"type_{x}")})})
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
276
 
277
- values = [_ValueInfo("ids", [1, "options", "sequence_length"]), _ValueInfo("mask", [4, 32, 512])]
278
- infos = _value_infos(values, _FakeOnnx())
 
 
279
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
280
  assert infos[0]["shape"] == [1, "options", "sequence_length"]
281
- assert infos[1]["shape"] == [4, 32, 512]
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: