Reproducible Analysis, Metadata, and Audit Trails
Install and import#
npm install fintech-algorithmsimport { reproducibleAnalysisMetadataAndAuditTrails } from "fintech-algorithms/foundations/statistical-computing-and-reproducibility/reproducible-analysis-metadata-and-audit-trails";Signature#
reproducibleAnalysisMetadataAndAuditTrails(input)Serializes a run's inputs, method, version and seed into a deterministic JSON string and fingerprints it with a 32-bit FNV-1a hash.
Parameters#
| Name | Type | Notes |
|---|---|---|
input | D00Input | Reads auditInputs, method, version and seed, the four fields that identify a run. A non-empty values list of finite numbers must also be present; it is validated but not recorded. |
Returns#
D00Output
canonicalJson is the four fields serialized with their top-level keys in sorted order, and because that sorted key list is used as the serializer's replacer, nested objects such as inputs come out empty. fnv1a32 is the hash of that string as eight lowercase hex digits, and metadataComplete is true when none of the four fields is null or undefined.
Errors#
- When
valuesis absent, empty, or holds a non-finite number — throws RangeError
Complexity: time O(n),
space O(n).
Worked example#
verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.
Input#
{
"values": [1, 2, 3, 4, 5],
"floatingValue": 0.1,
"maxSafeMagnitude": 1.7976931348623157e+308,
"window": 3,
"rawValues": [1, null, 2, "bad", 3],
"invalidPolicy": "drop-and-report",
"seed": 42,
"sampleCount": 5,
"leftVector": [
{
"index": "A",
"value": 1
},
{
"index": "B",
"value": 2
}
],
"rightVector": [
{
"index": "B",
"value": 20
},
{
"index": "C",
"value": 30
}
],
"train": [10, 12, 14, 16],
"test": [18, 20],
"actual": [1, 2.0000001, 3],
"expected": [1, 2, 3]
}Showing 14 of 18 fields.
Call#
reproducibleAnalysisMetadataAndAuditTrails(input)Returns#
object with 1 field: metadataComplete
{
"metadataComplete": true
}Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Floating-Point Arithmetic — IEEE 754-2019
- math.fsum — Python Documentation
- Random Sampling — NumPy Documentation
- Common Pitfalls and Recommended Practices — scikit-learn
- Historical-example decision