rootcastleengineering commited on
Commit
2753a55
·
verified ·
1 Parent(s): 854d5c8

Publish trained Sofia Edge v0.1 with verified kernel controls

Browse files
Files changed (14) hide show
  1. LICENSE +201 -0
  2. NOTICE +13 -0
  3. README.md +65 -0
  4. SHA256SUMS.json +15 -0
  5. VERIFICATION.md +48 -0
  6. config.json +44 -0
  7. dataset.npz +3 -0
  8. inference.py +178 -0
  9. kernel_teacher.npz +3 -0
  10. metrics.json +171 -0
  11. model.npz +3 -0
  12. protocol.json +31 -0
  13. training_history.json +1 -0
  14. verification_report.json +228 -0
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
NOTICE ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Sofia Distilled v0.1
2
+ Copyright 2026 Rootcastle Engineering & Innovation
3
+
4
+ Sofia Edge contains newly trained NumPy model weights and original synthetic signal data.
5
+ Sofia Chat contains modified pretrained weights derived from Qwen/Qwen2.5-0.5B-Instruct,
6
+ copyright its respective authors, distributed under the Apache License 2.0.
7
+ Pinned upstream revision: 7ae557604adf67be50417f59c2c2f167def9a775.
8
+
9
+ The verifiable product-kernel method is informed by Batuhan Ayribas (2026),
10
+ Quantum Artificial Intelligence with Verifiable Kernels:
11
+ https://www.academia.edu/175377730/Quantum_Artificial_Intelligence_with_Verifiable_Kernels
12
+ The implementation, signal-learning task, distillation extension, and new experimental
13
+ results in this repository are separate from the manuscript's supplementary archive.
README.md CHANGED
@@ -1,3 +1,68 @@
1
  ---
 
 
2
  license: apache-2.0
 
 
 
 
 
 
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ language:
3
+ - en
4
  license: apache-2.0
5
+ tags:
6
+ - sofia
7
+ - numpy
8
+ - knowledge-distillation
9
+ - quantum-inspired
10
+ - verifiable-kernels
11
+ - synthetic-data
12
+ - vibration-analysis
13
+ - experimental
14
  ---
