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.
Files changed (146) hide show
  1. spatial_vtk-0.1.0/CITATION.cff +161 -0
  2. spatial_vtk-0.1.0/DATA_PROVENANCE.md +86 -0
  3. spatial_vtk-0.1.0/LICENSE +28 -0
  4. spatial_vtk-0.1.0/MANIFEST.in +32 -0
  5. spatial_vtk-0.1.0/PKG-INFO +107 -0
  6. spatial_vtk-0.1.0/README.md +47 -0
  7. spatial_vtk-0.1.0/RELEASE_CHECKLIST.md +135 -0
  8. spatial_vtk-0.1.0/ValidationToolkit_Workflow.png +0 -0
  9. spatial_vtk-0.1.0/pyproject.toml +99 -0
  10. spatial_vtk-0.1.0/setup.cfg +4 -0
  11. spatial_vtk-0.1.0/src/spatial_vtk/__init__.py +7 -0
  12. spatial_vtk-0.1.0/src/spatial_vtk/cli/__init__.py +1056 -0
  13. spatial_vtk-0.1.0/src/spatial_vtk/cli/__main__.py +9 -0
  14. spatial_vtk-0.1.0/src/spatial_vtk/config/__init__.py +136 -0
  15. spatial_vtk-0.1.0/src/spatial_vtk/config/bounds.py +105 -0
  16. spatial_vtk-0.1.0/src/spatial_vtk/config/default_outputs.yaml +221 -0
  17. spatial_vtk-0.1.0/src/spatial_vtk/config/labels.py +607 -0
  18. spatial_vtk-0.1.0/src/spatial_vtk/config/metric_catalog.py +159 -0
  19. spatial_vtk-0.1.0/src/spatial_vtk/config/metrics.py +365 -0
  20. spatial_vtk-0.1.0/src/spatial_vtk/config/naming.py +49 -0
  21. spatial_vtk-0.1.0/src/spatial_vtk/config/notebook.py +243 -0
  22. spatial_vtk-0.1.0/src/spatial_vtk/config/outputs.py +238 -0
  23. spatial_vtk-0.1.0/src/spatial_vtk/config/paths.py +154 -0
  24. spatial_vtk-0.1.0/src/spatial_vtk/config/runtime.py +608 -0
  25. spatial_vtk-0.1.0/src/spatial_vtk/io/__init__.py +185 -0
  26. spatial_vtk-0.1.0/src/spatial_vtk/io/artifacts.py +364 -0
  27. spatial_vtk-0.1.0/src/spatial_vtk/io/catalogs.py +156 -0
  28. spatial_vtk-0.1.0/src/spatial_vtk/io/compute_manifest.py +216 -0
  29. spatial_vtk-0.1.0/src/spatial_vtk/io/inventory.py +136 -0
  30. spatial_vtk-0.1.0/src/spatial_vtk/io/kml.py +101 -0
  31. spatial_vtk-0.1.0/src/spatial_vtk/io/layouts.py +67 -0
  32. spatial_vtk-0.1.0/src/spatial_vtk/io/master_lists.py +326 -0
  33. spatial_vtk-0.1.0/src/spatial_vtk/io/metadata.py +466 -0
  34. spatial_vtk-0.1.0/src/spatial_vtk/io/metric_inputs.py +277 -0
  35. spatial_vtk-0.1.0/src/spatial_vtk/io/model_aliases.py +278 -0
  36. spatial_vtk-0.1.0/src/spatial_vtk/io/output_paths.py +63 -0
  37. spatial_vtk-0.1.0/src/spatial_vtk/io/plans.py +329 -0
  38. spatial_vtk-0.1.0/src/spatial_vtk/io/preprocessing.py +354 -0
  39. spatial_vtk-0.1.0/src/spatial_vtk/io/synthetic_formats.py +882 -0
  40. spatial_vtk-0.1.0/src/spatial_vtk/io/tables.py +553 -0
  41. spatial_vtk-0.1.0/src/spatial_vtk/io/waveforms.py +944 -0
  42. spatial_vtk-0.1.0/src/spatial_vtk/metrics/__init__.py +118 -0
  43. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/__init__.py +198 -0
  44. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/amplitudes.py +149 -0
  45. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/arrival_picks.py +194 -0
  46. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/bands.py +142 -0
  47. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/batch.py +118 -0
  48. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/enrich.py +282 -0
  49. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/gof.py +1778 -0
  50. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/phasenet_adapter.py +464 -0
  51. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/records.py +284 -0
  52. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/spectra.py +182 -0
  53. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/summaries.py +413 -0
  54. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/transforms.py +242 -0
  55. spatial_vtk-0.1.0/src/spatial_vtk/metrics/calculate/waveforms.py +264 -0
  56. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/__init__.py +62 -0
  57. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/example_metric_plots.py +110 -0
  58. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/model_comparison.py +231 -0
  59. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/periods.py +164 -0
  60. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/site_terms.py +56 -0
  61. spatial_vtk-0.1.0/src/spatial_vtk/metrics/plot/trends.py +280 -0
  62. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/__init__.py +73 -0
  63. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/execution.py +287 -0
  64. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/outputs.py +215 -0
  65. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/run.py +803 -0
  66. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/slurm.py +229 -0
  67. spatial_vtk-0.1.0/src/spatial_vtk/metrics/workflow/tasks.py +600 -0
  68. spatial_vtk-0.1.0/src/spatial_vtk/qc/__init__.py +52 -0
  69. spatial_vtk-0.1.0/src/spatial_vtk/qc/build/__init__.py +85 -0
  70. spatial_vtk-0.1.0/src/spatial_vtk/qc/build/filtering.py +355 -0
  71. spatial_vtk-0.1.0/src/spatial_vtk/qc/build/inventory.py +1159 -0
  72. spatial_vtk-0.1.0/src/spatial_vtk/qc/build/spectral.py +268 -0
  73. spatial_vtk-0.1.0/src/spatial_vtk/qc/build/workflow.py +1034 -0
  74. spatial_vtk-0.1.0/src/spatial_vtk/qc/review/__init__.py +25 -0
  75. spatial_vtk-0.1.0/src/spatial_vtk/qc/review/tables.py +263 -0
  76. spatial_vtk-0.1.0/src/spatial_vtk/qc/summary/__init__.py +25 -0
  77. spatial_vtk-0.1.0/src/spatial_vtk/qc/summary/rules.py +150 -0
  78. spatial_vtk-0.1.0/src/spatial_vtk/spatial/__init__.py +3 -0
  79. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/__init__.py +109 -0
  80. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/_common.py +247 -0
  81. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/clustering.py +499 -0
  82. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/correlation.py +615 -0
  83. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/corridors.py +1163 -0
  84. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geojson.py +648 -0
  85. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geology.py +796 -0
  86. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/geometry.py +44 -0
  87. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/paths.py +37 -0
  88. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/patterns.py +143 -0
  89. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/pca.py +192 -0
  90. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/polygon_edges.py +1002 -0
  91. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/prepare_stats.py +658 -0
  92. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/rotation.py +44 -0
  93. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/settings.py +143 -0
  94. spatial_vtk-0.1.0/src/spatial_vtk/spatial/calculate/workflow.py +78 -0
  95. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/__init__.py +63 -0
  96. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/basemaps.py +643 -0
  97. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/correlation.py +516 -0
  98. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/geojson.py +199 -0
  99. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/metrics.py +620 -0
  100. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/__init__.py +25 -0
  101. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/corridors.py +353 -0
  102. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/path/residuals.py +131 -0
  103. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/pca.py +452 -0
  104. spatial_vtk-0.1.0/src/spatial_vtk/spatial/map/region/__init__.py +3 -0
  105. spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/__init__.py +46 -0
  106. spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/correlation.py +607 -0
  107. spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/metrics.py +2294 -0
  108. spatial_vtk-0.1.0/src/spatial_vtk/spatial/plot/pca.py +127 -0
  109. spatial_vtk-0.1.0/src/spatial_vtk/visualize/__init__.py +92 -0
  110. spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/__init__.py +39 -0
  111. spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/figures.py +1510 -0
  112. spatial_vtk-0.1.0/src/spatial_vtk/visualize/context/maps.py +429 -0
  113. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/__init__.py +98 -0
  114. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/charts.py +141 -0
  115. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/contracts.py +131 -0
  116. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/export.py +269 -0
  117. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/exports.py +106 -0
  118. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/filters.py +195 -0
  119. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/labels.py +36 -0
  120. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/launch.py +101 -0
  121. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/maps.py +208 -0
  122. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/streamlit_metrics.py +261 -0
  123. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/streamlit_qc.py +208 -0
  124. spatial_vtk-0.1.0/src/spatial_vtk/visualize/dashboard/tables.py +197 -0
  125. spatial_vtk-0.1.0/src/spatial_vtk/visualize/figure_context.py +576 -0
  126. spatial_vtk-0.1.0/src/spatial_vtk/visualize/figure_io.py +263 -0
  127. spatial_vtk-0.1.0/src/spatial_vtk/visualize/fit.py +339 -0
  128. spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/__init__.py +37 -0
  129. spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/overview.py +384 -0
  130. spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/retention.py +535 -0
  131. spatial_vtk-0.1.0/src/spatial_vtk/visualize/qc/samples.py +118 -0
  132. spatial_vtk-0.1.0/src/spatial_vtk/visualize/record_sections.py +576 -0
  133. spatial_vtk-0.1.0/src/spatial_vtk/visualize/selection.py +615 -0
  134. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/__init__.py +23 -0
  135. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/comparison.py +14 -0
  136. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/overlays.py +253 -0
  137. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/radial_sections.py +212 -0
  138. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/record_sections.py +32 -0
  139. spatial_vtk-0.1.0/src/spatial_vtk/visualize/waveforms/station_event.py +252 -0
  140. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/PKG-INFO +107 -0
  141. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/SOURCES.txt +144 -0
  142. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/dependency_links.txt +1 -0
  143. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/entry_points.txt +2 -0
  144. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/requires.txt +37 -0
  145. spatial_vtk-0.1.0/src/spatial_vtk.egg-info/top_level.txt +1 -0
  146. 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
+ [![CI](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml/badge.svg)](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml)
64
+ [![Docs](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml/badge.svg)](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml)
65
+ [![PyPI](https://img.shields.io/pypi/v/spatial-vtk.svg)](https://pypi.org/project/spatial-vtk/)
66
+ [![Python](https://img.shields.io/pypi/pyversions/spatial-vtk.svg)](https://pypi.org/project/spatial-vtk/)
67
+ [![License](https://img.shields.io/pypi/l/spatial-vtk.svg)](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
+ ![Spatial-VTK workflow](ValidationToolkit_Workflow.png)
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
+ [![CI](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml/badge.svg)](https://github.com/bcbirkel/spatial-vtk/actions/workflows/ci.yml)
4
+ [![Docs](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml/badge.svg)](https://github.com/bcbirkel/spatial-vtk/actions/workflows/docs.yml)
5
+ [![PyPI](https://img.shields.io/pypi/v/spatial-vtk.svg)](https://pypi.org/project/spatial-vtk/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/spatial-vtk.svg)](https://pypi.org/project/spatial-vtk/)
7
+ [![License](https://img.shields.io/pypi/l/spatial-vtk.svg)](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
+ ![Spatial-VTK workflow](ValidationToolkit_Workflow.png)
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