Sample-to-sample width, which is the thing a disorder run already has - #160
Merged
Merged
Conversation
An ensemble of samples gives `R_X = Var(X)/[X]²` per size, and its slope says
which fixed point the calculation is at. Nothing read it.
StrongSelfAveraging d ln R_X/d ln L = -d (L ≫ ξ)
CriticalSelfAveraging d ln R_X/d ln L = α/ν (critical, disorder irrelevant)
PseudocriticalWidthScaling d ln δT_c/d ln L = -1/ν (random fixed point)
The third is the sharp one. `δT_c ∼ L^{-1/ν}` and not `L^{-d/2}`, which is the
central-limit answer and holds only where Harris does. The two are 2% apart for
the site-dilute Ising model in d = 3, where the measurement is 1.449(8) against
d/2 = 1.5, six of its own errors away, so the test asserts that separation rather
than the value.
Relevant randomness gives no decay at all: `R_X` approaches a universal
non-Gaussian of L-independent width, so both decay laws are refused rather than
fitted. Aharony and Harris, and the simulations in Wiseman and Domany, both
contradict the earlier conjecture that it goes as `L^{α/ν}` with the random fixed
point's exponents, so `CriticalSelfAveraging`'s docstring says the exponents are
the pure system's and that reading it otherwise is that refuted form.
Both citations checked against Crossref rather than written from memory; the
Wiseman-Domany title differs between the preprint and the published version and
the published one is used.
`1/ν` is not affine in `ν`, so `solve(:ν)` needs a specialized `_solve`. Writing
one in `scaling.jl` defined a new local function instead of extending the parent's
and was silently inert, since `Criticality` did not import `_solve` the way
`StatisticalMechanics` does. It does now.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
Reference check —
|
Contributor
|
📚 Docs preview: https://qatlashub.github.io/AbstractQAtlas.jl/previews/PR160/ (updates on each push to this PR) |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
`StrongSelfAveraging` types `d::SpatialDimension`, so `relations_constraining` is 14 and not 13. That table names every entry rather than counting a subset, precisely so one missing name cannot hide, and this was the missing name. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…he other
`StrongSelfAveraging` and `CriticalSelfAveraging` both called their slope
`dlogR_dlogL`, which in the name-keyed graph is one node, so a critical
measurement could be read by the off-critical law. Typing `d` then put an edge
into a node ten other relations use, and the two together were worse than either:
derive(:ν; dlogR_dlogL=-0.1/0.7, α=-0.1) -> 14.7
StrongSelfAveraging: {dlogR_dlogL} -> d = 0.1428
Josephson: {α, d} -> ν = 14.7
The intended answer is 0.7, and nothing errored. `consistency_report` also
reported a DISAGREE on legitimate off-critical data, because both routes had to
agree independently on a number only one of them was about.
The source says the abscissa off criticality is `L/ξ`, not `L`: `R_X ∼ (L/ξ)^{-d}`.
Writing it that way is both more faithful and a different variable, so the two
regimes are separate nodes. Both symptoms are gone, verified, and the disjointness
is pinned.
`CriticalSelfAveraging`'s `α` and `ν` are the PURE system's, while those types
mean the system under study everywhere else, so a bag built for other scaling
relations could feed this one exponents that turn it into the published, refuted
Wiseman-Domany reading. They are `α_pure`/`ν_pure` and untyped now, which is what
`WeinribHalperinExponent` already does with `ν_dis` two dozen lines below. No
reachability is lost: exponents are not `AbstractQuantity`, so nothing could see
them anyway.
The specialized `_solve` returned `-1/dlogδTc_dlogL` unguarded. At a flat slope,
the case the docstring itself discusses, that is an infinity whose SIGN comes from
whether the caller wrote `0.0` or `-0.0`, and feeding it back passes at `atol=0`.
The generic inverter this override bypasses guards exactly that; this one now does
too.
The test asserting `solve(:ν) ≈ 1/ρ` compared the hand-written inverse to itself.
It round-trips through `check` against the declared residual now, and the
cross-check against the source's separately fitted `1/ν = 1.467(5)` is stated in
units of the combined error, where it sits at 1.9. Adds the positive `check` cases
the testset had none of, the pole refusal, and the `α = 0` vacuity, which is
documented rather than refused because `α = 0` is the marginal case this
literature is about and not a bad input.
Prose: the sources tie "does not improve the statistics" to L, not to sample
count, and averaging over more realisations does help; that clause is gone.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`fetch` is deliberately unexported, so inside a submodule a bare `fetch` resolves to Base's. A future method defined there without this import would not be inert like the `_solve` one was; it would be added to `Base.fetch`, invisible to the seam every atlas dispatches on. No submodule defines or uses `fetch` today, so this is a no-op that stops being one silently. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
An ensemble of samples gives
R_X = Var(X)/[X]²at each size, and the slope ofthat says which fixed point the calculation is sitting at. Nothing in the registry
read it, so a disorder run's error bars stayed error bars when they are physics.
The discriminator, and how close it is
The third is the sharp one.
δT_c(L) ∼ L^{-1/ν}, notL^{-d/2}: the latter isthe central-limit answer and holds only where the Harris criterion does, at a pure
fixed point.
They are 2% apart in the case people actually measure. For the site-dilute Ising
model in
d = 3the published exponent is1.449(8)againstd/2 = 1.5, six ofits own errors away, with
1/ν = 1.47. So the test asserts that separation inunits of the measurement's error, not the value: a discriminator this tight is
only useful if the data is good enough to resolve it, and saying so is the point.
Relevant randomness is the case with no law to fit
When the randomness is relevant,
R_Xdoes not decay at all. It approaches auniversal non-Gaussian distribution of
L-independent width, so more samples atlarger
Ldo not improve the statistics. Both decay relations are refused thererather than fitted, which is asserted.
Wiseman and Domany originally conjectured
R_X ∼ L^{α/ν}with the RANDOM fixedpoint's exponents. Aharony and Harris contradict it analytically and the later
simulations contradict it numerically.
CriticalSelfAveraging's docstringtherefore says the exponents are the pure system's, and that reading it with the
random ones is that refuted conjecture rather than a variant of it.
Two things worth flagging
Both citations were checked against Crossref rather than written from memory. The
Wiseman-Domany title differs between the preprint and the published version; the
published one is used. This follows a pass where a guessed arXiv id returned an
unrelated quantum Hall paper.
1/νis not affine inν, sosolve(:ν)needs a specialized_solve. Writingone in
scaling.jldefined a NEW local function rather than extending theparent's, with no error and no warning, because
Criticalitydid notimport ..AbstractQAtlas: _solvethe wayStatisticalMechanicsalready does. Itdoes now. Worth knowing that this failure mode is silent.
Version
Patch, additive. Three relations, one import, no change to anything existing.