shakemap-modules 1.2.2__tar.gz → 1.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/CHANGELOG.md +285 -164
  2. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/PKG-INFO +2 -2
  3. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/pyproject.toml +1 -1
  4. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/base/cli.py +28 -8
  5. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/base/transfer_base.py +10 -4
  6. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/assemble.py +107 -77
  7. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/associate.py +10 -4
  8. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/augment.py +101 -45
  9. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/contour.py +33 -18
  10. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/dyfi.py +61 -29
  11. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/history.py +66 -40
  12. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/kml.py +12 -10
  13. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/makecsv.py +43 -19
  14. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/mapping.py +107 -83
  15. shakemap_modules-1.2.3/src/shakemap_modules/coremods/model.py +681 -0
  16. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/plotregr.py +16 -7
  17. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/raster.py +54 -78
  18. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/shape.py +16 -9
  19. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/sleep.py +4 -2
  20. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/sm_select.py +35 -24
  21. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/transfer_email.py +5 -4
  22. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/transfer_pdl.py +1 -1
  23. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/uncertaintymaps.py +61 -35
  24. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/model.conf +29 -22
  25. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/modelspec.conf +1 -1
  26. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/mapping/mapmaker.py +104 -25
  27. shakemap_modules-1.2.3/src/shakemap_modules/modeling/attenuation.py +59 -0
  28. shakemap_modules-1.2.3/src/shakemap_modules/modeling/bias.py +340 -0
  29. shakemap_modules-1.2.3/src/shakemap_modules/modeling/conditioning.py +84 -0
  30. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/modeling/config.py +2 -65
  31. shakemap_modules-1.2.3/src/shakemap_modules/modeling/ground_motion.py +252 -0
  32. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/modeling/imt_utils.py +31 -0
  33. shakemap_modules-1.2.3/src/shakemap_modules/modeling/info_builder.py +334 -0
  34. shakemap_modules-1.2.3/src/shakemap_modules/modeling/masking.py +259 -0
  35. shakemap_modules-1.2.3/src/shakemap_modules/modeling/mvn.py +539 -0
  36. shakemap_modules-1.2.3/src/shakemap_modules/modeling/options.py +70 -0
  37. shakemap_modules-1.2.3/src/shakemap_modules/modeling/origin_setup.py +172 -0
  38. shakemap_modules-1.2.3/src/shakemap_modules/modeling/output_grid.py +455 -0
  39. shakemap_modules-1.2.3/src/shakemap_modules/modeling/predictors.py +149 -0
  40. shakemap_modules-1.2.3/src/shakemap_modules/modeling/prior.py +327 -0
  41. shakemap_modules-1.2.3/src/shakemap_modules/modeling/results.py +275 -0
  42. shakemap_modules-1.2.3/src/shakemap_modules/modeling/station_conversions.py +123 -0
  43. shakemap_modules-1.2.3/src/shakemap_modules/modeling/station_inventory.py +270 -0
  44. shakemap_modules-1.2.3/src/shakemap_modules/modeling/station_json.py +341 -0
  45. shakemap_modules-1.2.3/src/shakemap_modules/modeling/station_predictions.py +514 -0
  46. shakemap_modules-1.2.3/src/shakemap_modules/modeling/storage.py +251 -0
  47. shakemap_modules-1.2.3/src/shakemap_modules/modeling/uncertainty.py +109 -0
  48. shakemap_modules-1.2.3/src/shakemap_modules/utils/components.py +18 -0
  49. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/dataframe.py +43 -2
  50. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/PKG-INFO +2 -2
  51. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/SOURCES.txt +12 -4
  52. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/requires.txt +1 -1
  53. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/scm_file_list.json +36 -10
  54. shakemap_modules-1.2.3/src/shakemap_modules.egg-info/scm_version.json +8 -0
  55. shakemap_modules-1.2.2/src/shakemap_modules/coremods/model.py +0 -480
  56. shakemap_modules-1.2.2/src/shakemap_modules/modeling/bias.py +0 -296
  57. shakemap_modules-1.2.2/src/shakemap_modules/modeling/context.py +0 -298
  58. shakemap_modules-1.2.2/src/shakemap_modules/modeling/gmpe_setup.py +0 -411
  59. shakemap_modules-1.2.2/src/shakemap_modules/modeling/griddict.py +0 -326
  60. shakemap_modules-1.2.2/src/shakemap_modules/modeling/info_builder.py +0 -293
  61. shakemap_modules-1.2.2/src/shakemap_modules/modeling/masking.py +0 -191
  62. shakemap_modules-1.2.2/src/shakemap_modules/modeling/mvn.py +0 -370
  63. shakemap_modules-1.2.2/src/shakemap_modules/modeling/origin_setup.py +0 -160
  64. shakemap_modules-1.2.2/src/shakemap_modules/modeling/output_grid.py +0 -358
  65. shakemap_modules-1.2.2/src/shakemap_modules/modeling/station_data.py +0 -641
  66. shakemap_modules-1.2.2/src/shakemap_modules/modeling/station_json.py +0 -370
  67. shakemap_modules-1.2.2/src/shakemap_modules/modeling/storage.py +0 -212
  68. shakemap_modules-1.2.2/src/shakemap_modules.egg-info/scm_version.json +0 -8
  69. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/.gitignore +0 -0
  70. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/.gitlab-ci.yml +0 -0
  71. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/DISCLAIMER.md +0 -0
  72. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/LICENSE.md +0 -0
  73. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/MANIFEST.in +0 -0
  74. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/README.md +0 -0
  75. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/code.json +0 -0
  76. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/install.sh +0 -0
  77. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/pytest.ini +0 -0
  78. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/setup.cfg +0 -0
  79. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/setup.py +0 -0
  80. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/base/base.py +0 -0
  81. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/coverage.py +0 -0
  82. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/exception.py +0 -0
  83. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/gridxml.py +0 -0
  84. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/info.py +0 -0
  85. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/rupture.py +0 -0
  86. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/save.py +0 -0
  87. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/stations.py +0 -0
  88. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/transfer_scp.py +0 -0
  89. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/xtestimage.py +0 -0
  90. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/xtestplot.py +0 -0
  91. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/xtestplot_multi.py +0 -0
  92. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/coremods/xtestplot_spectra.py +0 -0
  93. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/fdsn_networks.json +0 -0
  94. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/WGS1984.prj +0 -0
  95. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/mi.lyr +0 -0
  96. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/mi.shp.xml +0 -0
  97. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/pga.lyr +0 -0
  98. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/pga.shp.xml +0 -0
  99. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/pgv.lyr +0 -0
  100. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/pgv.shp.xml +0 -0
  101. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa0p3.lyr +0 -0
  102. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa0p3.shp.xml +0 -0
  103. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa1p0.lyr +0 -0
  104. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa1p0.shp.xml +0 -0
  105. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa3p0.lyr +0 -0
  106. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gis/psa3p0.shp.xml +0 -0
  107. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/gmpe_sets.conf +0 -0
  108. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/alaska.wkt +0 -0
  109. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/australia.wkt +0 -0
  110. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/california.wkt +0 -0
  111. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/cascadia.wkt +0 -0
  112. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/chile.wkt +0 -0
  113. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/china.wkt +0 -0
  114. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/europe_share.wkt +0 -0
  115. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/hawaii.wkt +0 -0
  116. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/induced.wkt +0 -0
  117. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/japan.wkt +0 -0
  118. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/new_zealand.wkt +0 -0
  119. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/south_africa.wkt +0 -0
  120. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/layers/taiwan.wkt +0 -0
  121. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/logging.conf +0 -0
  122. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/loggingspec.conf +0 -0
  123. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/circle.png +0 -0
  124. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/intensity_legend.png +0 -0
  125. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.cn +0 -0
  126. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.en +0 -0
  127. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.en-AU +0 -0
  128. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.en-CA +0 -0
  129. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.es +0 -0
  130. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.fr-CA +0 -0
  131. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.it +0 -0
  132. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/map_strings.tw +0 -0
  133. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/mapping/triangle.png +0 -0
  134. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/migrate.conf +0 -0
  135. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/migratespec.conf +0 -0
  136. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/modules.conf +0 -0
  137. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/modulesspec.conf +0 -0
  138. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/products.conf +0 -0
  139. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/productsspec.conf +0 -0
  140. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/queue.conf +0 -0
  141. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/queuespec.conf +0 -0
  142. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/select.conf +0 -0
  143. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/selectspec.conf +0 -0
  144. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/shake.conf +0 -0
  145. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/shakespec.conf +0 -0
  146. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/simulationspec.conf +0 -0
  147. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/transfer.conf +0 -0
  148. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/transfer_reviewed_origin.conf +0 -0
  149. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/data/transferspec.conf +0 -0
  150. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/mapping/mercatormap.py +0 -0
  151. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/mapping/scalebar.py +0 -0
  152. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/modeling/__init__.py +0 -0
  153. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/modeling/distance_utils.py +0 -0
  154. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/modeling/formatting.py +0 -0
  155. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/amps.py +0 -0
  156. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/comcat.py +0 -0
  157. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/config.py +0 -0
  158. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/generic_amp.py +0 -0
  159. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/layers.py +0 -0
  160. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/logging_utils.py +0 -0
  161. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/macros.py +0 -0
  162. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/points_to_station.py +0 -0
  163. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/probs.py +0 -0
  164. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/smclone.py +0 -0
  165. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules/utils/utils.py +0 -0
  166. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/dependency_links.txt +0 -0
  167. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/entry_points.txt +0 -0
  168. {shakemap_modules-1.2.2 → shakemap_modules-1.2.3}/src/shakemap_modules.egg-info/top_level.txt +0 -0
