gmprocess 2.6.0__tar.gz → 2.8.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 (260) hide show
  1. gmprocess-2.8.0/.coveragerc +13 -0
  2. {gmprocess-2.6.0 → gmprocess-2.8.0}/.gitignore +1 -0
  3. {gmprocess-2.6.0 → gmprocess-2.8.0}/.gitlab-ci.yml +23 -0
  4. {gmprocess-2.6.0 → gmprocess-2.8.0}/.vscode/settings.json +1 -1
  5. {gmprocess-2.6.0 → gmprocess-2.8.0}/CHANGELOG.md +55 -0
  6. {gmprocess-2.6.0 → gmprocess-2.8.0}/PKG-INFO +13 -7
  7. {gmprocess-2.6.0 → gmprocess-2.8.0}/README.md +6 -3
  8. {gmprocess-2.6.0 → gmprocess-2.8.0}/code.json +41 -0
  9. {gmprocess-2.6.0 → gmprocess-2.8.0}/pyproject.toml +8 -4
  10. gmprocess-2.8.0/pytest.ini +7 -0
  11. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/apps/gmrecords.py +51 -16
  12. gmprocess-2.8.0/src/gmprocess/bin/export_ff_sac.py +329 -0
  13. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/get_cali_cloud.py +55 -24
  14. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/scalar_event.py +1 -1
  15. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/stationstream.py +78 -36
  16. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/streamcollection.py +7 -1
  17. gmprocess-2.8.0/src/gmprocess/extended_xml/extended_xml_parser.py +602 -0
  18. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/flatfile.py +18 -3
  19. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/flatfile_constants.py +3 -0
  20. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/rupture.py +4 -4
  21. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/station_metrics_xml.py +5 -2
  22. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/stream_workspace.py +8 -0
  23. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/cesmd_fetcher.py +14 -1
  24. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/cosmos_writer.py +5 -5
  25. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/global_fetcher.py +9 -25
  26. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/knet/core.py +27 -9
  27. gmprocess-2.8.0/src/gmprocess/io/knet/knet_fetcher.py +424 -0
  28. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/obspy/fdsn_fetcher.py +36 -38
  29. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/station_metric_collection.py +14 -14
  30. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_collection.py +5 -2
  31. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/assemble.py +0 -1
  32. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/autoshakemap.py +0 -1
  33. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/base.py +43 -0
  34. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/compute_station_metrics.py +10 -7
  35. gmprocess-2.8.0/src/gmprocess/subcommands/compute_waveform_metrics.py +127 -0
  36. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/download.py +1 -4
  37. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/export_cosmos.py +0 -1
  38. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/export_failure_tables.py +4 -4
  39. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/export_metric_tables.py +4 -3
  40. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/export_provenance_tables.py +2 -2
  41. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/import_data.py +3 -4
  42. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/process_waveforms.py +56 -52
  43. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/constants.py +12 -9
  44. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/export_gmpacket_utils.py +12 -2
  45. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/tests_utils.py +1 -1
  46. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/std_dev.py +15 -11
  47. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/corner_frequencies.py +11 -2
  48. gmprocess-2.8.0/src/gmprocess/waveform_processing/count_stats.py +14 -0
  49. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/detrend.py +2 -1
  50. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/instrument_response.py +21 -11
  51. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/nn_quality_assurance.py +22 -18
  52. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/phase.py +4 -2
  53. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/prism_adaptive_baseline.py +25 -25
  54. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/processing.py +4 -2
  55. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/sanity_checks.py +13 -0
  56. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/spectrum.py +0 -1
  57. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/windows.py +9 -5
  58. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/PKG-INFO +13 -7
  59. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/SOURCES.txt +5 -0
  60. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/entry_points.txt +1 -0
  61. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/requires.txt +6 -3
  62. gmprocess-2.8.0/src/gmprocess.egg-info/scm_file_list.json +1248 -0
  63. gmprocess-2.8.0/src/gmprocess.egg-info/scm_version.json +8 -0
  64. gmprocess-2.6.0/.coveragerc +0 -8
  65. gmprocess-2.6.0/pytest.ini +0 -4
  66. gmprocess-2.6.0/src/gmprocess/io/knet/knet_fetcher.py +0 -441
  67. gmprocess-2.6.0/src/gmprocess/subcommands/compute_waveform_metrics.py +0 -136
  68. {gmprocess-2.6.0 → gmprocess-2.8.0}/CODE_OF_CONDUCT.md +0 -0
  69. {gmprocess-2.6.0 → gmprocess-2.8.0}/CONTRIBUTING.md +0 -0
  70. {gmprocess-2.6.0 → gmprocess-2.8.0}/DISCLAIMER.md +0 -0
  71. {gmprocess-2.6.0 → gmprocess-2.8.0}/LICENSE.md +0 -0
  72. {gmprocess-2.6.0 → gmprocess-2.8.0}/MANIFEST.in +0 -0
  73. {gmprocess-2.6.0 → gmprocess-2.8.0}/setup.cfg +0 -0
  74. {gmprocess-2.6.0 → gmprocess-2.8.0}/setup.py +0 -0
  75. {gmprocess-2.6.0 → gmprocess-2.8.0}/setup_env.sh +0 -0
  76. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/__init__.py +0 -0
  77. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/apps/__init__.py +0 -0
  78. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/__init__.py +0 -0
  79. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/bundle_datarelease.py +0 -0
  80. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/cwa_gather.py +0 -0
  81. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/fetch_orfeus.py +0 -0
  82. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/fix_inventory.py +0 -0
  83. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/gmconvert.py +0 -0
  84. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/gminfo.py +0 -0
  85. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/gmprocess_config.py +0 -0
  86. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/gmrecords.py +0 -0
  87. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/gmworkspace.py +0 -0
  88. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/bin/update_event_json.sh +0 -0
  89. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/__init__.py +0 -0
  90. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/provenance.py +0 -0
  91. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/stationtrace.py +0 -0
  92. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/core/streamarray.py +0 -0
  93. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/CESMD_NGA_ids.csv +0 -0
  94. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/__init__.py +0 -0
  95. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/config_production.yml +0 -0
  96. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/config_production_v1.yml +0 -0
  97. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/config_test.yml +0 -0
  98. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/config_test_download.yml +0 -0
  99. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/cosmos_table10.xls +0 -0
  100. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/cosmos_table4.xls +0 -0
  101. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/demo/ci38457511/raw/CICCC.RAW +0 -0
  102. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/demo/ci38457511/raw/CICLC.v1 +0 -0
  103. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/demo/ci38457511/raw/CITOW2.RAW +0 -0
  104. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/demo/nc72282711/workspace.h5 +0 -0
  105. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/fdsn_codes.csv +0 -0
  106. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/lme/SA_rotd50.0_2020.03.31.csv +0 -0
  107. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/modules.yml +0 -0
  108. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nga_w2_selected.csv +0 -0
  109. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_clipping/bias_1.csv +0 -0
  110. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_clipping/bias_output.csv +0 -0
  111. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_clipping/masterF.txt +0 -0
  112. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_clipping/weight_1.csv +0 -0
  113. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_clipping/weight_output.csv +0 -0
  114. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/M.csv +0 -0
  115. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/bias_1.csv +0 -0
  116. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/bias_2.csv +0 -0
  117. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/bias_output.csv +0 -0
  118. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/final_training.csv +0 -0
  119. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/masterF.txt +0 -0
  120. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/model_3.txt +0 -0
  121. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/model_5.txt +0 -0
  122. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/mu_sigma.csv +0 -0
  123. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/weight_1.csv +0 -0
  124. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/weight_2.csv +0 -0
  125. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/Cant/weight_output.csv +0 -0
  126. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/M.csv +0 -0
  127. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/bias_1.csv +0 -0
  128. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/bias_2.csv +0 -0
  129. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/bias_output.csv +0 -0
  130. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/final_training.csv +0 -0
  131. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/masterF.txt +0 -0
  132. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/model_0.txt +0 -0
  133. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/mu_sigma.csv +0 -0
  134. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/weight_1.csv +0 -0
  135. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/weight_2.csv +0 -0
  136. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/nn_qa/CantWell/weight_output.csv +0 -0
  137. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/picker.yml +0 -0
  138. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/station_coordinates.xlsx +0 -0
  139. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/data/usgs_ids_nga_and_srcmod_cross_reference.xlsx +0 -0
  140. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/gui/__init__.py +0 -0
  141. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/gui/gui_ucla/Documentation.md +0 -0
  142. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/gui/gui_ucla/GUI_human_review.ipynb +0 -0
  143. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/gui/gui_ucla/HumanReviewGUI.py +0 -0
  144. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/gui/gui_ucla/__init__.py +0 -0
  145. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/__init__.py +0 -0
  146. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/__init__.py +0 -0
  147. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/base_metrics_xml.py +0 -0
  148. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/core.py +0 -0
  149. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/path_utils.py +0 -0
  150. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/utils.py +0 -0
  151. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/waveform_metrics_xml.py +0 -0
  152. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/asdf/workspace_constants.py +0 -0
  153. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/bhrc/__init__.py +0 -0
  154. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/bhrc/core.py +0 -0
  155. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/__init__.py +0 -0
  156. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/cesmd_search.py +0 -0
  157. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/core.py +0 -0
  158. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cosmos/data_structures.py +0 -0
  159. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cwb/__init__.py +0 -0
  160. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/cwb/core.py +0 -0
  161. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/dmg/__init__.py +0 -0
  162. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/dmg/core.py +0 -0
  163. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/dynamic_search_parameters.py +0 -0
  164. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/esm/__init__.py +0 -0
  165. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/esm/core.py +0 -0
  166. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/fetcher.py +0 -0
  167. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/geonet/__init__.py +0 -0
  168. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/geonet/core.py +0 -0
  169. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/knet/__init__.py +0 -0
  170. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/nga.py +0 -0
  171. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/nsmn/__init__.py +0 -0
  172. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/nsmn/core.py +0 -0
  173. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/obspy/__init__.py +0 -0
  174. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/obspy/core.py +0 -0
  175. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/read.py +0 -0
  176. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/read_directory.py +0 -0
  177. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/renadic/__init__.py +0 -0
  178. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/renadic/core.py +0 -0
  179. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/report.py +0 -0
  180. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/seedname.py +0 -0
  181. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/smc/__init__.py +0 -0
  182. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/smc/core.py +0 -0
  183. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/unam/__init__.py +0 -0
  184. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/unam/core.py +0 -0
  185. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/usc/__init__.py +0 -0
  186. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/usc/core.py +0 -0
  187. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/io/utils.py +0 -0
  188. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/__init__.py +0 -0
  189. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/combine.py +0 -0
  190. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/containers.py +0 -0
  191. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/metric_collection_base.py +0 -0
  192. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/oscillator.py +0 -0
  193. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/reduce.py +0 -0
  194. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/rotate.py +0 -0
  195. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/station_metric.py +0 -0
  196. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/transform.py +0 -0
  197. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/utils.py +0 -0
  198. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_calculator.py +0 -0
  199. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_calculator_component_base.py +0 -0
  200. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_component.py +0 -0
  201. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_list.py +0 -0
  202. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/metrics/waveform_metric_type.py +0 -0
  203. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/__init__.py +0 -0
  204. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/arg_dicts.py +0 -0
  205. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/autoprocess.py +0 -0
  206. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/clean.py +0 -0
  207. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/export_gmpacket.py +0 -0
  208. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/generate_regression_plot.py +0 -0
  209. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/generate_report.py +0 -0
  210. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/generate_station_maps.py +0 -0
  211. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/init.py +0 -0
  212. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/lazy_loader.py +0 -0
  213. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/processing_steps.py +0 -0
  214. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/subcommands/projects.py +0 -0
  215. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/__init__.py +0 -0
  216. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/args.py +0 -0
  217. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/assemble_utils.py +0 -0
  218. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/config.py +0 -0
  219. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/config_versioning.py +0 -0
  220. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/download_utils.py +0 -0
  221. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/ground_motion_models.py +0 -0
  222. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/logging.py +0 -0
  223. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/memory.py +0 -0
  224. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/misc.py +0 -0
  225. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/misc_plots.py +0 -0
  226. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/prompt.py +0 -0
  227. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/report_utils.py +0 -0
  228. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/rupture_utils.py +0 -0
  229. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/strec.py +0 -0
  230. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/summary_plots.py +0 -0
  231. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/utils/tables.py +0 -0
  232. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/__init__.py +0 -0
  233. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/adjust_highpass.py +0 -0
  234. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/adjust_highpass_ridder.py +0 -0
  235. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/baseline_correction.py +0 -0
  236. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/clip_detection.py +0 -0
  237. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/clipping_ann.py +0 -0
  238. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/clipping_check.py +0 -0
  239. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/histogram.py +0 -0
  240. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/jerk.py +0 -0
  241. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/max_amp.py +0 -0
  242. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/clipping/ping.py +0 -0
  243. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/convert_units.py +0 -0
  244. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/fft.py +0 -0
  245. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/filtering.py +0 -0
  246. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/integrate.py +0 -0
  247. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/pretesting.py +0 -0
  248. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/processing_step.py +0 -0
  249. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/resample.py +0 -0
  250. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/snr.py +0 -0
  251. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/taper.py +0 -0
  252. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/zero_crossings.py +0 -0
  253. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess/waveform_processing/zero_pad.py +0 -0
  254. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/dependency_links.txt +0 -0
  255. {gmprocess-2.6.0 → gmprocess-2.8.0}/src/gmprocess.egg-info/top_level.txt +0 -0
  256. {gmprocess-2.6.0 → gmprocess-2.8.0}/tools/matlab/README.md +0 -0
  257. {gmprocess-2.6.0 → gmprocess-2.8.0}/tools/matlab/get_all_waveforms.m +0 -0
  258. {gmprocess-2.6.0 → gmprocess-2.8.0}/tools/matlab/get_events.m +0 -0
  259. {gmprocess-2.6.0 → gmprocess-2.8.0}/tools/matlab/get_waveform_metrics.m +0 -0
  260. {gmprocess-2.6.0 → gmprocess-2.8.0}/tools/matlab/waveform_plot.png +0 -0
