specmod 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- specmod-0.2.3/.release-please-manifest.json +3 -0
- {specmod-0.2.2 → specmod-0.2.3}/CHANGELOG.md +17 -0
- {specmod-0.2.2 → specmod-0.2.3}/CITATION.cff +1 -1
- {specmod-0.2.2 → specmod-0.2.3}/PKG-INFO +4 -3
- {specmod-0.2.2 → specmod-0.2.3}/README.md +2 -2
- {specmod-0.2.2 → specmod-0.2.3}/docs/choosing-a-transform.md +2 -5
- {specmod-0.2.2 → specmod-0.2.3}/docs/conf.py +32 -6
- specmod-0.2.3/docs/contributing.md +31 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/development.md +9 -6
- {specmod-0.2.2 → specmod-0.2.3}/docs/documentation.md +23 -10
- specmod-0.2.3/docs/getting-started.md +41 -0
- specmod-0.2.3/docs/guides.md +55 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/index.md +23 -50
- {specmod-0.2.2 → specmod-0.2.3}/docs/processing.md +155 -28
- {specmod-0.2.2 → specmod-0.2.3}/docs/releasing-data.md +10 -9
- {specmod-0.2.2 → specmod-0.2.3}/docs/releasing.md +32 -16
- {specmod-0.2.2 → specmod-0.2.3}/docs/roadmap.md +36 -20
- specmod-0.2.3/docs/upgrading.md +151 -0
- {specmod-0.2.2 → specmod-0.2.3}/pyproject.toml +4 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/collection.py +10 -6
- specmod-0.2.2/.release-please-manifest.json +0 -3
- {specmod-0.2.2 → specmod-0.2.3}/.git-blame-ignore-revs +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.github/workflows/build.yml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.github/workflows/docs.yml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.github/workflows/release.yml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.github/workflows/test.yml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.gitignore +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.pre-commit-config.yaml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/.readthedocs.yaml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/AGENTS.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/CLAUDE.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/CONTRIBUTING.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/LICENSE +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/datasets/magna_2020.toml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/datasets/pnr_2019.toml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/REFACTOR_PLAN.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/api.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/notebooks/_build_notebook.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/notebooks/choosing-a-transform.ipynb +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/notes/api-audit.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/notes/window-position.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/docs/pick-formats.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/release-please-config.json +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/requirements.txt +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/_vendor/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/_vendor/qiinv.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/acquire.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/api.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/cli.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/config/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/config/layers.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/config/provenance.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/config/sections.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/config/serialize.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/bandwidth.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/noise.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/scalogram.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/spectrum.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/core/units.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/datasets.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/distance.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/exceptions.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/fitting/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/fitting/base.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/fitting/event.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/fitting/guess.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/fitting/spectrum.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/io.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/magnitude.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/base.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/delimited.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/events.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/resolution.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/picks/snuffler.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/pipeline.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/plotting.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/preprocess.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/smoothing/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/smoothing/base.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/smoothing/konno_ohmachi.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/smoothing/log_bins.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/sources/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/sources/attenuation.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/sources/composite.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/sources/motion.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/sources/source.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/spreading.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/staged.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/tables.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/base.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/cwt.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/fft.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/multitaper.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/prieto.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/transforms/quadratic.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/src/specmod/utils.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/README.md +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/lmfit/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/lmfit/model.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/lmfit/parameter.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/clients/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/clients/fdsn/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/event.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/inventory.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/stream.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/trace.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/utcdatetime.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/util/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/core/util/base.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/geodetics/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/signal/__init__.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/stubs/obspy/signal/konnoohmachismoothing.pyi +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/studies/magna_2020_paper.toml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/__init__.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/conftest.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/golden/motion_reference.json +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/golden/pipeline_reference.json +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/golden/window_reference.json +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_acquire.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_ambient_state.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_api_surface.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_collection.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_config.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_cwt.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_datasets.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_docs_are_current.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_end_to_end.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_fitting_defaults.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_golden_reference.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_import.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_io_and_plotting.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_legacy_fixes.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_magnitude.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_make_golden.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_pick_plugins.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_pick_readers.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_picks.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_pipeline.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_pipeline_smoke.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_preprocess.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_prieto.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_quadratic.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_release_config.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_smoothing.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_sources.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_spectral_wiring.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_staged.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_stubs.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_transforms.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_tutorial.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_typing_backlog.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_utils.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tests/test_versioning.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tools/check_built_version.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tools/check_floors.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tools/make_golden.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tools/measure_docs.py +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/SpecModTutorial.ipynb +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/picks/2019-08-26T07:30:47.000000Z.picks +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/picks/2019-08-26T07:30:47.000000Z.xml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/stations/inventory.xml +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L001..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L001..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L001..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L002..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L002..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L002..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L006..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L006..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L006..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L007..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L007..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L007..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L008..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L008..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L008..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L009..HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L009..HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.L009..HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.LD06..HH1_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.LD06..HH2_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/LV.LD06..HH3_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ01.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ01.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ01.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ02.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ03.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ03.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ03.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ04.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ04.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ04.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ05.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ05.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ05.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ06.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ06.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ06.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ07.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ07.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ07.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ09.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ09.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ09.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ10.00.HHE_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ10.00.HHN_2019-08-26T07:30:47.000000Z +0 -0
- {specmod-0.2.2 → specmod-0.2.3}/tutorial/data/events/2019-08-26T07:30:47.000000Z/waveforms/UR.AQ10.00.HHZ_2019-08-26T07:30:47.000000Z +0 -0
|
@@ -9,6 +9,23 @@ release could have this problem — every later one has a real predecessor tag
|
|
|
9
9
|
so leave subsequent headings as generated. release-please only prepends to this
|
|
10
10
|
file, so this edit survives. -->
|
|
11
11
|
|
|
12
|
+
## [0.2.3](https://github.com/sgjholt/SpecMod/compare/v0.2.2...v0.2.3) (2026-09-05)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* correct four documented equations and behaviours that the code contradicts ([821792b](https://github.com/sgjholt/SpecMod/commit/821792b66d418b9c0048d717975b5a3716c52c20))
|
|
18
|
+
* point the DOI badge at the concept DOI, not v0.2.0's ([11e7f7a](https://github.com/sgjholt/SpecMod/commit/11e7f7a056fc17c91b22c1dc9d834f19b8b6dbe3))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Documentation
|
|
22
|
+
|
|
23
|
+
* an upgrade guide, and a table of contents with a shape ([4f35388](https://github.com/sgjholt/SpecMod/commit/4f353885cfd0768edeac225d7db4672a20c9120e))
|
|
24
|
+
* derive the roadmap's version, and say when its entries move ([1917d43](https://github.com/sgjholt/SpecMod/commit/1917d432c6fdae1969dacb506bdac986152e40d8))
|
|
25
|
+
* document moment and magnitude, which the page said were absent ([026abec](https://github.com/sgjholt/SpecMod/commit/026abecb9c6ed33017b306e825a6f84db2b343e4))
|
|
26
|
+
* state what is true now, not what the page used to say ([b17339b](https://github.com/sgjholt/SpecMod/commit/b17339b6ad383afd936f7f2a972549b313e19906))
|
|
27
|
+
* the documentation 1.0 was waiting on is done ([9693334](https://github.com/sgjholt/SpecMod/commit/9693334434738ae000bf61f1908524ee983ced17))
|
|
28
|
+
|
|
12
29
|
## [0.2.2](https://github.com/sgjholt/SpecMod/compare/v0.2.1...v0.2.2) (2026-09-05)
|
|
13
30
|
|
|
14
31
|
|
|
@@ -12,7 +12,7 @@ identifiers:
|
|
|
12
12
|
# mints a version DOI per release; cite that one instead when reproducibility
|
|
13
13
|
# matters and you need the reader to land on the exact version you ran.
|
|
14
14
|
- type: doi
|
|
15
|
-
value: "10.5281/zenodo.
|
|
15
|
+
value: "10.5281/zenodo.22071454"
|
|
16
16
|
description: "Concept DOI — resolves to the latest release."
|
|
17
17
|
keywords:
|
|
18
18
|
- seismology
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: specmod
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: A Python toolbox for processing and modelling seismic spectra
|
|
5
5
|
Project-URL: Homepage, https://github.com/sgjholt/SpecMod
|
|
6
6
|
Project-URL: Repository, https://github.com/sgjholt/SpecMod
|
|
@@ -38,6 +38,7 @@ Provides-Extra: docs
|
|
|
38
38
|
Requires-Dist: myst-nb>=1.1; extra == 'docs'
|
|
39
39
|
Requires-Dist: myst-parser>=3.0; extra == 'docs'
|
|
40
40
|
Requires-Dist: pydata-sphinx-theme>=0.15; extra == 'docs'
|
|
41
|
+
Requires-Dist: sphinx-togglebutton>=0.3; extra == 'docs'
|
|
41
42
|
Requires-Dist: sphinx>=7.3; extra == 'docs'
|
|
42
43
|
Provides-Extra: io
|
|
43
44
|
Requires-Dist: h5py>=3.11; extra == 'io'
|
|
@@ -58,7 +59,7 @@ Description-Content-Type: text/markdown
|
|
|
58
59
|
|
|
59
60
|
[](https://pypi.org/project/specmod/)
|
|
60
61
|
[](https://specmod.readthedocs.io/en/stable/)
|
|
61
|
-
[](https://doi.org/10.5281/zenodo.22071454)
|
|
62
63
|
|
|
63
64
|
A Python toolbox for processing and modelling seismic spectra, following the
|
|
64
65
|
method of Edwards *et al.* (2010).
|
|
@@ -237,7 +238,7 @@ The full documentation — the pipeline with its equations, the estimator
|
|
|
237
238
|
comparison, pick formats, and an API reference — builds with Sphinx:
|
|
238
239
|
|
|
239
240
|
```bash
|
|
240
|
-
uv pip install -e '.[docs]'
|
|
241
|
+
uv pip install -e '.[docs,io,tutorial]'
|
|
241
242
|
sphinx-build -b html docs docs/_build/html
|
|
242
243
|
```
|
|
243
244
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://pypi.org/project/specmod/)
|
|
4
4
|
[](https://specmod.readthedocs.io/en/stable/)
|
|
5
|
-
[](https://doi.org/10.5281/zenodo.22071454)
|
|
6
6
|
|
|
7
7
|
A Python toolbox for processing and modelling seismic spectra, following the
|
|
8
8
|
method of Edwards *et al.* (2010).
|
|
@@ -181,7 +181,7 @@ The full documentation — the pipeline with its equations, the estimator
|
|
|
181
181
|
comparison, pick formats, and an API reference — builds with Sphinx:
|
|
182
182
|
|
|
183
183
|
```bash
|
|
184
|
-
uv pip install -e '.[docs]'
|
|
184
|
+
uv pip install -e '.[docs,io,tutorial]'
|
|
185
185
|
sphinx-build -b html docs docs/_build/html
|
|
186
186
|
```
|
|
187
187
|
|
|
@@ -253,11 +253,8 @@ or **0.03 magnitude units**. Against the 0.13 m.u. scatter quoted for spectral
|
|
|
253
253
|
`Mw` that is small, but it is systematic rather than random, so it does not
|
|
254
254
|
average away across stations at similar distance.
|
|
255
255
|
|
|
256
|
-
>
|
|
257
|
-
>
|
|
258
|
-
> gone. The remaining figures come from a differently-constructed sweep than
|
|
259
|
-
> the original and are not directly comparable to it; this table is the one
|
|
260
|
-
> `tools/measure_docs.py` reproduces.
|
|
256
|
+
> Every figure in this table is regenerated by `tools/measure_docs.py`, and
|
|
257
|
+
> `tests/test_docs_are_current.py` fails if the page and the code disagree.
|
|
261
258
|
|
|
262
259
|
### It costs you a diagnostic
|
|
263
260
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Build with::
|
|
4
4
|
|
|
5
|
-
uv pip install -e '.[docs]'
|
|
5
|
+
uv pip install -e '.[docs,io,tutorial]'
|
|
6
6
|
sphinx-build -b html docs docs/_build/html
|
|
7
7
|
|
|
8
8
|
``-W`` is deliberately **not** used. Intersphinx resolves seven inventories
|
|
@@ -41,6 +41,11 @@ extensions = [
|
|
|
41
41
|
"sphinx.ext.napoleon",
|
|
42
42
|
"sphinx.ext.intersphinx",
|
|
43
43
|
"sphinx.ext.viewcode",
|
|
44
|
+
#: Makes `:class: dropdown` collapse an admonition. The alpha warning on the
|
|
45
|
+
#: landing page is the reason: it has to be read once and then stops earning
|
|
46
|
+
#: the screen it occupies, and a caveat nobody scrolls past is worse than
|
|
47
|
+
#: one folded behind its own headline.
|
|
48
|
+
"sphinx_togglebutton",
|
|
44
49
|
]
|
|
45
50
|
#: `sphinx_autodoc_typehints` is deliberately not used. `autodoc_typehints`
|
|
46
51
|
#: below is built into `sphinx.ext.autodoc` and does the same job here, and the
|
|
@@ -88,11 +93,11 @@ if _TUTORIAL_SRC.is_dir():
|
|
|
88
93
|
shutil.rmtree(_TUTORIAL_DST, ignore_errors=True)
|
|
89
94
|
shutil.copytree(_TUTORIAL_SRC, _TUTORIAL_DST)
|
|
90
95
|
|
|
91
|
-
#: `force`, not `auto`. `
|
|
92
|
-
#: outputs,
|
|
93
|
-
#:
|
|
94
|
-
#:
|
|
95
|
-
#:
|
|
96
|
+
#: `force`, not `auto`. The `nbstripout` hook means the notebook arrives with no
|
|
97
|
+
#: outputs, so `auto` would execute it today and quietly stop the moment anyone
|
|
98
|
+
#: committed a notebook with outputs saved — publishing whatever was last run by
|
|
99
|
+
#: hand. Forcing it means the page can only ever show output the code produced
|
|
100
|
+
#: against the code being documented, whatever is in the file.
|
|
96
101
|
nb_execution_mode = "force"
|
|
97
102
|
#: Matches `tests/test_tutorial.py`. The whole notebook runs in ~40s; the
|
|
98
103
|
#: default 30s is per cell, and the two-stage fit is the one that would trip it.
|
|
@@ -126,6 +131,13 @@ myst_enable_extensions = [
|
|
|
126
131
|
#: Heading anchors down to h3, so `docs/*.md` can link to each other's sections.
|
|
127
132
|
myst_heading_anchors = 3
|
|
128
133
|
|
|
134
|
+
#: `{{ release }}` in a page resolves to the version this site was built from.
|
|
135
|
+
#: The roadmap used to state it in prose, which meant it was wrong from the
|
|
136
|
+
#: moment of the next release — it said v0.2.0 through two that followed. A
|
|
137
|
+
#: version is derivable, so deriving it removes the only part of that page that
|
|
138
|
+
#: went stale on a timetable rather than on a decision.
|
|
139
|
+
myst_substitutions = {"release": release}
|
|
140
|
+
|
|
129
141
|
# ------------------------------------------------------------------ autodoc
|
|
130
142
|
|
|
131
143
|
autodoc_typehints = "description"
|
|
@@ -160,5 +172,19 @@ html_theme_options = {
|
|
|
160
172
|
"github_url": "https://github.com/sgjholt/SpecMod",
|
|
161
173
|
"show_prev_next": True,
|
|
162
174
|
"navigation_with_keys": False,
|
|
175
|
+
#: This theme puts *top-level* toctree entries in the header and gives the
|
|
176
|
+
#: sidebar the current section's children. A flat toctree therefore
|
|
177
|
+
#: produces a header of ten items and an empty sidebar, with `:caption:`
|
|
178
|
+
#: nowhere to render — which is what this site had. The four section pages
|
|
179
|
+
#: are what give the sidebar something to nest.
|
|
180
|
+
#:
|
|
181
|
+
#: `show_nav_level: 1` expands each section's own entries rather than
|
|
182
|
+
#: leaving them behind a disclosure triangle, so a reader can see a
|
|
183
|
+
#: section's contents without a click.
|
|
184
|
+
"show_nav_level": 1,
|
|
185
|
+
#: Deep enough for a section, its pages, and their headings — which is what
|
|
186
|
+
#: makes a long page like `processing` navigable from the sidebar rather
|
|
187
|
+
#: than by scrolling.
|
|
188
|
+
"navigation_depth": 3,
|
|
163
189
|
}
|
|
164
190
|
html_static_path: list[str] = []
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Working on SpecMod
|
|
2
|
+
|
|
3
|
+
Where the project is going, how to work on it, and how a merged commit becomes
|
|
4
|
+
a release.
|
|
5
|
+
|
|
6
|
+
[Roadmap](roadmap.md)
|
|
7
|
+
: What has shipped and in which version, what is being worked on, and what 1.0
|
|
8
|
+
will mean. Milestones, not dates.
|
|
9
|
+
|
|
10
|
+
[Developer guide](development.md)
|
|
11
|
+
: Quick start, the repository mapped, the daily loop, every tool and check, and
|
|
12
|
+
where development stops and releasing begins. Includes working with coding
|
|
13
|
+
agents.
|
|
14
|
+
|
|
15
|
+
[Documentation workflow](documentation.md)
|
|
16
|
+
: Building this site locally, previewing a pull request's build, how the
|
|
17
|
+
tutorial is executed into it, and how to add a page.
|
|
18
|
+
|
|
19
|
+
[Releasing the software](releasing.md)
|
|
20
|
+
: How a merged commit becomes a tag, a PyPI release and a DOI — and the
|
|
21
|
+
one-time repository settings none of it works without.
|
|
22
|
+
|
|
23
|
+
```{toctree}
|
|
24
|
+
:maxdepth: 2
|
|
25
|
+
:hidden:
|
|
26
|
+
|
|
27
|
+
roadmap
|
|
28
|
+
development
|
|
29
|
+
documentation
|
|
30
|
+
releasing
|
|
31
|
+
```
|
|
@@ -246,12 +246,12 @@ bounded rather than explained, and says so in as many words.
|
|
|
246
246
|
|
|
247
247
|
## What CI runs
|
|
248
248
|
|
|
249
|
-
|
|
250
|
-
request.
|
|
249
|
+
Six jobs in `test.yml`, plus three more workflows. All of them run on every
|
|
250
|
+
pull request except `release.yml`, which fires only on a push to `main`.
|
|
251
251
|
|
|
252
252
|
| Job | Workflow | Does |
|
|
253
253
|
|---|---|---|
|
|
254
|
-
| `lint` | `test.yml` | `ruff check
|
|
254
|
+
| `lint` | `test.yml` | `ruff check` and `ruff format --check` over `src/ tests/ tools/` |
|
|
255
255
|
| `typecheck` | `test.yml` | `mypy`, strict, over the whole package |
|
|
256
256
|
| `test` | `test.yml` | pytest on 3.11/3.12/3.13 × ubuntu/macOS, coverage to Codecov from one cell |
|
|
257
257
|
| `floors` | `test.yml` | installs the *declared minimum* versions and runs the suite |
|
|
@@ -403,9 +403,12 @@ has happened here:
|
|
|
403
403
|
not there. Three commits went out with session trailers before this was
|
|
404
404
|
noticed; the config now installs both hook types from one command, and the
|
|
405
405
|
first thing `AGENTS.md` says is to run it.
|
|
406
|
-
- **An agent's token
|
|
407
|
-
|
|
408
|
-
|
|
406
|
+
- **An agent's token may not be able to push `.github/workflows/`.** The
|
|
407
|
+
permission is granted here now, and the `ci/` mirror that used to work around
|
|
408
|
+
it is gone — keeping two copies of every workflow in step cost more than the
|
|
409
|
+
problem it solved. If the permission is ever withdrawn the push is rejected
|
|
410
|
+
loudly, naming `workflows`; the answer is to ask for it back, not to rebuild
|
|
411
|
+
the mirror.
|
|
409
412
|
- **A development container often lacks the optional extras**, so an agent's
|
|
410
413
|
green run can be greener than CI's. `--without-optional-extras` is the check.
|
|
411
414
|
- **A harness may append its own commit trailers.** The repository's rules take
|
|
@@ -32,7 +32,7 @@ those are separate clocks.
|
|
|
32
32
|
## Building it locally
|
|
33
33
|
|
|
34
34
|
```sh
|
|
35
|
-
uv pip install -e '.[docs]'
|
|
35
|
+
uv pip install -e '.[docs,io,tutorial]'
|
|
36
36
|
sphinx-build -b html docs docs/_build/html
|
|
37
37
|
python -m http.server -d docs/_build/html 8000 # then open localhost:8000
|
|
38
38
|
```
|
|
@@ -136,9 +136,11 @@ Two things in it are load-bearing and easy to lose:
|
|
|
136
136
|
clones shallow to save time, and `hatch-vcs` derives the version from
|
|
137
137
|
`git describe`. Without those two lines every build — including a tagged one
|
|
138
138
|
— reports the fallback `0.0.0` in the sidebar.
|
|
139
|
-
- **`extra_requirements: [docs, io]`.**
|
|
140
|
-
|
|
141
|
-
|
|
139
|
+
- **`extra_requirements: [docs, io, tutorial]`.** `io` because autodoc imports
|
|
140
|
+
`specmod.io`, which imports h5py and pyarrow — and because the tutorial saves
|
|
141
|
+
an HDF5 file while executing. `tutorial` for the Jupyter kernel that executes
|
|
142
|
+
it. The CI `docs` job installs the same three for the same reasons; keep them
|
|
143
|
+
in step or one of the two builds fails on a missing kernel.
|
|
142
144
|
|
|
143
145
|
## Versions, and what to link to
|
|
144
146
|
|
|
@@ -168,11 +170,19 @@ page depends on is documentation whatever its folder is called.
|
|
|
168
170
|
### Adding a page
|
|
169
171
|
|
|
170
172
|
1. Write `docs/<name>.md` in MyST Markdown.
|
|
171
|
-
2. Add it to the `toctree`
|
|
172
|
-
|
|
173
|
+
2. **Add it to the `toctree` of the section it belongs to** — not to
|
|
174
|
+
`index.md`. The site has four section pages, each owning its own toctree:
|
|
175
|
+
`getting-started.md`, `guides.md`, `api.md` and `contributing.md`. Add a
|
|
176
|
+
description to the list on that page too, since the sidebar shows titles
|
|
177
|
+
only.
|
|
173
178
|
3. Build. A page in no toctree builds but warns, and is reachable only by a
|
|
174
179
|
direct link.
|
|
175
180
|
|
|
181
|
+
`index.md`'s toctree holds only those four. That is what gives the sidebar its
|
|
182
|
+
nesting: this theme puts top-level toctree entries in the header and gives the
|
|
183
|
+
sidebar the current section's children, so a page added at the top level lands
|
|
184
|
+
in the header and flattens the navigation for everything else.
|
|
185
|
+
|
|
176
186
|
If a page is a supporting note rather than a top-level one, put it in a hidden
|
|
177
187
|
toctree on the page that cites it — that is how `notes/window-position.md` is
|
|
178
188
|
attached to `choosing-a-transform.md`:
|
|
@@ -226,7 +236,7 @@ the first build:
|
|
|
226
236
|
|
|
227
237
|
Type hints come from the annotations via `autodoc_typehints = "description"`.
|
|
228
238
|
`sphinx-autodoc-typehints` is deliberately **not** used: measured, it produced
|
|
229
|
-
the same
|
|
239
|
+
the same number of documented objects while calling an API Sphinx 10 removes.
|
|
230
240
|
|
|
231
241
|
### The tutorial notebook
|
|
232
242
|
|
|
@@ -258,9 +268,12 @@ committed output is never what a reader sees — only a stale diff.
|
|
|
258
268
|
The kernel comes from the `tutorial` extra. Both `.readthedocs.yaml` and
|
|
259
269
|
`.github/workflows/docs.yml` install `[docs,io,tutorial]`; keep them in step or
|
|
260
270
|
one of the two builds fails on a missing kernel. This does mean the notebook
|
|
261
|
-
executes twice per pull request — once here and once in the `notebook` CI job,
|
|
262
|
-
which
|
|
263
|
-
40 seconds, paid twice,
|
|
271
|
+
executes twice per pull request — once here, and once in the `notebook` CI job,
|
|
272
|
+
which runs the single `-m notebook` test that executes it in a `tmp_path` copy.
|
|
273
|
+
Roughly 40 seconds, paid twice, to catch a broken notebook either as a failed
|
|
274
|
+
build or as a failed test. The cheaper checks around it — that every name the
|
|
275
|
+
notebook imports resolves, and that deleted modules stay unmentioned even in
|
|
276
|
+
prose — are unmarked, so they run in the `test` matrix job instead.
|
|
264
277
|
|
|
265
278
|
### Numbers in prose
|
|
266
279
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Getting started
|
|
2
|
+
|
|
3
|
+
Install it, run one event end to end, and find out what moved if you have code
|
|
4
|
+
written against `0.1`.
|
|
5
|
+
|
|
6
|
+
```sh
|
|
7
|
+
pip install specmod
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Python 3.11 or newer. Saving and loading spectra needs the `io` extra —
|
|
11
|
+
`pip install "specmod[io]"` — without which SpecMod computes and plots normally
|
|
12
|
+
but cannot write a result. The other extras are listed in the
|
|
13
|
+
[README](https://github.com/sgjholt/SpecMod#installation).
|
|
14
|
+
|
|
15
|
+
While this is `0.x`, pin an exact version in anything you intend to publish.
|
|
16
|
+
The [roadmap](roadmap.md) says what has shipped and what 1.0 will mean.
|
|
17
|
+
|
|
18
|
+
[Tutorial](tutorial/SpecModTutorial.ipynb)
|
|
19
|
+
: One event from waveforms and picks to source parameters. Every figure and
|
|
20
|
+
number on the page is produced by executing the notebook when this site is
|
|
21
|
+
built, so it cannot describe an API that no longer exists. **Start here.**
|
|
22
|
+
|
|
23
|
+
[Upgrading from 0.1](upgrading.md)
|
|
24
|
+
: For code written against the pre-refactor `0.1.1` on `master`. Modules moved,
|
|
25
|
+
were renamed to snake_case, and several were deleted, so old code fails at
|
|
26
|
+
its imports rather than running and quietly giving different numbers.
|
|
27
|
+
|
|
28
|
+
## Then
|
|
29
|
+
|
|
30
|
+
[How a spectrum is processed](processing.md) is the reference for what each
|
|
31
|
+
stage does and the conventions it uses — the amplitude convention, the Parseval
|
|
32
|
+
contract, and the moment and magnitude equations. It is the page to read once
|
|
33
|
+
the tutorial has run.
|
|
34
|
+
|
|
35
|
+
```{toctree}
|
|
36
|
+
:maxdepth: 2
|
|
37
|
+
:hidden:
|
|
38
|
+
|
|
39
|
+
tutorial/SpecModTutorial
|
|
40
|
+
upgrading
|
|
41
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Guides
|
|
2
|
+
|
|
3
|
+
What each stage does, why it is done that way, and what the choices cost.
|
|
4
|
+
|
|
5
|
+
## The pipeline, and the conventions
|
|
6
|
+
|
|
7
|
+
[How a spectrum is processed](processing.md)
|
|
8
|
+
: Every step from a raw waveform to a moment magnitude, with the equation it
|
|
9
|
+
applies and a pointer to the code that applies it.
|
|
10
|
+
|
|
11
|
+
This is also where the conventions are stated, deliberately in the sections
|
|
12
|
+
that apply them rather than on a page of their own:
|
|
13
|
+
|
|
14
|
+
[Amplitude convention](processing.md#4-amplitude-convention)
|
|
15
|
+
: `FAS` is the folded $2\lvert X\rvert$; `MAGNITUDE` is the unfolded
|
|
16
|
+
$\lvert X\rvert$, **and that is the one $\Omega$ is defined in**. Reading a
|
|
17
|
+
folded plateau as $\Omega$ puts $M_0$ out by two — 0.2 magnitude units.
|
|
18
|
+
|
|
19
|
+
[The Parseval contract](processing.md#the-parseval-contract)
|
|
20
|
+
: The one energy check every estimator is held to, which is what lets
|
|
21
|
+
multitaper, Welch, FFT and the CWT be interchangeable rather than merely
|
|
22
|
+
similar.
|
|
23
|
+
|
|
24
|
+
[Moment and magnitude](processing.md#9-moment-and-magnitude)
|
|
25
|
+
: The $M_0$ and $M_w$ equations, the medium constants and where they come
|
|
26
|
+
from, and the two distances that are in different units on purpose.
|
|
27
|
+
|
|
28
|
+
## Choices that change the answer
|
|
29
|
+
|
|
30
|
+
[Choosing a transform](choosing-a-transform.md)
|
|
31
|
+
: What each estimator does to your data, measured. On real windows the plateau
|
|
32
|
+
moves by 7–15% between estimators — about 0.03 magnitude units — and window
|
|
33
|
+
position alone reaches 0.08. Small against the 0.13 m.u. scatter quoted for
|
|
34
|
+
spectral $M_w$, but systematic rather than random, so it does not average
|
|
35
|
+
away across stations at similar distance.
|
|
36
|
+
|
|
37
|
+
[Reading picks](pick-formats.md)
|
|
38
|
+
: What arrival formats are read out of the box, how to add one, and how a pick
|
|
39
|
+
is matched to a trace.
|
|
40
|
+
|
|
41
|
+
## Working with data
|
|
42
|
+
|
|
43
|
+
[Publishing a dataset](releasing-data.md)
|
|
44
|
+
: Taking an event from an FDSN archive to a hash-pinned entry in the registry,
|
|
45
|
+
so a result can be reproduced from the same bytes.
|
|
46
|
+
|
|
47
|
+
```{toctree}
|
|
48
|
+
:maxdepth: 2
|
|
49
|
+
:hidden:
|
|
50
|
+
|
|
51
|
+
processing
|
|
52
|
+
choosing-a-transform
|
|
53
|
+
pick-formats
|
|
54
|
+
releasing-data
|
|
55
|
+
```
|
|
@@ -4,9 +4,11 @@ A Python toolbox for processing and modelling seismic spectra: cut a window,
|
|
|
4
4
|
estimate its spectrum, decide which part of it is above the noise, and fit a
|
|
5
5
|
source model to that band.
|
|
6
6
|
|
|
7
|
-
:::{
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
:::{admonition} Alpha, pre-1.0 — pin an exact version for anything you publish
|
|
8
|
+
:class: warning, dropdown
|
|
9
|
+
|
|
10
|
+
SpecMod is being rebuilt in the open, so treat everything here as provisional
|
|
11
|
+
until the API settles at 1.0:
|
|
10
12
|
|
|
11
13
|
- **Names and signatures move between `0.x` releases**, without a deprecation
|
|
12
14
|
cycle. Breaking changes land in minor bumps by design — that is what `0.x`
|
|
@@ -43,47 +45,24 @@ fits.fit_spectra()
|
|
|
43
45
|
print(fits.table[["id", "llpsp", "fc", "ts"]])
|
|
44
46
|
```
|
|
45
47
|
|
|
46
|
-
## Where to
|
|
47
|
-
|
|
48
|
-
[Tutorial](tutorial/SpecModTutorial.ipynb)
|
|
49
|
-
: One event end to end — waveforms and picks in, source parameters out. Every
|
|
50
|
-
figure and number on the page is produced by running the notebook at build
|
|
51
|
-
time, so it cannot describe an API that no longer exists.
|
|
52
|
-
|
|
53
|
-
[Processing](processing.md)
|
|
54
|
-
: Every step of the pipeline with the equation it implements — what a window
|
|
55
|
-
is, how the noise is compared against it, and what the bandwidth selector
|
|
56
|
-
does.
|
|
57
|
-
|
|
58
|
-
[Choosing a transform](choosing-a-transform.md)
|
|
59
|
-
: What each estimator does to your data, measured. The choices here change
|
|
60
|
-
recovered amplitude by factors of three on real windows, which is about 0.3
|
|
61
|
-
magnitude units.
|
|
62
|
-
|
|
63
|
-
[Reading picks](pick-formats.md)
|
|
64
|
-
: What arrival formats are read out of the box, how to add one, and how a pick
|
|
65
|
-
is matched to a trace.
|
|
66
|
-
|
|
67
|
-
[Publishing a dataset](releasing-data.md)
|
|
68
|
-
: Taking an event from an FDSN archive to a hash-pinned entry in the registry.
|
|
69
|
-
|
|
70
|
-
[Releasing the software](releasing.md)
|
|
71
|
-
: How a merged commit becomes a tag, a PyPI release and a DOI, and the six
|
|
72
|
-
settings that have to be turned on once.
|
|
48
|
+
## Where to go
|
|
73
49
|
|
|
74
|
-
[
|
|
75
|
-
:
|
|
76
|
-
|
|
50
|
+
[Getting started](getting-started.md)
|
|
51
|
+
: Install it, run one event end to end with the tutorial, and — if you have
|
|
52
|
+
code written against `0.1` — find out what moved.
|
|
77
53
|
|
|
78
|
-
|
|
54
|
+
[Guides](guides.md)
|
|
55
|
+
: What each stage does and why, and where the conventions are stated: the
|
|
56
|
+
amplitude convention, the Parseval contract, and the moment and magnitude
|
|
57
|
+
equations.
|
|
79
58
|
|
|
80
|
-
[
|
|
81
|
-
:
|
|
82
|
-
|
|
59
|
+
[API reference](api.md)
|
|
60
|
+
: Every public object. `specmod.api` is the narrower, more stable subset to
|
|
61
|
+
import from if you are building on this.
|
|
83
62
|
|
|
84
|
-
[
|
|
85
|
-
:
|
|
86
|
-
|
|
63
|
+
[Working on SpecMod](contributing.md)
|
|
64
|
+
: The roadmap, the developer guide, how this site is built, and how a merged
|
|
65
|
+
commit becomes a release.
|
|
87
66
|
|
|
88
67
|
## Two things worth knowing early
|
|
89
68
|
|
|
@@ -99,17 +78,11 @@ model carries a motion factor, so the plateau it reports is the displacement
|
|
|
99
78
|
one either way.
|
|
100
79
|
|
|
101
80
|
```{toctree}
|
|
102
|
-
:maxdepth:
|
|
81
|
+
:maxdepth: 3
|
|
103
82
|
:hidden:
|
|
104
83
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
choosing-a-transform
|
|
108
|
-
pick-formats
|
|
109
|
-
development
|
|
110
|
-
documentation
|
|
111
|
-
releasing-data
|
|
112
|
-
releasing
|
|
113
|
-
roadmap
|
|
84
|
+
getting-started
|
|
85
|
+
guides
|
|
114
86
|
api
|
|
87
|
+
contributing
|
|
115
88
|
```
|