Course contents · Reproducibility · Tests
The project separates three questions: does the implementation behave as intended, do saved tables agree with their arrays, and what do the measurements support? The checks below address the first two. The lessons state the physical assumptions and reference limits needed for the third.
python -m unittest discover -s tests -v
python check_project.py
python check_project.py --resultsThe unit tests cover force models, integrator behaviour, coordinate transformations, processed-map identities, external adapters, sampling, runner completion and non-overwriting output directories. The optional checker checks current local links, heading and function anchors, Python syntax, runner listings and Part 4 command-line help.
With --results, it recomputes the supplied Part 4 candidate state and energy measurements, 4D cost margins, the 4E reference summaries and paths, supplementary measurements and derived tables. It checks recorded data inputs where a derived table names them. It does not compare source files with an old AST or hash, require authorization records, redraw every historical figure, or demand identical PNG pixels. By default it saves no report files and never integrates.
The current check summary, test logs and compatibility checks and data-preservation record describe the delivered package. Test counts can change when obsolete checks are removed or new functional tests are added.
When replaying dimensionless relative-energy changes, the checker allows 32 machine epsilons of absolute rounding difference, alongside its relative tolerance. Energy change subtracts nearby totals, so different NumPy reductions can differ in the last few bits. This allowance applies to diagnostic replay only; it does not change a lesson's accuracy targets, reference floors or stored values.
The package uses one set of dependency ranges for all parts, declared in pyproject.toml. The compatibility record reports actual checks on representative REBOUND and plotting-library versions. It is evidence for those combinations, not a claim to have tested every supported Python version or every release inside a range.
The original measurements remain tied to the versions saved with them. Running a lesson on a different compatible version can produce a different step history or reference floor. The experiment's own reference and sampling checks still determine which accuracy claims can be made.
Part 4's supplied tables contain 201 primary candidate settings and 19 supplementary settings, along with objective-specific cost rows. The checker derives the state and energy quantities from physical NPZ trajectories. The figures are produced by the experiment plotting functions from saved measurements; labelled targets, reference floors and limiting theory curves are comparison guides. Synthetic unit-test signals do not feed lesson figures.
The older Parts 1–3 retain their measured arrays, figures and source metadata. The optional Part 4 result checker does not independently repeat all earlier integrations or validate every scientific statement in the course.
For 4E, independent BS references and finer output sampling enlarge the 120-degree period floor to about 11.31 inner periods. Same-time trajectory agreement supports about 76.1% of that case's sampled interval at the declared threshold. The full-window conclusions concern the separately checked secular observables. The quadrupole maximum-eccentricity formula is a conditional guide, and the 60/120-degree pair does not isolate inclination as an independent regime-map axis. See 4E and its evidence.
The 4B transition follow-ups remain reference-limited. Their different eccentricities do not bracket one fixed-system gain curve. The separate Part 4 cost table retains missing measurements and unavailable external counters explicitly. See 4B and 4D.
4E plotting is tested with copies of the supplied measured tables and reference trajectories. The plot-only entry rebuilds four PNG and four SVG files without calling the experiment or reference integrator, and leaves the input records unchanged. A separate test confirms that three reference figures can be drawn before candidate measurements exist. The runner's log-streaming test checks that a child-process error remains visible and retains its nonzero exit code.
A figure can exist before the full task is validated. Read progress.json, completion.json and the sampling flag before interpreting a new run. Conversely, the default does not open GUI windows: check the printed 4E_zlk/run_<UTC> directory for saved files.
The current output-layout revision is checked by saved-data replay and plotting tests. The retained October 31 full-4E log records the preceding integration check; no new long integration was needed for this directory and plotting update. Numerical drivers, scan parameters and budgets remain unchanged.