@@ -0,0 +1,13 @@
1
+ [report]
2
+ precision=2
3
+ omit=
4
+ # No way to test GUI
5
+ src/gmprocess/gui/gui_ucla/*
6
+ */__init__.py
7
+ # This is just a helper script that is only useful for USGS staff
8
+ src/gmprocess/bin/bundle_datarelease.py
9
+ # To be removed, includes a warning that it is not tested
10
+ src/gmprocess/waveform_processing/nn_quality_assurance.py
11
+ [run]
12
+ patch = subprocess
13
+ parallel = true
@@ -22,3 +22,4 @@ dask-worker-space/
22
22
  # Vim tags
23
23
  tags
24
24
  public
25
+ .vscode/
@@ -48,6 +48,9 @@ run tests and coverage:
48
48
  rules:
49
49
  - *fork
50
50
  - *upstream
51
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
52
+ variables:
53
+ VCR_RECORD_MODE: "none"
51
54
  script:
52
55
  - pip install -e .[test]
53
56
  - strec_cfg update --datafolder /home/usgs-user/ --gcmt
@@ -102,3 +105,23 @@ pages:
102
105
  - cd docs
103
106
  - bash makedocs.sh
104
107
  stage: docs
108
+
109
+ regression test:
110
+ rules:
111
+ - if: $CI_PIPELINE_SOURCE == "schedule"
112
+ variables:
113
+ ENVIRONMENT: staging
114
+ - if: >
115
+ $CI_PIPELINE_SOURCE != "schedule"
116
+ && $CI_PIPELINE_SOURCE != "merge_request_event"
117
+ when: manual
118
+ allow_failure: true
119
+ script:
120
+ - pip install -e .[test]
121
+ - pip install polars
122
+ - strec_cfg update --datafolder /home/usgs-user/ --gcmt
123
+ - mkdir /home/usgs-user/slabs
124
+ - cp tests/data/slab_data/*.grd /home/usgs-user/slabs/.
125
+ - cd tests/regression
126
+ - python regression_test.py --parameters ci.yml
127
+ stage: test
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "python.formatting.provider": "black",
3
3
  "editor.formatOnSave": true
4
- }
4
+ }
@@ -1,5 +1,60 @@
1
1
  ## main
2
2
 
3
+ ## 2.8.0 / 2026-08-27
4
+
5
+ - Enhancements
6
+ - Configure pytest to track subprocesses.
7
+ - Regression test with ci.yml config and nn00919749 event for CI monthly pipeline schedule
8
+ - Add extended StationXML parser.
9
+ - Increase use of pytest fixtures in an attempt to speed up unit tests.
10
+ - Vectorize the std_dev clipping check.
11
+ - Optimized the PRISM adaptive baseline correction method.
12
+ - Undo a the use of LazyLoader for situations where it is not necessary.
13
+ - Stop using SciPy for physical constants.
14
+ - Update tests to copy data into tmp_path, making tests independent and parallel-safe.
15
+ - Added FDSNFetcher tests.
16
+ - Added validation check to StationStream to look for traces with all identical values.
17
+ - Fixed bug in knet fetcher related to directory names in downloaded zip files.
18
+ - Fixed bug in check_tail when the trace ends before the window.
19
+ - Dependencies
20
+ - Removed esi-utils-rupture and replaced with esi-shakelib (min version 1.2.1)
21
+ - numpy>=2.0
22
+ - ps2ff>=1.5.9
23
+ - Added pytest-xdist to test dependencies; set addopts = "-n auto" in pyproject.toml to enable.
24
+ - Bugfix
25
+ - Fixed a crash in the SCEDC cloud channel query for windows spanning midnight UTC.
26
+ - Cloud download windows crossing a month or year boundary were treated as a single UTC day.
27
+ - The NCEDC cloud channel query returned a dataframe with no columns when the query failed.
28
+ - handle numpy integer and float in stream_workspace \_serializer
29
+ - FDSNFetcher was not handling the international date line crossing correctly and skipping GeoNet data.
30
+ - Removed the usage of StreamCollection objects in the global fetcher, as they are not used and were not
31
+ consistently returned by all fetcher classes.
32
+ - Fixing bug in knet reader where both horizontal channels were assigned an azimuth of 90.0.
33
+ - Fixing bug in knet fetcher where it was not handling multiple candidate events.
34
+ - Changed output units of SAC files in export_ff_sac.py to be m/s^2, since that is what FFM expects.
35
+ - Other
36
+ - Remove test for nnet_qa step, issue warning that it is on longer tested, and will soon be removed; this is because I don't think anyone uses it and it is a lot of code and the unit tests take a long time.
37
+ - CI/Pipelines
38
+ - Fix issue with unscheduled (unit tests) not running automatically due to scheduled regression test
39
+
40
+ ## 2.7.0 / 2026-06-04
41
+
42
+ - Enhancements
43
+ - Support PSA metric for gmpacket files
44
+ - Add export_ff_sac script for selecting SAC files for finite fault inversion
45
+ - Add unit test for export_ff_sac script
46
+ - Treat an empty location code as the same as "--" when checking for duplicate records
47
+ - Updated KNET fetcher to use NIED http directory interface
48
+ - Added unit tests to test V3 cosmos writer (and updated workspace.h5)
49
+ - Add "count_mean", "count_min", and "count_max" as trace parameters.
50
+ - Add logging to show query for CESMD fetcher if a timeout occurs
51
+ - Bugfix
52
+ - Fixed cosmos v3 writer where damping_values was assigned in wrong scope
53
+ - Fixed cosmos v3 bug with concatenate_channels=False (only one trace got periods)
54
+ - Set trace warnings and failures for instrument response mismatches between total sensitivity and stages.
55
+ - Fix station metric bug in imc_sort by forcing waveform metric to match station metric before writing
56
+ - Fix compute_station_metrics.py to write to station metrics if any stream passed
57
+
3
58
  ## 2.6.0 / 2026-04-20
4
59
 
5
60
  - Enhancements
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gmprocess
3
- Version: 2.6.0
3
+ Version: 2.8.0
4
4
  Summary: USGS Automated Ground Motion Processing Software
5
5
  Author-email: Eric Thompson <emthompsone@usgs.gov>, Mike Hearne <mhearne@usgs.gov>, Brad Aagaard <baagaard@usgs.gov>, Bruce Worden <cbworden@contractor.usgs.gov>, John Rekoske <jrekoske@ucsd.edu>, Heather Hunsinger <hhunsinger@usgs.gov>, Gabe Ferragut <gferragut@usgs.gov>
6
6
  License: License
@@ -57,7 +57,7 @@ Requires-Dist: configobj>=5.0.6
57
57
  Requires-Dist: esi-core>=1.2.1
58
58
  Requires-Dist: esi-utils-colors>1.0
59
59
  Requires-Dist: esi-utils-io>1.0
60
- Requires-Dist: esi-utils-rupture<=1.0.4,>1.0
60
+ Requires-Dist: esi-shakelib>=1.2.1
61
61
  Requires-Dist: folium>=0.12
62
62
  Requires-Dist: gmpacket>=0.1.6
63
63
  Requires-Dist: h3
@@ -65,13 +65,13 @@ Requires-Dist: h5py>=3.11
65
65
  Requires-Dist: lxml>=4.6.1
66
66
  Requires-Dist: matplotlib>=3.1.0
67
67
  Requires-Dist: numba>=0.58
68
- Requires-Dist: numpy>=1.26
68
+ Requires-Dist: numpy<2.4,>=2.0
69
69
  Requires-Dist: obspy>=1.5.0
70
70
  Requires-Dist: openpyxl>=3.1.0
71
71
  Requires-Dist: openquake.engine>=3.18
72
72
  Requires-Dist: pandas>=1.3.0
73
73
  Requires-Dist: Pint>0.24.3
74
- Requires-Dist: ps2ff>=1.5.2
74
+ Requires-Dist: ps2ff>=1.5.9
75
75
  Requires-Dist: pyarrow
76
76
  Requires-Dist: pyasdf>=0.7
77
77
  Requires-Dist: pydantic[email]>=2.0
@@ -93,10 +93,13 @@ Requires-Dist: flake8>=3.9; extra == "dev"
93
93
  Requires-Dist: ipython>=7.26; extra == "dev"
94
94
  Requires-Dist: pylint>=2.17; extra == "dev"
95
95
  Provides-Extra: test
96
+ Requires-Dist: pytest-xdist>=3.8; extra == "test"
96
97
  Requires-Dist: pytest>=6.2; extra == "test"
97
98
  Requires-Dist: pytest-cov>=2.12; extra == "test"
98
99
  Requires-Dist: pytest-console-scripts>=1.4; extra == "test"
100
+ Requires-Dist: pytest-subprocess>=1.6.0; extra == "test"
99
101
  Requires-Dist: vcrpy>=4.1; extra == "test"
102
+ Requires-Dist: polars; extra == "test"
100
103
  Provides-Extra: doc
101
104
  Requires-Dist: altair>=4.2.2; extra == "doc"
102
105
  Requires-Dist: furo>=2023.3.27; extra == "doc"
@@ -129,10 +132,13 @@ Most of the extensions that we provide are to handle strong motion data and rela
129
132
  # Getting Help
130
133
  The developers can be reached at [gmprocess@usgs.gov](mailto:gmprocess@usgs.gov).
131
134
 
132
- If you would like to post an issue to ask a question, request a new feature, or report a bug, you can do so at the [github mirror](https://github.com/DOI-USGS/ghsc-esi-groundmotion-processing) of this repository.
135
+ If you would like to post an issue, ask a question, request a new feature, or report a bug, you can do so at here in
136
+ [Work Items](https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/work_items).
137
+ This GitLab instance, however, is restricted to registered users, and registering a user is not immediate or automatic, requiring an internal approval process.
138
+ Posting issues is easier on GitHub, and the developers of this repository monitor the
139
+ [groundmotion-processing-github](https://github.com/DOI-USGS/groundmotion-processing-github) repository's issues to alleviate need to deal with the code.usgs.gov restrictions.
133
140
 
134
- If you would like to contribute merge requests to this repository, please let us know and we can add you as a collaborator.
135
- This will require that you create an account at code.usgs.gov, which is a more involved process than creating a personal account at github.com and posting to the issues on the github mirror.
141
+ If you would like to contribute merge requests to this repository, please let us know and we can assist you in registering an account at [code.usgs.gov](code.usgs.gov).
136
142
 
137
143
  # Suggested Citation
138
144
  If you wish to cite this software please cite:
@@ -12,10 +12,13 @@ Most of the extensions that we provide are to handle strong motion data and rela
12
12
  # Getting Help
13
13
  The developers can be reached at [gmprocess@usgs.gov](mailto:gmprocess@usgs.gov).
14
14
 
15
- If you would like to post an issue to ask a question, request a new feature, or report a bug, you can do so at the [github mirror](https://github.com/DOI-USGS/ghsc-esi-groundmotion-processing) of this repository.
15
+ If you would like to post an issue, ask a question, request a new feature, or report a bug, you can do so at here in
16
+ [Work Items](https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/work_items).
17
+ This GitLab instance, however, is restricted to registered users, and registering a user is not immediate or automatic, requiring an internal approval process.
18
+ Posting issues is easier on GitHub, and the developers of this repository monitor the
19
+ [groundmotion-processing-github](https://github.com/DOI-USGS/groundmotion-processing-github) repository's issues to alleviate need to deal with the code.usgs.gov restrictions.
16
20
 
17
- If you would like to contribute merge requests to this repository, please let us know and we can add you as a collaborator.
18
- This will require that you create an account at code.usgs.gov, which is a more involved process than creating a personal account at github.com and posting to the issues on the github mirror.
21
+ If you would like to contribute merge requests to this repository, please let us know and we can assist you in registering an account at [code.usgs.gov](code.usgs.gov).
19
22
 
20
23
  # Suggested Citation
21
24
  If you wish to cite this software please cite:
@@ -1,4 +1,45 @@
1
1
  [
2
+ {
3
+ "name": "groundmotion-processing",
4
+ "description": "Read and process ground motion waveform data",
5
+ "version": "v2.7.0",
6
+ "status": "Production",
7
+ "organization": "U.S. Geological Survey",
8
+ "vcs": "git",
9
+ "repositoryURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing.git",
10
+ "homepageURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing",
11
+ "downloadURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/archive/v2.7.0/groundmotion-processing-v2.7.0.zip",
12
+ "disclaimerURL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/raw/v2.7.0/DISCLAIMER.md",
13
+ "permissions": {
14
+ "licenses": [
15
+ {
16
+ "name": "Public Domain, CC0-1.0",
17
+ "URL": "https://code.usgs.gov/ghsc/esi/groundmotion-processing/-/raw/v2.7.0/LICENSE.md"
18
+ }
19
+ ],
20
+ "usageType": "openSource",
21
+ "exemptionText": null
22
+ },
23
+ "laborHours": 1,
24
+ "languages": [
25
+ "python"
26
+ ],
27
+ "tags": [
28
+ "earthquake",
29
+ "impact",
30
+ "strong motion",
31
+ "amplitudes",
32
+ "ground motion",
33
+ "usg-artificial-intelligence"
34
+ ],
35
+ "contact": {
36
+ "name": "Eric Thompson",
37
+ "email": "emthompson@usgs.gov"
38
+ },
39
+ "date": {
40
+ "metadataLastUpdated": "2026-06-04"
41
+ }
42
+ },
2
43
  {
3
44
  "name": "groundmotion-processing",
4
45
  "description": "Read and process ground motion waveform data",
@@ -23,7 +23,7 @@ dependencies = [
23
23
  "esi-core>=1.2.1",
24
24
  "esi-utils-colors>1.0",
25
25
  "esi-utils-io>1.0",
26
- "esi-utils-rupture>1.0,<=1.0.4",
26
+ "esi-shakelib>=1.2.1",
27
27
  "folium>=0.12",
28
28
  "gmpacket>=0.1.6",
29
29
  "h3",
@@ -31,13 +31,13 @@ dependencies = [
31
31
  "lxml>=4.6.1",
32
32
  "matplotlib>=3.1.0",
33
33
  "numba>=0.58",
34
- "numpy>=1.26",
34
+ "numpy>=2.0,<2.4",
35
35
  "obspy>=1.5.0",
36
36
  "openpyxl>=3.1.0",
37
37
  "openquake.engine>=3.18",
38
38
  "pandas>=1.3.0",
39
39
  "Pint>0.24.3",
40
- "ps2ff>=1.5.2",
40
+ "ps2ff>=1.5.9",
41
41
  "pyarrow",
42
42
  "pyasdf>=0.7",
43
43
  "pydantic[email]>=2.0",
@@ -63,10 +63,13 @@ dev = [
63
63
  "pylint>=2.17",
64
64
  ]
65
65
  test = [
66
+ "pytest-xdist>=3.8",
66
67
  "pytest>=6.2",
67
68
  "pytest-cov>=2.12",
68
69
  "pytest-console-scripts>=1.4",
70
+ "pytest-subprocess>=1.6.0",
69
71
  "vcrpy>=4.1",
72
+ "polars",
70
73
  ]
71
74
  doc = [
72
75
  "altair>=4.2.2",
@@ -98,6 +101,8 @@ cwa_gather = "gmprocess.bin.cwa_gather:cli"
98
101
  fix_inventory = "gmprocess.bin.fix_inventory:main"
99
102
  fetch_orfeus = "gmprocess.bin.fetch_orfeus:cli"
100
103
  get_cali_cloud = "gmprocess.bin.get_cali_cloud:main"
104
+ export_ff_sac = "gmprocess.bin.export_ff_sac:main"
105
+
101
106
 
102
107
  [build-system]
103
108
  requires = [
@@ -117,4 +122,3 @@ include = ["gmprocess*"]
117
122
  exclude = ["tests*"]
118
123
 
119
124
  [tool.setuptools_scm]
120
-
@@ -0,0 +1,7 @@
1
+ [pytest]
2
+ addopts =
3
+ --ignore=src/gmprocess/gui/gui_ucla/
4
+ -n auto
5
+ norecursedirs = tests/regression
6
+ filterwarnings =
7
+ ignore::DeprecationWarning
@@ -8,16 +8,15 @@ import inspect
8
8
  import io
9
9
  import logging
10
10
  import os
11
- from pathlib import Path
12
11
  import pkgutil
13
12
  import shutil
14
13
  import sys
15
14
  import traceback
15
+ from pathlib import Path
16
16
 
17
+ from gmprocess.subcommands.lazy_loader import LazyLoader
17
18
  from gmprocess.subcommands.projects import Project
18
19
 
19
- from ..subcommands.lazy_loader import LazyLoader
20
-
21
20
  VERSION = importlib.metadata.version("gmprocess")
22
21
 
23
22
  configobj = LazyLoader("configobj", globals(), "configobj")
@@ -78,7 +77,9 @@ class GMrecordsApp(object):
78
77
 
79
78
  def main(self, **kwargs):
80
79
  self.args = (
81
- argparse.Namespace(**kwargs) if kwargs else self._parse_command_line()
80
+ argparse.Namespace(**kwargs)
81
+ if kwargs
82
+ else self._parse_command_line()
82
83
  )
83
84
  if self.args.subcommand is None:
84
85
  self.parser.print_help()
@@ -86,7 +87,9 @@ class GMrecordsApp(object):
86
87
  else:
87
88
  if self.args.datadir is None and self.args.confdir is None:
88
89
  self.use_projects = True
89
- elif self.args.datadir is not None and self.args.confdir is not None:
90
+ elif (
91
+ self.args.datadir is not None and self.args.confdir is not None
92
+ ):
90
93
  self.use_projects = False
91
94
  else:
92
95
  raise ValueError(
@@ -100,10 +103,15 @@ class GMrecordsApp(object):
100
103
  self._initialize()
101
104
 
102
105
  subcmds_quiet = ["init", "projects", "proj", "processing_steps"]
103
- if self.args.subcommand not in subcmds_quiet and not self.args.quiet:
106
+ if (
107
+ self.args.subcommand not in subcmds_quiet
108
+ and not self.args.quiet
109
+ ):
104
110
  if self.use_projects:
105
111
  # Print the current project information to avoid confusion
106
- proj = Project.from_config(self.projects_conf, self.project_name)
112
+ proj = Project.from_config(
113
+ self.projects_conf, self.project_name
114
+ )
107
115
  else:
108
116
  proj_paths = {
109
117
  "conf_path": self.args.confdir,
@@ -143,7 +151,9 @@ class GMrecordsApp(object):
143
151
  mod = importlib.import_module("gmprocess.subcommands")
144
152
  subcommands = {
145
153
  name: importlib.import_module(name)
146
- for _, name, _ in pkgutil.iter_modules(mod.__path__, mod.__name__ + ".")
154
+ for _, name, _ in pkgutil.iter_modules(
155
+ mod.__path__, mod.__name__ + "."
156
+ )
147
157
  }
148
158
  self.classes = {}
149
159
  for name, module in subcommands.items():
@@ -179,14 +189,18 @@ class GMrecordsApp(object):
179
189
  @property
180
190
  def conf_path(self):
181
191
  if self.projects_path:
182
- return (self.projects_path / self.current_project["conf_path"]).resolve()
192
+ return (
193
+ self.projects_path / self.current_project["conf_path"]
194
+ ).resolve()
183
195
  else:
184
196
  return Path(self.current_project["conf_path"]).resolve()
185
197
 
186
198
  @property
187
199
  def data_path(self):
188
200
  if self.projects_path:
189
- return (self.projects_path / self.current_project["data_path"]).resolve()
201
+ return (
202
+ self.projects_path / self.current_project["data_path"]
203
+ ).resolve()
190
204
  else:
191
205
  return Path(self.current_project["data_path"]).resolve()
192
206
 
@@ -200,10 +214,15 @@ class GMrecordsApp(object):
200
214
 
201
215
  # get the email error notification portion of config, if present
202
216
  error_dict = {}
203
- if self.conf is not None and self.conf["error_notification"] is not None:
217
+ if (
218
+ self.conf is not None
219
+ and self.conf["error_notification"] is not None
220
+ ):
204
221
  error_dict = dict(self.conf["error_notification"])
205
222
 
206
- log_utils.setup_logger(self.args, log_file=log_file, error_dict=error_dict)
223
+ log_utils.setup_logger(
224
+ self.args, log_file=log_file, error_dict=error_dict
225
+ )
207
226
  logging.info("Logging level includes INFO.")
208
227
  logging.debug("Logging level includes DEBUG.")
209
228
  logging.info(f"PROJECTS_PATH: {self.projects_path}")
@@ -255,7 +274,9 @@ class GMrecordsApp(object):
255
274
  str(self.projects_file), encoding="utf-8"
256
275
  )
257
276
 
258
- projmod.validate_projects_config(self.projects_conf, self.projects_path)
277
+ projmod.validate_projects_config(
278
+ self.projects_conf, self.projects_path
279
+ )
259
280
 
260
281
  if "CALLED_FROM_PYTEST" in os.environ:
261
282
  # Check if we are running unit tests
@@ -270,12 +291,19 @@ class GMrecordsApp(object):
270
291
 
271
292
  # Otherwise use the default testing config
272
293
  else:
273
- test_conf_file = (const.DATA_DIR / const.CONFIG_FILE_TEST).resolve()
294
+ test_conf_file = (
295
+ const.DATA_DIR / const.CONFIG_FILE_TEST
296
+ ).resolve()
274
297
 
275
298
  # Copy into the tmp gmptest project directory
276
299
  shutil.copyfile(test_conf_file, conf_path / const.CONFIG_FILE_TEST)
277
300
 
278
- subcommands_need_conf = ["download", "assemble", "autoshakemap", "autoprocess"]
301
+ subcommands_need_conf = [
302
+ "download",
303
+ "assemble",
304
+ "autoshakemap",
305
+ "autoprocess",
306
+ ]
279
307
  if self.args.func.command_name in subcommands_need_conf:
280
308
  self.conf = configmod.get_config(config_path=self.conf_path)
281
309
 
@@ -415,7 +443,9 @@ class GMrecordsApp(object):
415
443
 
416
444
  # Parsers for subcommands
417
445
  subparsers = parser.add_subparsers(
418
- title="Subcommands", dest="subcommand", metavar="<command> (<aliases>)"
446
+ title="Subcommands",
447
+ dest="subcommand",
448
+ metavar="<command> (<aliases>)",
419
449
  )
420
450
 
421
451
  # Get subcommands and their arguments
@@ -450,3 +480,8 @@ class GMrecordsApp(object):
450
480
  parsers[-1].add_argument(*pargs, **targ_dict)
451
481
  parsers[-1].set_defaults(func=cdict["class"])
452
482
  return parser.parse_args()
483
+
484
+
485
+ if __name__ == "__main__":
486
+ app = GMrecordsApp()
487
+ app.main()