Skip to content

v1.5.0: assess a site from an installed package

Released on 23 October 2026 as v1.5.0, at commit edc27007759de575baa7b3c6f4969139cea8d616.

New site workflow

An installed package can create, check and evaluate a TOML site file:

python -m pip install borethm==1.5.0
borethm-new-site mysite.toml
# edit mysite.toml
borethm-evaluate --site-file mysite.toml --check
borethm-evaluate --site-file mysite.toml --json mysite.json

Version 1.5.0 is available from PyPI. The new-site guide explains the inputs and sources. --from KEY starts from any built-in site. The public Python interface adds load_site and layered_geotherm; the two export functions accept an optional keyword-only site_file argument for the input path and checksum.

The opening result reading explains numerical validity, target scenarios, whole-programme constraints and equipment checks. It is also exported as reading in JSON. The output guide explains the status precedence and conditions.

The documentation website is built from the maintained Markdown pages. Source and evidence links use the release tag. Study reproduction commands write to a separate output folder.

Changes to existing behaviour

Required site selection

borethm-evaluate needs either --site or --site-file; its former Soultz default is removed.

TOML site template

borethm-new-site writes the packaged TOML template. The former examples/site_template.py is removed. Python callers can still construct a SiteProfile directly.

Explicit coupling override

evaluate(..., coupled=False) switches coupling off even if the site's flag is set. The default selection by calculation mode is unchanged. The API reference describes the affected couplings.

Verification

The baseline is v1.4.3 at 06d7344bb54db230cea19b4721fc171241a644e5.

Check Result
Local fast suite 586 passed in 33.56 seconds; 104 slow tests excluded
Public interface Two added names; the two export functions gain the optional site_file keyword; all other existing signatures and defaults unchanged
Built-in site inputs Every field unchanged; both geotherms compared exactly at 2,001 depths per site
Reference exports Every existing field unchanged on identical retained inputs; reading is the only added key
Saved evidence All 387 data, result, benchmark and golden files unchanged
Distributions Wheel and source distribution built; both passed twine check
Fresh wheel installation API, packaged site files, commands, study imports and provenance passed outside the checkout, without Matplotlib
Dependency consistency pip check passed
Documentation Link checker passed across 49 Markdown files; strict website build passed
Fast compatibility matrix 586 passed in each of 12 combinations: Python 3.11 to 3.14 on Linux, Windows and macOS
Cross-platform wheel installation Passed on Linux, Windows and macOS
Full physical suite 690 passed, including 104 slow tests, in 5,986.93 seconds (1 hour 39 minutes 47 seconds); no failures or skips

Two existing file-only tests moved from the slow suite; the remaining increase from the baseline's 404 fast tests consists of 180 added tests. The complete CI run passed at candidate 9db807bc08522c439045fca1d595addc710f4e18 on 23 October 2026. The slow job took 1 hour 42 minutes 2 seconds including installation and water-property table generation. Its pytest run emitted 14 runtime warnings from the boundary-value solver and heat-transfer correlation during the output and golden comparisons; every test passed. The downloaded JUnit report and job log are retained with the release review.

The export comparison passes identical adapted retained results to both exporters and fixes runtime provenance equally. The release's actual version, commit and source fingerprint identify the new code. This checks the export format; fresh physical reproduction is checked by the CI suite.

Local fast tests used Python 3.14.4, NumPy 2.5.3, SciPy 1.18.1, IAPWS 1.5.5, Matplotlib 3.11.2 and pytest 9.1.1 from the lock file. The independent wheel installation resolved NumPy 2.5.4, SciPy 1.18.1 and IAPWS 1.5.5 against the package's dependency requirements.

Cross-platform input checks

Site files preserve their supplied values exactly. Tests compare loaded files with their stored records, and compare freshly generated files with the Python definitions in the same environment. Formatting a fixed record reproduces the committed UTF-8 bytes with LF line endings.

Comparisons between stored snapshots and independently recomputed inputs use a shared relative round-off bound of 1e-12 for finite floating-point values. This applies equally to every site and input unit, with no absolute floor: a zero must remain zero. Structure, labels, booleans and integers remain exact. These checks concern input snapshots; existing physical regression tolerances are unchanged.

The published benchmark dataset is packaged from its fixed snapshot after verifying the published manifest checksum and every file. Packaging repeats no numerical fits. Separate tests compare current inputs and geotherms with that snapshot under the same numerical-input policy. Dataset 1.0's files and citation remain unchanged.

The fast compatibility matrix covers Python 3.11 to 3.14 on Linux, Windows and macOS. Isolated wheel installations are checked on all three operating systems. The full physical suite uses the locked Linux environment after the compatibility, installation and documentation jobs pass.

Publication and citation

The release checklist records the publication checks. The software's all-versions DOI and the author's ORCID iD are preserved. Benchmark dataset 1.0 keeps its separate citation.

The PyPI publishing workflow passed. A fresh environment outside the checkout installed borethm==1.5.0 from PyPI without Matplotlib and passed pip check and the installed-package checks. The create, edit, check and evaluate workflow completed and exported JSON with the correct package version and input-file checksum. The test edited the starter's name and retained its numerical Soultz inputs.

The documentation deployment passed after the v1.5.0 tag was allowed in the github-pages environment. The overview and new-site guide returned HTTP 200 with the expected content and source links to the release tag. Future release tags need permission in that environment before publication.

Zenodo archived this release as 10.5281/zenodo.23602484. The downloaded archive matched Zenodo's checksum. All 63 packaged files matched the approved checkout in the published wheel, source distribution and Zenodo archive; distribution hashes matched the PyPI records.