@@ -1,10 +1,131 @@
1
1
  # main
2
2
 
3
+ ## 1.2.3 / 2026-09-06
4
+ - Modules refactor
5
+ - Refactored and reviewed ShakeMap top-level modules for consistent
6
+ standalone/shake behavior, resource handling, and CoreModule
7
+ argument parsing.
8
+ - Fixed standalone configuration-path handling in assemble,
9
+ associate, and select while preserving backward compatibility
10
+ with direct config-file calls.
11
+ - Fixed top-level --comment handling so assemble comments no longer
12
+ interfere with chained module parsing.
13
+ - Improved transfer/augment robustness, including cleanup on failed
14
+ PDL transfers, missing-email attachments, output-directory handling,
15
+ packet JSON ingestion, and .saved state management.
16
+ - Fixed multi-component product handling in raster, contour,
17
+ mapping, uncertainty-map, and plot regression modules to prevent
18
+ wrong-component selection, filename overwrites, and contents.xml
19
+ collisions.
20
+ - Standardized preferred-component selection, using
21
+ GREATER_OF_TWO_HORIZONTAL when available with deterministic
22
+ fallback behavior.
23
+ - Improved mapping/KML/shape reliability without changing
24
+ established rendering behavior; fixed component-order dependence,
25
+ container cleanup, map target metadata, and several small resource
26
+ leaks.
27
+ - Preserved and integrated recent antimeridian, ocean-contour,
28
+ hillshade, Natural Earth, and mapping performance improvements.
29
+ - Improved DYFI robustness: optional retrieval failures are now
30
+ nonfatal throughout, GeoJSON station names are parsed correctly,
31
+ and dateline-crossing cells get correct center longitudes.
32
+ - Vectorized DYFI uncertainty lookup with identical threshold behavior
33
+ and a large performance improvement.
34
+ - Hardened history/version handling, backup parsing, empty-history
35
+ behavior, and HDF container cleanup.
36
+ - Left the refactored model orchestration layer intentionally thin;
37
+ no additional changes were needed after review.
38
+ - Refactor b20
39
+ - Updated finite-rupture prediction code to request uncertainty
40
+ components from the actual filtered GMPE or IPE being evaluated,
41
+ rather than from cached capabilities of the unfiltered default
42
+ model.
43
+ - Removed obsolete cached uncertainty fields from PredictorSet
44
+ (gmpe_total_sd_only, gmpe_stddev_types, ipe_total_sd_only, and
45
+ ipe_stddev_types) and centralized predictor capability resolution.
46
+ - Changed internal tau/phi fallback logic to depend on the uncertainty
47
+ components actually returned by a prediction; ShakeMap synthesizes
48
+ a tau/phi split only when the prediction supplies total sigma alone.
49
+ - Added provenance to station predictions so ShakeMap can distinguish
50
+ predictor-supplied tau/phi from internally synthesized values.
51
+ - Corrected stationlist.json uncertainty output to report the
52
+ predictor’s total sigma directly rather than reconstructing sigma
53
+ from tau and phi.
54
+ - Changed stationlist.json to report tau and phi only when they were
55
+ supplied by the unconditioned prediction; synthetic internal tau/phi
56
+ values are now serialized as null.
57
+ - Added regression coverage for mixed per-IMT uncertainty capabilities,
58
+ filtered GMPEs, VirtualIPE-derived predictions, total-only predictions,
59
+ and station JSON uncertainty provenance.
60
+ - Restored dashed ground-motion contours over water while preserving solid
61
+ contours over land. Replaced the previous double-draw/z-order approach
62
+ with direct land/water segmentation using the pre-rendered basemap
63
+ raster, reducing contour rendering overhead.
64
+ - Refactor b19 - Masking and Bias
65
+ - Fixed custom-mask handling for point output so configured raster
66
+ masks are ignored rather than attempting to apply an empty grid
67
+ mask to point arrays.
68
+ - Range-limited Engler event-state conditioning.
69
+ - Corrected nominal-bias semantics.
70
+ - BiasResult/ConditioningSystem ownership cleanup.
71
+ - Removal of bias_max_dsigma.
72
+ - Corrected MMI station uncertainty selection so MMI uses the IPE
73
+ total-standard-deviation mode rather than the GMPE mode.
74
+ - Optimized land masking by clipping selected Natural Earth 10 m
75
+ geometries to raster pixel-edge bounds before rasterization, with
76
+ bit-for-bit identical masks and substantially improved performance.
77
+ - Fixed stale rock/soil station depth parameters by constructing
78
+ fresh site contexts for the rock and soil Vs30 cases.
79
+ - Removed the dead ModelResults.conditioning field.
80
+ - Made info_builder copy prediction metadata rather than mutate the
81
+ supplied metadata object.
82
+ - Cleaned up remaining directivity issues, including MMI handling and
83
+ stale/error-prone code.
84
+ - Fixed standalone model logging to use model.log rather than the
85
+ obsolete shape.log.
86
+ - Added masking-equivalence regression coverage to protect the
87
+ land-mask optimization.
88
+ - Refactor b18 — Prediction/state cleanup and optimization
89
+ - Kept point-output arrays 1-D end-to-end and reused existing station
90
+ distance contexts.
91
+ - Reduced PredictionRuntime to rupture/directivity state and moved
92
+ prediction metadata construction to a pure function.
93
+ - Added FFSimmer/VirtualIPE source-GMPE reuse for point-rupture station
94
+ predictions, removing duplicate VirtualIPE GMPE evaluations.
95
+ - Removed hidden land-mask state and made custom masking non-mutating.
96
+ - Removed dead persisted fields from rupture, geometry, attenuation, and
97
+ predictor products.
98
+ - Tested finite-rupture VirtualIPE reuse, found the speed gain too small
99
+ to justify the added complexity, and reverted it.
100
+ - Reduced representative ci3144585 model time further to about 36.5 s,
101
+ roughly 29% faster than b16 overall.
102
+ - Refactor b17 — Station modeling refactor
103
+ - Replaced dataframe-centric station state with explicit station
104
+ observation, geometry, prediction, QC, bias, and group products.
105
+ - Removed StationDataFrame-style temporal prediction/conversion
106
+ bookkeeping from the modeling path.
107
+ - Made MMI↔PGM station conversions explicit and preserved native versus
108
+ derived observation provenance.
109
+ - Eliminated a redundant station prediction pass, cutting station FFSimmer
110
+ work roughly in half.
111
+ - Reduced representative ci3144585 model time from about 51.1 s to 38.7 s.
112
+ - Refactor b10--b16 — Modeling architecture refactor
113
+ - Removed the giant ModelingContext and replaced it with explicit modeling
114
+ products and data flow.
115
+ - Broke the model workflow into focused setup, prediction, conditioning,
116
+ bias, MVN, and output stages.
117
+ - Established the architecture that b17/b18 subsequently simplified rather
118
+ than replacing.
119
+ - Reconciled assemble's -p option with model.conf's
120
+ interp->prediction_location->file option.
121
+ - Broke out get_imt_type_indices function from compute_bias; added imt_type_ix
122
+ array to each IMT in output HDF file.
123
+
3
124
  ## 1.2.2 / 2026-08-23
