Trace your noise
Where does your spectrum’s noise story come from?
Every covariance spectrum has a small-eigenvalue tail, and something decides whether that tail reads as “noise.” This page measures whether that decision could have come from your data — or only from a constant somebody added. Drop a CSV below. Your browser does all of the arithmetic; nothing you drop leaves this tab.
the comparison — two numbers, no threshold
The Marchenko–Pastur noise bulk — the classical model of “what pure noise eigenvalues look like” — has a total width fixed entirely by the shape of your matrix: ((1+√γ)/(1−√γ))² with γ = d/n. No noise level enters that ratio. Your tail’s spread — largest-of-the-five-smallest over smallest — is a property of your data.
If the spread exceeds the width, no noise level whatsoever can place the bulk over your tail — the tail cannot be that kind of noise, at any calibration. If it fits, a compatible placement exists. Either answer is the reading, reported at the same volume. Then a dose ladder re-asks the question with an added diagonal constant c = μ·10k at each step k — and reports the first dose at which your tail starts fitting. A fit that only exists at a dose was purchased at that dose.
This page does not claim the noise model should describe your data, and a verdict here certifies nothing about any pipeline. It reads one property of one matrix. The full convention list ships in the kit’s SPEC; the engine below is ~300 lines — read it first.
the engine ties first
Before this page will read anything of yours, it must reproduce a published reference readout — every digit — from a reference card served by this site (the same public trace used on the agent-provenance case). An engine that cannot tie has no standing to read your data.
the reference readout it must hit
Card sha256 072fd82f… (n=4262, d=6, four constant columns — deliberately a hard case: the degenerate census must come out exact). The full expected object is embedded in this page’s source and compared field-for-field.
your data
waiting for the engine tie…
comma-separated numbers; optional header row; every data cell must be a finite number or the run refuses with the exact row and column. In-tab limits: d ≤ 64 and n×d ≤ 4,000,000 cells — beyond that, use the kit.
pre-built readouts — the public cards
The same verdict, already run on six reference corpora — for the skeptic who would rather inspect than upload. Three have case pages on this site; three are reference corpora carried in the kit.
and the house digest still ties too
The reference card’s geometry digest is a number habitat published (67a6f95e…). Recompute it here from the same served vectors the tie above used — the two instruments read one artifact.
the same instrument, off the page
The downloadable kit is the identical engine in pure Python — no dependencies, no network — with the declared convention list (SPEC.md), a public reference card, and a self-test that refuses to pass unless the engine reproduces the reference readout exactly. For data that should never touch a browser, or for reading the whole method at your own bench. Email hello@habitat.ooo and it arrives by reply.