spatial-vtk 0.1.0__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.
- spatial_vtk-0.1.0/CITATION.cff +161 -0
- spatial_vtk-0.1.0/DATA_PROVENANCE.md +86 -0
- spatial_vtk-0.1.0/LICENSE +28 -0
- spatial_vtk-0.1.0/MANIFEST.in +32 -0
- spatial_vtk-0.1.0/PKG-INFO +107 -0
- spatial_vtk-0.1.0/README.md +47 -0
- spatial_vtk-0.1.0/RELEASE_CHECKLIST.md +135 -0
- spatial_vtk-0.1.0/ValidationToolkit_Workflow.png +0 -0
- spatial_vtk-0.1.0/pyproject.toml +99 -0
- spatial_vtk-0.1.0/setup.cfg +4 -0
- spatial_vtk-0.1.0/src/spatial_vtk/__init__.py +7 -0
- spatial_vtk-0.1.0/src/spatial_vtk/cli/__init__.py +1056 -0
- spatial_vtk-0.1.0/src/spatial_vtk/cli/__main__.py +9 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/__init__.py +136 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/bounds.py +105 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/default_outputs.yaml +221 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/labels.py +607 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/metric_catalog.py +159 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/metrics.py +365 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/naming.py +49 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/notebook.py +243 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/outputs.py +238 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/paths.py +154 -0
- spatial_vtk-0.1.0/src/spatial_vtk/config/runtime.py +608 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/__init__.py +185 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/artifacts.py +364 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/catalogs.py +156 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/compute_manifest.py +216 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/inventory.py +136 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/kml.py +101 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/layouts.py +67 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/master_lists.py +326 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/metadata.py +466 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/metric_inputs.py +277 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/model_aliases.py +278 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/output_paths.py +63 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/plans.py +329 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/preprocessing.py +354 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/synthetic_formats.py +882 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/tables.py +553 -0
- spatial_vtk-0.1.0/src/spatial_vtk/io/waveforms.py +944 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/__init__.py +118 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/__init__.py +198 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/amplitudes.py +149 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/arrival_picks.py +194 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/bands.py +142 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/batch.py +118 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/enrich.py +282 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/gof.py +1778 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/phasenet_adapter.py +464 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/records.py +284 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/spectra.py +182 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/summaries.py +413 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/transforms.py +242 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/waveforms.py +264 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/__init__.py +62 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/example_metric_plots.py +110 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/model_comparison.py +231 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/periods.py +164 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/site_terms.py +56 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/trends.py +280 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/__init__.py +73 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/execution.py +287 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/outputs.py +215 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/run.py +803 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/slurm.py +229 -0
- spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/tasks.py +600 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/__init__.py +52 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/build/__init__.py +85 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/build/filtering.py +355 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/build/inventory.py +1159 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/build/spectral.py +268 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/build/workflow.py +1034 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/review/__init__.py +25 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/review/tables.py +263 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/summary/__init__.py +25 -0
- spatial_vtk-0.1.0/src/spatial_vtk/qc/summary/rules.py +150 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/__init__.py +3 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/__init__.py +109 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/_common.py +247 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/clustering.py +499 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/correlation.py +615 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/corridors.py +1163 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geojson.py +648 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geology.py +796 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geometry.py +44 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/paths.py +37 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/patterns.py +143 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/pca.py +192 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/polygon_edges.py +1002 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/prepare_stats.py +658 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/rotation.py +44 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/settings.py +143 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/workflow.py +78 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/__init__.py +63 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/basemaps.py +643 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/correlation.py +516 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/geojson.py +199 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/metrics.py +620 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/__init__.py +25 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/corridors.py +353 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/residuals.py +131 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/pca.py +452 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/region/__init__.py +3 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/__init__.py +46 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/correlation.py +607 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/metrics.py +2294 -0
- spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/pca.py +127 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/__init__.py +92 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/__init__.py +39 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/figures.py +1510 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/maps.py +429 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/__init__.py +98 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/charts.py +141 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/contracts.py +131 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/export.py +269 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/exports.py +106 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/filters.py +195 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/labels.py +36 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/launch.py +101 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/maps.py +208 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/streamlit_metrics.py +261 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/streamlit_qc.py +208 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/tables.py +197 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/figure_context.py +576 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/figure_io.py +263 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/fit.py +339 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/__init__.py +37 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/overview.py +384 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/retention.py +535 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/samples.py +118 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/record_sections.py +576 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/selection.py +615 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/__init__.py +23 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/comparison.py +14 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/overlays.py +253 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/radial_sections.py +212 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/record_sections.py +32 -0
- spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/station_event.py +252 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/PKG-INFO +107 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/SOURCES.txt +144 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/dependency_links.txt +1 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/entry_points.txt +2 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/requires.txt +37 -0
- spatial_vtk-0.1.0/src/spatial_vtk.egg-info/top_level.txt +1 -0
- spatial_vtk-0.1.0/svtk_environment.yaml +27 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use spatial-vtk, please cite the package and the data, models, and software used by your workflow."
|
|
3
|
+
title: "Spatial Validation Toolkit for Ground Motion Simulations"
|
|
4
|
+
authors:
|
|
5
|
+
- family-names: Birkel
|
|
6
|
+
given-names: Brianna
|
|
7
|
+
email: birkel@usc.edu
|
|
8
|
+
version: 0.1.0
|
|
9
|
+
license: BSD-3-Clause
|
|
10
|
+
repository-code: "https://github.com/bcbirkel/spatial-vtk"
|
|
11
|
+
abstract: "spatial-vtk provides spatial validation tools for ground-motion simulations, with data QC, residual and metric calculations, geologic metadata integration, spatial statistics, extensive mapping capabilities, and interactive dashboards for quantifying and visualizing model performance patterns."
|
|
12
|
+
keywords:
|
|
13
|
+
- ground-motion simulation
|
|
14
|
+
- validation
|
|
15
|
+
- residuals
|
|
16
|
+
- spatial statistics
|
|
17
|
+
- geologic metadata
|
|
18
|
+
- mapping
|
|
19
|
+
references:
|
|
20
|
+
- type: data
|
|
21
|
+
title: "Southern California Seismic Network"
|
|
22
|
+
authors:
|
|
23
|
+
- name: "California Institute of Technology and U.S. Geological Survey"
|
|
24
|
+
doi: "10.7914/SN/CI"
|
|
25
|
+
url: "https://scedc.caltech.edu/"
|
|
26
|
+
notes: "Observed waveform and station metadata source for the public LA Basin examples."
|
|
27
|
+
- type: data
|
|
28
|
+
title: "Center for Engineering Strong Motion Data"
|
|
29
|
+
authors:
|
|
30
|
+
- name: "Center for Engineering Strong Motion Data"
|
|
31
|
+
url: "https://www.strongmotioncenter.org/"
|
|
32
|
+
notes: "Strong-motion data source for the public LA Basin examples."
|
|
33
|
+
- type: software
|
|
34
|
+
title: "gmprocess"
|
|
35
|
+
authors:
|
|
36
|
+
- name: "U.S. Geological Survey"
|
|
37
|
+
url: "https://github.com/usgs/groundmotion-processing"
|
|
38
|
+
notes: "Processing software used for the observed records in the public examples."
|
|
39
|
+
- type: software
|
|
40
|
+
title: "Salvus"
|
|
41
|
+
authors:
|
|
42
|
+
- name: "Mondaic AG"
|
|
43
|
+
url: "https://mondaic.com/"
|
|
44
|
+
notes: "Waveform simulation software used to generate the synthetic records in the public examples."
|
|
45
|
+
- type: software
|
|
46
|
+
title: "Unified Community Velocity Model"
|
|
47
|
+
authors:
|
|
48
|
+
- name: "Southern California Earthquake Center"
|
|
49
|
+
url: "https://github.com/SCECcode/UCVMC"
|
|
50
|
+
notes: "Velocity-model software context for the example synthetic simulations."
|
|
51
|
+
- type: data
|
|
52
|
+
title: "CVM-S4.26.M01"
|
|
53
|
+
authors:
|
|
54
|
+
- name: "Southern California Earthquake Center"
|
|
55
|
+
url: "https://www.scec.org/research/cvm"
|
|
56
|
+
notes: "SCEC community velocity model context for the example LA Basin synthetics."
|
|
57
|
+
- type: software
|
|
58
|
+
title: "contextily"
|
|
59
|
+
authors:
|
|
60
|
+
- name: "contextily developers"
|
|
61
|
+
url: "https://contextily.readthedocs.io/"
|
|
62
|
+
notes: "Basemap tile retrieval used by static Spatial-VTK map figures."
|
|
63
|
+
- type: data
|
|
64
|
+
title: "Esri World Imagery"
|
|
65
|
+
authors:
|
|
66
|
+
- name: "Esri"
|
|
67
|
+
url: "https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9"
|
|
68
|
+
notes: "Default static-map basemap source used by Spatial-VTK examples."
|
|
69
|
+
- type: data
|
|
70
|
+
title: "OpenStreetMap"
|
|
71
|
+
authors:
|
|
72
|
+
- name: "OpenStreetMap contributors"
|
|
73
|
+
url: "https://www.openstreetmap.org/copyright"
|
|
74
|
+
notes: "Optional dashboard and map tile source."
|
|
75
|
+
- type: data
|
|
76
|
+
title: "CARTO basemaps"
|
|
77
|
+
authors:
|
|
78
|
+
- name: "CARTO"
|
|
79
|
+
url: "https://carto.com/basemaps/"
|
|
80
|
+
notes: "Optional dashboard basemap source."
|
|
81
|
+
- type: software
|
|
82
|
+
title: "ObsPy"
|
|
83
|
+
authors:
|
|
84
|
+
- name: "The ObsPy Development Team"
|
|
85
|
+
doi: "10.1785/gssrl.81.3.530"
|
|
86
|
+
url: "https://github.com/obspy/obspy"
|
|
87
|
+
- type: software
|
|
88
|
+
title: "PhaseNet"
|
|
89
|
+
authors:
|
|
90
|
+
- family-names: Zhu
|
|
91
|
+
given-names: Weiqiang
|
|
92
|
+
- family-names: Beroza
|
|
93
|
+
given-names: Gregory C.
|
|
94
|
+
doi: "10.1093/gji/ggy423"
|
|
95
|
+
url: "https://github.com/AI4EPS/PhaseNet"
|
|
96
|
+
- type: software
|
|
97
|
+
title: "NumPy"
|
|
98
|
+
authors:
|
|
99
|
+
- name: "NumPy developers"
|
|
100
|
+
doi: "10.1038/s41586-020-2649-2"
|
|
101
|
+
url: "https://numpy.org/"
|
|
102
|
+
- type: software
|
|
103
|
+
title: "pandas"
|
|
104
|
+
authors:
|
|
105
|
+
- name: "pandas developers"
|
|
106
|
+
doi: "10.5281/zenodo.3509134"
|
|
107
|
+
url: "https://pandas.pydata.org/"
|
|
108
|
+
- type: software
|
|
109
|
+
title: "GeoPandas"
|
|
110
|
+
authors:
|
|
111
|
+
- name: "GeoPandas developers"
|
|
112
|
+
doi: "10.5281/zenodo.3946761"
|
|
113
|
+
url: "https://geopandas.org/"
|
|
114
|
+
- type: software
|
|
115
|
+
title: "Matplotlib"
|
|
116
|
+
authors:
|
|
117
|
+
- name: "Matplotlib Development Team"
|
|
118
|
+
doi: "10.1109/MCSE.2007.55"
|
|
119
|
+
url: "https://matplotlib.org/"
|
|
120
|
+
- type: software
|
|
121
|
+
title: "SciPy"
|
|
122
|
+
authors:
|
|
123
|
+
- name: "SciPy developers"
|
|
124
|
+
doi: "10.1038/s41592-019-0686-2"
|
|
125
|
+
url: "https://scipy.org/"
|
|
126
|
+
- type: software
|
|
127
|
+
title: "scikit-learn"
|
|
128
|
+
authors:
|
|
129
|
+
- name: "scikit-learn developers"
|
|
130
|
+
doi: "10.5555/1953048.2078195"
|
|
131
|
+
url: "https://scikit-learn.org/"
|
|
132
|
+
- type: software
|
|
133
|
+
title: "statsmodels"
|
|
134
|
+
authors:
|
|
135
|
+
- name: "statsmodels developers"
|
|
136
|
+
url: "https://www.statsmodels.org/"
|
|
137
|
+
- type: software
|
|
138
|
+
title: "Shapely"
|
|
139
|
+
authors:
|
|
140
|
+
- name: "Shapely developers"
|
|
141
|
+
url: "https://shapely.readthedocs.io/"
|
|
142
|
+
- type: software
|
|
143
|
+
title: "pyproj"
|
|
144
|
+
authors:
|
|
145
|
+
- name: "pyproj developers"
|
|
146
|
+
url: "https://pyproj4.github.io/pyproj/"
|
|
147
|
+
- type: software
|
|
148
|
+
title: "Folium"
|
|
149
|
+
authors:
|
|
150
|
+
- name: "Folium developers"
|
|
151
|
+
url: "https://python-visualization.github.io/folium/"
|
|
152
|
+
- type: software
|
|
153
|
+
title: "Streamlit"
|
|
154
|
+
authors:
|
|
155
|
+
- name: "Streamlit developers"
|
|
156
|
+
url: "https://streamlit.io/"
|
|
157
|
+
- type: software
|
|
158
|
+
title: "PyArrow"
|
|
159
|
+
authors:
|
|
160
|
+
- name: "Apache Arrow developers"
|
|
161
|
+
url: "https://arrow.apache.org/docs/python/"
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Data Provenance
|
|
2
|
+
|
|
3
|
+
Spatial-VTK does not download observed waveforms or run simulations for you.
|
|
4
|
+
The public examples start from waveform and metadata files that have already
|
|
5
|
+
been prepared so you can focus on the validation workflow.
|
|
6
|
+
|
|
7
|
+
## Example Dataset
|
|
8
|
+
|
|
9
|
+
The tutorial dataset is a five-event LA Basin subset under
|
|
10
|
+
`data/examples/20260605_five_event_subset/`. It includes observed and synthetic
|
|
11
|
+
MiniSEED files, event metadata, station metadata, and event-station tables for
|
|
12
|
+
the tutorial notebooks.
|
|
13
|
+
|
|
14
|
+
The supporting `data/examples/la_basin_five_event_subset/` folder contains
|
|
15
|
+
lightweight event, station, and GeoJSON files used by the data-format examples
|
|
16
|
+
and regional/corridor tutorials.
|
|
17
|
+
|
|
18
|
+
The example events are southern California earthquakes with public USGS event
|
|
19
|
+
pages:
|
|
20
|
+
|
|
21
|
+
- `ci38038071`: M 4.4, 4 km N of La Verne, CA, 2018-08-29.
|
|
22
|
+
- `ci38695658`: M 4.5, 3 km WSW of South El Monte, CA, 2020-09-19.
|
|
23
|
+
- `ci39812319`: M 4.3, 2 km E of Carson, CA, 2021-09-18.
|
|
24
|
+
- `ci39756418`: M 4.2, 3 km SW of San Bernardino, CA, 2024-01-25.
|
|
25
|
+
- `ci40699207`: M 4.4, 4 km SSE of Highland Park, CA, 2024-08-12.
|
|
26
|
+
|
|
27
|
+
## Observed Records
|
|
28
|
+
|
|
29
|
+
Observed records in the public examples are derived from public southern
|
|
30
|
+
California waveform sources:
|
|
31
|
+
|
|
32
|
+
- Southern California Seismic Network (SCSN), network code `CI`,
|
|
33
|
+
DOI `10.7914/SN/CI`.
|
|
34
|
+
- Center for Engineering Strong Motion Data (CESMD).
|
|
35
|
+
|
|
36
|
+
The observed records were processed with `gmprocess` before they were packaged
|
|
37
|
+
for the tutorial subset. The tutorial workflow applies a configurable 1 Hz
|
|
38
|
+
lowpass preprocessing step to both observed and synthetic records before QC,
|
|
39
|
+
metric calculations, waveform figures, spatial analysis, and dashboards.
|
|
40
|
+
|
|
41
|
+
## Synthetic Records
|
|
42
|
+
|
|
43
|
+
Synthetic records in the public examples were generated with Salvus for a
|
|
44
|
+
southern California CVM-SI/CVM-S4.26.M01 velocity-model context. The model and
|
|
45
|
+
simulation provenance should be cited as:
|
|
46
|
+
|
|
47
|
+
- Salvus, for the waveform simulation software.
|
|
48
|
+
- UCVM, for the velocity-model software context.
|
|
49
|
+
- SCEC CVM-S4.26.M01, for the southern California velocity-model context.
|
|
50
|
+
- SCEC, for the community model and regional seismic-modeling context.
|
|
51
|
+
|
|
52
|
+
The synthetic files in the example bundle are tutorial-scale MiniSEED exports,
|
|
53
|
+
not a complete simulation archive.
|
|
54
|
+
|
|
55
|
+
## Geospatial Files
|
|
56
|
+
|
|
57
|
+
The example GeoJSON files under `data/examples/**` are small tutorial regions
|
|
58
|
+
used to demonstrate polygon joins, regional contrasts, and corridor/path
|
|
59
|
+
selection. They are intended to show how the package works. For a real project,
|
|
60
|
+
replace them with your own mapped geologic, geomorphic, administrative, or
|
|
61
|
+
analysis-region polygons and cite those sources separately.
|
|
62
|
+
|
|
63
|
+
The site/geology metadata examples are derived tutorial tables that show the
|
|
64
|
+
expected column structure for mapped region labels, long region names, broad
|
|
65
|
+
region classes, and geomorphology classes.
|
|
66
|
+
|
|
67
|
+
## Basemaps
|
|
68
|
+
|
|
69
|
+
Basemap files are not redistributed in this repository or in the PyPI wheel.
|
|
70
|
+
Static map figures fetch basemap tiles at render time with `contextily` and
|
|
71
|
+
default to Esri World Imagery. Dashboard maps are rendered with Folium/Leaflet
|
|
72
|
+
and can use Esri, CARTO, or OpenStreetMap tile layers.
|
|
73
|
+
|
|
74
|
+
You need network access for basemap-backed maps unless you configure a local
|
|
75
|
+
tile cache. If you use basemaps in figures or dashboards, cite the tile provider
|
|
76
|
+
required by your chosen basemap source. The root `CITATION.cff` includes
|
|
77
|
+
references for `contextily`, Esri World Imagery, CARTO basemaps, and
|
|
78
|
+
OpenStreetMap.
|
|
79
|
+
|
|
80
|
+
## Package Dependencies
|
|
81
|
+
|
|
82
|
+
Spatial-VTK depends on the scientific Python and geospatial ecosystem,
|
|
83
|
+
including NumPy, pandas, GeoPandas, Matplotlib, SciPy, scikit-learn,
|
|
84
|
+
statsmodels, Shapely, pyproj, ObsPy, PyArrow, Folium, Streamlit, and
|
|
85
|
+
contextily. The root `CITATION.cff` lists the major package dependencies and
|
|
86
|
+
example-data sources that should be cited when they are material to your work.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Brianna Birkel
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
6
|
+
are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its contributors
|
|
16
|
+
may be used to endorse or promote products derived from this software without
|
|
17
|
+
specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
23
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
24
|
+
INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
25
|
+
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY
|
|
26
|
+
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT INCLUDING
|
|
27
|
+
NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
28
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Purpose: keep PyPI source distributions focused on installable package files.
|
|
2
|
+
# Usage: python -m build --no-isolation
|
|
3
|
+
|
|
4
|
+
include README.md
|
|
5
|
+
include LICENSE
|
|
6
|
+
include CITATION.cff
|
|
7
|
+
include DATA_PROVENANCE.md
|
|
8
|
+
include RELEASE_CHECKLIST.md
|
|
9
|
+
include pyproject.toml
|
|
10
|
+
include svtk_environment.yaml
|
|
11
|
+
include ValidationToolkit_Workflow.png
|
|
12
|
+
|
|
13
|
+
recursive-include src/spatial_vtk *.py
|
|
14
|
+
recursive-include src/spatial_vtk *.yaml
|
|
15
|
+
|
|
16
|
+
prune .github
|
|
17
|
+
prune data
|
|
18
|
+
prune docs
|
|
19
|
+
prune docs/_build
|
|
20
|
+
prune outputs
|
|
21
|
+
prune tests
|
|
22
|
+
prune tools
|
|
23
|
+
prune .cache
|
|
24
|
+
prune build
|
|
25
|
+
prune dist
|
|
26
|
+
prune .pytest_cache
|
|
27
|
+
prune **/__pycache__
|
|
28
|
+
|
|
29
|
+
exclude .DS_Store
|
|
30
|
+
global-exclude *.py[cod]
|
|
31
|
+
global-exclude .DS_Store
|
|
32
|
+
global-exclude *.ipynb
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: spatial-vtk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: spatial-vtk provides spatial validation tools for ground-motion simulations, with data QC, residual and metric calculations, geologic metadata integration, spatial statistics, extensive mapping capabilities, and interactive dashboards for quantifying and visualizing model performance patterns.
|
|
5
|
+
Author-email: Brianna Birkel <birkel@usc.edu>
|
|
6
|
+
License-Expression: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/bcbirkel/spatial-vtk
|
|
8
|
+
Project-URL: Documentation, https://bcbirkel.github.io/spatial-vtk/
|
|
9
|
+
Project-URL: Repository, https://github.com/bcbirkel/spatial-vtk
|
|
10
|
+
Project-URL: Issues, https://github.com/bcbirkel/spatial-vtk/issues
|
|
11
|
+
Project-URL: Changelog, https://bcbirkel.github.io/spatial-vtk/changelog.html
|
|
12
|
+
Keywords: ground motion,seismology,spatial statistics,model validation,earthquake simulations,geology,mapping
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: branca>=0.7
|
|
27
|
+
Requires-Dist: contextily>=1.6
|
|
28
|
+
Requires-Dist: folium>=0.17
|
|
29
|
+
Requires-Dist: geopandas>=1.0
|
|
30
|
+
Requires-Dist: matplotlib>=3.8
|
|
31
|
+
Requires-Dist: numpy>=1.26
|
|
32
|
+
Requires-Dist: pandas>=2.2
|
|
33
|
+
Requires-Dist: phasenet>=0.2.5
|
|
34
|
+
Requires-Dist: plotly>=6
|
|
35
|
+
Requires-Dist: pyarrow>=15
|
|
36
|
+
Requires-Dist: pyproj>=3.6
|
|
37
|
+
Requires-Dist: PyYAML>=6.0
|
|
38
|
+
Requires-Dist: scikit-learn>=1.4
|
|
39
|
+
Requires-Dist: scipy>=1.11
|
|
40
|
+
Requires-Dist: shapely>=2.0
|
|
41
|
+
Requires-Dist: statsmodels>=0.14
|
|
42
|
+
Requires-Dist: streamlit>=1.58
|
|
43
|
+
Requires-Dist: streamlit-folium>=0.26
|
|
44
|
+
Provides-Extra: docs
|
|
45
|
+
Requires-Dist: ipython>=8.24; extra == "docs"
|
|
46
|
+
Requires-Dist: nbsphinx>=0.9; extra == "docs"
|
|
47
|
+
Requires-Dist: sphinx<9,>=8; extra == "docs"
|
|
48
|
+
Requires-Dist: sphinx-rtd-theme<4,>=3; extra == "docs"
|
|
49
|
+
Provides-Extra: dashboard
|
|
50
|
+
Provides-Extra: waveforms
|
|
51
|
+
Requires-Dist: h5py>=3.10; extra == "waveforms"
|
|
52
|
+
Requires-Dist: obspy>=1.4; extra == "waveforms"
|
|
53
|
+
Provides-Extra: validation
|
|
54
|
+
Requires-Dist: build>=1.2; extra == "validation"
|
|
55
|
+
Requires-Dist: coverage[toml]>=7.6; extra == "validation"
|
|
56
|
+
Requires-Dist: ipython>=8.24; extra == "validation"
|
|
57
|
+
Requires-Dist: pytest>=8; extra == "validation"
|
|
58
|
+
Requires-Dist: twine<7,>=6.2; extra == "validation"
|
|
59
|
+
Dynamic: license-file
|
|
60
|
+
|
|
61
|
+
# Spatial-VTK
|
|
62
|
+
|
|
63
|
+
[](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml)
|
|
64
|
+
[](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml)
|
|
65
|
+
[](https://pypi.org/project/spatial-vtk/)
|
|
66
|
+
[](https://pypi.org/project/spatial-vtk/)
|
|
67
|
+
[](https://github.com/bcbirkel/spatial-vtk/blob/main/LICENSE)
|
|
68
|
+
|
|
69
|
+
`spatial-vtk` provides spatial validation tools for ground-motion simulations,
|
|
70
|
+
with data QC, residual and metric calculations, geologic metadata integration,
|
|
71
|
+
spatial statistics, mapping, and dashboard preparation for understanding model
|
|
72
|
+
performance patterns.
|
|
73
|
+
|
|
74
|
+

|
|
75
|
+
|
|
76
|
+
## Install
|
|
77
|
+
|
|
78
|
+
Install from PyPI:
|
|
79
|
+
|
|
80
|
+
python -m pip install spatial-vtk
|
|
81
|
+
|
|
82
|
+
Or create the conda environment and install from a source checkout:
|
|
83
|
+
|
|
84
|
+
conda env create -f svtk_environment.yaml
|
|
85
|
+
conda activate spatial-vtk
|
|
86
|
+
python -m pip install -e .
|
|
87
|
+
|
|
88
|
+
The package imports as `spatial_vtk` and installs the `svtk` command:
|
|
89
|
+
|
|
90
|
+
python -c "import spatial_vtk; print(spatial_vtk.__version__)"
|
|
91
|
+
svtk --help
|
|
92
|
+
|
|
93
|
+
## Structure
|
|
94
|
+
|
|
95
|
+
- `spatial_vtk.io`: metadata preparation, input inventories, waveform
|
|
96
|
+
preprocessing, manifests, and waveform format helpers.
|
|
97
|
+
- `spatial_vtk.config`: repository paths, bounds, and runtime settings.
|
|
98
|
+
- `spatial_vtk.qc`: quality-control build, review, and summary workflows.
|
|
99
|
+
- `spatial_vtk.metrics`: ground-motion metric and residual calculations.
|
|
100
|
+
- `spatial_vtk.spatial`: metric-field preparation, spatial correlation,
|
|
101
|
+
PCA spatial modes, REDCAP and residual-feature clustering, geology joins,
|
|
102
|
+
pattern tests, plots, and map helpers.
|
|
103
|
+
- `spatial_vtk.visualize`: context figures, QC views, and dashboard data.
|
|
104
|
+
- `spatial_vtk.cli`: command-line entry points.
|
|
105
|
+
|
|
106
|
+
See the documentation in `docs/` for installation, package overview, examples,
|
|
107
|
+
API reference, support, and changelog pages.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Spatial-VTK
|
|
2
|
+
|
|
3
|
+
[](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml)
|
|
5
|
+
[](https://pypi.org/project/spatial-vtk/)
|
|
6
|
+
[](https://pypi.org/project/spatial-vtk/)
|
|
7
|
+
[](https://github.com/bcbirkel/spatial-vtk/blob/main/LICENSE)
|
|
8
|
+
|
|
9
|
+
`spatial-vtk` provides spatial validation tools for ground-motion simulations,
|
|
10
|
+
with data QC, residual and metric calculations, geologic metadata integration,
|
|
11
|
+
spatial statistics, mapping, and dashboard preparation for understanding model
|
|
12
|
+
performance patterns.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## Install
|
|
17
|
+
|
|
18
|
+
Install from PyPI:
|
|
19
|
+
|
|
20
|
+
python -m pip install spatial-vtk
|
|
21
|
+
|
|
22
|
+
Or create the conda environment and install from a source checkout:
|
|
23
|
+
|
|
24
|
+
conda env create -f svtk_environment.yaml
|
|
25
|
+
conda activate spatial-vtk
|
|
26
|
+
python -m pip install -e .
|
|
27
|
+
|
|
28
|
+
The package imports as `spatial_vtk` and installs the `svtk` command:
|
|
29
|
+
|
|
30
|
+
python -c "import spatial_vtk; print(spatial_vtk.__version__)"
|
|
31
|
+
svtk --help
|
|
32
|
+
|
|
33
|
+
## Structure
|
|
34
|
+
|
|
35
|
+
- `spatial_vtk.io`: metadata preparation, input inventories, waveform
|
|
36
|
+
preprocessing, manifests, and waveform format helpers.
|
|
37
|
+
- `spatial_vtk.config`: repository paths, bounds, and runtime settings.
|
|
38
|
+
- `spatial_vtk.qc`: quality-control build, review, and summary workflows.
|
|
39
|
+
- `spatial_vtk.metrics`: ground-motion metric and residual calculations.
|
|
40
|
+
- `spatial_vtk.spatial`: metric-field preparation, spatial correlation,
|
|
41
|
+
PCA spatial modes, REDCAP and residual-feature clustering, geology joins,
|
|
42
|
+
pattern tests, plots, and map helpers.
|
|
43
|
+
- `spatial_vtk.visualize`: context figures, QC views, and dashboard data.
|
|
44
|
+
- `spatial_vtk.cli`: command-line entry points.
|
|
45
|
+
|
|
46
|
+
See the documentation in `docs/` for installation, package overview, examples,
|
|
47
|
+
API reference, support, and changelog pages.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Spatial-VTK Release Checklist
|
|
2
|
+
|
|
3
|
+
Use this checklist before publishing `spatial-vtk` to PyPI. Run commands from
|
|
4
|
+
the public repository root unless a step says otherwise.
|
|
5
|
+
|
|
6
|
+
## 1. Start Clean
|
|
7
|
+
|
|
8
|
+
Confirm the public repository contains only public files:
|
|
9
|
+
|
|
10
|
+
git status --short
|
|
11
|
+
find . \( -name '.DS_Store' -o -name '.cache' -o -name '.pytest_cache' -o -name '__pycache__' -o -name '*.pyc' -o -path './outputs' -o -path './docs/_build' -o -path './build' -o -path './src/spatial_vtk.egg-info' \) -print
|
|
12
|
+
rg -n "/[p]roject2|ValidationToolkit-[r]estructured|private-[c]luster-name" .
|
|
13
|
+
|
|
14
|
+
The generated-artifact search should print nothing. The private-detail search
|
|
15
|
+
should print nothing except intentional public contact or documentation text.
|
|
16
|
+
Also scan any changed examples for local absolute paths, usernames, or private
|
|
17
|
+
model/output directories before publishing.
|
|
18
|
+
|
|
19
|
+
## 2. Validate Locally
|
|
20
|
+
|
|
21
|
+
Use the Spatial-VTK conda environment or another environment with the
|
|
22
|
+
validation, docs, dashboard, and waveform extras installed.
|
|
23
|
+
|
|
24
|
+
python -m pip install -e ".[validation,docs,dashboard,waveforms]"
|
|
25
|
+
MPLCONFIGDIR=/tmp/mplconfig_svtk python -m pytest -q
|
|
26
|
+
python -m compileall -q src tests
|
|
27
|
+
MPLCONFIGDIR=/tmp/mplconfig_svtk python -m sphinx -W -b html docs docs/_build/html
|
|
28
|
+
|
|
29
|
+
Expected result: tests pass, compileall prints no output, and Sphinx reports
|
|
30
|
+
`build succeeded`.
|
|
31
|
+
|
|
32
|
+
## 3. Build and Check Distributions
|
|
33
|
+
|
|
34
|
+
Remove any old distributions, then build fresh archives:
|
|
35
|
+
|
|
36
|
+
rm -rf dist build src/spatial_vtk.egg-info
|
|
37
|
+
python -m build --sdist --wheel
|
|
38
|
+
python -m twine check dist/*
|
|
39
|
+
|
|
40
|
+
If you are building in an offline environment where isolated builds cannot
|
|
41
|
+
download `wheel`, use `python -m build --no-isolation` from an environment that
|
|
42
|
+
already has the validation extras installed.
|
|
43
|
+
|
|
44
|
+
Inspect the source archive and wheel to confirm only installable package files
|
|
45
|
+
are included. The PyPI archives should not include notebooks, example data,
|
|
46
|
+
documentation builds, review outputs, generated caches, private package names,
|
|
47
|
+
or repo-only tools:
|
|
48
|
+
|
|
49
|
+
tar -tf dist/spatial_vtk-*.tar.gz | rg '(^spatial_vtk-[^/]+/(data|docs|tests|tools|outputs|\.github|\.cache|build|dist)/|\.ipynb$|__pycache__|\.pyc$|\.DS_Store)' && exit 1 || true
|
|
50
|
+
|
|
51
|
+
python - <<'PY'
|
|
52
|
+
import pathlib
|
|
53
|
+
import zipfile
|
|
54
|
+
wheels = sorted(pathlib.Path("dist").glob("*.whl"))
|
|
55
|
+
if not wheels:
|
|
56
|
+
raise SystemExit("No wheel was built.")
|
|
57
|
+
with zipfile.ZipFile(wheels[0]) as zf:
|
|
58
|
+
names = zf.namelist()
|
|
59
|
+
assert any(name.startswith("spatial_vtk/") for name in names)
|
|
60
|
+
assert "spatial_vtk/config/default_outputs.yaml" in names
|
|
61
|
+
assert any(name.startswith("spatial_vtk/visualize/dashboard/") for name in names)
|
|
62
|
+
legacy_namespace = "validation" + "_toolkit/"
|
|
63
|
+
assert not any(name.startswith(legacy_namespace) for name in names)
|
|
64
|
+
assert not any(name.startswith("data/") for name in names)
|
|
65
|
+
assert not any(name.startswith("docs/") for name in names)
|
|
66
|
+
assert not any(name.startswith("tests/") for name in names)
|
|
67
|
+
assert not any(name.startswith("tools/") for name in names)
|
|
68
|
+
assert not any(name.endswith(".ipynb") for name in names)
|
|
69
|
+
assert not any("__pycache__" in name or name.endswith(".pyc") or name.endswith(".DS_Store") for name in names)
|
|
70
|
+
print(f"checked {wheels[0].name}: {len(names)} files")
|
|
71
|
+
PY
|
|
72
|
+
|
|
73
|
+
## 4. Clean Wheel Smoke Test
|
|
74
|
+
|
|
75
|
+
Install the wheel into a temporary target directory and run import/CLI checks:
|
|
76
|
+
|
|
77
|
+
rm -rf /tmp/spatial_vtk_wheel_smoke
|
|
78
|
+
python -m pip install --no-deps --target /tmp/spatial_vtk_wheel_smoke dist/spatial_vtk-*.whl
|
|
79
|
+
PYTHONPATH=/tmp/spatial_vtk_wheel_smoke python -c "import spatial_vtk; print(spatial_vtk.__version__)"
|
|
80
|
+
PYTHONPATH=/tmp/spatial_vtk_wheel_smoke python -m spatial_vtk.cli --help
|
|
81
|
+
|
|
82
|
+
This smoke test intentionally uses `--no-deps` and reuses the active
|
|
83
|
+
environment's dependencies. It verifies package contents and entry-point code
|
|
84
|
+
without creating a permanent install.
|
|
85
|
+
|
|
86
|
+
## 5. TestPyPI Dry Run
|
|
87
|
+
|
|
88
|
+
This step requires TestPyPI credentials or an API token.
|
|
89
|
+
|
|
90
|
+
python -m twine upload --repository testpypi dist/*
|
|
91
|
+
|
|
92
|
+
Then create a fresh environment and install from TestPyPI:
|
|
93
|
+
|
|
94
|
+
python -m venv /tmp/spatial-vtk-testpypi
|
|
95
|
+
source /tmp/spatial-vtk-testpypi/bin/activate
|
|
96
|
+
python -m pip install --upgrade pip
|
|
97
|
+
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ spatial-vtk
|
|
98
|
+
python -c "import spatial_vtk; print(spatial_vtk.__version__)"
|
|
99
|
+
svtk --help
|
|
100
|
+
|
|
101
|
+
If TestPyPI installation cannot resolve a dependency, fix package metadata
|
|
102
|
+
before publishing to the real PyPI.
|
|
103
|
+
|
|
104
|
+
## 6. Publish to PyPI
|
|
105
|
+
|
|
106
|
+
Only publish after TestPyPI succeeds.
|
|
107
|
+
|
|
108
|
+
python -m twine upload dist/*
|
|
109
|
+
|
|
110
|
+
Then verify installation in a fresh environment:
|
|
111
|
+
|
|
112
|
+
python -m venv /tmp/spatial-vtk-pypi
|
|
113
|
+
source /tmp/spatial-vtk-pypi/bin/activate
|
|
114
|
+
python -m pip install --upgrade pip
|
|
115
|
+
python -m pip install spatial-vtk
|
|
116
|
+
python -c "import spatial_vtk; print(spatial_vtk.__version__)"
|
|
117
|
+
svtk --help
|
|
118
|
+
|
|
119
|
+
## 7. Tag and Announce
|
|
120
|
+
|
|
121
|
+
After PyPI succeeds, tag the release in GitHub:
|
|
122
|
+
|
|
123
|
+
git tag -a v0.1.0 -m "spatial-vtk 0.1.0"
|
|
124
|
+
git push origin v0.1.0
|
|
125
|
+
|
|
126
|
+
Create a GitHub release from the tag. Include the PyPI link, the documentation
|
|
127
|
+
link, a short feature summary, known limitations, and citation guidance.
|
|
128
|
+
|
|
129
|
+
## 8. Cleanup
|
|
130
|
+
|
|
131
|
+
Remove generated artifacts before the next development cycle:
|
|
132
|
+
|
|
133
|
+
rm -rf build dist docs/_build src/spatial_vtk.egg-info .pytest_cache
|
|
134
|
+
find . -name '__pycache__' -type d -prune -exec rm -rf {} +
|
|
135
|
+
find . \( -name '*.pyc' -o -name '.DS_Store' \) -type f -delete
|
|
Binary file
|