4
125
  - Update esi-shakelib requirement to v1.2.5.
5
126
  - Add 0.6 sec SA to default imt_list in model.conf.
6
127
  - Mapping and Uncertainty Map Improvements
7
- o Hillshade and terrain rendering
128
+ - Hillshade and terrain rendering
8
129
  - Replaced Matplotlib LightSource.blend_hsv() with a custom RGB hillshade
9
130
  blend to avoid the dark/teal color shifts seen in some maps.
10
131
  - Retained a single directional light source for consistent terrain relief.
@@ -20,7 +141,7 @@
20
141
  - The final balance produces darker, better-defined relief, avoids the
21
142
  garish mint-green appearance in many coastal/lowland areas, and restores
22
143
  richer terrain colors.
23
- o Vector-layer performance
144
+ - Vector-layer performance
24
145
  - Added Fiona/GDAL bbox-filtered reads for map vector layers so geometries
25
146
  outside the map region are not unnecessarily materialized.
26
147
  - Applied regional filtering to configured vector layers and Natural Earth
@@ -30,7 +151,7 @@
30
151
  - Mapping also applies regional filtering to roads and faults.
31
152
  - These changes substantially reduced Natural Earth/vector I/O and Cartopy
32
153
  geometry-projection costs.
33
- o Antimeridian handling
154
+ - Antimeridian handling
34
155
  - Added robust detection for maps crossing 180 degrees in all supported
35
156
  longitude representations:
36
157
  * wrapped bounds, such as 179 to -179
@@ -44,7 +165,7 @@
44
165
  full-rendering path.
45
166
  - The same antimeridian behavior is used by both mapping and
46
167
  uncertaintymaps.
47
- o Shared rendering and caching
168
+ - Shared rendering and caching
48
169
  - Reuse a single Mercator projection for all maps generated for an event.
49
170
  - Render static basemap layers once per event and reuse the resulting raster
50
171
  for all IMT maps.
@@ -54,7 +175,7 @@
54
175
  filtered/positioned city list.
55
176
  - Compute projected topography and hillshade intensity once per event and
56
177
  reuse them across regular maps.
