specmod 0.2.0__py3-none-any.whl
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/__init__.py +17 -0
- specmod/_vendor/__init__.py +21 -0
- specmod/_vendor/qiinv.py +243 -0
- specmod/acquire.py +358 -0
- specmod/api.py +480 -0
- specmod/cli.py +139 -0
- specmod/config/__init__.py +44 -0
- specmod/config/layers.py +168 -0
- specmod/config/provenance.py +77 -0
- specmod/config/sections.py +385 -0
- specmod/config/serialize.py +58 -0
- specmod/core/__init__.py +41 -0
- specmod/core/bandwidth.py +187 -0
- specmod/core/collection.py +549 -0
- specmod/core/noise.py +478 -0
- specmod/core/scalogram.py +234 -0
- specmod/core/spectrum.py +326 -0
- specmod/core/units.py +116 -0
- specmod/datasets.py +316 -0
- specmod/distance.py +190 -0
- specmod/exceptions.py +58 -0
- specmod/fitting/__init__.py +58 -0
- specmod/fitting/base.py +50 -0
- specmod/fitting/event.py +284 -0
- specmod/fitting/guess.py +170 -0
- specmod/fitting/spectrum.py +330 -0
- specmod/io.py +241 -0
- specmod/magnitude.py +312 -0
- specmod/picks/__init__.py +182 -0
- specmod/picks/base.py +250 -0
- specmod/picks/delimited.py +224 -0
- specmod/picks/events.py +157 -0
- specmod/picks/resolution.py +149 -0
- specmod/picks/snuffler.py +92 -0
- specmod/pipeline.py +280 -0
- specmod/plotting.py +203 -0
- specmod/preprocess.py +554 -0
- specmod/smoothing/__init__.py +50 -0
- specmod/smoothing/base.py +56 -0
- specmod/smoothing/konno_ohmachi.py +83 -0
- specmod/smoothing/log_bins.py +171 -0
- specmod/sources/__init__.py +65 -0
- specmod/sources/attenuation.py +110 -0
- specmod/sources/composite.py +135 -0
- specmod/sources/motion.py +40 -0
- specmod/sources/source.py +147 -0
- specmod/spreading.py +209 -0
- specmod/staged.py +523 -0
- specmod/tables.py +110 -0
- specmod/transforms/__init__.py +50 -0
- specmod/transforms/base.py +242 -0
- specmod/transforms/cwt.py +219 -0
- specmod/transforms/fft.py +157 -0
- specmod/transforms/multitaper.py +357 -0
- specmod/transforms/prieto.py +272 -0
- specmod/transforms/quadratic.py +221 -0
- specmod/utils.py +305 -0
- specmod-0.2.0.dist-info/METADATA +294 -0
- specmod-0.2.0.dist-info/RECORD +62 -0
- specmod-0.2.0.dist-info/WHEEL +4 -0
- specmod-0.2.0.dist-info/entry_points.txt +2 -0
- specmod-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: specmod
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A Python toolbox for processing and modelling seismic spectra
|
|
5
|
+
Project-URL: Homepage, https://github.com/sgjholt/SpecMod
|
|
6
|
+
Project-URL: Repository, https://github.com/sgjholt/SpecMod
|
|
7
|
+
Project-URL: Issues, https://github.com/sgjholt/SpecMod/issues
|
|
8
|
+
Author: James Holt
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: moment magnitude,seismology,source parameters,spectra
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: click>=8.1
|
|
21
|
+
Requires-Dist: lmfit>=1.3
|
|
22
|
+
Requires-Dist: matplotlib>=3.9
|
|
23
|
+
Requires-Dist: numpy>=2.0
|
|
24
|
+
Requires-Dist: obspy>=1.5
|
|
25
|
+
Requires-Dist: pandas>=2.2.2
|
|
26
|
+
Requires-Dist: pooch>=1.8
|
|
27
|
+
Requires-Dist: scipy>=1.15
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: h5py>=3.11; extra == 'dev'
|
|
30
|
+
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
31
|
+
Requires-Dist: mypy>=1.11; extra == 'dev'
|
|
32
|
+
Requires-Dist: pre-commit>=3.7; extra == 'dev'
|
|
33
|
+
Requires-Dist: pyarrow>=16.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
35
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
36
|
+
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
37
|
+
Provides-Extra: docs
|
|
38
|
+
Requires-Dist: myst-nb>=1.1; extra == 'docs'
|
|
39
|
+
Requires-Dist: myst-parser>=3.0; extra == 'docs'
|
|
40
|
+
Requires-Dist: pydata-sphinx-theme>=0.15; extra == 'docs'
|
|
41
|
+
Requires-Dist: sphinx>=7.3; extra == 'docs'
|
|
42
|
+
Provides-Extra: io
|
|
43
|
+
Requires-Dist: h5py>=3.11; extra == 'io'
|
|
44
|
+
Requires-Dist: pyarrow>=16.0; extra == 'io'
|
|
45
|
+
Provides-Extra: mcmc
|
|
46
|
+
Requires-Dist: emcee>=3.1; extra == 'mcmc'
|
|
47
|
+
Provides-Extra: multitaper
|
|
48
|
+
Requires-Dist: multitaper>=1.2; extra == 'multitaper'
|
|
49
|
+
Provides-Extra: tutorial
|
|
50
|
+
Requires-Dist: ipykernel>=7.0; extra == 'tutorial'
|
|
51
|
+
Requires-Dist: nbclient>=0.10; extra == 'tutorial'
|
|
52
|
+
Requires-Dist: nbformat>=5.10; extra == 'tutorial'
|
|
53
|
+
Provides-Extra: wavelet
|
|
54
|
+
Requires-Dist: pywavelets>=1.5; extra == 'wavelet'
|
|
55
|
+
Description-Content-Type: text/markdown
|
|
56
|
+
|
|
57
|
+
# SpecMod
|
|
58
|
+
|
|
59
|
+
A Python toolbox for processing and modelling seismic spectra, following the
|
|
60
|
+
method of Edwards *et al.* (2010).
|
|
61
|
+
|
|
62
|
+
SpecMod estimates source parameters — long-period spectral level Ω, corner
|
|
63
|
+
frequency `f_c`, and the attenuation operator `t*` — by fitting a Brune-type
|
|
64
|
+
source model to direct-phase spectra.
|
|
65
|
+
|
|
66
|
+
> **Status: alpha, and under active reconstruction.**
|
|
67
|
+
> The package is pre-1.0 and mid-refactor. The modern layers
|
|
68
|
+
> (`specmod.config`, `specmod.core`, `specmod.transforms`, `specmod.picks`,
|
|
69
|
+
> `specmod.fitting`) are built and tested; the older pipeline modules still
|
|
70
|
+
> carry pre-refactor behaviour and are being replaced stage by stage. Expect
|
|
71
|
+
> breaking changes at every `0.x` release until the API settles at 1.0 — they
|
|
72
|
+
> land in minor bumps by design, with no deprecation cycle. Pin an exact
|
|
73
|
+
> version for anything you intend to publish.
|
|
74
|
+
> [`docs/roadmap.md`](docs/roadmap.md) says which stages are done and what 1.0
|
|
75
|
+
> will mean; [`docs/REFACTOR_PLAN.md`](docs/REFACTOR_PLAN.md) is the working
|
|
76
|
+
> document behind it.
|
|
77
|
+
|
|
78
|
+
## Installation
|
|
79
|
+
|
|
80
|
+
Requires Python 3.11 or newer.
|
|
81
|
+
|
|
82
|
+
```sh
|
|
83
|
+
pip install -e ".[dev]"
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Optional extras:
|
|
87
|
+
|
|
88
|
+
| Extra | Adds |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `multitaper` | Prieto's `multitaper` package — jackknife confidence intervals, F-test for spectral lines |
|
|
91
|
+
| `wavelet` | PyWavelets, for wavelet families beyond the built-in Morlet |
|
|
92
|
+
| `mcmc` | `emcee`, for Markov-chain Monte Carlo parameter search |
|
|
93
|
+
|
|
94
|
+
No Fortran compiler is needed. Multitaper estimation is implemented natively on
|
|
95
|
+
SciPy's DPSS tapers, so the historical `mtspec` dependency — Fortran source with
|
|
96
|
+
no wheels and no release since 2016 — is no longer required.
|
|
97
|
+
|
|
98
|
+
## Estimating a spectrum
|
|
99
|
+
|
|
100
|
+
Every estimator returns a `Spectrum` that knows its own units:
|
|
101
|
+
|
|
102
|
+
```python
|
|
103
|
+
import numpy as np
|
|
104
|
+
from specmod.transforms import FFTEstimator, MultitaperEstimator
|
|
105
|
+
|
|
106
|
+
dt = 0.01
|
|
107
|
+
trace = np.random.default_rng(0).normal(0, 1e-6, 2000)
|
|
108
|
+
|
|
109
|
+
spectrum = MultitaperEstimator(time_bandwidth=3.0, n_tapers=5).estimate(
|
|
110
|
+
trace, dt, motion="velocity"
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
spectrum.unit # 'm/s*s' — a Fourier amplitude spectrum
|
|
114
|
+
spectrum.duration # 20.0 s, the physical record length
|
|
115
|
+
spectrum.energy() # recovers sum(x**2) * dt
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Conversions return new objects and are unit-aware:
|
|
119
|
+
|
|
120
|
+
```python
|
|
121
|
+
spectrum.to_motion("displacement") # divides by 2*pi*f
|
|
122
|
+
spectrum.to_kind("psd") # A**2 / (2T)
|
|
123
|
+
spectrum.band(0.5, 25.0)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The wavelet estimator additionally exposes the full time-frequency surface,
|
|
127
|
+
which is what to look at when a fit comes out wrong:
|
|
128
|
+
|
|
129
|
+
```python
|
|
130
|
+
from specmod.transforms import CWTEstimator
|
|
131
|
+
|
|
132
|
+
scalogram = CWTEstimator().scalogram(trace, dt)
|
|
133
|
+
scalogram.time_average() # an ordinary Spectrum, fits like any other
|
|
134
|
+
scalogram.coi_coverage() # how much of the window each frequency resolves
|
|
135
|
+
scalogram.qc() # concentration, coda balance, resolved bandwidth
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Which estimator to use, and what each one does to your data — including
|
|
139
|
+
measured position-dependence and the variance-normalisation convention `mtspec`
|
|
140
|
+
used — is set out in
|
|
141
|
+
[`docs/choosing-a-transform.md`](docs/choosing-a-transform.md), with a
|
|
142
|
+
worked walkthrough in
|
|
143
|
+
[`docs/notebooks/choosing-a-transform.ipynb`](docs/notebooks/choosing-a-transform.ipynb).
|
|
144
|
+
|
|
145
|
+
### Why the units are typed
|
|
146
|
+
|
|
147
|
+
A spectrum carries its ground-motion domain and amplitude convention as
|
|
148
|
+
attributes rather than in module-level globals. The alternative is keeping those
|
|
149
|
+
globals in sync by hand with however many times `.inte()` or `.diff()` has been
|
|
150
|
+
called, where getting it wrong returns a wrong seismic moment with no error
|
|
151
|
+
anywhere. Here it is a type error.
|
|
152
|
+
|
|
153
|
+
Amplitude normalisation is keyed off the physical record duration, never off the
|
|
154
|
+
length of the frequency axis, so zero-padding refines the frequency grid and
|
|
155
|
+
changes nothing else.
|
|
156
|
+
|
|
157
|
+
## Reading picks
|
|
158
|
+
|
|
159
|
+
Arrivals are attached to traces by `set_picks`, which detects the format from
|
|
160
|
+
the file rather than from its name:
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
import specmod.preprocess as pre
|
|
164
|
+
|
|
165
|
+
pre.set_picks(stream, "event.xml")
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Everything `obspy.read_events` parses is read through one delegate — QuakeML,
|
|
169
|
+
SEISAN Nordic, HypoDD, NonLinLoc, IMS/GSE bulletins — plus Snuffler marker
|
|
170
|
+
files, plus delimited tables whose columns you name. A format registered with
|
|
171
|
+
ObsPy's own plugin system is read here with no SpecMod-side registration at
|
|
172
|
+
all.
|
|
173
|
+
|
|
174
|
+
Most formats supply less than a full sensor identity — a bare station code is
|
|
175
|
+
common — so a pick matches a trace on the fields it *states*. A pick that fits
|
|
176
|
+
several sensors is an error rather than a broadcast: a station's surface and
|
|
177
|
+
borehole instruments differ only by location code and do not see the same
|
|
178
|
+
arrival.
|
|
179
|
+
|
|
180
|
+
Adding a format, the column mapping for a picker's CSV, and the policies for
|
|
181
|
+
duplicate picks and multi-event files are in
|
|
182
|
+
[`docs/pick-formats.md`](docs/pick-formats.md).
|
|
183
|
+
|
|
184
|
+
## Configuration
|
|
185
|
+
|
|
186
|
+
Settings are grouped by pipeline stage and resolved through five layers —
|
|
187
|
+
package defaults, a committed `specmod.toml`, a gitignored
|
|
188
|
+
`specmod.local.toml`, `SPECMOD_*` environment variables, then explicit
|
|
189
|
+
arguments:
|
|
190
|
+
|
|
191
|
+
```sh
|
|
192
|
+
specmod config show # resolved values, and which layer set each one
|
|
193
|
+
specmod config freeze # emit TOML to commit alongside a result
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Package defaults reproduce the behaviour that shipped before the refactor, so
|
|
197
|
+
upgrading does not silently move anyone's numbers. A study pins its own values
|
|
198
|
+
in a committed file — see [`studies/magna_2020_paper.toml`](studies/magna_2020_paper.toml),
|
|
199
|
+
which transcribes the workflow of the Magna paper below.
|
|
200
|
+
|
|
201
|
+
Every output records the configuration that produced it, a hash of it, and the
|
|
202
|
+
SpecMod version, so a locally-overridden run is still reproducible from its
|
|
203
|
+
outputs.
|
|
204
|
+
|
|
205
|
+
## Documentation
|
|
206
|
+
|
|
207
|
+
The full documentation — the pipeline with its equations, the estimator
|
|
208
|
+
comparison, pick formats, and an API reference — builds with Sphinx:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
uv pip install -e '.[docs]'
|
|
212
|
+
sphinx-build -b html docs docs/_build/html
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
`docs/REFACTOR_PLAN.md` is excluded from the built site on purpose: it is a
|
|
216
|
+
working document that records decisions and the measurements behind them, not
|
|
217
|
+
documentation for using the package.
|
|
218
|
+
|
|
219
|
+
## Development
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
uv venv && uv pip install -e ".[dev]"
|
|
223
|
+
pre-commit install # both hook types; not optional
|
|
224
|
+
pytest # test suite
|
|
225
|
+
pytest --without-optional-extras # as a default install and CI see it
|
|
226
|
+
ruff check src/ tests/ tools/ # lint
|
|
227
|
+
ruff format src/ tests/ tools/
|
|
228
|
+
mypy # strict on the rewritten modules
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
[`docs/development.md`](docs/development.md) is the full guide — the repository
|
|
232
|
+
mapped, every tool and CI check, the branch and commit conventions, and where
|
|
233
|
+
development stops and releasing begins. [`AGENTS.md`](AGENTS.md) is the short
|
|
234
|
+
version that binds AI coding sessions.
|
|
235
|
+
|
|
236
|
+
Run `--without-optional-extras` before pushing. A development environment
|
|
237
|
+
with `specmod[multitaper]` installed will pass tests that a default install
|
|
238
|
+
fails, and CI installs only `[dev]`.
|
|
239
|
+
|
|
240
|
+
The `mypy` override list in `pyproject.toml` is the migration backlog: modules
|
|
241
|
+
leave it as they are rewritten, and the target is an empty list.
|
|
242
|
+
|
|
243
|
+
Command-line entry points are built on [`click`](https://click.palletsprojects.com),
|
|
244
|
+
including internal tooling — one convention across the whole surface.
|
|
245
|
+
|
|
246
|
+
### Measured numbers in the docs
|
|
247
|
+
|
|
248
|
+
The documentation quotes a lot of measurements, and stale numbers are worse
|
|
249
|
+
than no numbers. Every table that came out of a measurement is generated:
|
|
250
|
+
|
|
251
|
+
```sh
|
|
252
|
+
python tools/measure_docs.py show # print the tables
|
|
253
|
+
python tools/measure_docs.py write # refresh the docs in place
|
|
254
|
+
python tools/measure_docs.py check # fail if any table is stale
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
`tests/test_docs_are_current.py` runs `check`, so a change that moves a
|
|
258
|
+
published number fails the suite rather than quietly leaving the prose wrong.
|
|
259
|
+
Measurements that read `tutorial/data/events/` are slower and opt-in via `--field`;
|
|
260
|
+
refresh those by hand after changing an estimator.
|
|
261
|
+
|
|
262
|
+
### Releasing
|
|
263
|
+
|
|
264
|
+
Commit messages follow [Conventional Commits](https://www.conventionalcommits.org),
|
|
265
|
+
which is what makes the changelog and the version automatic: `release-please`
|
|
266
|
+
opens a standing release pull request, and merging it creates the tag, the
|
|
267
|
+
GitHub Release, the PyPI upload and the Zenodo DOI. Nothing is released until
|
|
268
|
+
that merge. See [`docs/releasing.md`](docs/releasing.md), which also lists the
|
|
269
|
+
repository settings that have to be turned on once.
|
|
270
|
+
|
|
271
|
+
## References
|
|
272
|
+
|
|
273
|
+
Edwards, B., Allmann, B., Fäh, D., Clinton, J. (2010). Automatic computation of
|
|
274
|
+
moment magnitudes for small earthquakes and the scaling of local to moment
|
|
275
|
+
magnitude. *Geophysical Journal International* 183(1), 407–420.
|
|
276
|
+
<https://doi.org/10.1111/j.1365-246X.2010.04743.x>
|
|
277
|
+
|
|
278
|
+
Holt, J., Whidden, K.M., Koper, K.D., Pankow, K.L., Mayeda, K., Pechmann, J.C.,
|
|
279
|
+
Edwards, B., Gök, R., Walter, W.R. Towards robust and routine determination of
|
|
280
|
+
Mw for small earthquakes: application to the 2020 Mw 5.7 Magna, Utah, seismic
|
|
281
|
+
sequence. *Seismological Research Letters*.
|
|
282
|
+
|
|
283
|
+
Thomson, D.J. (1982). Spectrum estimation and harmonic analysis.
|
|
284
|
+
*Proceedings of the IEEE* 70(9), 1055–1096.
|
|
285
|
+
|
|
286
|
+
## Contributing
|
|
287
|
+
|
|
288
|
+
Issues and pull requests are welcome. Commits follow
|
|
289
|
+
[Conventional Commits](https://www.conventionalcommits.org), which drives the
|
|
290
|
+
changelog and version bumps.
|
|
291
|
+
|
|
292
|
+
## License
|
|
293
|
+
|
|
294
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
specmod/__init__.py,sha256=jUpGxd9YwXnWe_lV5bbcmFiIxmzJuR6a3kIV8bw6tTs,511
|
|
2
|
+
specmod/acquire.py,sha256=xUkm22b9nXTK1eYpy3grSWzTgHzPf2a1y-dEZFNbk7M,13313
|
|
3
|
+
specmod/api.py,sha256=JP3f_EMjfTEqUSCEDJ0YBZ6ss5lnLWinYM94Syvk53Q,17836
|
|
4
|
+
specmod/cli.py,sha256=m-Rr5ZSbvCmxOL-mqnnR7TEjPtzIdaiwKRQv0YG9YSU,4061
|
|
5
|
+
specmod/datasets.py,sha256=IrOK6x58AuvmucPMmhkduP-kSOdXqfYFiJWkXLg5p0E,11126
|
|
6
|
+
specmod/distance.py,sha256=YZEeATI9Gv3Nbbfa5OAy26sOcxYczEC8ANat0REEq-A,6859
|
|
7
|
+
specmod/exceptions.py,sha256=ygDyk_KOLxifUh_AfChrkM-vShydbEXk8-qxw1Kxnrg,2044
|
|
8
|
+
specmod/io.py,sha256=6tCgN6K23XdnX20BptkFq96asfnEKPoJ5OUoGJJyvVk,10210
|
|
9
|
+
specmod/magnitude.py,sha256=sP9h9etg3Xi9E9lzkgIe0-ZJKscSCbNK-AdrKY-doTM,11168
|
|
10
|
+
specmod/pipeline.py,sha256=BXZdUs126nKEQ19MywNZG8XHowRwKCb1NLt9H_-9QpA,11784
|
|
11
|
+
specmod/plotting.py,sha256=bCWdUrw2wboQORo9aDSHGd53zzFkgpfNuNUrGxqcyYg,7223
|
|
12
|
+
specmod/preprocess.py,sha256=vZDSlmz0rLAbwLJwxYYSEIFDIGYXidRVNJTaekBegGA,18813
|
|
13
|
+
specmod/spreading.py,sha256=SAKOb6nbPt0uiKn_4XQ4KWGdkLTXbgi45pAjluvcMyA,7458
|
|
14
|
+
specmod/staged.py,sha256=5DCOlmMTt38Gi3xSiZTqG0aN5Yle382G3s2CDvStd6M,21512
|
|
15
|
+
specmod/tables.py,sha256=ttduUrv3Nw9XC2B6OuvWa-fOKXVCilMVxbSfDVnPVR4,3999
|
|
16
|
+
specmod/utils.py,sha256=R6ybnJr59LXH5KnCQB5c-AJ3CJK3FSQOrRoWu8_qhQE,11829
|
|
17
|
+
specmod/_vendor/__init__.py,sha256=UV0Dc5ppqpen7PGL8M4Xgq8cC9TofgX8aDf5oWwR7F8,991
|
|
18
|
+
specmod/_vendor/qiinv.py,sha256=l3yntXtiY88jZ2u68ZgXQFtbe9mC-l_pI6MqOiFWhs4,10061
|
|
19
|
+
specmod/config/__init__.py,sha256=mdOZx-8bKOtNSZ76wlh4NUzf7J6Emgm-tMI69pAvEBg,1035
|
|
20
|
+
specmod/config/layers.py,sha256=IlYlMXTtTIOhEPgnBJlyUTn7srADokycaNdH6Ok7fCk,5640
|
|
21
|
+
specmod/config/provenance.py,sha256=4i7QowIVuydld87N3XAfHLAZ7ANe78533Fchrkn8F6s,2439
|
|
22
|
+
specmod/config/sections.py,sha256=rerpE4ygXB2RR1_IjgNsS31VumjcNPg1XOIhw-mYjmc,15866
|
|
23
|
+
specmod/config/serialize.py,sha256=jbmG2WM2LLkvCT_Y0zhfrn1nFXHDx7dL-mZtqRq57us,2067
|
|
24
|
+
specmod/core/__init__.py,sha256=a_ym0xWj_1DQYfHSM4NlerGhU9HTpZPpe8ZmaVcyzRE,882
|
|
25
|
+
specmod/core/bandwidth.py,sha256=OkpALARc3QNpFSw9Tlcqw0kye7FDizgX2C0-gKgvKj8,6293
|
|
26
|
+
specmod/core/collection.py,sha256=JxhpUyiHrySYYpGKkeRUZGC2l1eoA3NDGWy1FLvsg0Y,22004
|
|
27
|
+
specmod/core/noise.py,sha256=pzkgFNu_glG2xtLHPJhkvZNrhWeXPCxxXBg0NmtbNjE,18301
|
|
28
|
+
specmod/core/scalogram.py,sha256=DG4kuiVAVtJoUjnGrEy2jbHf1wNoScKTfNgu7xkgsYc,9499
|
|
29
|
+
specmod/core/spectrum.py,sha256=Xa-fXJW7IrJLoYHwN_-ydSiizNSgwpWf30xuTe5Vj14,13844
|
|
30
|
+
specmod/core/units.py,sha256=XXX0dV8k5loX2vs3Vi1b3xDXQKi9eeb0lLX3OHQtxBw,4857
|
|
31
|
+
specmod/fitting/__init__.py,sha256=QQ1ivYxN5S14r4e2ynYZls9AYNH1GQMLF4PVHfC_i0w,1946
|
|
32
|
+
specmod/fitting/base.py,sha256=4C_FeCPwyaA5x1a0WkqLHOf9MeUpPnBHhP9nVdTaFPw,1941
|
|
33
|
+
specmod/fitting/event.py,sha256=zQwK_5zWFo4NXLqeL_l1c6EdzbPiSO3wcSolfRN-_FY,11663
|
|
34
|
+
specmod/fitting/guess.py,sha256=gXEH435gpw8lPfD0r1aKeGgLOWQ3teoC4NAg4t2xnJc,6906
|
|
35
|
+
specmod/fitting/spectrum.py,sha256=0gSvzxIDdWstK-tPKeR-njiKlP62pw0Sfmcow__jiro,13507
|
|
36
|
+
specmod/picks/__init__.py,sha256=v9llkfvBm5MU4COf1H03oDxMLd1pKMhnR7qek-X3EYQ,6033
|
|
37
|
+
specmod/picks/base.py,sha256=xJq7thhuqJ3xgAyM4qQHXK5etrXoVcWsgsQrN8xVK1o,8452
|
|
38
|
+
specmod/picks/delimited.py,sha256=qEECceD91Z6fUPkSa8auUALoNmfXowtW775FdUsNwq0,7690
|
|
39
|
+
specmod/picks/events.py,sha256=9Mrw5p4AiVV_CTRaZFeAcKB80g_0IknovhHBSAqqeqQ,5542
|
|
40
|
+
specmod/picks/resolution.py,sha256=sYYDOs_qnR3SqKKPzQhvK6hOx8djW1KwtKoFJ0P44Hg,5098
|
|
41
|
+
specmod/picks/snuffler.py,sha256=bbTv-RI0OomGDA_XceCrnSrLaiLxfrfS_e8rjVefsQQ,2795
|
|
42
|
+
specmod/smoothing/__init__.py,sha256=NmUQIKd6z6ECa5hdTMLDS7V-09Yg6O9H6PtVy_oqfhg,1307
|
|
43
|
+
specmod/smoothing/base.py,sha256=GKPi1Fc_DDt8ZtzFLf7u3Uy4qau-OsZiy9Q3Y0FyFrU,1966
|
|
44
|
+
specmod/smoothing/konno_ohmachi.py,sha256=vmzLasw5U947VzYek_6lYjy1fk_I0i2cPoZy5zSddBU,2891
|
|
45
|
+
specmod/smoothing/log_bins.py,sha256=PqQ-43yr1jXreKgKc4si6o3xeTepR4FweZshAqEQDsc,6876
|
|
46
|
+
specmod/sources/__init__.py,sha256=E-g9swZtszfo-K6EY1PpnrKg7B-hcDqnIInhZW_C1Z4,2170
|
|
47
|
+
specmod/sources/attenuation.py,sha256=kpQLP0Br9n6o0pMoxPyjWdymPc7NQR9bF8NzGHzhKHY,2952
|
|
48
|
+
specmod/sources/composite.py,sha256=3dmpwBdBXj8HlKiCNkED03pkCb0YYpw_24HmxXW37hQ,5004
|
|
49
|
+
specmod/sources/motion.py,sha256=l2piORA6AodI2nBMxA8m7Qq_G1SH1BOVpAMGmmwZo0k,1380
|
|
50
|
+
specmod/sources/source.py,sha256=fzw-hLSpIsO2ioqPEM5wkaFrjNlDCd4Nk886fLn33OM,4606
|
|
51
|
+
specmod/transforms/__init__.py,sha256=VQ7qIzhoAJnMXiEO-fkNqBb4MG7VV6vYMY-T3ZJJ3gM,1419
|
|
52
|
+
specmod/transforms/base.py,sha256=RN8ympxUDyFvZYvZoEInju4uI-FdybsaOVhF6-gR0uY,8551
|
|
53
|
+
specmod/transforms/cwt.py,sha256=vaw0XI-ftDQRNEo7mUm4AgpWF22_64v3Ds21QXOV9XA,8905
|
|
54
|
+
specmod/transforms/fft.py,sha256=39ORckHm8Gbp23WQ3dF4fN8V1YGdr-GFuPQk31KD6QI,5219
|
|
55
|
+
specmod/transforms/multitaper.py,sha256=5-5Yed_eGSdyIG3xPLDDh2NxPSs3_VlC4_JT6aIMN8I,15980
|
|
56
|
+
specmod/transforms/prieto.py,sha256=r79Vz5UlZATorlVijhpBLoi7OwOriaifO50AbABwsjM,10757
|
|
57
|
+
specmod/transforms/quadratic.py,sha256=AY40WQRyphewoz3NdKtYj1BtpcFY3O6McMp-TS-RUgU,9500
|
|
58
|
+
specmod-0.2.0.dist-info/METADATA,sha256=J5DmsuFO51LsRUzNA5UNf6dp-OCE3hTpz7AlfjGaERE,11473
|
|
59
|
+
specmod-0.2.0.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
|
|
60
|
+
specmod-0.2.0.dist-info/entry_points.txt,sha256=BMsuH-YPrljyx9ocZsJQNaG4GPRJxNrbETSIwKGSvyQ,45
|
|
61
|
+
specmod-0.2.0.dist-info/licenses/LICENSE,sha256=Ny0RvbbbP7aV2yCme28RCYJmCljjA5JPINvl2QYyBQg,1067
|
|
62
|
+
specmod-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 James Holt
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|