Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
e0d27ae
Merge the identical glass and Sellmeier omega checks into _optmat
jtravs Nov 12, 2026
5b7c2a1
Add shared argument refusals in solprop._validation
jtravs Nov 12, 2026
5f391ea
Split output/schema.py into five modules by concern
jtravs Nov 12, 2026
f65c328
Take every stored identity through one canonical digest
jtravs Nov 12, 2026
5a325b6
Split solprop.tools into a package of seven modules
jtravs Nov 12, 2026
90f5546
Point the tools cross-references at their home modules
jtravs Nov 12, 2026
3fe5d7c
Drive RunMetadata's stored JSON from its field metadata
jtravs Nov 12, 2026
48a753b
Keep one process_stamp, in solprop._process
jtravs Nov 12, 2026
a44bf37
Split driver/simulation.py by concern
jtravs Nov 12, 2026
d8db654
Name the gas keyword table publicly for the recipe layer
jtravs Nov 12, 2026
909382b
Replace small files through one atomic writer in solprop._durable
jtravs Nov 12, 2026
ae9b0de
Pass the hollow and general routes one request each
jtravs Nov 12, 2026
8bb8251
Document keyword_request as public API of driver.routes.keywords
jtravs Nov 12, 2026
0ccd007
Build both Slurm batch scripts with one function in _process
jtravs Nov 12, 2026
e39cea3
Route pressure_zdw and pressure_rdw through solve_parameter
jtravs Nov 12, 2026
04e85e5
Build keyword-route settings and defaults in one place
jtravs Nov 12, 2026
6d441f7
Share the service's payload reader and dispersion-curve helpers
jtravs Nov 12, 2026
7927469
Trim process_stamp's private docstrings to the private form
jtravs Nov 12, 2026
5302ca1
Let a Marcatili subclass declare that dneff_dz does not apply
jtravs Nov 12, 2026
4987aab
Fold the rectangular and slab modes' shared members into their base
jtravs Nov 12, 2026
ffae363
Describe each statistic once, in its StatDefinition
jtravs Nov 12, 2026
4388929
Note the StatDefinition change in the changelog
jtravs Nov 12, 2026
7b816fb
Give ZProfile the defaults of a continuous monotone path
jtravs Nov 12, 2026
874f67b
Share the scaling of DataPulse and TimeDataPulse in a private base
jtravs Nov 12, 2026
5cec81d
Tighten the cross-package private-import ratchet to 85
jtravs Nov 12, 2026
2d6ad57
Rewrap the recipe docstrings the tools references lengthened
jtravs Nov 12, 2026
74e9694
Record the resume-key change of the record split
jtravs Nov 12, 2026
9d425f0
Merge from_radial into from_free; compose prop_* from their constructors
jtravs Nov 12, 2026
38c87c4
Revert "Route pressure_zdw and pressure_rdw through solve_parameter"
jtravs Nov 12, 2026
2956986
Merge the shared refusals, the tools package and the physics bases
jtravs Nov 12, 2026
53ccc1a
Merge the output split, canonical digests, durable writes and the sta…
jtravs Nov 12, 2026
1473e12
Rename driver/service.py to driver/session_loop.py
jtravs Nov 12, 2026
ccaf283
Record the session loop's rename in the changelog
jtravs Nov 12, 2026
c4d6edf
Regenerate the gallery pages of the scripts that now call from_free
jtravs Nov 12, 2026
ac4f144
Merge the updated two-backends branch
jtravs Nov 12, 2026
34f5a88
Give simulation.py's size entry its headroom
jtravs Nov 12, 2026
699ca62
Merge refactor/python-core: PR-3 fixes, the OUT and PHYS lanes
jtravs Nov 12, 2026
25a6b07
Point the output layer's settings references at driver.settings
jtravs Nov 12, 2026
175df91
Rebuild the analysing-a-run and far-field tutorials for the output split
jtravs Nov 12, 2026
85433c7
Skip prop_* docstring composition when docstrings are stripped
jtravs Nov 12, 2026
9506a2a
Call from_free in the gemm-shapes benchmark
jtravs Nov 12, 2026
acc9cc3
Write NumPy scalars as their values in canonical identities
jtravs Nov 12, 2026
82c177c
Keep one MARCH_SNAPSHOT_AUTO_BYTES, in translate.run_request
jtravs Nov 12, 2026
6a51389
Call open_run where open_run_record wrapped it
jtravs Nov 12, 2026
200e1e1
Document the wall-pair index methods as the public API they are
jtravs Nov 12, 2026
80007f9
Call lambda_rdw_all once in shortest_wave
jtravs Nov 12, 2026
d87f5fe
Merge remote-tracking branch 'origin/feature/two-backends-binary64' i…
jtravs Nov 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion benchmarks/builders.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ def spatial(
# at translation, its error measured at 1.7e-6 in field.
settings = dataclasses.replace(settings, spatial_absorber=SpatialAbsorber())
if isinstance(space, RadialGrid):
return Simulation.from_radial(
return Simulation.from_free(
grid, space, medium, responses, pulse, settings=settings, **_launch(options)
)
return Simulation.from_free(
Expand Down
4 changes: 3 additions & 1 deletion benchmarks/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ class Case:
sets : tuple of str
Selection groups; ``tracking`` puts the case in the default run.
interface : str
The ``prop_*`` interface whose defaults the case runs with.
The ``prop_*`` interface whose defaults the case runs with. ``"prop_radial"``
is ``prop_free`` on a radial grid: the label the tracked definitions were
recorded with, kept so that their digests do not change.
builder : str
Builder family in ``benchmarks.builders``.
length : float
Expand Down
4 changes: 2 additions & 2 deletions benchmarks/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
from solprop.backends.protocol import Backend, HostStepping
from solprop.driver import Simulation
from solprop.monitor import BoundaryMonitor
from solprop.output.schema import FieldRetention, Output
from solprop.output.store import FieldRetention, Output
from solprop.translate.problem import PropagationProblem


Expand Down Expand Up @@ -622,7 +622,7 @@ def measure(
from solprop.backends import select # noqa: PLC0415
from solprop.driver.executors.pool import peak_rss # noqa: PLC0415
from solprop.driver.run import field_retention # noqa: PLC0415
from solprop.output.schema import serialise # noqa: PLC0415
from solprop.output.serialisation import serialise # noqa: PLC0415

free_before = _device_free(configuration)
started = time.perf_counter()
Expand Down
4 changes: 4 additions & 0 deletions changelog.d/driver-session-loop.breaking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
`solprop.driver.service`, the loop that services a run's execution session, is renamed
`solprop.driver.session_loop`, apart from the front end's `solprop.service`.
`solprop.driver.run.MARCH_SNAPSHOT_AUTO_BYTES` is gone; the one limit is
`solprop.translate.run_request.MARCH_SNAPSHOT_AUTO_BYTES`.
7 changes: 7 additions & 0 deletions changelog.d/driver-simulation-split.breaking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
`solprop.driver.simulation` now holds the `Simulation` class alone; the rest moved
into modules by concern. Import `SimulationSettings` and `default_collar` from
`solprop.driver.settings` (or `SimulationSettings` from `solprop.driver`),
`SimulationRunner` and `check_derived_problem` from `solprop.driver.runner`,
`metadata_for` from `solprop.driver.metadata`, `default_field_range` from
`solprop.driver.inputs` and `default_radial_order` from
`solprop.driver.routes.hollow`; the names `solprop.driver` exports are unchanged.
5 changes: 5 additions & 0 deletions changelog.d/free-takes-radial.breaking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
`Simulation.from_radial` and `prop_radial` are removed: `Simulation.from_free` and
`prop_free` take a `RadialGrid` as well as a `FreeGrid` or `LineGrid`, and choose the
radial or the Cartesian transform from it, with the same keywords and the same
defaults as before for each grid. Replace `from_radial(...)` with `from_free(...)` and
`prop_radial(...)` with `prop_free(...)`; recipes keep the `radial` route.
2 changes: 2 additions & 0 deletions changelog.d/open-run.removed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
`solprop.driver.run.open_run_record` is removed in favour of `solprop.driver.run.open_run`,
which opens an output with the same record and also returns its checkpoint interface.
11 changes: 11 additions & 0 deletions changelog.d/output-schema-split.breaking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
`solprop.output.schema` is split into five modules: `solprop.output.serialisation`
(`serialise`, `ArrayDigest`, `StatedInput`, `recorded_input`), `solprop.output.provenance`
(`BackendRecord`, `GitProvenance`, `package_versions`), `solprop.output.records`
(`GridRecord`, `ModeRecord`, `StepperRecord`, `SavedPlane`, `RunOutcome` and the other
record types), `solprop.output.metadata` (`RunMetadata`, `SCHEMA_VERSION`,
`resolve_metadata_write`) and `solprop.output.store` (`Output`, `PlaneStore`,
`FieldRetention` and the other save protocols). Import these names from
`solprop.output`, which still exports the public ones, or from their new module. A run
record names its record types by module (`solprop.output.records.GridRecord`), so every
configuration hash differs from the one an earlier version wrote: a file or a scan
written before cannot be resumed or continued, and is read as it was.
2 changes: 1 addition & 1 deletion changelog.d/sep-0047-destination-export.changed.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
A kept plane's field is exported once, straight into its stored form, with the same stored bits ([#346](https://github.com/LupoLab/solprop/issues/346), SEP 47). `MemoryOutput` hands the run the block row the plane will occupy, so the field is written once, where it is kept, with no host volume of its own; `HDF5Output` is handed one new array, which h5py writes into the plane's chunk without a copy. A plane observer and a failure checkpoint at the same plane share that export. On a 108 MiB Cartesian plane the native session's saved plane no longer allocates a field into memory and one fewer into a file, and the driver session's file output converts its observation where it is instead of allocating a second field. `PlaneStore` gains `takes_exports`, `field_destination` and `save_exported` for this, with `solprop.output.schema.StoredField` beside them; a store subclass that overrides `save` is still given every plane, with its field, through it. Export destinations are refused by what is wrong with them (shape, dtype, layout or a read-only array).
A kept plane's field is exported once, straight into its stored form, with the same stored bits ([#346](https://github.com/LupoLab/solprop/issues/346), SEP 47). `MemoryOutput` hands the run the block row the plane will occupy, so the field is written once, where it is kept, with no host volume of its own; `HDF5Output` is handed one new array, which h5py writes into the plane's chunk without a copy. A plane observer and a failure checkpoint at the same plane share that export. On a 108 MiB Cartesian plane the native session's saved plane no longer allocates a field into memory and one fewer into a file, and the driver session's file output converts its observation where it is instead of allocating a second field. `PlaneStore` gains `takes_exports`, `field_destination` and `save_exported` for this, with `solprop.output.records.StoredField` beside them; a store subclass that overrides `save` is still given every plane, with its field, through it. Export destinations are refused by what is wrong with them (shape, dtype, layout or a read-only array).
4 changes: 4 additions & 0 deletions changelog.d/slurm-scan-blas-idle.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
The batch script of a Slurm scan (`solprop.driver.executors.Slurm`) now sets
`OPENBLAS_THREAD_TIMEOUT=20` unless the job's environment sets it, as the front end's
Slurm runs already did, so the scan controller's BLAS threads sleep instead of spinning
between calls.
6 changes: 6 additions & 0 deletions changelog.d/stat-definition-fields.removed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
`StatDefinition.implemented` is removed: every statistic in `solprop.stats.CATALOGUE`
is implemented, and the reserved-name refusal it served had no entries. Each
`StatDefinition` now also says how a statistic is formed and treated (`evaluate`,
`metric`, `weight`, `profile`, `plasma`, `general`, `advice`), and the name sets such as
`METRIC_WEIGHTED_STATISTICS` and `GENERAL_MODAL_ACCESSORS` are derived from those
fields, with unchanged members.
5 changes: 5 additions & 0 deletions changelog.d/uniform-refusal-wording.changed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
The refusals of a non-positive or non-finite number and of an unknown keyword now read
the same across the design tools, pulses, gas flow, antiresonant tubes, the TDSE
specifications and the processing and plotting functions: `<name> must be finite and
positive, got <value>` and `<name> must be 'a', 'b' or 'c', got <value>`. A numeric
string given where those functions expect a number is now refused rather than parsed.
2 changes: 1 addition & 1 deletion docs/api/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ In scripts and library code, import from the home modules listed below.

| module | what it holds |
|---|---|
| {mod}`solprop.driver` | the entry points `prop_gnlse`, `prop_capillary`, `prop_waveguide`, `prop_radial`, `prop_free` and `prop_planar`, the `Simulation` object behind them, and `run_problem`, the loop over save planes that takes a translated problem, a constructed backend, an output handler and a `Start` (`solprop.backends.session.Start.entrance(problem)` for a fresh run), which the run loads into the backend, for a batch runner of your own |
| {mod}`solprop.driver` | the entry points `prop_gnlse`, `prop_capillary`, `prop_waveguide`, `prop_free` and `prop_planar`, the `Simulation` object behind them, and `run_problem`, the loop over save planes that takes a translated problem, a constructed backend, an output handler and a `Start` (`solprop.backends.session.Start.entrance(problem)` for a fresh run), which the run loads into the backend, for a batch runner of your own |
| {mod}`solprop.grid` | time and frequency grids (`FieldGrid`, `EnvelopeGrid`) and the free-space transverse grids (`RadialGrid`, `FreeGrid`, `LineGrid`) |
| {mod}`solprop.pulses` | initial pulses: `GaussianPulse`, `SechPulse`, `CustomPulse`, `DataPulse`, `TimeDataPulse`, `load_spectrum` (a measured spectrum and phase from a text file), and spatial and planar pulses |
| {mod}`solprop.profiles` | quantities that vary along z: radius, pressure and temperature profiles such as `PiecewiseLinear` and `PressureGradient` |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 17 additions & 17 deletions docs/auto_tutorials/basics/plot_03_analysing_a_run.codeobj.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
{
"is_class": true,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "GridRecord.from_grid"
},
Expand All @@ -135,8 +135,8 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema.GridRecord",
"module_short": "solprop.output.schema.GridRecord",
"module": "solprop.output.records.GridRecord",
"module_short": "solprop.output.records.GridRecord",
"name": "from_grid"
}
],
Expand Down Expand Up @@ -174,7 +174,7 @@
{
"is_class": true,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.store",
"module_short": "solprop.output",
"name": "PlaneStore"
},
Expand Down Expand Up @@ -248,7 +248,7 @@
{
"is_class": true,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.metadata",
"module_short": "solprop.output",
"name": "RunMetadata"
},
Expand Down Expand Up @@ -283,7 +283,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.metadata",
"module_short": "solprop.output",
"name": "RunMetadata"
}
Expand All @@ -292,7 +292,7 @@
{
"is_class": true,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "SavedPlane"
},
Expand Down Expand Up @@ -327,7 +327,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "SavedPlane"
}
Expand All @@ -336,7 +336,7 @@
{
"is_class": true,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "StepperRecord"
},
Expand All @@ -357,7 +357,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "StepperRecord"
}
Expand Down Expand Up @@ -1130,7 +1130,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.metadata",
"module_short": "solprop.output",
"name": "RunMetadata"
},
Expand Down Expand Up @@ -1290,7 +1290,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.records",
"module_short": "solprop.output",
"name": "SavedPlane"
},
Expand Down Expand Up @@ -1469,7 +1469,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.store",
"module_short": "solprop.output",
"name": "PlaneStore.n_saved"
},
Expand Down Expand Up @@ -1534,7 +1534,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.store",
"module_short": "solprop.output",
"name": "PlaneStore.open"
},
Expand Down Expand Up @@ -1599,7 +1599,7 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module": "solprop.output.store",
"module_short": "solprop.output",
"name": "PlaneStore.save"
},
Expand Down Expand Up @@ -1664,8 +1664,8 @@
{
"is_class": false,
"is_explicit": false,
"module": "solprop.output.schema",
"module_short": "solprop.output.schema",
"module": "solprop.output.store",
"module_short": "solprop.output.store",
"name": "PlaneStore.to_file"
},
{
Expand Down
4 changes: 2 additions & 2 deletions docs/auto_tutorials/basics/plot_03_analysing_a_run.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\nimport numpy as np\n\nfrom solprop.grid import EnvelopeGrid\nfrom solprop.output import MemoryOutput, open_file\nfrom solprop.output.schema import GridRecord, RunMetadata, SavedPlane, StepperRecord\nfrom solprop.plotting import plot_energy, plot_stats, prop_2d, spec_1d, time_1d\nfrom solprop.processing import energy as pulse_energy\nfrom solprop.processing import (\n fwhm_t,\n get_power,\n get_spectral_density,\n grid_of,\n time_bandwidth,\n)\nfrom solprop.pulses import GaussianPulse\nfrom solprop.stats import collect, default_spec\n\nLENGTH = 0.2\nFWHM = 30e-15\n\ngrid = EnvelopeGrid.from_limits(LENGTH, 800e-9, (400e-9, 2e-6), 1e-12)\nseed = GaussianPulse(wavelength=800e-9, fwhm=FWHM, energy=1e-6).build(grid)\n\n# Chosen so that the pulse ends four times longer than it started: the closed form is\n# tau(z) = tau0 sqrt(1 + (beta2 z / tau0^2)^2) with tau0 the 1/e half-width of the\n# field.\ntau0 = FWHM / (2 * np.sqrt(np.log(2)))\nbeta2 = np.sqrt(15) * tau0**2 / LENGTH\n\nmetadata = RunMetadata(\n grid=GridRecord.from_grid(grid),\n modes=(),\n simulation_kind=\"mode_averaged\",\n configuration={\"beta2\": beta2},\n stepper=StepperRecord(tableau=\"DOPRI5\", controller={\"rtol\": 1e-8}),\n)\nspec = default_spec(\"mode_averaged\")\n\nrun = MemoryOutput()\nrun.open(metadata)\nfor z in np.linspace(0.0, LENGTH, 25):\n # The internal linear operator of a purely dispersive co-moving frame.\n field = seed * np.exp(-0.5j * beta2 * (grid.omega - grid.omega0) ** 2 * z)\n plane = SavedPlane(z=float(z), field=field)\n run.save(SavedPlane(z=float(z), field=field, stats=collect(spec, grid, plane)))\n\nprint(f\"{run.n_saved} planes on a {grid.kind} grid of {grid.n_omega} bins\")"
"import matplotlib.pyplot as plt\nimport numpy as np\n\nfrom solprop.grid import EnvelopeGrid\nfrom solprop.output import MemoryOutput, open_file\nfrom solprop.output.metadata import RunMetadata\nfrom solprop.output.records import GridRecord, SavedPlane, StepperRecord\nfrom solprop.plotting import plot_energy, plot_stats, prop_2d, spec_1d, time_1d\nfrom solprop.processing import energy as pulse_energy\nfrom solprop.processing import (\n fwhm_t,\n get_power,\n get_spectral_density,\n grid_of,\n time_bandwidth,\n)\nfrom solprop.pulses import GaussianPulse\nfrom solprop.stats import collect, default_spec\n\nLENGTH = 0.2\nFWHM = 30e-15\n\ngrid = EnvelopeGrid.from_limits(LENGTH, 800e-9, (400e-9, 2e-6), 1e-12)\nseed = GaussianPulse(wavelength=800e-9, fwhm=FWHM, energy=1e-6).build(grid)\n\n# Chosen so that the pulse ends four times longer than it started: the closed form is\n# tau(z) = tau0 sqrt(1 + (beta2 z / tau0^2)^2) with tau0 the 1/e half-width of the\n# field.\ntau0 = FWHM / (2 * np.sqrt(np.log(2)))\nbeta2 = np.sqrt(15) * tau0**2 / LENGTH\n\nmetadata = RunMetadata(\n grid=GridRecord.from_grid(grid),\n modes=(),\n simulation_kind=\"mode_averaged\",\n configuration={\"beta2\": beta2},\n stepper=StepperRecord(tableau=\"DOPRI5\", controller={\"rtol\": 1e-8}),\n)\nspec = default_spec(\"mode_averaged\")\n\nrun = MemoryOutput()\nrun.open(metadata)\nfor z in np.linspace(0.0, LENGTH, 25):\n # The internal linear operator of a purely dispersive co-moving frame.\n field = seed * np.exp(-0.5j * beta2 * (grid.omega - grid.omega0) ** 2 * z)\n plane = SavedPlane(z=float(z), field=field)\n run.save(SavedPlane(z=float(z), field=field, stats=collect(spec, grid, plane)))\n\nprint(f\"{run.n_saved} planes on a {grid.kind} grid of {grid.n_omega} bins\")"
]
},
{
Expand Down Expand Up @@ -175,7 +175,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.14.6"
"version": "3.14.5"
}
},
"nbformat": 4,
Expand Down
3 changes: 2 additions & 1 deletion docs/auto_tutorials/basics/plot_03_analysing_a_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@

from solprop.grid import EnvelopeGrid
from solprop.output import MemoryOutput, open_file
from solprop.output.schema import GridRecord, RunMetadata, SavedPlane, StepperRecord
from solprop.output.metadata import RunMetadata
from solprop.output.records import GridRecord, SavedPlane, StepperRecord
from solprop.plotting import plot_energy, plot_stats, prop_2d, spec_1d, time_1d
from solprop.processing import energy as pulse_energy
from solprop.processing import (
Expand Down
2 changes: 1 addition & 1 deletion docs/auto_tutorials/basics/plot_03_analysing_a_run.py.md5
Original file line number Diff line number Diff line change
@@ -1 +1 @@
60732f8be8b9362299269d446bd6469d
0ffc306efd8b5ce01792284a72c37578
Loading
Loading