You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MultitaperEstimator.adaptive and TransformConfig.adaptive now default to False. Adaptive weighting collapses for off-centre transients, and a seismic arrival in a refined window is one.
modules move to src/specmod/ and are renamed to snake_case (Spectral -> spectral, PreProcess -> preprocess, ModelGuess -> model_guess).
Features
acquire: fetch an event from FDSN into the layout datasets reads (61c3ebc)
acquire: name the event catalogue separately from the waveform archive (be1a00a)
add centring, which removes the position bias completely (144db2f)
add floors job to test workflow for minimum dependency resolution (171e0bc)
add layered configuration with recorded provenance (ea7a429)
add Prieto's multitaper package as an optional backend (7ff6639)
add the pluggable transform layer and its normalisation contract (1ba5da0)
add the smoothing layer and document a multitaper transient bias (5ace1a9)
add variance normalisation and document what each transform does (683b353)
api: a stable import surface for downstream packages (72fc3a9)
core: add the typed collection layer that replaces SNP and Spectra (5b7510d)
core: make bandwidth selection a registry, and fix a wrap in the default (9166d86)
core: name both amplitude conventions instead of implying one (b2bef97)
core: validate that record geometry is self-consistent (2bda2a1)
datasets: load published datasets through pooch, pinned by hash (70735a8)
datasets: name the event layout once, and fix what the move missed (67a0aa6)
distance: make the source-to-site distance a registry, and read it (782760c)
fitting: default the model to what the configuration asks for (3a208e6)
io: HDF5 for arrays, Parquet for tables, and no pickle anywhere (b95a858)
magnitude: compute M0 and Mw, and register geometric spreading (4796605)
make the package installable and importable (30b4e89)
noise: port ROT_METHOD=1 and reduce utils.py to what has callers (3485019)
picks: a reader registry, detected by sniffing rather than by suffix (333b8b3)
picks: move to QuakeML, and stop acquire discarding the catalogue (041af07)
picks: plugin readers, and a CSV reader you configure yourself (d00bb5f)
picks: resolve arrivals to sensors instead of matching strings (e16ea23)
pipeline: waveforms to SpectrumSet with no legacy object in between (b9a30fd)
release: release-please, and PyPI publishing in the same workflow (47fe5e4)
restore the three capabilities that went with the legacy containers (abcdb96)
sources: connect config.model.source to something, at last (99da9a4)
spectral: convert the legacy container to a SpectrumSet (0b47b3d)
spectral: run the legacy pipeline on the rewritten estimators (bdec9ff)
staged: the two-stage event fit, with selection after quality control (0702ba7)
tools: generate the measured tables in the docs, and move CLIs to click (ad2ad8a)
transforms: add n_fft padding strategies, and document what padding does (50d3812)
transforms: add quadratic multitaper, vendored from Prieto (3a20470)
transforms: add the continuous wavelet transform and scalogram QC (47bb5a9)
typing: close the mypy backlog, and stub lmfit to do it (b208773)
typing: stub ObsPy, and annotate utils and preprocess against it (de640cc)
Bug Fixes
ci: keep the suite green without the multitaper extra (4123677)
core: derive the binned noise from the lifted noise, not beside it (b2adc0b)
core: derive the fold tolerance from bin spacing, not a fixed rtol (b5afbb7)
core: read the recorded resolution floor instead of re-deriving it (15b8efc)
correct commands in build and test workflows to use 'uv' instead of 'uvx' (c8fde4f)
correct dependency floors that were unsatisfiable (cb4e0d5)
datasets: correct the PNR origin time, and source its magnitude (d0c210b)
datasets: take the PNR hypocentre from the published catalogue (2977318)
default multitaper adaptive weighting off, and quantify why (628d36d)
deps: raise two floors that were never installable (41cd88d)
fitting: repair write_flatfile, and stop requiring a mutable container (80560fd)
fitting: stop freezing configuration at import, and stop printing (c151425)
make the golden reference portable, and fix the lint drift (b366f19)
make the pipeline reproducible by removing three discontinuities (982cc9f)
multitaper: correct units in Thomson's adaptive weighting (6410187)
noise: remove the fourth discontinuity, an "already touching" guard (60c9731)
pipeline: reject estimator keywords instead of discarding them (f22c523)
preprocess: repair the six defects the characterisation exposed (6a869b3)
quadratic: guard the damping term against a zero denominator (650a1a7)
quadratic: renormalise adaptive weights before the curvature fit (c03b348)
spectral: hand the legacy classes writable arrays (8e8dc31)
spectral: keep the unfolded amplitude convention Omega is defined in (2770150)
spectral: refuse bandwidth below what the noise window resolves (48590d1)
spectral: repair the domain-change path, and delete the dead band search (b06c14c)
stubs: drop a parameter lmfit 1.2 does not have, and catch the next one (b17d17a)
test: gate the checks the pipeline's discontinuities make machine-specific (a64bfac)
tests: make the default-install path checkable locally (9ddd3e4)
test: the noise divergence is hardware, not library versions (4265e9e)
tools: stop make_golden.py deleting the legacy record it cannot rebuild (878e849)
update build workflow to use 'uvx' for metadata check and remove unnecessary steps (52b026e)
update pip install command to remove --system flag (eb20f8c)
update ruff and mypy commands to use 'uv run' for execution (d33d2aa)
update ruff and mypy commands to use 'uvx' for execution (5a4ba42)
update test workflow to ensure virtual environment is created before dependencies installation (e70ee1a)
update test workflow to install mypy and pytest correctly (e5ae90a)
Performance
rotation: solve the noise lift instead of searching for it (c0f9cc8)
Code Refactoring
config: delete _config_legacy.py, read the typed Config instead (874b80a)
config: move the distance measure to its own [geometry] section (5e9a366)