57
- o Matplotlib rendering optimizations
178
+ - Matplotlib rendering optimizations
58
179
  - Removed redundant fig.canvas.draw() calls when precomputed city-collision
59
180
  results are available.
60
181
  - Preserved the canvas draw fallback for callers that still require local
@@ -66,7 +187,7 @@
66
187
  before reuse.
67
188
  - Mapping and uncertainty maps can independently add small amounts of extra
68
189
  right/top padding by adjusting the cached bounding box coordinates.
69
- o Uncertainty map improvements
190
+ - Uncertainty map improvements
70
191
  - Applied the same regional vector-reading and antimeridian optimizations as
71
192
  the regular mapping path.
72
193
  - Reused the shared projection, basemap raster, and precomputed city
@@ -80,7 +201,7 @@
80
201
  - In the profiled test case, uncertaintymaps runtime dropped from about
81
202
  68.6 seconds to about 46.4 seconds after the canvas-draw and tight-bbox
82
203
  optimizations.
83
- o Performance summary
204
+ - Performance summary
84
205
  - The ordinary mapping path improved from roughly 56.7 seconds to roughly
85
206
  31 seconds before the later rendering optimizations, with a further modest
86
207
  improvement from eliminating redundant canvas draws and bbox calculations.
@@ -89,7 +210,7 @@
89
210
  original vector-rendering behavior.
90
211
  - Uncertainty-map rendering improved by roughly 22 seconds, or about 32
91
212
  percent, in the profiled case after eliminating duplicate rendering work.
92
- o Testing and robustness
213
+ - Testing and robustness
93
214
  - Added regression coverage for ordinary, wrapped-antimeridian, and
94
215
  unwrapped-antimeridian clip-box construction.
95
216
  - Added tests confirming that ordinary maps use bbox-filtered reads while
@@ -99,236 +220,236 @@
99
220
  - Revised makecsv -g to provide a dummy network code of "--" for stations that
100
221
  don't have a network code.
101
222
  - Hardened station-value handling in mapmaker.py
102
- o Updated map station plotting to handle Python None in addition to legacy "null"
223
+ - Updated map station plotting to handle Python None in addition to legacy "null"
103
224
  values.
104
- o Safely handles missing/invalid observed intensity, converted instrumental intensity,
225
+ - Safely handles missing/invalid observed intensity, converted instrumental intensity,
105
226
  and IMT amplitudes.
106
- o Missing instrumental amplitudes are skipped rather than interpreted as zero.
107
- o Fixed the Tohoku mapping failure caused by float(None).
227
+ - Missing instrumental amplitudes are skipped rather than interpreted as zero.
228
+ - Fixed the Tohoku mapping failure caused by float(None).
108
229
  - Resolved high-latitude/polar mapping failures
109
- o Tracked several Cartopy failures for the Franz Josef Land event through projection
230
+ - Tracked several Cartopy failures for the Franz Josef Land event through projection
110
231
  construction, extent setting, and raster rendering.
111
- o Confirmed that using event latitude bounds as
232
+ - Confirmed that using event latitude bounds as
112
233
  Mercator(min_latitude=..., max_latitude=...) was incorrect.
113
- o Rejected Azimuthal Equidistant and Plate Carrée alternatives after testing exposed
234
+ - Rejected Azimuthal Equidistant and Plate Carrée alternatives after testing exposed
114
235
  curved raster-domain artifacts and severe map distortion.
115
- o Kept the existing Mercator architecture but expanded its fixed projection validity
236
+ - Kept the existing Mercator architecture but expanded its fixed projection validity
116
237
  range to approximately ±89.5°.
117
- o Centralized Mercator construction so mapping.py, mapmaker.py, and MercatorMap all use
238
+ - Centralized Mercator construction so mapping.py, mapmaker.py, and MercatorMap all use
118
239
  the same projection.
119
- o Restored correct map geometry, aspect, raster alignment, contours, graticules, and
240
+ - Restored correct map geometry, aspect, raster alignment, contours, graticules, and
120
241
  epicenter placement for the far-north event.
121
- o Identified the corresponding uncertaintymaps projection update
122
- o Confirmed that uncertaintymaps.py independently constructs the old default Mercator
242
+ - Identified the corresponding uncertaintymaps projection update
243
+ - Confirmed that uncertaintymaps.py independently constructs the old default Mercator
123
244
  projection.
124
- o Determined that it should use the same centralized get_map_projection() helper as
245
+ - Determined that it should use the same centralized get_map_projection() helper as
125
246
  mapping.py.
126
247
  - Hardened station-value handling in kml.py
127
- o Fixed KML generation failure when station amplitudes contain Python None.
128
- o Added a shared finite-number conversion helper accepting numeric values while rejecting
248
+ - Fixed KML generation failure when station amplitudes contain Python None.
249
+ - Added a shared finite-number conversion helper accepting numeric values while rejecting
129
250
  None, "null", malformed values, NaN, and Inf.
130
- o Updated get_imt_text() to ignore missing amplitudes and preserve the existing
251
+ - Updated get_imt_text() to ignore missing amplitudes and preserve the existing
131
252
  "nan <units>" fallback.
132
- o Updated get_intensity() to safely fall back through station intensity, MMI-channel
253
+ - Updated get_intensity() to safely fall back through station intensity, MMI-channel
133
254
  intensity, and finally zero.
134
- o Added regression tests for both None and legacy "null" values.
135
- o Verified the previously failing usp000gvtu KML event now completes successfully.
255
+ - Added regression tests for both None and legacy "null" values.
256
+ - Verified the previously failing usp000gvtu KML event now completes successfully.
136
257
  - Correctness pass over model modules:
137
- o Fixed station-trimming longitude padding and improved dateline/polar handling.
138
- o Replaced global NumPy error-state changes with local np.errstate() contexts.
139
- o Fixed mechanism/STREC precedence and kept rupture/origin context consistent.
140
- o Made input/output container cleanup exception-safe.
141
- o Tightened handling of optional StationList/STREC container data so unrelated AttributeErrors
258
+ - Fixed station-trimming longitude padding and improved dateline/polar handling.
259
+ - Replaced global NumPy error-state changes with local np.errstate() contexts.
260
+ - Fixed mechanism/STREC precedence and kept rupture/origin context consistent.
261
+ - Made input/output container cleanup exception-safe.
262
+ - Tightened handling of optional StationList/STREC container data so unrelated AttributeErrors
142
263
  are not hidden.
