Changelog
Release history for the deism package. This page is the canonical
changelog; update it when cutting a release.
Unreleased
New optional atmospheric path-length fluctuations for both room types and all DEISM methods.
DEISM.update_fluctuations(), called afterupdate_source_receiver()and beforerun_DEISM(), perturbs the lengthrof every image path byc * N(t * drift, sqrt(t) * volatility)witht = r / c; angles and wall attenuation are unchanged. The parameters areEnvironment.drift(dimensionless fractional delay bias),Environment.volatility(delay random-walk standard deviation in s^(1/2)) andEnvironment.fluctuationSeed(non-negative integer for reproducible draws,nullfor a fresh draw), with matching-drift,-volatilityand-fluctuationSeedcommand-line flags. Configs without the keys keep loading with the feature off, and the defaults leave results unchanged. Each call re-samples on the current images (the previous draw is removed first), so a sweep over volatilities can reuse one image set withrun_DEISM(if_clean_up=False); regenerating the images or the defaultrun_DEISM()cleanup discards the stored draw. Non-finite parameters,drift <= -1or a draw that would make a path length non-positive raiseValueError. Seeexamples/deism_volatility_example.py(shoebox) andexamples/deism_arg_volatility_example.py(convex).
2.2.1.15
Compact image storage is now the default for both room types (
convexCompactImages=1,shoeboxCompactImages=1): image generation emits frequency-independent path geometry and the frequency-dependent attenuation is rebuilt from it by a parallel numba kernel, so image generation no longer scales with the number of frequencies. The rebuild happens at a different point in each room type: convex rebuilds once inget_ref_paths_ARGand still providesimages["atten_all"], while shoebox rebuilds per solver batch and never holds the full(n_images, n_freqs)array. Set either flag to0for the previous materialized behavior.Behavior change for convex rooms with complex impedance: compact mode applies complex impedance exactly, whereas the legacy C++ attenuation truncated it to its real part. Results with complex impedance therefore shift by up to order 1e-2 relative to earlier releases — this is a correction, and the legacy value is reproducible with
convexCompactImages=0. With real impedance the two agree within the 1e-5 end-to-end bound asserted by the test suite, and measure 1e-7 to 1e-8 in practice (float32 epsilon) on rooms whose incidence cosines are all non-negative.For convex rooms the compact geometry is produced by the libroom C++ engine by default (
convexCompactEngine="cpp";"python"selects the reference producer). Measured on the bundled comparison example at reflection order 10: image preparation 2.7x faster, whole workflow 3.5x.For shoebox rooms,
images["atten_all_early"]andimages["atten_all_late"]are absent in compact mode; code reading them directly must setshoeboxCompactImages=0. The legacy Ray shoebox backend cannot consume compact storage and now raises with a pointer to the numba backend, which is the supported path.examples/deism_arg_singleparam_example.pyis a plain convex-room demo again; the compact-vs-legacy comparison moved to the newexamples/deism_arg_compact_compare.py.Python 3.10 is now the minimum supported version. Release wheels are built and tested for Python 3.10, 3.11, and 3.12 on Linux, Windows, and Apple Silicon macOS.
The shoebox reflection counter is now a regular pybind11 extension built by the platform-native toolchain and verified alongside
libroom_deism.CI now runs the critical suite on Python 3.12 across all three operating systems, on both pull requests and pushes to
main.Release artifacts are built and tested with cibuildwheel, aggregated into a single validated publish job, and rehearsed without upload for prereleases.
The four default YAML configurations under
examples/are bundled as package resources, so an installed wheel or sdist works outside a repository checkout while repository-local configurations retain precedence.The conda development environment (
deism_env.yml) moved to Python 3.12; the stale Python 3.9 lock filedeism_env_exact.ymlwas removed.