Repository navigation
SEP 37: shot noise on by default, and an integrator and tolerances for each interface - #30
Merged
Merged
Conversation
… interface Proposes noise="modified" as the default wherever the model can be carried, a measured default integrator and default tolerances for each prop_* interface, and lifting every noise refusal that is not grounded in physics. Opens with an exploration phase over the design record and the standard suite. Carries the preliminary step-count and accuracy measurements made while drafting: noise costs nothing at capillary energies and 8-65x on the 20 pJ GNLSE soliton, set by the seed's share of the field norm against rtol, with RungeKutta() well ahead of Multistep() there. Adds the SEP to the index, its toctree and the roadmap's drafts, and links the informal roadmap items it partly covers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gets The theory now rests on where one photon per mode comes from (Smith's amplifier-equivalent input), the modified model's origin (Chen and Wise) and its exact equivalence to the input model in shifted coordinates when no reservoir acts; loss, Raman, gain and plasma absorption are where the two differ and the modified model is the physical one. The verification gains the exact input/modified identity and the Bogoliubov result for spontaneous MI from vacuum. The factor of two in parametric seeding and the fixed-modulus draw are recorded as open (Q7, Q8). Tolerance defaults are to be set by convergence tests: the GNLSE on the Dudley-Genty-Coen supercontinuum (expected looser than 1e-8; recurrence studies tighten explicitly), the capillary kept at 1e-6 only if its test supports it, and no default set by a response such as the TDSE. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Documentation build overview
116 files changed ·
|
The review showed the reservoir argument for the modified model was wrong: with a unitary linear operator the two models are one equation whatever the nonlinear response, and they differ only through a forcing correlated with the draw where the linear operator is not unitary, where the modified model can be the worse. Following the maintainer's decisions (D1-D5), the default becomes noise="input", the least bad model already implemented, and the modified model stays an option with its limits documented. Part I now carries a closed, recorded and printed fallback where noise cannot be carried, input noise beside the TDSE response, coupled flows and explicit interior launches, a frozen integrator selection rule with an approval gate, and a lean convergence protocol for the tolerances. Part III records the decisions and answers R1-R14. The roadmap entries follow the narrower scope. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds noise_floor="subtract" to the spectrum accessors (D6): it removes exactly one photon per active bin and channel, which for one realisation equals the modified model's corrected readout wherever the linear operator is unitary, so an input run can show the floorless spectrum. Records the input model's thermal-seeding limit for rotational Raman at THz shifts, which neither model carries. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n SEP 7 Records the maintainer's decision (D7): the modified noise model is kept as it is, with no new work, and whether it stays is decided when SEP 7 settles whether gain media need its separate noise-injection path. The roadmap gains an item for that decision, and SEP 7's ASE section notes that stochastic ASE needs the noise to see only the emission gain, as in Chen and Wise's split, or a gain Langevin term. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Accepted by John Travers with the 10 % tie margin of the integrator rule, after his human review, the GPT-6 AI review and the response to it, with decisions D1-D7 recorded. Part I is frozen from this revision; the SEP moves to the roadmap's accepted proposals and the index shows its status. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-and-stepper-defaults
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Every prop_* interface and Simulation.from_* constructor now takes noise="default", which resolves to the input model wherever the run can carry noise. Under single precision it resolves to none and records why, and a seed beside that fallback is refused; the hybrid planar route records that it carries none. An interior launch keeps a default draw off the spectrum it is given, while an explicit input draw now enters at the launch: a backend adds the input realisation at the run's launch position rather than at z = 0, which leaves resumes as they were. The resolution (requested model, resolved model, reason) travels on the Simulation, through derived runs and into RunMetadata.noise_resolution at output schema 26, beside the resume hash. The start-of-run summary marks a default model and gives a fallback's reason. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The shot-noise guide now explains where one photon per mode comes from, what the input model gets wrong and by how much, why the modified model is not the default, what noise costs, the resolution rules and the floor-subtracted spectrum. The interior-launch, coupling and Luna pages follow the new default, and the changelog records it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (SEP 37) Tutorials execute in every docs build, so each driver call now says what it wants under the input-noise default: a fixed seed for the microjoule capillary and filament lessons, and noise=None for the linear and low-energy demonstrations, the route comparisons and the soliton recurrence, where a one-photon seed is a visible share of the field or would multiply a low-energy GNLSE run's steps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The microjoule capillary and wall examples take a fixed seed; the nanojoule taper comparisons, the 1 pJ moving guide and the precision comparison switch noise off, since their lessons are noiseless. Their committed outputs are refreshed once the remaining defaults land. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The input draw is part of the entrance state, so a coherent wall, the taper coupling, a split block and a moving guide propagate it like any field. The modified model keeps every coupled-flow refusal, at the translation layer and in the shared backend admission. Each route's entrance basis is orthonormal in true power: the capillary HE_1m set by its Bessel orthogonality and per-mode normalisation, a general guide by check_noise_basis. Tests on numpy_ref check one photon per channel and bin at the entrance and the exit-energy identity per realisation, and numba_cpu parity to rounding. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The input draw is part of the launch, so the atom is driven by the pulse plus the draw inside its gated window, on the active band the source is certified over. The modified draw, kept apart from the drive, stays refused at admission, at the seam's own check and in the driver. Tests with the manufactured zero-current binding check that the entrance drive is the pulse's plus the draw's, that the realisation is recorded, that the draw occupies exactly the certified band and drives the atom far below the weak-field consistency check's intensity. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
get_spectral_density(noise_floor='subtract') removes the stored input realisation's energy, one photon per active bin and channel in the route's own measure, before the polarisation sum, and returns the signed remainder. It refuses a run without noise and a modified run by name. get_spectrum takes the keyword but refuses 'subtract': the floor is a power and no amplitude has the signed density as its modulus squared. spec_1d masks non-positive values on a log axis and, with prop_2d, passes the keyword through. Tests check the unpropagated identity, the equality with the modified run's corrected readout to rounding on a lossless Kerr and Raman GNLSE fibre, and the refusals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ise-and-stepper-defaults
… (SEP 37) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every driver call in the test suite that named neither noise nor seed was written for a noiseless run; it now says noise=None, so the deterministic references it checks stay what they were. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Calls that pass their keywords through a mapping now spread
{"noise": None, **kw}, so a run the mapping does not give a noise keeps
its noiseless reference; the schema-version asserts read 26.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Constructors handed to helpers, subprocess programs and the historical schema lineages now say noise=None where they pin a noiseless record; spoilers that relied on input noise being refused beside a coupled flow, at an interior launch or beside the TDSE use the modified model, which still is. The benchmark builders fix their seeds and keep the default noise, except the smoke case, which stays noiseless. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Luna witness run passed noise twice; the schedule calibration and the fibre splice on the manual pages are noiseless lessons, and the floor snippet builds its own seeded run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From phase 0's matched-accuracy rule, provisional pending the maintainer's approval: prop_gnlse and prop_waveguide default to RungeKutta(), with the GNLSE rtol 1e-7 (was 1e-8) and the waveguide rtol 1e-5 (was 1e-6), each from the convergence protocol. prop_capillary keeps Multistep() and 1e-6 (CAPILLARY_RTOL), since the rule's aggregate and the main workload split. SimulationSettings' controller is now optional: prop_radial and prop_planar fill an omitted one with SPATIAL_RTOL 1e-5 and atol 0, an explicit controller always wins, a free-space run without one is refused (not measured), and a Simulation built directly still needs one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d 1 reports Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…efaults prop_gnlse and prop_waveguide now default to the Runge-Kutta march; the tests of the Adams history, its snapshots and memory admission, the interrupt checkpoints and the step planes pin Multistep(), and the schema-21 record keeps the GNLSE tolerance it was taken at. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The edited examples (seeds or noise=None) and the graded-index example, whose prop_waveguide default is now the Runge-Kutta march, were executed on the native backend (an AMD EPYC 7763 node; the single-precision example on an Apple M5 Max, which it needs). Their figures carry the default noise where it is on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oc format The native thread-invariance and parity tests, and the native z-table helper, keep their noiseless runs explicit; the GNLSE area-path landing test names the Adams march it was qualified on; ruff formats the floor snippet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…usals By the maintainer's decision (SEP 37, D8), a capillary run with the TDSE response resolves the default to no noise, recorded as TDSE_NOISE, and an explicit noise model beside it is warned on. The tests narrow the now optional controller and the optional noise for the type checker, and a new module covers each interface's defaults and the two controller refusals that coverage reported. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fault By the maintainer's decision (SEP 37, D9): a Cartesian or line run that names no integrator takes RungeKutta(), since the Adams history's memory rules the multistep method out there, an omitted controller takes FREE_RTOL, and the default noise resolves to none (FREE_NOISE). SimulationSettings records whether an integrator was named; the choosing-a-stepper page tabulates every interface's integrator, tolerances and noise. FREE_RTOL is provisional pending its measurement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
By the maintainer's decision: a capillary run with two or more resolved modes or the TDSE response takes Multistep() and CAPILLARY_RTOL (1e-6); one resolved mode or a mode-averaged one takes RungeKutta() and SINGLE_MODE_RTOL (1e-5). The exponential Adams method carries the intermodal beat of resolved modes in its propagator, where the Runge-Kutta march's steps shorten 3.7x going from one resolved mode to four. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…EP D10 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (SEP 37) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… tests relied on the old capillary default Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ms march Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…P 37, D9) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… (SEP 37, D11) Reverts the representation rule of D10. Re-measured on the worked examples, Multistep() at CAPILLARY_RTOL was faster on the Kerr-only single-mode runs (1.2-1.75x) and on the dispersive Kerr scan (3.6x), and more accurate at its default tolerance; RungeKutta() won only on long Raman and plasma runs, which the docstrings now name. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rsive Kerr costs more per step (SEP 37, D11) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <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.
SEP 37 (accepted), with its implementation (phases 0–3) on one branch, as SEP 0 asks. The integrator and tolerance defaults are provisional, pending the maintainer's approval of the phase 0 tables (§5.2's approval gate); see Part II.
Noise (phase 2).
noise="input"is the default on everyprop_*interface andSimulation.from_*constructor.RunMetadata.noise_resolutionat output schema 26, outside the hash, and printed by the start-of-run summary.seed=beside such a fallback is refused.noise="input"there adds the draw at the launch: backends now add the input draw at the run's launch position, which leaves resumes unchanged.Refusals and the floor (phase 3).
get_spectral_density(..., noise_floor="subtract")removes the seed's one photon per bin. For one draw, where the linear operator is unitary, it equals the modified model's corrected readout.Defaults (phases 0–1). The table was measured on DMOG (AMD EPYC 7763, native backend) on the maintainer's tracking cases:
rtolprop_gnlseRungeKutta()prop_waveguideRungeKutta()prop_capillaryMultistep(), held for the maintainer's decisionprop_radial,prop_planarMultistep()prop_freeSimulationSettings.controlleris now optional.rdwand noiselessctcfavour Multistep, which is the TDSE's only march.Docs.
noise=Nonewhere the lesson is noiseless, and the worked examples are re-run.Verification.
🤖 Generated with Claude Code