143
- o Made finite-rupture context shape restoration exception-safe.
144
- o Removed a duplicate sites_obj_out declaration from ModelingContext.
145
- o Hardened stddev handling so returned arrays are associated with the exact requested stddev
264
+ - Made finite-rupture context shape restoration exception-safe.
265
+ - Removed a duplicate sites_obj_out declaration from ModelingContext.
266
+ - Hardened stddev handling so returned arrays are associated with the exact requested stddev
146
267
  types, with canonical ShakeMap ordering preserved.
147
- o Added regression tests for nonstandard stddev ordering and validation.
268
+ - Added regression tests for nonstandard stddev ordering and validation.
148
269
  - Streamline build-test-deploy pipeline in .gitlab-ci.yml.
149
270
  - Fix mapping bug reported by Anthony C. of GA.
150
271
  - Cleanup/correctness pass on scalebar.py.
151
272
  - Cleanup of codes in shakemap_modules/base:
152
- o Cleaned and simplified CLI argument handling
153
- o Restored optional logdir and transfer outdir behavior to match the documented CLI semantics.
154
- o Simplified path validation and error handling with pathlib and parser.error().
155
- o Limited returned custom-argument dictionaries to only caller-defined options.
156
- o Improved CoreModule/contents handling
157
- o Fixed cross-platform contents.xml download paths to always use portable forward slashes.
158
- o Hardened XML parsing for empty captions and unexpected elements.
159
- o Simplified filesystem and XML writing logic.
160
- o Refined transfer base infrastructure
161
- o Modernized path and UTC handling.
162
- o Simplified backup discovery/versioning and product-property updates.
163
- o Preserved existing transfer-blocking, backup, review-status, and argument-parsing behavior.
164
- o General maintenance
165
- o Removed redundant code and older path-handling patterns.
273
+ - Cleaned and simplified CLI argument handling
274
+ - Restored optional logdir and transfer outdir behavior to match the documented CLI semantics.
275
+ - Simplified path validation and error handling with pathlib and parser.error().
276
+ - Limited returned custom-argument dictionaries to only caller-defined options.
277
+ - Improved CoreModule/contents handling
278
+ - Fixed cross-platform contents.xml download paths to always use portable forward slashes.
279
+ - Hardened XML parsing for empty captions and unexpected elements.
280
+ - Simplified filesystem and XML writing logic.
281
+ - Refined transfer base infrastructure
282
+ - Modernized path and UTC handling.
283
+ - Simplified backup discovery/versioning and product-property updates.
284
+ - Preserved existing transfer-blocking, backup, review-status, and argument-parsing behavior.
285
+ - General maintenance
286
+ - Removed redundant code and older path-handling patterns.
166
287
  - Refactor of files in shakemap_modules/utils:
167
- o Improved configuration handling and validation
168
- o Cleaned up config-path handling, error messages, logging, and configspec usage.
169
- o Preserved existing validator semantics while modernizing implementation details.
170
- o Added clearer failure behavior for invalid or incomplete configuration states.
171
- o Hardened model and GMPE selection utilities
172
- o Added protection against invalid/nonfinite tectonic-region probabilities and STREC
288
+ - Improved configuration handling and validation
289
+ - Cleaned up config-path handling, error messages, logging, and configspec usage.
290
+ - Preserved existing validator semantics while modernizing implementation details.
291
+ - Added clearer failure behavior for invalid or incomplete configuration states.
292
+ - Hardened model and GMPE selection utilities
293
+ - Added protection against invalid/nonfinite tectonic-region probabilities and STREC
173
294
  distances.
174
- o Clarified slab-model handling and subduction GMPE selection.
175
- o Preserved existing probability/taper formulas while tightening validation around
295
+ - Clarified slab-model handling and subduction GMPE selection.
296
+ - Preserved existing probability/taper formulas while tightening validation around
176
297
  unsupported configurations.
177
- o Improved station/data conversion utilities
178
- o Made station/point conversion more deterministic and robust to malformed IDs, missing IMTs,
298
+ - Improved station/data conversion utilities
299
+ - Made station/point conversion more deterministic and robust to malformed IDs, missing IMTs,
179
300
  and incomplete data.
180
- o Improved temporary-file cleanup, SQLite handling, and JSON/XML serialization.
181
- o Standardized UTF-8 handling and safer ASCII normalization for problematic Unicode station names.
182
- o Strengthened amplitude database handling
183
- o Fixed duplicate-station association so each candidate uses its own travel-time estimate.
184
- o Corrected channel matching to distinguish identical channel codes with different location codes.
185
- o Parameterized SQL, improved transaction/resource handling, and corrected timezone conversion
301
+ - Improved temporary-file cleanup, SQLite handling, and JSON/XML serialization.
302
+ - Standardized UTF-8 handling and safer ASCII normalization for problematic Unicode station names.
303
+ - Strengthened amplitude database handling
304
+ - Fixed duplicate-station association so each candidate uses its own travel-time estimate.
305
+ - Corrected channel matching to distinguish identical channel codes with different location codes.
306
+ - Parameterized SQL, improved transaction/resource handling, and corrected timezone conversion
186
307
  behavior.
187
- o Improved ShakeMap cloning support
188
- o Fixed generated model.conf details, including outlier settings and independent X/Y grid spacing.
189
- o Added HTTP timeouts/status checking and reliable temporary-file cleanup.
190
- o Improved station filtering and database cleanup while retaining historical ShakeMap migration
308
+ - Improved ShakeMap cloning support
309
+ - Fixed generated model.conf details, including outlier settings and independent X/Y grid spacing.
310
+ - Added HTTP timeouts/status checking and reliable temporary-file cleanup.
311
+ - Improved station filtering and database cleanup while retaining historical ShakeMap migration
191
312
  behavior.
192
- o Improved logging, layers, amplification, and dataframe helpers
193
- o Fixed logging handler configuration and level handling.
194
- o Corrected polygon edge-distance handling for closing segments.
195
- o Hardened generic amplification grid access and metadata handling.
196
- o Simplified dataframe/XML conversion and removed unused intermediate database work.
197
- o Removed obsolete and dead code
198
- o Removed unused imports, empty methods, redundant configuration plumbing, legacy helper code, and
313
+ - Improved logging, layers, amplification, and dataframe helpers
314
+ - Fixed logging handler configuration and level handling.
315
+ - Corrected polygon edge-distance handling for closing segments.
316
+ - Hardened generic amplification grid access and metadata handling.
317
+ - Simplified dataframe/XML conversion and removed unused intermediate database work.
318
+ - Removed obsolete and dead code
319
+ - Removed unused imports, empty methods, redundant configuration plumbing, legacy helper code, and
199
320
  decorative/commented-out blocks.
