Publish reviewed research staging to main
Browse files- FILE_MANIFEST.json +117 -0
- PROVENANCE.json +6 -0
- README.md +29 -0
- RELEASE_SOURCE_MANIFEST.json +156 -0
- RELEASE_VERIFICATION.json +14 -0
- VALIDATION.json +98 -0
- config.json +16 -0
- inference.py +11 -0
- requirements.txt +1 -0
- validate.py +21 -0
- validation.log +1 -0
- weights/identity_seed0.npz +3 -0
- weights/identity_seed1.npz +3 -0
- weights/identity_seed2.npz +3 -0
- weights/identity_seed3.npz +3 -0
- weights/identity_seed4.npz +3 -0
- weights/magnitude_seed0.npz +3 -0
- weights/magnitude_seed1.npz +3 -0
- weights/magnitude_seed2.npz +3 -0
- weights/magnitude_seed3.npz +3 -0
- weights/magnitude_seed4.npz +3 -0
- weights/parity_seed0.npz +3 -0
- weights/parity_seed1.npz +3 -0
- weights/parity_seed2.npz +3 -0
- weights/parity_seed3.npz +3 -0
- weights/parity_seed4.npz +3 -0
FILE_MANIFEST.json
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"path": "PROVENANCE.json",
|
| 4 |
+
"bytes": 253,
|
| 5 |
+
"sha256": "3a5af13f9b8578dee746d7031cf89d42676e2280890aae7f5798600c9902df8e"
|
| 6 |
+
},
|
| 7 |
+
{
|
| 8 |
+
"path": "README.md",
|
| 9 |
+
"bytes": 1345,
|
| 10 |
+
"sha256": "712994b75cbb41de1be8d6626daad056f8cb5e940e310be34fb1b0837def550e"
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"path": "VALIDATION.json",
|
| 14 |
+
"bytes": 1754,
|
| 15 |
+
"sha256": "c97e47dcbdf7de95eff6a87ac050361fce24ea7db53d07b9a660cc4d62ee8611"
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"path": "config.json",
|
| 19 |
+
"bytes": 251,
|
| 20 |
+
"sha256": "1fd8d92328397bc68109db09d811c92f2348ef84895375b5a09de66e73bfe457"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"path": "inference.py",
|
| 24 |
+
"bytes": 728,
|
| 25 |
+
"sha256": "6cbf36d360013377015cccf36477ab200605644da3ff2710256183d4f47f719a"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"path": "requirements.txt",
|
| 29 |
+
"bytes": 13,
|
| 30 |
+
"sha256": "7bd6b8946940b79948c548c8048e545684b91c8edc9444d8dfc0c8f76a97c0a7"
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"path": "validate.py",
|
| 34 |
+
"bytes": 1161,
|
| 35 |
+
"sha256": "866f65ff029f66b47e8d777113972980c6cff1bc4bcfbd76a5426d473a28e6bd"
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"path": "validation.log",
|
| 39 |
+
"bytes": 8,
|
| 40 |
+
"sha256": "2e81b249130224227cde26c7566b86a6984468d56352c51fa47ef07620f48f6c"
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"path": "weights/identity_seed0.npz",
|
| 44 |
+
"bytes": 11701,
|
| 45 |
+
"sha256": "86c17853dc4f459ee3d3eea2f87a2fcb76cf4b95a587f4297b282c766bc6308b"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"path": "weights/identity_seed1.npz",
|
| 49 |
+
"bytes": 11685,
|
| 50 |
+
"sha256": "e2c2b91b3c150ba1fd70c5e0aea7b4b6084897af87eab474cfe70b2ba721f779"
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"path": "weights/identity_seed2.npz",
|
| 54 |
+
"bytes": 11739,
|
| 55 |
+
"sha256": "3851d9ab20b307a824efc4621911c6210050b5340a627778151bcc0b54732a9b"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"path": "weights/identity_seed3.npz",
|
| 59 |
+
"bytes": 11720,
|
| 60 |
+
"sha256": "e7261be3550e50f2b56167b6e1f37fb08b8dcdf0ab433bf2c2d8573172edcff6"
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"path": "weights/identity_seed4.npz",
|
| 64 |
+
"bytes": 11669,
|
| 65 |
+
"sha256": "715f0f8550e1a3da6e1e6327895b922c6b84e18e73577a6eec00161ea41333da"
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"path": "weights/magnitude_seed0.npz",
|
| 69 |
+
"bytes": 11165,
|
| 70 |
+
"sha256": "db4fd7eb0293359e1981c77a344f7eef697919890089dab346c98d3b03848c50"
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"path": "weights/magnitude_seed1.npz",
|
| 74 |
+
"bytes": 11155,
|
| 75 |
+
"sha256": "08c880dbcfde393cfbf5a5f58a5cf005859cf857e13a8375c48bf7b50368c328"
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"path": "weights/magnitude_seed2.npz",
|
| 79 |
+
"bytes": 11158,
|
| 80 |
+
"sha256": "d54c54d7dcafc7cf6f9738e9c52d33ec80c1f10666dde3e80dd71c8675559fe5"
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"path": "weights/magnitude_seed3.npz",
|
| 84 |
+
"bytes": 11150,
|
| 85 |
+
"sha256": "c409bf9bd762d8e485487c4070967007541567792e32b04509a2787fc4428708"
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"path": "weights/magnitude_seed4.npz",
|
| 89 |
+
"bytes": 11151,
|
| 90 |
+
"sha256": "e1d4194cc0559b278aee63e92726996c6e2b54e57df9b3092a8fa9ba909255c5"
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"path": "weights/parity_seed0.npz",
|
| 94 |
+
"bytes": 11155,
|
| 95 |
+
"sha256": "1f63dd4e02517e26514a306f4e74b0f32c7238977107fabaa7851a6d53773026"
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"path": "weights/parity_seed1.npz",
|
| 99 |
+
"bytes": 11159,
|
| 100 |
+
"sha256": "17948ea392efbbcdba925aae7ea8228c892eeffe66f0edd0b29b7c7ad519a60d"
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"path": "weights/parity_seed2.npz",
|
| 104 |
+
"bytes": 11149,
|
| 105 |
+
"sha256": "860a92dd52d5b4c16f3cc03c44ceb207df7e0519acf39ae3ae353f9bfd3e24cb"
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"path": "weights/parity_seed3.npz",
|
| 109 |
+
"bytes": 11167,
|
| 110 |
+
"sha256": "a62fa611b25b7ebdd2eae92a1921af9113174e73576d568ab10fb8c1a826b4b2"
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"path": "weights/parity_seed4.npz",
|
| 114 |
+
"bytes": 11150,
|
| 115 |
+
"sha256": "dd8d10d062b4f49652c5098750d914829689e348372713c025192ed77d079da4"
|
| 116 |
+
}
|
| 117 |
+
]
|
PROVENANCE.json
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"source": "N014_HuReT_Recovered_Evidence_20261013.zip",
|
| 3 |
+
"source_sha256": "1e335cc589635038c6a5bb31cf383eb1566df91637e61de765290f6c78196e4d",
|
| 4 |
+
"transformation": "Copied 15 original NPZ files; new standalone NumPy loader.",
|
| 5 |
+
"recovery": "CP03R1"
|
| 6 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language:
|
| 3 |
+
- en
|
| 4 |
+
tags:
|
| 5 |
+
- research
|
| 6 |
+
- numpy
|
| 7 |
+
- reproducibility
|
| 8 |
+
---
|
| 9 |
+
# huret-digit-classifiers
|
| 10 |
+
|
| 11 |
+
Fifteen October digit classifiers: identity, parity and magnitude, five seeds each. The trained arrays are retained from the CP02 replay. Architecture: 64 -> 32 ReLU -> 16 ReLU -> task head. This is the October HuReT audit, not an MRI model and not the missing July model archive.
|
| 12 |
+
|
| 13 |
+
## Local use
|
| 14 |
+
```sh
|
| 15 |
+
python -m pip install -r requirements.txt
|
| 16 |
+
python validate.py
|
| 17 |
+
```
|
| 18 |
+
Import `predict` from `inference.py`; see `config.json` for input semantics. Inputs are not automatically normalized except as specified. Loaders reject wrong shapes, nonfinite values and invalid model selectors. Weight files are NumPy archives or JSON; no pickle/custom remote execution is required.
|
| 19 |
+
|
| 20 |
+
## Evidence and limitations
|
| 21 |
+
The validation is loader parity and input-contract testing, not independent external predictive validation. No clinical deployment, universal physics, foundation-model quality or new biological evidence is claimed. These are individual finite model families, not repackaged third-party LLMs.
|
| 22 |
+
|
| 23 |
+
## Licensing and provenance
|
| 24 |
+
Private staging. Author approval and redistribution rights must be confirmed before public upload. No new blanket license, completed HF upload or DOI is asserted. `PROVENANCE.json` records exact source file hashes and transformations.
|
| 25 |
+
## Verified packaging revision — 2026-10-20
|
| 26 |
+
|
| 27 |
+
Preserved model weights reloaded; saved or synthetic example checks passed. No training, held-out evaluation, clinical or hosted verification.
|
| 28 |
+
|
| 29 |
+
Runtime state: `PASS`. Rights and release approval are separate. See `RELEASE_VERIFICATION.json`. No paper or conference submission is included as a new software result.
|
RELEASE_SOURCE_MANIFEST.json
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"excluded_counts": {},
|
| 3 |
+
"files": [
|
| 4 |
+
{
|
| 5 |
+
"bytes": 3372,
|
| 6 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/FILE_MANIFEST.json",
|
| 7 |
+
"path": "FILE_MANIFEST.json",
|
| 8 |
+
"sha256": "629be859abdd3d2c1ad13c0aa82f38903c9ba41af8b975e4800325c54f3b62a0"
|
| 9 |
+
},
|
| 10 |
+
{
|
| 11 |
+
"bytes": 253,
|
| 12 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/PROVENANCE.json",
|
| 13 |
+
"path": "PROVENANCE.json",
|
| 14 |
+
"sha256": "3a5af13f9b8578dee746d7031cf89d42676e2280890aae7f5798600c9902df8e"
|
| 15 |
+
},
|
| 16 |
+
{
|
| 17 |
+
"bytes": 1345,
|
| 18 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/README.md",
|
| 19 |
+
"path": "README.md",
|
| 20 |
+
"sha256": "712994b75cbb41de1be8d6626daad056f8cb5e940e310be34fb1b0837def550e"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"bytes": 1754,
|
| 24 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/VALIDATION.json",
|
| 25 |
+
"path": "VALIDATION.json",
|
| 26 |
+
"sha256": "c97e47dcbdf7de95eff6a87ac050361fce24ea7db53d07b9a660cc4d62ee8611"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"bytes": 251,
|
| 30 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/config.json",
|
| 31 |
+
"path": "config.json",
|
| 32 |
+
"sha256": "1fd8d92328397bc68109db09d811c92f2348ef84895375b5a09de66e73bfe457"
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"bytes": 728,
|
| 36 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/inference.py",
|
| 37 |
+
"path": "inference.py",
|
| 38 |
+
"sha256": "6cbf36d360013377015cccf36477ab200605644da3ff2710256183d4f47f719a"
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
"bytes": 13,
|
| 42 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/requirements.txt",
|
| 43 |
+
"path": "requirements.txt",
|
| 44 |
+
"sha256": "7bd6b8946940b79948c548c8048e545684b91c8edc9444d8dfc0c8f76a97c0a7"
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
"bytes": 1161,
|
| 48 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/validate.py",
|
| 49 |
+
"path": "validate.py",
|
| 50 |
+
"sha256": "866f65ff029f66b47e8d777113972980c6cff1bc4bcfbd76a5426d473a28e6bd"
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"bytes": 8,
|
| 54 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/validation.log",
|
| 55 |
+
"path": "validation.log",
|
| 56 |
+
"sha256": "2e81b249130224227cde26c7566b86a6984468d56352c51fa47ef07620f48f6c"
|
| 57 |
+
},
|
| 58 |
+
{
|
| 59 |
+
"bytes": 11701,
|
| 60 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/identity_seed0.npz",
|
| 61 |
+
"path": "weights/identity_seed0.npz",
|
| 62 |
+
"sha256": "86c17853dc4f459ee3d3eea2f87a2fcb76cf4b95a587f4297b282c766bc6308b"
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"bytes": 11685,
|
| 66 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/identity_seed1.npz",
|
| 67 |
+
"path": "weights/identity_seed1.npz",
|
| 68 |
+
"sha256": "e2c2b91b3c150ba1fd70c5e0aea7b4b6084897af87eab474cfe70b2ba721f779"
|
| 69 |
+
},
|
| 70 |
+
{
|
| 71 |
+
"bytes": 11739,
|
| 72 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/identity_seed2.npz",
|
| 73 |
+
"path": "weights/identity_seed2.npz",
|
| 74 |
+
"sha256": "3851d9ab20b307a824efc4621911c6210050b5340a627778151bcc0b54732a9b"
|
| 75 |
+
},
|
| 76 |
+
{
|
| 77 |
+
"bytes": 11720,
|
| 78 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/identity_seed3.npz",
|
| 79 |
+
"path": "weights/identity_seed3.npz",
|
| 80 |
+
"sha256": "e7261be3550e50f2b56167b6e1f37fb08b8dcdf0ab433bf2c2d8573172edcff6"
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"bytes": 11669,
|
| 84 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/identity_seed4.npz",
|
| 85 |
+
"path": "weights/identity_seed4.npz",
|
| 86 |
+
"sha256": "715f0f8550e1a3da6e1e6327895b922c6b84e18e73577a6eec00161ea41333da"
|
| 87 |
+
},
|
| 88 |
+
{
|
| 89 |
+
"bytes": 11165,
|
| 90 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/magnitude_seed0.npz",
|
| 91 |
+
"path": "weights/magnitude_seed0.npz",
|
| 92 |
+
"sha256": "db4fd7eb0293359e1981c77a344f7eef697919890089dab346c98d3b03848c50"
|
| 93 |
+
},
|
| 94 |
+
{
|
| 95 |
+
"bytes": 11155,
|
| 96 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/magnitude_seed1.npz",
|
| 97 |
+
"path": "weights/magnitude_seed1.npz",
|
| 98 |
+
"sha256": "08c880dbcfde393cfbf5a5f58a5cf005859cf857e13a8375c48bf7b50368c328"
|
| 99 |
+
},
|
| 100 |
+
{
|
| 101 |
+
"bytes": 11158,
|
| 102 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/magnitude_seed2.npz",
|
| 103 |
+
"path": "weights/magnitude_seed2.npz",
|
| 104 |
+
"sha256": "d54c54d7dcafc7cf6f9738e9c52d33ec80c1f10666dde3e80dd71c8675559fe5"
|
| 105 |
+
},
|
| 106 |
+
{
|
| 107 |
+
"bytes": 11150,
|
| 108 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/magnitude_seed3.npz",
|
| 109 |
+
"path": "weights/magnitude_seed3.npz",
|
| 110 |
+
"sha256": "c409bf9bd762d8e485487c4070967007541567792e32b04509a2787fc4428708"
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"bytes": 11151,
|
| 114 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/magnitude_seed4.npz",
|
| 115 |
+
"path": "weights/magnitude_seed4.npz",
|
| 116 |
+
"sha256": "e1d4194cc0559b278aee63e92726996c6e2b54e57df9b3092a8fa9ba909255c5"
|
| 117 |
+
},
|
| 118 |
+
{
|
| 119 |
+
"bytes": 11155,
|
| 120 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/parity_seed0.npz",
|
| 121 |
+
"path": "weights/parity_seed0.npz",
|
| 122 |
+
"sha256": "1f63dd4e02517e26514a306f4e74b0f32c7238977107fabaa7851a6d53773026"
|
| 123 |
+
},
|
| 124 |
+
{
|
| 125 |
+
"bytes": 11159,
|
| 126 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/parity_seed1.npz",
|
| 127 |
+
"path": "weights/parity_seed1.npz",
|
| 128 |
+
"sha256": "17948ea392efbbcdba925aae7ea8228c892eeffe66f0edd0b29b7c7ad519a60d"
|
| 129 |
+
},
|
| 130 |
+
{
|
| 131 |
+
"bytes": 11149,
|
| 132 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/parity_seed2.npz",
|
| 133 |
+
"path": "weights/parity_seed2.npz",
|
| 134 |
+
"sha256": "860a92dd52d5b4c16f3cc03c44ceb207df7e0519acf39ae3ae353f9bfd3e24cb"
|
| 135 |
+
},
|
| 136 |
+
{
|
| 137 |
+
"bytes": 11167,
|
| 138 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/parity_seed3.npz",
|
| 139 |
+
"path": "weights/parity_seed3.npz",
|
| 140 |
+
"sha256": "a62fa611b25b7ebdd2eae92a1921af9113174e73576d568ab10fb8c1a826b4b2"
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"bytes": 11150,
|
| 144 |
+
"original_source_member": "Invariant_CP03R1/huggingface/models/huret-digit-classifiers/weights/parity_seed4.npz",
|
| 145 |
+
"path": "weights/parity_seed4.npz",
|
| 146 |
+
"sha256": "dd8d10d062b4f49652c5098750d914829689e348372713c025192ed77d079da4"
|
| 147 |
+
}
|
| 148 |
+
],
|
| 149 |
+
"published_files": 24,
|
| 150 |
+
"repository": "huggingface/models/huret-digit-classifiers",
|
| 151 |
+
"schema": "invariant.source_member_manifest.v1",
|
| 152 |
+
"scope": "source files + minimal repository metadata; no new training or independent experiment",
|
| 153 |
+
"selected_from_files": 24,
|
| 154 |
+
"source_archive": "CP03R1",
|
| 155 |
+
"source_archive_sha256": "9507b5a42e661ae7588ab69cb395597749f043c419ebd981a6c91051516a3209"
|
| 156 |
+
}
|
RELEASE_VERIFICATION.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"schema": "invariant.software_release_verification.v1",
|
| 3 |
+
"runtime_status": "PASS",
|
| 4 |
+
"scope": "Preserved model weights reloaded; saved or synthetic example checks passed. No training, held-out evaluation, clinical or hosted verification.",
|
| 5 |
+
"checked_in": "isolated Linux container; Python 3.13.5 / Node 22.16.0 / Chromium 144 where applicable",
|
| 6 |
+
"actual_server_tested": false,
|
| 7 |
+
"actual_windows_tested": false,
|
| 8 |
+
"hosted_platform_tested": false,
|
| 9 |
+
"public_release_performed": false,
|
| 10 |
+
"public_rights_approved": false,
|
| 11 |
+
"target_codes": [],
|
| 12 |
+
"source_class": "archived_source",
|
| 13 |
+
"evidence_file_in_delivery_audit": "model_reload_final.json"
|
| 14 |
+
}
|
VALIDATION.json
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"passed": true,
|
| 3 |
+
"checks": 21,
|
| 4 |
+
"weights": 15,
|
| 5 |
+
"checks_detail": [
|
| 6 |
+
{
|
| 7 |
+
"task": "identity",
|
| 8 |
+
"seed": 0,
|
| 9 |
+
"rows": 19,
|
| 10 |
+
"max_reload_difference": 0.0
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"task": "identity",
|
| 14 |
+
"seed": 1,
|
| 15 |
+
"rows": 19,
|
| 16 |
+
"max_reload_difference": 0.0
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"task": "identity",
|
| 20 |
+
"seed": 2,
|
| 21 |
+
"rows": 19,
|
| 22 |
+
"max_reload_difference": 0.0
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"task": "identity",
|
| 26 |
+
"seed": 3,
|
| 27 |
+
"rows": 19,
|
| 28 |
+
"max_reload_difference": 0.0
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"task": "identity",
|
| 32 |
+
"seed": 4,
|
| 33 |
+
"rows": 19,
|
| 34 |
+
"max_reload_difference": 0.0
|
| 35 |
+
},
|
| 36 |
+
{
|
| 37 |
+
"task": "parity",
|
| 38 |
+
"seed": 0,
|
| 39 |
+
"rows": 19,
|
| 40 |
+
"max_reload_difference": 0.0
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"task": "parity",
|
| 44 |
+
"seed": 1,
|
| 45 |
+
"rows": 19,
|
| 46 |
+
"max_reload_difference": 0.0
|
| 47 |
+
},
|
| 48 |
+
{
|
| 49 |
+
"task": "parity",
|
| 50 |
+
"seed": 2,
|
| 51 |
+
"rows": 19,
|
| 52 |
+
"max_reload_difference": 0.0
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"task": "parity",
|
| 56 |
+
"seed": 3,
|
| 57 |
+
"rows": 19,
|
| 58 |
+
"max_reload_difference": 0.0
|
| 59 |
+
},
|
| 60 |
+
{
|
| 61 |
+
"task": "parity",
|
| 62 |
+
"seed": 4,
|
| 63 |
+
"rows": 19,
|
| 64 |
+
"max_reload_difference": 0.0
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
"task": "magnitude",
|
| 68 |
+
"seed": 0,
|
| 69 |
+
"rows": 19,
|
| 70 |
+
"max_reload_difference": 0.0
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"task": "magnitude",
|
| 74 |
+
"seed": 1,
|
| 75 |
+
"rows": 19,
|
| 76 |
+
"max_reload_difference": 0.0
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"task": "magnitude",
|
| 80 |
+
"seed": 2,
|
| 81 |
+
"rows": 19,
|
| 82 |
+
"max_reload_difference": 0.0
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"task": "magnitude",
|
| 86 |
+
"seed": 3,
|
| 87 |
+
"rows": 19,
|
| 88 |
+
"max_reload_difference": 0.0
|
| 89 |
+
},
|
| 90 |
+
{
|
| 91 |
+
"task": "magnitude",
|
| 92 |
+
"seed": 4,
|
| 93 |
+
"rows": 19,
|
| 94 |
+
"max_reload_difference": 0.0
|
| 95 |
+
}
|
| 96 |
+
],
|
| 97 |
+
"claim": "Reload and contract checks only"
|
| 98 |
+
}
|
config.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"input_features": 64,
|
| 3 |
+
"normalization": "8x8 grayscale pixels divided by 16, range [0,1]",
|
| 4 |
+
"tasks": {
|
| 5 |
+
"identity": "digit 0-9",
|
| 6 |
+
"parity": "even/odd",
|
| 7 |
+
"magnitude": "0-4 vs 5-9"
|
| 8 |
+
},
|
| 9 |
+
"seeds": [
|
| 10 |
+
0,
|
| 11 |
+
1,
|
| 12 |
+
2,
|
| 13 |
+
3,
|
| 14 |
+
4
|
| 15 |
+
]
|
| 16 |
+
}
|
inference.py
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from pathlib import Path
|
| 2 |
+
import numpy as np
|
| 3 |
+
ROOT=Path(__file__).parent
|
| 4 |
+
def predict(x, task='identity', seed=0):
|
| 5 |
+
if task not in {'identity','parity','magnitude'} or type(seed) is not int or seed not in range(5): raise ValueError('Unknown task or seed')
|
| 6 |
+
x=np.asarray(x,dtype=np.float32)
|
| 7 |
+
if x.ndim!=2 or x.shape[1]!=64 or not np.isfinite(x).all() or (x<0).any() or (x>1).any(): raise ValueError('Expected finite normalized (n,64), values in [0,1]')
|
| 8 |
+
with np.load(ROOT/'weights'/f'{task}_seed{seed}.npz',allow_pickle=False) as w:
|
| 9 |
+
h=np.maximum(x@w['hidden.0.weight'].T+w['hidden.0.bias'],0)
|
| 10 |
+
h=np.maximum(h@w['hidden.2.weight'].T+w['hidden.2.bias'],0)
|
| 11 |
+
return h@w['head.weight'].T+w['head.bias']
|
requirements.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
numpy==2.3.5
|
validate.py
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import json
|
| 2 |
+
from pathlib import Path
|
| 3 |
+
import numpy as np
|
| 4 |
+
from inference import predict,ROOT
|
| 5 |
+
if __name__=='__main__':
|
| 6 |
+
x=np.random.default_rng(13).uniform(size=(19,64)).astype(np.float32);checks=0;results=[]
|
| 7 |
+
for task in ['identity','parity','magnitude']:
|
| 8 |
+
for seed in range(5):
|
| 9 |
+
a=predict(x,task,seed);b=predict(x,task,seed)
|
| 10 |
+
assert np.array_equal(a,b) and np.isfinite(a).all() and a.shape==(19,10 if task=='identity' else 2)
|
| 11 |
+
results.append({'task':task,'seed':seed,'rows':19,'max_reload_difference':float(np.max(np.abs(a-b))) });checks+=1
|
| 12 |
+
for bad in [np.zeros((1,63)),np.full((1,64),float('nan')),np.full((1,64),2.)]:
|
| 13 |
+
try:predict(bad)
|
| 14 |
+
except ValueError:checks+=1
|
| 15 |
+
else:raise AssertionError('Invalid input accepted')
|
| 16 |
+
for task,seed in [('../x',0),('identity',True),('identity',5)]:
|
| 17 |
+
try:predict(x,task,seed)
|
| 18 |
+
except ValueError:checks+=1
|
| 19 |
+
else:raise AssertionError('Invalid selector accepted')
|
| 20 |
+
Path('VALIDATION.json').write_text(json.dumps({'passed':True,'checks':checks,'weights':15,'checks_detail':results,'claim':'Reload and contract checks only'},indent=2))
|
| 21 |
+
print('PASS',checks)
|
validation.log
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
PASS 21
|
weights/identity_seed0.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:86c17853dc4f459ee3d3eea2f87a2fcb76cf4b95a587f4297b282c766bc6308b
|
| 3 |
+
size 11701
|
weights/identity_seed1.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e2c2b91b3c150ba1fd70c5e0aea7b4b6084897af87eab474cfe70b2ba721f779
|
| 3 |
+
size 11685
|
weights/identity_seed2.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3851d9ab20b307a824efc4621911c6210050b5340a627778151bcc0b54732a9b
|
| 3 |
+
size 11739
|
weights/identity_seed3.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e7261be3550e50f2b56167b6e1f37fb08b8dcdf0ab433bf2c2d8573172edcff6
|
| 3 |
+
size 11720
|
weights/identity_seed4.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:715f0f8550e1a3da6e1e6327895b922c6b84e18e73577a6eec00161ea41333da
|
| 3 |
+
size 11669
|
weights/magnitude_seed0.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:db4fd7eb0293359e1981c77a344f7eef697919890089dab346c98d3b03848c50
|
| 3 |
+
size 11165
|
weights/magnitude_seed1.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:08c880dbcfde393cfbf5a5f58a5cf005859cf857e13a8375c48bf7b50368c328
|
| 3 |
+
size 11155
|
weights/magnitude_seed2.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d54c54d7dcafc7cf6f9738e9c52d33ec80c1f10666dde3e80dd71c8675559fe5
|
| 3 |
+
size 11158
|
weights/magnitude_seed3.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c409bf9bd762d8e485487c4070967007541567792e32b04509a2787fc4428708
|
| 3 |
+
size 11150
|
weights/magnitude_seed4.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e1d4194cc0559b278aee63e92726996c6e2b54e57df9b3092a8fa9ba909255c5
|
| 3 |
+
size 11151
|
weights/parity_seed0.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1f63dd4e02517e26514a306f4e74b0f32c7238977107fabaa7851a6d53773026
|
| 3 |
+
size 11155
|
weights/parity_seed1.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:17948ea392efbbcdba925aae7ea8228c892eeffe66f0edd0b29b7c7ad519a60d
|
| 3 |
+
size 11159
|
weights/parity_seed2.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:860a92dd52d5b4c16f3cc03c44ceb207df7e0519acf39ae3ae353f9bfd3e24cb
|
| 3 |
+
size 11149
|
weights/parity_seed3.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a62fa611b25b7ebdd2eae92a1921af9113174e73576d568ab10fb8c1a826b4b2
|
| 3 |
+
size 11167
|
weights/parity_seed4.npz
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:dd8d10d062b4f49652c5098750d914829689e348372713c025192ed77d079da4
|
| 3 |
+
size 11150
|