15
+
16
+ # Sofia Edge Distilled v0.1
17
+
18
+ A **trained 325-parameter NumPy classifier** for five synthetic vibration scenarios: healthy, imbalance, misalignment, bearing impulses and rubbing. The teacher is centred kernel ridge regression using a product-rotation kernel with an exact efficient classical evaluation.
19
+
20
+ Developed by Rootcastle Engineering & Innovation. [Source and reproducible training](https://github.com/rootcastleco/sofia-distilled).
21
+
22
+ ## Training
23
+
24
+ 14 statistical/spectral features feed a 14 → 16 → 5 ReLU MLP. The teacher uses 600 fit examples and 200 validation examples; its 25-fit scale/penalty search is matched by an RBF control. After selection it is refitted on the 800 training/validation anchors. The student is trained for 120 epochs on 6,000 separately generated waveforms, with 1,000 student-validation examples for checkpoint selection.
25
+
26
+ The student objective combines hard-label cross-entropy and temperature-2 teacher-target KL. A supervised-only student with identical initialization, data, architecture and optimization budget is retained as a control. Train-only standardization precedes fixed arctangent angle encoding for the teacher.
27
+
28
+ ## Held-out results
29
+
30
+ | Model | Synthetic test accuracy / balanced accuracy |
31
+ | --- | ---: |
32
+ | Product-kernel teacher | 99.933% |
33
+ | Matched-budget RBF teacher | 99.933% |
34
+ | Distilled student | 99.933% |
35
+ | Supervised-only student | 100.000% |
36
+
37
+ The balanced test set has 1,500 examples. The distilled student reaches 100.000% on a separately generated shaft-frequency shift of 43–65 Hz, versus 18–42 Hz during training. These results concern easy analytical formulas, not machine diagnosis. The control outperforms distillation on the in-distribution accuracy measure; no distillation quality advantage is claimed.
38
+
39
+ ## Use
40
+
41
+ Download this repository, then run its standalone loader:
42
+
43
+ ```python
44
+ import numpy as np
45
+ from inference import EdgeModel
46
+
47
+ model = EdgeModel(".")
48
+ signal = np.load("acceleration.npy", allow_pickle=False)
49
+ result = model.predict_signal(signal, sample_rate=2048, shaft_hz=25)
50
+ print(result)
51
+ ```
52
+
53
+ Acceleration values must be in g. Training windows have 1,024 samples at 2,048 Hz. The loader validates feature order, dimensions, finiteness and the weight SHA-256 before inference.
54
+
55
+ ## Artifacts and provenance
56
+
57
+ - `model.npz`: final float32 student parameters and training-only scaler.
58
+ - `config.json`: exact ordered feature schema and weight digest.
59
+ - `kernel_teacher.npz`: anchors, ridge coefficients, centring statistics and selected hyperparameters.
60
+ - `dataset.npz`: all fit/validation/test feature matrices, labels and held-out scores.
61
+ - `metrics.json`, `protocol.json`, `training_history.json`: measured results and run configuration.
62
+ - `verification_report.json`: independent kernel and noise control experiments.
63
+
64
+ The method follows [Quantum Artificial Intelligence with Verifiable Kernels](https://www.academia.edu/175377730/Quantum_Artificial_Intelligence_with_Verifiable_Kernels). Calculations use classical CPU hardware. Read `VERIFICATION.md` for exact scope.
65
+
66
+ ## Limitations
67
+
68
+ No measured machine data, field validation or calibrated confidence. Softmax values are scores, not diagnostic certainty. The range check is a feature-distance heuristic. The model cannot validate arbitrary sensor placement, machines or units. It is intended for research and demonstration; it has no machinery actuation API. Only one Edge training seed was run. No quantum processor or quantum computational advantage is claimed.
SHA256SUMS.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "config.json": "87b9743e903f14022505f0702cf98a1761aa5f0db803347b965a931adeb62c3b",
3
+ "dataset.npz": "9a7f781845a6874922954411372651d8b0201f4dfd7b1ce29c3973fc2418093c",
4
+ "inference.py": "292239e30984cfd8fea2311b31371ca0bdef4f94019f7356bfb401d5be8394fd",
5
+ "kernel_teacher.npz": "ecf9bdeff242776a1db37760cdc30f00ade66f06dbf8ef80a6df4b85bf55967f",
6
+ "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
7
+ "metrics.json": "74981e0b8b7a698aeed7c8d15f2f060ea0e7a636c4be67d03496e76210b01c9b",
8
+ "model.npz": "4ca49061fee1dff9237793a9300c2509cf631b6aafcb242b48f4b17af043583a",
9
+ "NOTICE": "14c2f6fb1f5eebbdb1a031058214480a4ba8f24ae07eee24655b2af28035b6a5",
10
+ "protocol.json": "cede6dadafda44f20aaa3faec1a85599860f8da40637bc2edee262a79769d68f",
11
+ "README.md": "d9143a9b8a822a400d52efb78133ae03cd39ec4cbd475f8c19b9a7390a2f4434",
12
+ "training_history.json": "a373e944f57c20778604433dba242ce6a21a51125a4fe8bedbaae8f59ace2134",
13
+ "VERIFICATION.md": "c295c9b52f51defd50e0400e0d30d1d4d0c6fc40fec5e74cc82a3bd83d3e339a",
14
+ "verification_report.json": "6a49a1e2b9fd729951f143fb55119696883dc75564d85c51ecdfc48ea41208ec"
15
+ }
VERIFICATION.md ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Verification and evidence scope
2
+
3
+ ## Method source and scope
4
+
5
+ [Quantum Artificial Intelligence with Verifiable Kernels](https://www.academia.edu/175377730/Quantum_Artificial_Intelligence_with_Verifiable_Kernels), Batuhan Ayribas, September 2026, informs the kernel controls. This repository contains an independently written adaptation. Its new random seeds and outputs are not the manuscript's original supplementary archive.
6
+
7
+ All experiments here use classical numerical computation. A feature geometry described using quantum states can have a useful classical representation. Predictive scores alone do not establish quantum advantage.
8
+
9
+ ## Evidence map
10
+
11
+ | Claim | Implementation | Retained evidence |
12
+ | --- | --- | --- |
13
+ | Product kernel equals a state-overlap calculation | `product_kernel`, `product_states` | `identity_audit`, parameterized tests |
14
+ | Product kernel equals explicit classical features | `trig_features` | maximum discrepancy across dimensions 1, 2, 4, 6, 8 |
15
+ | A shared terminal unitary preserves overlap | independent orthogonal matrices applied to state vectors | numerical discrepancy |
16
+ | Global depolarization produces the specified affine kernel | independent density matrices | density-versus-affine discrepancy |
17
+ | Matched regularization preserves exact centred ridge predictions | `CenteredRidge`, `depolarize` | prediction discrepancy, separate exact and shot results |
18
+ | Finite-shot measurement does not inherit exact invariance | binomial SWAP simulation, positive training eigenspace | 30 replicates at each noise/shot condition |
19
+ | Kernel teacher can be compressed into an Edge MLP | `kernel_training` | held-out predictions, supervised-only student control |
20
+ | Chat representation alignment actually appears in the loss | `chat_training` | training configuration and validation kernel MSE |
21
+
22
+ ## Experiment protocol
23
+
24
+ Each of three small classification tasks uses 30 independent train/validation/test datasets. Product and RBF models use 25 validation fits each; linear uses five. Hyperparameters are selected on validation labels and then refitted on the training/validation union. Test labels are reserved for final reporting. Intervals are pointwise percentile bootstraps over the simulator replicates, with 2,000 resamples. No multiplicity-adjusted significance claim is made.
25
+
26
+ Finite-shot conditions use a separate fixed product model, a global state-depolarization channel, an ideal SWAP measurement estimator, and positive-eigenspace repair fitted using the training matrix. Negative overlap estimates are retained. No shot data are described as real device measurements.
27
+
28
+ The protocol is saved and hashed before computation. `datasets_and_predictions.npz` retains inputs, labels and score arrays. `classification_rows.json` and `noise_rows.json` retain seed-level metrics.
29
+
30
+ ## Measured checks in the first local run
31
+
32
+ | Identity | Maximum absolute discrepancy |
33
+ | --- | ---: |
34
+ | State overlap versus direct classical kernel | 1.55e-15 |
35
+ | Explicit classical features versus direct kernel | 1.89e-15 |
36
+ | Shared terminal unitary | 1.78e-15 |
37
+ | Density-matrix global depolarization | 8.88e-16 |
38
+ | Matched-regularization prediction | 1.37e-13 |
39
+
40
+ These finite checks support the implementations at tested inputs; they do not replace mathematical proofs or certify a physical device. Original numerical reports, rather than rounded values in this document, are authoritative.
41
+
42
+ ## Model-specific boundaries
43
+
44
+ Edge uses newly generated vibration formulas rather than recorded machinery data. Its angle encoding is a fixed `2 * atan` transformation after training-only feature standardization. Product-kernel and RBF teacher selection use identical scale/penalty budgets. The 325-parameter student combines hard-label cross-entropy with soft teacher targets. These targets are softened ridge scores, not calibrated probabilities.
45
+
46
+ Chat uses pretrained Qwen blocks, a frozen shared embedding/head and trainable LoRA adapters. Its kernel term compares four-dimensional sketches of response representations against eight training-only teacher landmarks. The sketch and angle map are fixed. This is a heuristic representation-alignment objective. The manuscript's exact ridge-noise identity applies to its specified kernel learner, not to the transformer or its generated answers.
47
+
48
+ The Chat test set contains different topic families from the training and validation sets. It still uses generated teacher answers as references. A lower teacher-reference cross-entropy is not a factuality, coding or safety benchmark. Broad quality and the separate effect of the kernel term require additional data, multiple training seeds, independent references and controlled ablations.
config.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_type": "sofia-edge-mlp",
3
+ "version": "0.1.0",
4
+ "role": "product-kernel-distilled-student",
5
+ "feature_schema": "sofia.synthetic-vibration.v1",
6
+ "feature_names": [
7
+ "log_rms",
8
+ "log_peak",
9
+ "kurtosis",
10
+ "crest_factor",
11
+ "shaft_energy",
12
+ "second_harmonic_energy",
13
+ "third_harmonic_energy",
14
+ "fourth_harmonic_energy",
15
+ "high_frequency_energy",
16
+ "spectral_flatness",
17
+ "spectral_entropy",
18
+ "envelope_kurtosis",
19
+ "log_envelope_rms",
20
+ "zero_crossing_rate"
21
+ ],
22
+ "labels": [
23
+ "healthy",
24
+ "imbalance",
25
+ "misalignment",
26
+ "bearing_impulses",
27
+ "rubbing"
28
+ ],
29
+ "dimensions": [
30
+ 14,
31
+ 16,
32
+ 5
33
+ ],
34
+ "input_unit": "g",
35
+ "weights_sha256": "4ca49061fee1dff9237793a9300c2509cf631b6aafcb242b48f4b17af043583a",
36
+ "parameter_count": 325,
37
+ "training_data": "analytical synthetic waveforms only",
38
+ "sample_rate_hz": 2048,
39
+ "window_size": 1024,
40
+ "training_shaft_hz": [
41
+ 18,
42
+ 42
43
+ ]
44
+ }
dataset.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9a7f781845a6874922954411372651d8b0201f4dfd7b1ce29c3973fc2418093c
3
+ size 1479936
inference.py ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """NumPy signal classifier and reproducible synthetic waveform specification."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import hashlib
6
+ import json
7
+ from itertools import pairwise
8
+ from pathlib import Path
9
+
10
+ import numpy as np
11
+
12
+ LABELS = ("healthy", "imbalance", "misalignment", "bearing_impulses", "rubbing")
13
+ FEATURE_NAMES = (
14
+ "log_rms",
15
+ "log_peak",
16
+ "kurtosis",
17
+ "crest_factor",
18
+ "shaft_energy",
19
+ "second_harmonic_energy",
20
+ "third_harmonic_energy",
21
+ "fourth_harmonic_energy",
22
+ "high_frequency_energy",
23
+ "spectral_flatness",
24
+ "spectral_entropy",
25
+ "envelope_kurtosis",
26
+ "log_envelope_rms",
27
+ "zero_crossing_rate",
28
+ )
29
+ SCHEMA = "sofia.synthetic-vibration.v1"
30
+
31
+
32
+ def softmax(logits: np.ndarray, temperature: float = 1.0) -> np.ndarray:
33
+ z = logits / temperature
34
+ z = z - z.max(axis=-1, keepdims=True)
35
+ ex = np.exp(z)
36
+ return ex / ex.sum(axis=-1, keepdims=True)
37
+
38
+
39
+ def extract_features(signal: np.ndarray, sample_rate: float, shaft_hz: float) -> np.ndarray:
40
+ """14 dimensionless/log features; amplitude input must be acceleration in g."""
41
+ x = np.asarray(signal, dtype=np.float64)
42
+ if x.ndim != 1 or x.size < 128 or not np.isfinite(x).all():
43
+ raise ValueError("signal must be a finite 1-D waveform with at least 128 samples")
44
+ if not np.isfinite(sample_rate) or sample_rate <= 0:
45
+ raise ValueError("sample_rate must be positive and finite")
46
+ if not np.isfinite(shaft_hz) or not 0 < shaft_hz < sample_rate / 10:
47
+ raise ValueError("shaft_hz must be positive and below sample_rate / 10")
48
+ x = x - x.mean()
49
+ eps = 1e-12
50
+ rms = np.sqrt(np.mean(x * x))
51
+ peak = np.max(np.abs(x))
52
+ if rms < 1e-9:
53
+ raise ValueError("constant or zero-energy signals cannot be classified")
54
+ power = np.abs(np.fft.rfft(x * np.hanning(x.size))) ** 2
55
+ freq = np.fft.rfftfreq(x.size, 1 / sample_rate)
56
+ total = power.sum() + eps
57
+ width = max(2 * sample_rate / x.size, shaft_hz * 0.12)
58
+ bands = [power[np.abs(freq - k * shaft_hz) < width].sum() / total for k in range(1, 5)]
59
+ dist = power / total
60
+ analytic_filter = np.zeros(x.size)
61
+ analytic_filter[0] = 1
62
+ analytic_filter[1 : (x.size + 1) // 2] = 2
63
+ if x.size % 2 == 0:
64
+ analytic_filter[x.size // 2] = 1
65
+ envelope = np.abs(np.fft.ifft(np.fft.fft(x) * analytic_filter))
66
+ env_center = envelope - envelope.mean()
67
+ env_var = np.mean(env_center**2)
68
+ return np.asarray(
69
+ [
70
+ np.log(rms + eps),
71
+ np.log(peak + eps),
72
+ np.mean(x**4) / (rms**4 + eps),
73
+ peak / rms,
74
+ *bands,
75
+ power[freq > sample_rate * 0.2].sum() / total,
76
+ np.exp(np.mean(np.log(power + eps))) / (power.mean() + eps),
77
+ -np.sum(dist * np.log(dist + eps)) / np.log(power.size),
78
+ np.mean(env_center**4) / (env_var**2 + eps),
79
+ np.log(np.sqrt(np.mean(envelope**2)) + eps),
80
+ np.mean(x[1:] * x[:-1] < 0),
81
+ ],
82
+ dtype=np.float64,
83
+ )
84
+
85
+
86
+ def waveform(
87
+ label: int,
88
+ rng: np.random.Generator,
89
+ *,
90
+ shaft_hz: float,
91
+ sample_rate: float = 2048,
92
+ size: int = 1024,
93
+ ) -> np.ndarray:
94
+ """Analytical toy scenarios, not a simulation validated against real machinery."""
95
+ if label not in range(len(LABELS)):
96
+ raise ValueError("unknown scenario")
97
+ t = np.arange(size) / sample_rate
98
+ phase = rng.uniform(0, 2 * np.pi, 4)
99
+ fundamental = rng.uniform(0.15, 0.35)
100
+ second = rng.uniform(0.01, 0.04)
101
+ third = rng.uniform(0.005, 0.02)
102
+ if label == 1:
103
+ fundamental *= rng.uniform(3.0, 6.0)
104
+ if label == 2:
105
+ second = fundamental * rng.uniform(0.9, 1.8)
106
+ third = fundamental * rng.uniform(0.3, 0.8)
107
+ x = (
108
+ fundamental * np.sin(2 * np.pi * shaft_hz * t + phase[0])
109
+ + second * np.sin(4 * np.pi * shaft_hz * t + phase[1])
110
+ + third * np.sin(6 * np.pi * shaft_hz * t + phase[2])
111
+ )
112
+ x += rng.normal(0, rng.uniform(0.005, 0.025), size)
113
+ if label == 3:
114
+ period = sample_rate / (shaft_hz * rng.uniform(4.4, 5.2))
115
+ for start in np.arange(rng.uniform(0, period), size, period):
116
+ lag = np.arange(size - int(start)) / sample_rate
117
+ pulse = rng.uniform(0.7, 1.8) * np.exp(-lag * rng.uniform(180, 350))
118
+ x[int(start) :] += pulse * np.sin(2 * np.pi * rng.uniform(500, 750) * lag)
119
+ if label == 4:
120
+ x += rng.uniform(0.2, 0.5) * np.sin(2 * np.pi * shaft_hz * t + phase[3]) ** 3
121
+ x += rng.normal(0, rng.uniform(0.10, 0.22), size)
122
+ return x * rng.uniform(0.8, 1.2)
123
+
124
+
125
+ class EdgeModel:
126
+ """Load verified, pickle-free weights and classify a signal or feature matrix."""
127
+
128
+ def __init__(self, folder: str | Path):
129
+ folder = Path(folder)
130
+ self.config = json.loads((folder / "config.json").read_text(encoding="utf-8"))
131
+ if self.config.get("feature_schema") != SCHEMA:
132
+ raise ValueError("unsupported feature schema")
133
+ if self.config.get("feature_names") != list(FEATURE_NAMES):
134
+ raise ValueError("feature ordering mismatch")
135
+ path = folder / "model.npz"
136
+ if hashlib.sha256(path.read_bytes()).hexdigest() != self.config["weights_sha256"]:
137
+ raise ValueError("weights failed SHA-256 verification")
138
+ with np.load(path, allow_pickle=False) as archive:
139
+ self.weights = {k: archive[k].copy() for k in archive.files}
140
+ dims = self.config["dimensions"]
141
+ if dims[0] != len(FEATURE_NAMES) or dims[-1] != len(LABELS):
142
+ raise ValueError("invalid input/output dimensions")
143
+ for i, (a, b) in enumerate(pairwise(dims)):
144
+ if self.weights[f"w{i}"].shape != (a, b) or self.weights[f"b{i}"].shape != (b,):
145
+ raise ValueError("invalid weight dimensions")
146
+ for name in ("mean", "scale"):
147
+ if self.weights[name].shape != (len(FEATURE_NAMES),):
148
+ raise ValueError("invalid scaler dimensions")
149
+ if not all(np.isfinite(v).all() for v in self.weights.values()):
150
+ raise ValueError("non-finite model parameters")
151
+ if (self.weights["scale"] <= 0).any():
152
+ raise ValueError("invalid feature scale")
153
+
154
+ def predict_features(self, features: np.ndarray) -> np.ndarray:
155
+ x = np.asarray(features, dtype=np.float64)
156
+ if x.ndim not in (1, 2) or x.shape[-1] != len(FEATURE_NAMES):
157
+ raise ValueError("expected 14 features per sample")
158
+ if not np.isfinite(x).all():
159
+ raise ValueError("features must be finite")
160
+ h = (x - self.weights["mean"]) / self.weights["scale"]
161
+ for i in range(len(self.config["dimensions"]) - 1):
162
+ h = h @ self.weights[f"w{i}"] + self.weights[f"b{i}"]
163
+ if i < len(self.config["dimensions"]) - 2:
164
+ h = np.maximum(h, 0)
165
+ return softmax(h)
166
+
167
+ def predict_signal(self, signal: np.ndarray, sample_rate: float, shaft_hz: float) -> dict:
168
+ features = extract_features(signal, sample_rate, shaft_hz)
169
+ p = self.predict_features(features)
170
+ z = np.abs((features - self.weights["mean"]) / self.weights["scale"])
171
+ return {
172
+ "label": LABELS[int(p.argmax())],
173
+ "probabilities": dict(zip(LABELS, p.tolist())),
174
+ "max_probability": float(p.max()),
175
+ "out_of_training_range": bool((z > 6).any()),
176
+ "feature_schema": SCHEMA,
177
+ "status": "experimental_synthetic_only",
178
+ }
kernel_teacher.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ecf9bdeff242776a1db37760cdc30f00ade66f06dbf8ef80a6df4b85bf55967f
3
+ size 130562
metrics.json ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "protocol_sha256": "cede6dadafda44f20aaa3faec1a85599860f8da40637bc2edee262a79769d68f",
3
+ "teacher_selected_scale": 0.5,
4
+ "teacher_selected_penalty": 0.0001,
5
+ "teacher_validation_balanced_accuracy": 1.0,
6
+ "teacher_test_balanced_accuracy": 0.9993333333333332,
7
+ "teacher_ood_balanced_accuracy": 1.0,
8
+ "rbf_selected": [
9
+ 0.25,
10
+ 0.01
11
+ ],
12
+ "rbf_validation_balanced_accuracy": 1.0,
13
+ "rbf_test_balanced_accuracy": 0.9993333333333332,
14
+ "student": {
15
+ "accuracy": 0.9993333333333333,
16
+ "macro_f1": 0.9993333314814763,
17
+ "cross_entropy": 0.29937443104218475,
18
+ "confusion_matrix": [
19
+ [
20
+ 300,
21
+ 0,
22
+ 0,
23
+ 0,
24
+ 0
25
+ ],
26
+ [
27
+ 1,
28
+ 299,
29
+ 0,
30
+ 0,
31
+ 0
32
+ ],
33
+ [
34
+ 0,
35
+ 0,
36
+ 300,
37
+ 0,
38
+ 0
39
+ ],
40
+ [
41
+ 0,
42
+ 0,
43
+ 0,
44
+ 300,
45
+ 0
46
+ ],
47
+ [
48
+ 0,
49
+ 0,
50
+ 0,
51
+ 0,
52
+ 300
53
+ ]
54
+ ],
55
+ "per_class_f1": {
56
+ "healthy": 0.9983361064891847,
57
+ "imbalance": 0.998330550918197,
58
+ "misalignment": 1.0,
59
+ "bearing_impulses": 1.0,
60
+ "rubbing": 1.0
61
+ }
62
+ },
63
+ "supervised_control": {
64
+ "accuracy": 1.0,
65
+ "macro_f1": 1.0,
66
+ "cross_entropy": 0.0009983560894549599,
67
+ "confusion_matrix": [
68
+ [
69
+ 300,
70
+ 0,
71
+ 0,
72
+ 0,
73
+ 0
74
+ ],
75
+ [
76
+ 0,
77
+ 300,
78
+ 0,
79
+ 0,
80
+ 0
81
+ ],
82
+ [
83
+ 0,
84
+ 0,
85
+ 300,
86
+ 0,
87
+ 0
88
+ ],
89
+ [
90
+ 0,
91
+ 0,
92
+ 0,
93
+ 300,
94
+ 0
95
+ ],
96
+ [
97
+ 0,
98
+ 0,
99
+ 0,
100
+ 0,
101
+ 300
102
+ ]
103
+ ],
104
+ "per_class_f1": {
105
+ "healthy": 1.0,
106
+ "imbalance": 1.0,
107
+ "misalignment": 1.0,
108
+ "bearing_impulses": 1.0,
109
+ "rubbing": 1.0
110
+ }
111
+ },
112
+ "ood_student": {
113
+ "accuracy": 1.0,
114
+ "macro_f1": 1.0,
115
+ "cross_entropy": 0.3101353251954706,
116
+ "confusion_matrix": [
117
+ [
118
+ 300,
119
+ 0,
120
+ 0,
121
+ 0,
122
+ 0
123
+ ],
124
+ [
125
+ 0,
126
+ 300,
127
+ 0,
128
+ 0,
129
+ 0
130
+ ],
131
+ [
132
+ 0,
133
+ 0,
134
+ 300,
135
+ 0,
136
+ 0
137
+ ],
138
+ [
139
+ 0,
140
+ 0,
141
+ 0,
142
+ 300,
143
+ 0
144
+ ],
145
+ [
146
+ 0,
147
+ 0,
148
+ 0,
149
+ 0,
150
+ 300
151
+ ]
152
+ ],
153
+ "per_class_f1": {
154
+ "healthy": 1.0,
155
+ "imbalance": 1.0,
156
+ "misalignment": 1.0,
157
+ "bearing_impulses": 1.0,
158
+ "rubbing": 1.0
159
+ }
160
+ },
161
+ "student_teacher_agreement": 1.0,
162
+ "student_parameters": 325,
163
+ "teacher_anchor_count": 800,
164
+ "quantum_hardware": false,
165
+ "limitations": [
166
+ "Synthetic scenarios only; no field diagnostic validation",
167
+ "Kernel has an exact efficient classical equivalent",
168
+ "One model-training seed; no inferential benefit claim for distillation",
169
+ "Scores/softmax are not calibrated confidence"
170
+ ]
171
+ }
model.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ca49061fee1dff9237793a9300c2509cf631b6aafcb242b48f4b17af043583a
3
+ size 2860
protocol.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "product-rotation centred kernel ridge teacher + neural KL distillation",
3
+ "source": "https://www.academia.edu/175377730/Quantum_Artificial_Intelligence_with_Verifiable_Kernels",
4
+ "scales": [
5
+ 0.25,
6
+ 0.5,
7
+ 1.0,
8
+ 2.0,
9
+ 4.0
10
+ ],
11
+ "ridge_penalties": [
12
+ 1.0,
13
+ 0.1,
14
+ 0.01,
15
+ 0.001,
16
+ 0.0001
17
+ ],
18
+ "epochs": 120,
19
+ "seed": 20261008,
20
+ "teacher_fit": 600,
21
+ "teacher_validation": 200,
22
+ "student_train": 6000,
23
+ "student_validation": 1000,
24
+ "test": 1500,
25
+ "ood_test": 1500,
26
+ "selection": "teacher: first best validation balanced accuracy; student: minimum validation CE",
27
+ "neural_temperature": 2.0,
28
+ "kernel_score_temperature": 0.5,
29
+ "alpha": 0.7,
30
+ "quantum_hardware": false
31
+ }
training_history.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"student": [{"epoch": 1, "validation_cross_entropy": 1.2601966798935031}, {"epoch": 2, "validation_cross_entropy": 0.6491911070775727}, {"epoch": 3, "validation_cross_entropy": 0.4452612037654874}, {"epoch": 4, "validation_cross_entropy": 0.39497726735890376}, {"epoch": 5, "validation_cross_entropy": 0.37197895595967384}, {"epoch": 6, "validation_cross_entropy": 0.3644510307259807}, {"epoch": 7, "validation_cross_entropy": 0.3519962525854446}, {"epoch": 8, "validation_cross_entropy": 0.3451534086057271}, {"epoch": 9, "validation_cross_entropy": 0.33647484023417573}, {"epoch": 10, "validation_cross_entropy": 0.3351620426198082}, {"epoch": 11, "validation_cross_entropy": 0.3343183745430953}, {"epoch": 12, "validation_cross_entropy": 0.3323443218673766}, {"epoch": 13, "validation_cross_entropy": 0.329955486929636}, {"epoch": 14, "validation_cross_entropy": 0.3289798761341665}, {"epoch": 15, "validation_cross_entropy": 0.32886078162351895}, {"epoch": 16, "validation_cross_entropy": 0.3275648602004766}, {"epoch": 17, "validation_cross_entropy": 0.3277136929125563}, {"epoch": 18, "validation_cross_entropy": 0.32452863066994164}, {"epoch": 19, "validation_cross_entropy": 0.32478024801593486}, {"epoch": 20, "validation_cross_entropy": 0.32180937822281747}, {"epoch": 21, "validation_cross_entropy": 0.3234576102593669}, {"epoch": 22, "validation_cross_entropy": 0.3251367243411227}, {"epoch": 23, "validation_cross_entropy": 0.32145705605159536}, {"epoch": 24, "validation_cross_entropy": 0.31914837933319723}, {"epoch": 25, "validation_cross_entropy": 0.3185772777086838}, {"epoch": 26, "validation_cross_entropy": 0.3199956263715453}, {"epoch": 27, "validation_cross_entropy": 0.3221413016143792}, {"epoch": 28, "validation_cross_entropy": 0.31874078073555334}, {"epoch": 29, "validation_cross_entropy": 0.3187333356678996}, {"epoch": 30, "validation_cross_entropy": 0.31870866554300176}, {"epoch": 31, "validation_cross_entropy": 0.31572781808559847}, {"epoch": 32, "validation_cross_entropy": 0.3175813330065156}, {"epoch": 33, "validation_cross_entropy": 0.3174368839826636}, {"epoch": 34, "validation_cross_entropy": 0.31610409910001364}, {"epoch": 35, "validation_cross_entropy": 0.31875587477518524}, {"epoch": 36, "validation_cross_entropy": 0.31798827442453703}, {"epoch": 37, "validation_cross_entropy": 0.3157404162202939}, {"epoch": 38, "validation_cross_entropy": 0.31637549602626264}, {"epoch": 39, "validation_cross_entropy": 0.31649531162487954}, {"epoch": 40, "validation_cross_entropy": 0.312201079135852}, {"epoch": 41, "validation_cross_entropy": 0.31384208893933796}, {"epoch": 42, "validation_cross_entropy": 0.31198384494255765}, {"epoch": 43, "validation_cross_entropy": 0.3132496403547117}, {"epoch": 44, "validation_cross_entropy": 0.31192353466496364}, {"epoch": 45, "validation_cross_entropy": 0.3120820503064717}, {"epoch": 46, "validation_cross_entropy": 0.3117987972240845}, {"epoch": 47, "validation_cross_entropy": 0.3136897765102924}, {"epoch": 48, "validation_cross_entropy": 0.31113652299739364}, {"epoch": 49, "validation_cross_entropy": 0.3139825105265206}, {"epoch": 50, "validation_cross_entropy": 0.3118169711472922}, {"epoch": 51, "validation_cross_entropy": 0.3107536812444768}, {"epoch": 52, "validation_cross_entropy": 0.3104826761826659}, {"epoch": 53, "validation_cross_entropy": 0.3113745483415777}, {"epoch": 54, "validation_cross_entropy": 0.31317644580953297}, {"epoch": 55, "validation_cross_entropy": 0.31119328407988567}, {"epoch": 56, "validation_cross_entropy": 0.31061056319251307}, {"epoch": 57, "validation_cross_entropy": 0.3081476324400562}, {"epoch": 58, "validation_cross_entropy": 0.31025491823824564}, {"epoch": 59, "validation_cross_entropy": 0.30964159274724307}, {"epoch": 60, "validation_cross_entropy": 0.3111124264867394}, {"epoch": 61, "validation_cross_entropy": 0.3093438248500206}, {"epoch": 62, "validation_cross_entropy": 0.30462905371607596}, {"epoch": 63, "validation_cross_entropy": 0.3103234554387216}, {"epoch": 64, "validation_cross_entropy": 0.30878679100576323}, {"epoch": 65, "validation_cross_entropy": 0.30944098285947097}, {"epoch": 66, "validation_cross_entropy": 0.3079394440615398}, {"epoch": 67, "validation_cross_entropy": 0.3089659280104627}, {"epoch": 68, "validation_cross_entropy": 0.30892049782131564}, {"epoch": 69, "validation_cross_entropy": 0.3085409239497624}, {"epoch": 70, "validation_cross_entropy": 0.307929034312149}, {"epoch": 71, "validation_cross_entropy": 0.3094911491813688}, {"epoch": 72, "validation_cross_entropy": 0.30831248345447465}, {"epoch": 73, "validation_cross_entropy": 0.3090238557978256}, {"epoch": 74, "validation_cross_entropy": 0.31020780954616567}, {"epoch": 75, "validation_cross_entropy": 0.3092080860181055}, {"epoch": 76, "validation_cross_entropy": 0.30713059243127916}, {"epoch": 77, "validation_cross_entropy": 0.30637109976886384}, {"epoch": 78, "validation_cross_entropy": 0.3071282437622053}, {"epoch": 79, "validation_cross_entropy": 0.3064803895477124}, {"epoch": 80, "validation_cross_entropy": 0.30738123821282887}, {"epoch": 81, "validation_cross_entropy": 0.30662414851039727}, {"epoch": 82, "validation_cross_entropy": 0.30811322900797244}, {"epoch": 83, "validation_cross_entropy": 0.308197284293842}, {"epoch": 84, "validation_cross_entropy": 0.30736906694671356}, {"epoch": 85, "validation_cross_entropy": 0.30548411287043037}, {"epoch": 86, "validation_cross_entropy": 0.30529351727692583}, {"epoch": 87, "validation_cross_entropy": 0.30939884353353647}, {"epoch": 88, "validation_cross_entropy": 0.3075847721544309}, {"epoch": 89, "validation_cross_entropy": 0.30530710776382997}, {"epoch": 90, "validation_cross_entropy": 0.30596567496440924}, {"epoch": 91, "validation_cross_entropy": 0.30418737113099215}, {"epoch": 92, "validation_cross_entropy": 0.3045731119476082}, {"epoch": 93, "validation_cross_entropy": 0.3081070283362417}, {"epoch": 94, "validation_cross_entropy": 0.30677790512832087}, {"epoch": 95, "validation_cross_entropy": 0.3050710143865774}, {"epoch": 96, "validation_cross_entropy": 0.306954961588494}, {"epoch": 97, "validation_cross_entropy": 0.3042762047365868}, {"epoch": 98, "validation_cross_entropy": 0.30545133075252284}, {"epoch": 99, "validation_cross_entropy": 0.3050258446011338}, {"epoch": 100, "validation_cross_entropy": 0.3043994647430774}, {"epoch": 101, "validation_cross_entropy": 0.30329974061301035}, {"epoch": 102, "validation_cross_entropy": 0.30801658325591497}, {"epoch": 103, "validation_cross_entropy": 0.30657972912018455}, {"epoch": 104, "validation_cross_entropy": 0.305365992855654}, {"epoch": 105, "validation_cross_entropy": 0.3046664309200733}, {"epoch": 106, "validation_cross_entropy": 0.3053533740551454}, {"epoch": 107, "validation_cross_entropy": 0.30420721724284894}, {"epoch": 108, "validation_cross_entropy": 0.3056645989220308}, {"epoch": 109, "validation_cross_entropy": 0.301839981709715}, {"epoch": 110, "validation_cross_entropy": 0.3056300704382629}, {"epoch": 111, "validation_cross_entropy": 0.30685545967278577}, {"epoch": 112, "validation_cross_entropy": 0.30583992786722775}, {"epoch": 113, "validation_cross_entropy": 0.30449899998129226}, {"epoch": 114, "validation_cross_entropy": 0.30785182296755337}, {"epoch": 115, "validation_cross_entropy": 0.30411168613404443}, {"epoch": 116, "validation_cross_entropy": 0.3045032153114363}, {"epoch": 117, "validation_cross_entropy": 0.30590833529028655}, {"epoch": 118, "validation_cross_entropy": 0.3050099576229875}, {"epoch": 119, "validation_cross_entropy": 0.3057579365292877}, {"epoch": 120, "validation_cross_entropy": 0.30341390124383666}], "supervised_control": [{"epoch": 1, "validation_cross_entropy": 1.1744596274521222}, {"epoch": 2, "validation_cross_entropy": 0.47576219105272255}, {"epoch": 3, "validation_cross_entropy": 0.21176320529042192}, {"epoch": 4, "validation_cross_entropy": 0.11891686357570659}, {"epoch": 5, "validation_cross_entropy": 0.07787201536836638}, {"epoch": 6, "validation_cross_entropy": 0.05607977696219362}, {"epoch": 7, "validation_cross_entropy": 0.042872837376362424}, {"epoch": 8, "validation_cross_entropy": 0.03443929224312737}, {"epoch": 9, "validation_cross_entropy": 0.028693299493150817}, {"epoch": 10, "validation_cross_entropy": 0.02447715147611956}, {"epoch": 11, "validation_cross_entropy": 0.021435536604281567}, {"epoch": 12, "validation_cross_entropy": 0.018970128203105212}, {"epoch": 13, "validation_cross_entropy": 0.017055201724902175}, {"epoch": 14, "validation_cross_entropy": 0.015511598123785823}, {"epoch": 15, "validation_cross_entropy": 0.014283636154283337}, {"epoch": 16, "validation_cross_entropy": 0.013127788236331147}, {"epoch": 17, "validation_cross_entropy": 0.01228405059606982}, {"epoch": 18, "validation_cross_entropy": 0.01166191294590928}, {"epoch": 19, "validation_cross_entropy": 0.010910146977577839}, {"epoch": 20, "validation_cross_entropy": 0.010254096633317309}, {"epoch": 21, "validation_cross_entropy": 0.009795725829744181}, {"epoch": 22, "validation_cross_entropy": 0.009305140753067868}, {"epoch": 23, "validation_cross_entropy": 0.008907348274664799}, {"epoch": 24, "validation_cross_entropy": 0.008525277373373328}, {"epoch": 25, "validation_cross_entropy": 0.008189840083360145}, {"epoch": 26, "validation_cross_entropy": 0.007904251256333714}, {"epoch": 27, "validation_cross_entropy": 0.007579300114614053}, {"epoch": 28, "validation_cross_entropy": 0.007466600000844233}, {"epoch": 29, "validation_cross_entropy": 0.007188998203570088}, {"epoch": 30, "validation_cross_entropy": 0.0070324761637250545}, {"epoch": 31, "validation_cross_entropy": 0.006723979123613189}, {"epoch": 32, "validation_cross_entropy": 0.0065234340698891525}, {"epoch": 33, "validation_cross_entropy": 0.006335611293800519}, {"epoch": 34, "validation_cross_entropy": 0.00621767913384188}, {"epoch": 35, "validation_cross_entropy": 0.006040350743547447}, {"epoch": 36, "validation_cross_entropy": 0.005899990451110966}, {"epoch": 37, "validation_cross_entropy": 0.0057422483940863835}, {"epoch": 38, "validation_cross_entropy": 0.005676299417968222}, {"epoch": 39, "validation_cross_entropy": 0.005520689338340027}, {"epoch": 40, "validation_cross_entropy": 0.00536957424107421}, {"epoch": 41, "validation_cross_entropy": 0.005355566999483499}, {"epoch": 42, "validation_cross_entropy": 0.005249632192988918}, {"epoch": 43, "validation_cross_entropy": 0.005076586738922337}, {"epoch": 44, "validation_cross_entropy": 0.0050419982411756496}, {"epoch": 45, "validation_cross_entropy": 0.004967493807432032}, {"epoch": 46, "validation_cross_entropy": 0.004836998705130578}, {"epoch": 47, "validation_cross_entropy": 0.004773742698756834}, {"epoch": 48, "validation_cross_entropy": 0.0046607548472564365}, {"epoch": 49, "validation_cross_entropy": 0.004699458574781088}, {"epoch": 50, "validation_cross_entropy": 0.004552175179371812}, {"epoch": 51, "validation_cross_entropy": 0.004549795603697558}, {"epoch": 52, "validation_cross_entropy": 0.004405537218623022}, {"epoch": 53, "validation_cross_entropy": 0.004589844295065136}, {"epoch": 54, "validation_cross_entropy": 0.00450038621503257}, {"epoch": 55, "validation_cross_entropy": 0.0042804578152705625}, {"epoch": 56, "validation_cross_entropy": 0.0042166314093256595}, {"epoch": 57, "validation_cross_entropy": 0.004222587531120828}, {"epoch": 58, "validation_cross_entropy": 0.004288623457484411}, {"epoch": 59, "validation_cross_entropy": 0.004152498106367061}, {"epoch": 60, "validation_cross_entropy": 0.004099534497994771}, {"epoch": 61, "validation_cross_entropy": 0.004164490950002252}, {"epoch": 62, "validation_cross_entropy": 0.0040189363893369245}, {"epoch": 63, "validation_cross_entropy": 0.003975867098489912}, {"epoch": 64, "validation_cross_entropy": 0.003910118166363517}, {"epoch": 65, "validation_cross_entropy": 0.003909604047369938}, {"epoch": 66, "validation_cross_entropy": 0.003928012417512028}, {"epoch": 67, "validation_cross_entropy": 0.0038716623952450304}, {"epoch": 68, "validation_cross_entropy": 0.004019133512483651}, {"epoch": 69, "validation_cross_entropy": 0.003964237218992694}, {"epoch": 70, "validation_cross_entropy": 0.003758046834957457}, {"epoch": 71, "validation_cross_entropy": 0.003985102388405805}, {"epoch": 72, "validation_cross_entropy": 0.003835436326392665}, {"epoch": 73, "validation_cross_entropy": 0.003777124596516684}, {"epoch": 74, "validation_cross_entropy": 0.0037350087013036447}, {"epoch": 75, "validation_cross_entropy": 0.0038894218318352163}, {"epoch": 76, "validation_cross_entropy": 0.003905477879128488}, {"epoch": 77, "validation_cross_entropy": 0.0037724092512508457}, {"epoch": 78, "validation_cross_entropy": 0.0037691224729854006}, {"epoch": 79, "validation_cross_entropy": 0.003802105787368898}, {"epoch": 80, "validation_cross_entropy": 0.003499300264191766}, {"epoch": 81, "validation_cross_entropy": 0.003517641121043174}, {"epoch": 82, "validation_cross_entropy": 0.0036330925278182467}, {"epoch": 83, "validation_cross_entropy": 0.0035536586339903133}, {"epoch": 84, "validation_cross_entropy": 0.0035335967236381437}, {"epoch": 85, "validation_cross_entropy": 0.003914166400565895}, {"epoch": 86, "validation_cross_entropy": 0.0039150689480980955}, {"epoch": 87, "validation_cross_entropy": 0.0035089610969423427}, {"epoch": 88, "validation_cross_entropy": 0.003491109463324726}, {"epoch": 89, "validation_cross_entropy": 0.003401042185694017}, {"epoch": 90, "validation_cross_entropy": 0.0033759305853536775}, {"epoch": 91, "validation_cross_entropy": 0.0035486927673413454}, {"epoch": 92, "validation_cross_entropy": 0.003559967667121899}, {"epoch": 93, "validation_cross_entropy": 0.003415568927605756}, {"epoch": 94, "validation_cross_entropy": 0.0035603415139061883}, {"epoch": 95, "validation_cross_entropy": 0.0035763939135046584}, {"epoch": 96, "validation_cross_entropy": 0.0034344747672373456}, {"epoch": 97, "validation_cross_entropy": 0.003457503221656484}, {"epoch": 98, "validation_cross_entropy": 0.0035720366214516087}, {"epoch": 99, "validation_cross_entropy": 0.0035506973754160123}, {"epoch": 100, "validation_cross_entropy": 0.0033736307372652726}, {"epoch": 101, "validation_cross_entropy": 0.003774551438137671}, {"epoch": 102, "validation_cross_entropy": 0.0034051948175203278}, {"epoch": 103, "validation_cross_entropy": 0.0034246644106372495}, {"epoch": 104, "validation_cross_entropy": 0.0036252266453073363}, {"epoch": 105, "validation_cross_entropy": 0.0033794153330321862}, {"epoch": 106, "validation_cross_entropy": 0.0035680273421085946}, {"epoch": 107, "validation_cross_entropy": 0.003351436101135421}, {"epoch": 108, "validation_cross_entropy": 0.003582040680797433}, {"epoch": 109, "validation_cross_entropy": 0.003437399607001559}, {"epoch": 110, "validation_cross_entropy": 0.0034925516518471626}, {"epoch": 111, "validation_cross_entropy": 0.003710185669451589}, {"epoch": 112, "validation_cross_entropy": 0.0035816958504944333}, {"epoch": 113, "validation_cross_entropy": 0.003693552094208808}, {"epoch": 114, "validation_cross_entropy": 0.003639107452094469}, {"epoch": 115, "validation_cross_entropy": 0.003323313303090309}, {"epoch": 116, "validation_cross_entropy": 0.0036354591192187618}, {"epoch": 117, "validation_cross_entropy": 0.0034584557896582516}, {"epoch": 118, "validation_cross_entropy": 0.003423943705534734}, {"epoch": 119, "validation_cross_entropy": 0.0037141499567681893}, {"epoch": 120, "validation_cross_entropy": 0.003634478761376334}]}
verification_report.json ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "protocol_sha256": "e96a631fba939c9c4ff0159970af0dedf250ae47e0a257e788952facc19302fe",
3
+ "identity_audit": {
4
+ "tested_dimensions": [
5
+ 1,
6
+ 2,
7
+ 4,
8
+ 6,
9
+ 8
10
+ ],
11
+ "max_absolute_errors": {
12
+ "state_overlap": 1.5543122344752192e-15,
13
+ "explicit_classical_features": 1.887379141862766e-15,
14
+ "shared_terminal_unitary": 1.7763568394002505e-15,
15
+ "density_depolarization": 8.881784197001252e-16,
16
+ "matched_regularization_predictions": 1.3722356584366935e-13
17
+ },
18
+ "tolerance": 1e-10,
19
+ "passed": true
20
+ },
21
+ "classification": {
22
+ "linear": {
23
+ "linear": {
24
+ "mean": 0.8990547506759446,
25
+ "pointwise_95_percent_bootstrap_ci": [
26
+ 0.8905778919494346,
27
+ 0.9080410457070308
28
+ ]
29
+ },
30
+ "rbf": {
31
+ "mean": 0.8915385238696076,
32
+ "pointwise_95_percent_bootstrap_ci": [
33
+ 0.8808848859401918,
34
+ 0.9017696004743362
35
+ ]
36
+ },
37
+ "product": {
38
+ "mean": 0.894664148738211,
39
+ "pointwise_95_percent_bootstrap_ci": [
40
+ 0.8845207440158689,
41
+ 0.9027463739375565
42
+ ]
43
+ },
44
+ "paired_product_minus_rbf": {
45
+ "mean": 0.003125624868603368,
46
+ "pointwise_95_percent_bootstrap_ci": [
47
+ -0.0018605010807794804,
48
+ 0.008131033044835976
49
+ ]
50
+ }
51
+ },
52
+ "parity": {
53
+ "linear": {
54
+ "mean": 0.5028841874243367,
55
+ "pointwise_95_percent_bootstrap_ci": [
56
+ 0.49080839380402325,
57
+ 0.519132485287299
58
+ ]
59
+ },
60
+ "rbf": {
61
+ "mean": 0.8203626608192057,
62
+ "pointwise_95_percent_bootstrap_ci": [
63
+ 0.8034552187602456,
64
+ 0.8341240758295138
65
+ ]
66
+ },
67
+ "product": {
68
+ "mean": 0.822049461514475,
69
+ "pointwise_95_percent_bootstrap_ci": [
70
+ 0.8126506544004204,
71
+ 0.8314817390676141
72
+ ]
73
+ },
74
+ "paired_product_minus_rbf": {
75
+ "mean": 0.0016868006952691602,
76
+ "pointwise_95_percent_bootstrap_ci": [
77
+ -0.010633324172694792,
78
+ 0.015101091355045044
79
+ ]
80
+ }
81
+ },
82
+ "periodic": {
83
+ "linear": {
84
+ "mean": 0.4985395120653596,
85
+ "pointwise_95_percent_bootstrap_ci": [
86
+ 0.48605662481431083,
87
+ 0.511621684499136
88
+ ]
89
+ },
90
+ "rbf": {
91
+ "mean": 0.7488281954140097,
92
+ "pointwise_95_percent_bootstrap_ci": [
93
+ 0.7345789112454911,
94
+ 0.7623602798417655
95
+ ]
96
+ },
97
+ "product": {
98
+ "mean": 0.7763930847833862,
99
+ "pointwise_95_percent_bootstrap_ci": [
100
+ 0.7594338297594408,
101
+ 0.7928698152772927
102
+ ]
103
+ },
104
+ "paired_product_minus_rbf": {
105
+ "mean": 0.027564889369376365,
106
+ "pointwise_95_percent_bootstrap_ci": [
107
+ 0.013405835960971902,
108
+ 0.04203532549312493
109
+ ]
110
+ }
111
+ }
112
+ },
113
+ "finite_shot": [
114
+ {
115
+ "p": 0,
116
+ "shots": 128,
117
+ "mean": 0.7421184311986793,
118
+ "pointwise_95_percent_bootstrap_ci": [
119
+ 0.7301282505456886,
120
+ 0.7532273161205679
121
+ ]
122
+ },
123
+ {
124
+ "p": 0,
125
+ "shots": 512,
126
+ "mean": 0.7786768127491859,
127
+ "pointwise_95_percent_bootstrap_ci": [
128
+ 0.7693467864122973,
129
+ 0.7880595745949988
130
+ ]
131
+ },
132
+ {
133
+ "p": 0,
134
+ "shots": 2048,
135
+ "mean": 0.7933635911406733,
136
+ "pointwise_95_percent_bootstrap_ci": [
137
+ 0.7819439386598241,
138
+ 0.8047489585994149
139
+ ]
140
+ },
141
+ {
142
+ "p": 0,
143
+ "shots": 8192,
144
+ "mean": 0.7966825902757054,
145
+ "pointwise_95_percent_bootstrap_ci": [
146
+ 0.785557644566881,
147
+ 0.8078337606133397
148
+ ]
149
+ },
150
+ {
151
+ "p": 0.5,
152
+ "shots": 128,
153
+ "mean": 0.5979244230828672,
154
+ "pointwise_95_percent_bootstrap_ci": [
155
+ 0.587549767394819,
156
+ 0.6090187123148318
157
+ ]
158
+ },
159
+ {
160
+ "p": 0.5,
161
+ "shots": 512,
162
+ "mean": 0.6787137092666977,
163
+ "pointwise_95_percent_bootstrap_ci": [
164
+ 0.6686411049014853,
165
+ 0.6892424197358125
166
+ ]
167
+ },
168
+ {
169
+ "p": 0.5,
170
+ "shots": 2048,
171
+ "mean": 0.7434465305258456,
172
+ "pointwise_95_percent_bootstrap_ci": [
173
+ 0.7325316608179067,
174
+ 0.7537586653898614
175
+ ]
176
+ },
177
+ {
178
+ "p": 0.5,
179
+ "shots": 8192,
180
+ "mean": 0.7715403512151265,
181
+ "pointwise_95_percent_bootstrap_ci": [
182
+ 0.7602132668326237,
183
+ 0.7830647138901051
184
+ ]
185
+ },
186
+ {
187
+ "p": 0.75,
188
+ "shots": 128,
189
+ "mean": 0.5154667269959292,
190
+ "pointwise_95_percent_bootstrap_ci": [
191
+ 0.503913330538118,
192
+ 0.527168812563535
193
+ ]
194
+ },
195
+ {
196
+ "p": 0.75,
197
+ "shots": 512,
198
+ "mean": 0.5482200122659916,
199
+ "pointwise_95_percent_bootstrap_ci": [
200
+ 0.5393337922100797,
201
+ 0.5574780950359814
202
+ ]
203
+ },
204
+ {
205
+ "p": 0.75,
206
+ "shots": 2048,
207
+ "mean": 0.5972580764837044,
208
+ "pointwise_95_percent_bootstrap_ci": [
209
+ 0.5866191680169636,
210
+ 0.6077339829870697
211
+ ]
212
+ },
213
+ {
214
+ "p": 0.75,
215
+ "shots": 8192,
216
+ "mean": 0.670901263655826,
217
+ "pointwise_95_percent_bootstrap_ci": [
218
+ 0.658262633433527,
219
+ 0.6828841769463315
220
+ ]
221
+ }
222
+ ],
223
+ "replicates": 30,
224
+ "quantum_hardware": false,
225
+ "interpretation": "Any product-kernel performance is shared by its exact classical equivalent; no quantum advantage claim",
226
+ "scope": "independent adapted implementation; not a reproduction of original seed-level archive",
227
+ "intervals": "pointwise percentile bootstrap over independent simulator replicates; 2000 resamples; no significance testing"
228
+ }