200
- o Replaced unnecessary regexes and older Python idioms with simpler modern equivalents.
201
- o General maintenance
202
- o Standardized lazy logging, context-managed resources, explicit UTF-8 handling, modern path handling,
321
+ - Replaced unnecessary regexes and older Python idioms with simpler modern equivalents.
322
+ - General maintenance
323
+ - Standardized lazy logging, context-managed resources, explicit UTF-8 handling, modern path handling,
203
324
  deterministic ordering, and clearer exceptions.
204
325
  - Coremods: assemble augment coverage dyfi gridxml info makecsv raster rupture save shape
205
326
  sleep sm_select stations transfer_email transfer_pdl transfer_scp:
206
- o Resource safety: Reworked many modules so HDF containers, ZIP files, SQLite connections,
327
+ - Resource safety: Reworked many modules so HDF containers, ZIP files, SQLite connections,
207
328
  and ordinary files are reliably closed with try/finally or context managers, including
208
329
  failure paths.
209
- o Safer failure behavior: Delayed destructive cleanup of old products/backups until new
330
+ - Safer failure behavior: Delayed destructive cleanup of old products/backups until new
210
331
  processing had succeeded, removed inappropriate ignore_errors=True, and added clearer
211
332
  standalone argument/directory validation.
212
- o Dependency and target correctness: Fixed stale or incorrect dependency declarations, added
333
+ - Dependency and target correctness: Fixed stale or incorrect dependency declarations, added
213
334
  missing optional inputs and generated targets, and improved handling of dynamically named products.
214
- o Multi-component correctness: Removed assumptions that only the first IMC/component mattered,
335
+ - Multi-component correctness: Removed assumptions that only the first IMC/component mattered,
215
336
  preserved legacy filenames for GREATER_OF_TWO_HORIZONTAL, and added component-specific
216
337
  naming/contents where needed.
217
- o Metadata correctness: Stopped relying on incidental “last IMT processed” state, used each
338
+ - Metadata correctness: Stopped relying on incidental “last IMT processed” state, used each
218
339
  layer’s own metadata where appropriate, and added checks for consistent grid geometry.
219
- o Data integrity fixes: Corrected several subtle problems such as reversed full-grid latitude
340
+ - Data integrity fixes: Corrected several subtle problems such as reversed full-grid latitude
220
341
  ordering, cross-component dataframe column leakage, incorrect DYFI standard-deviation behavior,
221
342
  and per-destination transfer state leaking between destinations.
222
- o Configuration robustness: Standardized str(get_configspec(...)) usage for ConfigObj, validated
343
+ - Configuration robustness: Standardized str(get_configspec(...)) usage for ConfigObj, validated
223
344
  merged configurations rather than only globals, and made standalone configuration handling more
224
345
  explicit.
225
- o Transfer-system cleanup: Fixed NO_TRANSFER control flow, made Email honor mail_once, corrected
346
+ - Transfer-system cleanup: Fixed NO_TRANSFER control flow, made Email honor mail_once, corrected
226
347
  per-PDL-destination system_id handling, avoided mutating shared ConfigObj sections, and made
227
348
  temporary transfer directories exception-safe.
228
- o Deterministic behavior: Sorted glob results where file ordering could affect which input was
349
+ - Deterministic behavior: Sorted glob results where file ordering could affect which input was
229
350
  selected, and hardened backup-version parsing.
230
- o Logging cleanup: Converted many messages to lazy logger formatting, fixed copied/wrong logfile names
351
+ - Logging cleanup: Converted many messages to lazy logger formatting, fixed copied/wrong logfile names
231
352
  and messages, replaced deprecated logging calls, and standardized use of module loggers.
232
- o Modern Python cleanup: Replaced old-style super(...), removed dead imports/constants/scaffolding,
353
+ - Modern Python cleanup: Replaced old-style super(...), removed dead imports/constants/scaffolding,
233
354
  simplified redundant subclasses and branches, used timezone-aware UTC timestamps, and switched file
234
355
  I/O to explicit UTF-8.
235
- o API consistency: Fixed mismatches between constructors, execute() methods, and standalone main()
356
+ - API consistency: Fixed mismatches between constructors, execute() methods, and standalone main()
236
357
  calls, and initialized module state consistently.
237
- o Code quality without gratuitous behavioral change: Removed a lot of dead or misleading code, kept
358
+ - Code quality without gratuitous behavioral change: Removed a lot of dead or misleading code, kept
238
359
  lines within 79 columns, and generally preserved scientific/product behavior unless there was a
239
360
  clear correctness bug or confirmed intended change.
240
- o Overall, the common theme was making the coremods more predictable, failure-safe, deterministic, and
361
+ - Overall, the common theme was making the coremods more predictable, failure-safe, deterministic, and
241
362
  internally consistent while also deleting quite a bit of historical cruft.
242
363
  - assemble.py:
243
- o expanded dependencies to include the event-local inputs that actually affect assemble
244
- o fixed backup selection to sort backupN directories numerically instead of lexicographically
245
- o corrected simulation.conf validation errors to report against sim_config
246
- o ensured all ShakeMapInputContainer instances are closed with try/finally
247
- o changed history.json reading to a context manager
248
- o added explicit validation for standalone config, indir, and outdir
249
- o removed ignore_errors=True from destructive directory cleanup
250
- o fixed the stale .transferred comment to .saved
251
- o normalized get_configspec("simulation") with str(...)
252
- o made X/Y simulation reshaping honor row/column ordering
253
- o strengthened LAT/LON and X/Y regular-grid validation
254
- o added explicit errors for missing coordinate columns and incorrect simulation row counts
255
- o convert nonfinite/nonpositive simulated amplitudes to NaN before taking logs
256
- o hardened _trim_grid() against all-invalid and untrimmable grids
257
- o changed the standalone logfile from the apparent copy/paste shape.log to assemble.log
258
- o modernized super(), set literals, truthiness checks, and some logging/style details
259
- o removed the leftover # ADD THIS comment
364
+ - expanded dependencies to include the event-local inputs that actually affect assemble
365
+ - fixed backup selection to sort backupN directories numerically instead of lexicographically
366
+ - corrected simulation.conf validation errors to report against sim_config
367
+ - ensured all ShakeMapInputContainer instances are closed with try/finally
368
+ - changed history.json reading to a context manager
369
+ - added explicit validation for standalone config, indir, and outdir
370
+ - removed ignore_errors=True from destructive directory cleanup
371
+ - fixed the stale .transferred comment to .saved
372
+ - normalized get_configspec("simulation") with str(...)
373
+ - made X/Y simulation reshaping honor row/column ordering
374
+ - strengthened LAT/LON and X/Y regular-grid validation
375
+ - added explicit errors for missing coordinate columns and incorrect simulation row counts
376
+ - convert nonfinite/nonpositive simulated amplitudes to NaN before taking logs
377
+ - hardened _trim_grid() against all-invalid and untrimmable grids
378
+ - changed the standalone logfile from the apparent copy/paste shape.log to assemble.log
379
+ - modernized super(), set literals, truthiness checks, and some logging/style details
380
+ - removed the leftover # ADD THIS comment
260
381
  - shape.py:
261
- o Fixed AREA/PERIMETER warnings.
262
- o General clean up of module code.
382
+ - Fixed AREA/PERIMETER warnings.
383
+ - General clean up of module code.
263
384
  - Suppressed a GDAL warning emitted by rasterio.features.shapes() in mapping.py.
264
385
  - Changed the name of logging.py to logging_utils.py. Updated all affected modules.
265
386
  - Modified config.py:
266
- o Improved configuration logging by replacing deprecated logging.warn() calls with
387
+ - Improved configuration logging by replacing deprecated logging.warn() calls with
267
388
  logging.warning() and converting logging messages to lazy formatting.
268
- o Added explicit exception chaining when validators convert low-level TypeError/ValueError
389
+ - Added explicit exception chaining when validators convert low-level TypeError/ValueError
269
390
  exceptions into ValidateError, preserving the original cause for debugging.
270
- o Simplified and hardened annotatedfloat_type() by removing broad exception handling
391
+ - Simplified and hardened annotatedfloat_type() by removing broad exception handling
271
392
  and validating supported unit suffixes explicitly.
272
- o Fixed cfg_bool() so native boolean values are handled correctly and invalid boolean
393
+ - Fixed cfg_bool() so native boolean values are handled correctly and invalid boolean
273
394
  strings raise ValidateError instead of being silently treated as False.
274
- o Fixed check_all_configs() so a validation exception cannot leave results undefined
395
+ - Fixed check_all_configs() so a validation exception cannot leave results undefined
275
396
  before later use.
276
- o Fixed check_profile_config() to avoid deleting profile entries while iterating over
397
+ - Fixed check_profile_config() to avoid deleting profile entries while iterating over
277
398
  the live dictionary key view.
278
- o Improved validator robustness for malformed or unexpected input types while preserving
399
+ - Improved validator robustness for malformed or unexpected input types while preserving
279
400
  the existing configuration-validation behavior where appropriate.
280
- o General cleanup for pylint compliance and clearer error reporting without changing valid
401
+ - General cleanup for pylint compliance and clearer error reporting without changing valid
281
402
  ShakeMap configuration semantics.
282
403
  - Optimized KML generation
283
- o Reduced KML runtime from roughly 5.5 s to ~3 s.
284
- o Improved contour-generation efficiency while retaining the existing Natural Earth 10m ocean-mask behavior.
285
- o Removed dead constants, unused legacy functions, redundant code, and stale documentation.
286
- o Improved NaN handling in MMI polygon generation.
404
+ - Reduced KML runtime from roughly 5.5 s to ~3 s.
405
+ - Improved contour-generation efficiency while retaining the existing Natural Earth 10m ocean-mask behavior.
406
+ - Removed dead constants, unused legacy functions, redundant code, and stale documentation.
407
+ - Improved NaN handling in MMI polygon generation.
287
408
  - Fixed KML layer visibility and organization
288
- o Corrected station, contour, and polygon visibility behavior in Google Earth by removing redundant
409
+ - Corrected station, contour, and polygon visibility behavior in Google Earth by removing redundant
289
410
  child-level visibility=0 settings.
290
- o Moved individual IMT contour folders to the top level instead of nesting them under a common Contours folder.
291
- o Verified that the missing intensity legend in Google Earth Web is due to unsupported ScreenOverlay
411
+ - Moved individual IMT contour folders to the top level instead of nesting them under a common Contours folder.
412
+ - Verified that the missing intensity legend in Google Earth Web is due to unsupported ScreenOverlay
292
413
  rendering rather than bad KML or a missing/corrupt legend image.
293
- o Retained a conventional ScreenOverlay implementation for clients that support it.
294
- o Updated KML tests for the revised hierarchy and improved their resource/error handling.
414
+ - Retained a conventional ScreenOverlay implementation for clients that support it.
415
+ - Updated KML tests for the revised hierarchy and improved their resource/error handling.
295
416
  - Cleaned coremods/contour.py
296
- o Removed redundant directory checks and dead constructor filter state.
297
- o Standardized contour filter sizing on products.conf.
298
- o Ensured the ShakeMap output container is always closed.
299
- o Replaced manual Fiona/JSON resource management with context managers.
300
- o Removed overly broad GMICE exception handling so invalid configuration now fails explicitly.
301
- o Clarified GMICE applicability logic for MMI, PGA/PGV, and SA.
302
- o Consolidated duplicate schemas.
303
- o Corrected empty-contour GeoJSON bbox output to use a numeric array rather than a string.
304
- o Cleaned variable shadowing, comments, docstrings, and minor redundancies.
305
- o Preserved required conversion of configspec paths to strings for ConfigObj.
417
+ - Removed redundant directory checks and dead constructor filter state.
418
+ - Standardized contour filter sizing on products.conf.
419
+ - Ensured the ShakeMap output container is always closed.
420
+ - Replaced manual Fiona/JSON resource management with context managers.
421
+ - Removed overly broad GMICE exception handling so invalid configuration now fails explicitly.
422
+ - Clarified GMICE applicability logic for MMI, PGA/PGV, and SA.
423
+ - Consolidated duplicate schemas.
424
+ - Corrected empty-contour GeoJSON bbox output to use a numeric array rather than a string.
425
+ - Cleaned variable shadowing, comments, docstrings, and minor redundancies.
426
+ - Preserved required conversion of configspec paths to strings for ConfigObj.
306
427
  - Major optimization of plotregr.py
307
- o Reduced normal runtime from roughly 4.5 s to ~0.5 s.
308
- o Reduced profiled runtime from 8.4 s to ~1.1 s.
309
- o Replaced thousands of per-station Matplotlib calls with batched seismic and macroseismic station plotting.
310
- o Reduced Matplotlib object creation and eliminated most of the expensive legend-placement overhead.
311
- o Fixed a multi-component bug where the output container was closed inside the component loop.
312
- o Reused attenuation arrays instead of rereading them for JSON output.
313
- o Reduced data passed to plotting routines and cleaned file/resource handling.
314
- o Removed obsolete multiprocessing support after benchmarking showed 8 workers increased runtime from ~0.5 s to ~4.5 s.
315
- o Simplified plotregr to always render serially.
428
+ - Reduced normal runtime from roughly 4.5 s to ~0.5 s.
429
+ - Reduced profiled runtime from 8.4 s to ~1.1 s.
430
+ - Replaced thousands of per-station Matplotlib calls with batched seismic and macroseismic station plotting.
431
+ - Reduced Matplotlib object creation and eliminated most of the expensive legend-placement overhead.
432
+ - Fixed a multi-component bug where the output container was closed inside the component loop.
433
+ - Reused attenuation arrays instead of rereading them for JSON output.
434
+ - Reduced data passed to plotting routines and cleaned file/resource handling.
435
+ - Removed obsolete multiprocessing support after benchmarking showed 8 workers increased runtime from ~0.5 s to ~4.5 s.
436
+ - Simplified plotregr to always render serially.
316
437
  - Fixed bug in logging.py.
317
438
  - Tried to make multiprocessing of mapping and plotting modules a little safer.
318
439
  - Removed multiprocessing from shape.py because it made it slower.
319
440
  - Remove annoying 'Down-casting double precision floating point to single precision' warning in raster.py.
320
441
  - Removed obsolete numpy RankWarning monkeypatch.
321
442
  - mapping and uncertaintymaps optimizations
322
- o Cache city-label collision detection once per event instead of recomputing it for every map.
323
- o Switch station-marker plotting from per-point ax.plot() calls to batched ax.scatter() (both filled
443
+ - Cache city-label collision detection once per event instead of recomputing it for every map.
444
+ - Switch station-marker plotting from per-point ax.plot() calls to batched ax.scatter() (both filled
324
445
  and unfilled variants) — fixes a rendering hang as well as performance.
325
- o Deduplicate contour-line geometry projection (was projecting the same contours twice, once each for
446
+ - Deduplicate contour-line geometry projection (was projecting the same contours twice, once each for
326
447
  the dashed and solid passes).
327
- o Skip topography reprojection entirely in draw_uncertainty_map() (result was computed but never used);
448
+ - Skip topography reprojection entirely in draw_uncertainty_map() (result was computed but never used);
328
449
  cache the projected topography + hillshade once per event in draw_map() instead of recomputing per IMT.
329
- o Add explicit transform=ax.transData to per-map data-image imshow calls to avoid unnecessary Cartopy CRS re-warping.
330
- o Extend all of the above (basemap raster, collision caching) to uncertaintymaps.py, which hadn't had any of it.
331
- o Fix xmin/xmax/ymin/ymax not being cast to float in uncertaintymaps.py, causing a TypeError in GeoDict.createDictFromBox.
450
+ - Add explicit transform=ax.transData to per-map data-image imshow calls to avoid unnecessary Cartopy CRS re-warping.
451
+ - Extend all of the above (basemap raster, collision caching) to uncertaintymaps.py, which hadn't had any of it.
452
+ - Fix xmin/xmax/ymin/ymax not being cast to float in uncertaintymaps.py, causing a TypeError in GeoDict.createDictFromBox.
332
453
 
333
454
  ## 1.2.1 / 2026-08-14
334
455
  - Add blas_threads and openmp_threads config parameters to model.conf.
@@ -337,15 +458,15 @@
337
458
 
338
459
  ## 1.2.0 / 2026-08-10
339
460
  - Optimize mapping performance:
340
- o Render the static basemap/faults/roads layers once instead of once per IMT map
341
- o Vectorize the station plotting
342
- o Deduplicate the contour reprojection
343
- o Clip faults/roads to the map bounds before handing them to Cartopy
461
+ - Render the static basemap/faults/roads layers once instead of once per IMT map
462
+ - Vectorize the station plotting
463
+ - Deduplicate the contour reprojection
464
+ - Clip faults/roads to the map bounds before handing them to Cartopy
344
465
  - Refactor model:
345
- o Refactor model.py into a suite of smaller modules.
346
- o Create unit tests for all of the new modules.
347
- o Optimize performance of model.
348
- o Remove max_workers config parameter; add row_block.
466
+ - Refactor model.py into a suite of smaller modules.
467
+ - Create unit tests for all of the new modules.
468
+ - Optimize performance of model.
469
+ - Remove max_workers config parameter; add row_block.
349
470
  - Make the RNG seed for FFSimmer a function of event ID instead of a constant.
350
471
  - Change esi-core>=1.2.8, gmpacket>=0.1.10, and esi-shakelib>=1.2.2 in pyproject.toml.
351
472
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shakemap-modules
3
- Version: 1.2.2
3
+ Version: 1.2.3
4
4
  Summary: USGS Earthquake Impact ShakeMap Modules
5
5
  Author-email: Bruce Worden <cbworden@contractor.usgs.gov>, Eric Thompson <emthompsone@usgs.gov>, Mike Hearne <mhearne@usgs.gov>
6
6
  License-Expression: CC0-1.0
@@ -8,7 +8,7 @@ Requires-Python: <3.13,>=3.12
8
8
  Description-Content-Type: text/markdown
9
9
  License-File: LICENSE.md
10
10
  Requires-Dist: configobj>=5.0.8
11
- Requires-Dist: esi-shakelib>=1.2.5
11
+ Requires-Dist: esi-shakelib>=1.2.6
12
12
  Requires-Dist: h5py>=3.8.0
13
13
  Requires-Dist: importlib-resources>=6.0.0
14
14
  Provides-Extra: assemble