gragra 0.2.0rc1__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 (1079) hide show
  1. gragra-0.2.0rc1/.github/workflows/ci.yml +226 -0
  2. gragra-0.2.0rc1/.github/workflows/deploy-pages.yml +103 -0
  3. gragra-0.2.0rc1/.github/workflows/publish-pypi.yml +119 -0
  4. gragra-0.2.0rc1/.gitignore +83 -0
  5. gragra-0.2.0rc1/CHANGELOG.md +31 -0
  6. gragra-0.2.0rc1/CITATION.cff +11 -0
  7. gragra-0.2.0rc1/CMakeLists.txt +23 -0
  8. gragra-0.2.0rc1/CONTRIBUTING.md +27 -0
  9. gragra-0.2.0rc1/LICENSE +21 -0
  10. gragra-0.2.0rc1/PKG-INFO +98 -0
  11. gragra-0.2.0rc1/PYPI_README.md +41 -0
  12. gragra-0.2.0rc1/README.md +144 -0
  13. gragra-0.2.0rc1/SECURITY.md +5 -0
  14. gragra-0.2.0rc1/THIRD_PARTY_NOTICES.md +34 -0
  15. gragra-0.2.0rc1/codemeta.json +27 -0
  16. gragra-0.2.0rc1/cpp/inverse_square_backend.cpp +514 -0
  17. gragra-0.2.0rc1/cpp/kernels.hpp +388 -0
  18. gragra-0.2.0rc1/docs/architecture/public_api.md +590 -0
  19. gragra-0.2.0rc1/docs/design/cupy_backend.md +475 -0
  20. gragra-0.2.0rc1/docs_site/docs/api/core.md +406 -0
  21. gragra-0.2.0rc1/docs_site/docs/api/experimental.md +363 -0
  22. gragra-0.2.0rc1/docs_site/docs/api/index.md +142 -0
  23. gragra-0.2.0rc1/docs_site/docs/api/interactions.md +18 -0
  24. gragra-0.2.0rc1/docs_site/docs/api/physics.md +969 -0
  25. gragra-0.2.0rc1/docs_site/docs/api/reference.md +72 -0
  26. gragra-0.2.0rc1/docs_site/docs/api/results.md +322 -0
  27. gragra-0.2.0rc1/docs_site/docs/api/top-level.md +173 -0
  28. gragra-0.2.0rc1/docs_site/docs/api/water.md +81 -0
  29. gragra-0.2.0rc1/docs_site/docs/api/wave456.md +173 -0
  30. gragra-0.2.0rc1/docs_site/docs/assets/.gitkeep +10 -0
  31. gragra-0.2.0rc1/docs_site/docs/assets/brand/gragra-apple-red.svg +3 -0
  32. gragra-0.2.0rc1/docs_site/docs/assets/brand/gragra-apple-white.svg +3 -0
  33. gragra-0.2.0rc1/docs_site/docs/assets/branding/gragra-logo-horizontal.png +0 -0
  34. gragra-0.2.0rc1/docs_site/docs/assets/branding/gragra-logo-stacked.png +0 -0
  35. gragra-0.2.0rc1/docs_site/docs/assets/branding/gragra-logo-symbol.png +0 -0
  36. gragra-0.2.0rc1/docs_site/docs/assets/guide/fields/density_perturbation_xy_slice.svg +6325 -0
  37. gragra-0.2.0rc1/docs_site/docs/assets/guide/fields/displacement_amplitude_xy.svg +4035 -0
  38. gragra-0.2.0rc1/docs_site/docs/assets/guide/fields/displacement_phase_xy.svg +4095 -0
  39. gragra-0.2.0rc1/docs_site/docs/assets/guide/fields/displacement_quiver_xy.svg +2986 -0
  40. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/contribution_hist_delta_a_x.svg +1023 -0
  41. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/contribution_hist_norm.svg +1011 -0
  42. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/cumulative_norm.svg +1228 -0
  43. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/dynamic_interference_share_x.svg +2164 -0
  44. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/hist_density_volume.svg +922 -0
  45. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/map_xz_delta_a_x.svg +1973 -0
  46. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/map_xz_kernel_norm.svg +1934 -0
  47. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/plot_result_spectrum_magnitude.svg +1280 -0
  48. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/plot_result_spectrum_phase.svg +1214 -0
  49. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/plot_result_static_field_xy.svg +1199 -0
  50. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/plot_result_time_series.svg +1255 -0
  51. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/plot_shape_cuboid.svg +1136 -0
  52. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/radial_gg_components_signed.svg +2204 -0
  53. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/radial_gg_xx_signed.svg +1171 -0
  54. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/radial_mass_over_r2_fraction.svg +957 -0
  55. gragra-0.2.0rc1/docs_site/docs/assets/guide/source-diagnostics/source_field_mass_over_r2_xz_sum.svg +6344 -0
  56. gragra-0.2.0rc1/docs_site/docs/assets/models/advected_temperature_turbulence.svg +72 -0
  57. gragra-0.2.0rc1/docs_site/docs/assets/models/atmospheric_acoustic_halfspace.svg +70 -0
  58. gragra-0.2.0rc1/docs_site/docs/assets/models/causal_point_force.svg +68 -0
  59. gragra-0.2.0rc1/docs_site/docs/assets/models/cylinder-3d.svg +33 -0
  60. gragra-0.2.0rc1/docs_site/docs/assets/models/fixed_axis_rotation.svg +68 -0
  61. gragra-0.2.0rc1/docs_site/docs/assets/models/frozen_advection_channel_water.svg +74 -0
  62. gragra-0.2.0rc1/docs_site/docs/assets/models/individual_p_sv_reflection.svg +77 -0
  63. gragra-0.2.0rc1/docs_site/docs/assets/models/isobaric_temperature_perturbation.svg +66 -0
  64. gragra-0.2.0rc1/docs_site/docs/assets/models/isotropic_stochastic_body_waves.svg +71 -0
  65. gragra-0.2.0rc1/docs_site/docs/assets/models/isotropic_stochastic_rayleigh.svg +76 -0
  66. gragra-0.2.0rc1/docs_site/docs/assets/models/oriented_cuboid.svg +84 -0
  67. gragra-0.2.0rc1/docs_site/docs/assets/models/p_sv_free_surface.svg +76 -0
  68. gragra-0.2.0rc1/docs_site/docs/assets/models/prescribed_point_mass_translation.svg +83 -0
  69. gragra-0.2.0rc1/docs_site/docs/assets/models/rayleigh_wave_halfspace.svg +75 -0
  70. gragra-0.2.0rc1/docs_site/docs/assets/models/rigid_acoustic_cavity_modes.svg +71 -0
  71. gragra-0.2.0rc1/docs_site/docs/assets/models/rigid_body_fourier_response.svg +161 -0
  72. gragra-0.2.0rc1/docs_site/docs/assets/models/small_cavity_wall.svg +77 -0
  73. gragra-0.2.0rc1/docs_site/docs/assets/models/small_translational_oscillation.svg +66 -0
  74. gragra-0.2.0rc1/docs_site/docs/assets/models/sphere-3d.svg +1 -0
  75. gragra-0.2.0rc1/docs_site/docs/assets/models/sphere-section.svg +1 -0
  76. gragra-0.2.0rc1/docs_site/docs/assets/models/spherical_cavity_shell.svg +79 -0
  77. gragra-0.2.0rc1/docs_site/docs/assets/models/stochastic_atmospheric_infrasound.svg +68 -0
  78. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/advected_atmospheric_temperature_turbulence_step4_comparison.svg +1625 -0
  79. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/atmospheric_acoustic_halfspace_step4_comparison.svg +1479 -0
  80. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/causal_point_force_step4_comparison.svg +1327 -0
  81. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/causal_point_force_step4_gwexpy.svg +2728 -0
  82. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/fixed_axis_rotation_step4_comparison.svg +1873 -0
  83. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/fixed_axis_rotation_step4_gwexpy.svg +2792 -0
  84. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/frozen_advection_channel_water_noise_step4_comparison.svg +1580 -0
  85. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/individual_p_sv_and_reflected_p_benchmarks_step4_comparison.svg +1316 -0
  86. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/isobaric_temperature_perturbation_step4_comparison.svg +1319 -0
  87. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/isotropic_stochastic_elastic_body_waves_step4_comparison.svg +1568 -0
  88. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/isotropic_stochastic_rayleigh_field_step4_comparison.svg +1462 -0
  89. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/oriented_cuboid_step4_comparison.svg +1867 -0
  90. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/p_sv_waves_at_a_free_surface_step4_comparison.svg +1594 -0
  91. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/prescribed_point_mass_translation_step4_comparison.svg +1304 -0
  92. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/prescribed_point_mass_translation_step4_gwexpy.svg +2575 -0
  93. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rayleigh_wave_at_an_elastic_halfspace_setup_xz.svg +1800 -0
  94. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rayleigh_wave_at_an_elastic_halfspace_step4_az_magnitude.svg +1986 -0
  95. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rayleigh_wave_at_an_elastic_halfspace_step4_az_phase.svg +1675 -0
  96. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rigid_acoustic_cavity_modes_step4_comparison.svg +1473 -0
  97. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rigid_body_time_series_and_fourier_response_step4_gwexpy_fft.svg +2584 -0
  98. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/rigid_body_time_series_and_fourier_response_step4_spectrum.svg +1612 -0
  99. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/small_cavity_wall_approximation_step4_comparison.svg +1860 -0
  100. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/small_translational_oscillation_step4_comparison.svg +1574 -0
  101. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/spherical_cavity_and_finite_spherical_shell_step4_comparison.svg +1511 -0
  102. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/stochastic_atmospheric_infrasound_step4_comparison.svg +1433 -0
  103. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/uniform_density_cuboid_setup_3d.svg +1344 -0
  104. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/uniform_density_cuboid_step4_az_lz_sweep.svg +2006 -0
  105. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/uniform_density_cylinder_step4_comparison.svg +1433 -0
  106. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/uniform_density_sphere_step4_comparison.svg +1464 -0
  107. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/water_channel_inflow_step_step4_comparison.svg +1502 -0
  108. gragra-0.2.0rc1/docs_site/docs/assets/models/tutorials/waterfall_and_spatially_uncorrelated_water_surface_step4_comparison.svg +1807 -0
  109. gragra-0.2.0rc1/docs_site/docs/assets/models/uniform_density_cuboid.svg +90 -0
  110. gragra-0.2.0rc1/docs_site/docs/assets/models/water_channel_inflow_step.svg +80 -0
  111. gragra-0.2.0rc1/docs_site/docs/assets/models/waterfall_uncorrelated_surface.svg +80 -0
  112. gragra-0.2.0rc1/docs_site/docs/concepts/arrays.md +67 -0
  113. gragra-0.2.0rc1/docs_site/docs/concepts/complex-outputs.md +81 -0
  114. gragra-0.2.0rc1/docs_site/docs/concepts/conventions.md +53 -0
  115. gragra-0.2.0rc1/docs_site/docs/concepts/model-and-scope.md +79 -0
  116. gragra-0.2.0rc1/docs_site/docs/concepts/numerics.md +94 -0
  117. gragra-0.2.0rc1/docs_site/docs/examples/rayleigh_phasor_workflow.md +16 -0
  118. gragra-0.2.0rc1/docs_site/docs/examples/rayleigh_response_workflow.md +16 -0
  119. gragra-0.2.0rc1/docs_site/docs/examples/uniform_sphere_workflow.md +25 -0
  120. gragra-0.2.0rc1/docs_site/docs/external/hdf5-fields.md +120 -0
  121. gragra-0.2.0rc1/docs_site/docs/external/specfem3d.md +131 -0
  122. gragra-0.2.0rc1/docs_site/docs/getting-started/choosing.md +68 -0
  123. gragra-0.2.0rc1/docs_site/docs/getting-started/installation.md +82 -0
  124. gragra-0.2.0rc1/docs_site/docs/getting-started/minimal-example.md +43 -0
  125. gragra-0.2.0rc1/docs_site/docs/guide/analytic-benchmarks.md +149 -0
  126. gragra-0.2.0rc1/docs_site/docs/guide/backends.md +142 -0
  127. gragra-0.2.0rc1/docs_site/docs/guide/coherent.md +134 -0
  128. gragra-0.2.0rc1/docs_site/docs/guide/continuous-sources.md +63 -0
  129. gragra-0.2.0rc1/docs_site/docs/guide/fields.md +258 -0
  130. gragra-0.2.0rc1/docs_site/docs/guide/formulas.md +54 -0
  131. gragra-0.2.0rc1/docs_site/docs/guide/gen1-analytic-models.md +278 -0
  132. gragra-0.2.0rc1/docs_site/docs/guide/geometry.md +60 -0
  133. gragra-0.2.0rc1/docs_site/docs/guide/meshes.md +76 -0
  134. gragra-0.2.0rc1/docs_site/docs/guide/model-and-method-catalogue.md +167 -0
  135. gragra-0.2.0rc1/docs_site/docs/guide/numerical-methods.md +54 -0
  136. gragra-0.2.0rc1/docs_site/docs/guide/observables.md +98 -0
  137. gragra-0.2.0rc1/docs_site/docs/guide/physics-reference.md +51 -0
  138. gragra-0.2.0rc1/docs_site/docs/guide/point-sources.md +137 -0
  139. gragra-0.2.0rc1/docs_site/docs/guide/rigid-motion-fourier.md +154 -0
  140. gragra-0.2.0rc1/docs_site/docs/guide/source-diagnostics.md +365 -0
  141. gragra-0.2.0rc1/docs_site/docs/guide/static-sources.md +140 -0
  142. gragra-0.2.0rc1/docs_site/docs/guide/stochastic-nn.md +52 -0
  143. gragra-0.2.0rc1/docs_site/docs/guide/water-newtonian-noise.md +104 -0
  144. gragra-0.2.0rc1/docs_site/docs/guide/waves.md +88 -0
  145. gragra-0.2.0rc1/docs_site/docs/help/citation.md +66 -0
  146. gragra-0.2.0rc1/docs_site/docs/help/contributing.md +69 -0
  147. gragra-0.2.0rc1/docs_site/docs/help/troubleshooting.md +102 -0
  148. gragra-0.2.0rc1/docs_site/docs/index.md +73 -0
  149. gragra-0.2.0rc1/docs_site/docs/javascripts/catalogue.js +56 -0
  150. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/LICENSE.txt +202 -0
  151. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/input/tex/extensions/boldsymbol.js +1 -0
  152. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_AMS-Regular.woff +0 -0
  153. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Bold.woff +0 -0
  154. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Calligraphic-Regular.woff +0 -0
  155. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Fraktur-Bold.woff +0 -0
  156. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Fraktur-Regular.woff +0 -0
  157. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Bold.woff +0 -0
  158. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Italic.woff +0 -0
  159. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Main-Regular.woff +0 -0
  160. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-BoldItalic.woff +0 -0
  161. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-Italic.woff +0 -0
  162. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Math-Regular.woff +0 -0
  163. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Bold.woff +0 -0
  164. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Italic.woff +0 -0
  165. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_SansSerif-Regular.woff +0 -0
  166. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Script-Regular.woff +0 -0
  167. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Size1-Regular.woff +0 -0
  168. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Size2-Regular.woff +0 -0
  169. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Size3-Regular.woff +0 -0
  170. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Size4-Regular.woff +0 -0
  171. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Typewriter-Regular.woff +0 -0
  172. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Vector-Bold.woff +0 -0
  173. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Vector-Regular.woff +0 -0
  174. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/output/chtml/fonts/woff-v2/MathJax_Zero.woff +0 -0
  175. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax/tex-mml-chtml.js +1 -0
  176. gragra-0.2.0rc1/docs_site/docs/javascripts/mathjax-config.js +68 -0
  177. gragra-0.2.0rc1/docs_site/docs/models/advected_atmospheric_temperature_turbulence.md +303 -0
  178. gragra-0.2.0rc1/docs_site/docs/models/atmospheric_acoustic_halfspace.md +320 -0
  179. gragra-0.2.0rc1/docs_site/docs/models/causal_point_force.md +401 -0
  180. gragra-0.2.0rc1/docs_site/docs/models/fixed_axis_rotation.md +333 -0
  181. gragra-0.2.0rc1/docs_site/docs/models/frozen_advection_channel_water_noise.md +339 -0
  182. gragra-0.2.0rc1/docs_site/docs/models/individual_p_sv_and_reflected_p_benchmarks.md +320 -0
  183. gragra-0.2.0rc1/docs_site/docs/models/isobaric_temperature_perturbation.md +359 -0
  184. gragra-0.2.0rc1/docs_site/docs/models/isotropic_stochastic_elastic_body_waves.md +295 -0
  185. gragra-0.2.0rc1/docs_site/docs/models/isotropic_stochastic_rayleigh_field.md +279 -0
  186. gragra-0.2.0rc1/docs_site/docs/models/oriented_cuboid.md +285 -0
  187. gragra-0.2.0rc1/docs_site/docs/models/p_sv_waves_at_a_free_surface.md +372 -0
  188. gragra-0.2.0rc1/docs_site/docs/models/prescribed_point_mass_translation.md +309 -0
  189. gragra-0.2.0rc1/docs_site/docs/models/rayleigh_wave_at_an_elastic_halfspace.md +414 -0
  190. gragra-0.2.0rc1/docs_site/docs/models/rigid_acoustic_cavity_modes.md +384 -0
  191. gragra-0.2.0rc1/docs_site/docs/models/rigid_body_time_series_and_fourier_response.md +364 -0
  192. gragra-0.2.0rc1/docs_site/docs/models/small_cavity_wall_approximation.md +339 -0
  193. gragra-0.2.0rc1/docs_site/docs/models/small_translational_oscillation.md +294 -0
  194. gragra-0.2.0rc1/docs_site/docs/models/spherical_cavity_and_finite_spherical_shell.md +306 -0
  195. gragra-0.2.0rc1/docs_site/docs/models/stochastic_atmospheric_infrasound.md +333 -0
  196. gragra-0.2.0rc1/docs_site/docs/models/uniform_density_cuboid.md +398 -0
  197. gragra-0.2.0rc1/docs_site/docs/models/uniform_density_cylinder.md +368 -0
  198. gragra-0.2.0rc1/docs_site/docs/models/uniform_density_sphere.md +319 -0
  199. gragra-0.2.0rc1/docs_site/docs/models/water_channel_inflow_step.md +252 -0
  200. gragra-0.2.0rc1/docs_site/docs/models/waterfall_and_spatially_uncorrelated_water_surface.md +305 -0
  201. gragra-0.2.0rc1/docs_site/docs/stylesheets/catalogue.css +138 -0
  202. gragra-0.2.0rc1/docs_site/docs/tutorials/numerical-reference.md +117 -0
  203. gragra-0.2.0rc1/docs_site/docs/verification/coverage.md +103 -0
  204. gragra-0.2.0rc1/docs_site/docs/verification/index.md +96 -0
  205. gragra-0.2.0rc1/docs_site/docs/verification/limitations.md +146 -0
  206. gragra-0.2.0rc1/docs_site/docs/verification/matrix.md +61 -0
  207. gragra-0.2.0rc1/docs_site/scripts/generate_fields_figures.py +135 -0
  208. gragra-0.2.0rc1/docs_site/scripts/generate_source_diagnostics_figures.py +652 -0
  209. gragra-0.2.0rc1/docs_site/snippets/README.md +53 -0
  210. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_acoustic_halfspace.py +37 -0
  211. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_cavity_cuboid.py +37 -0
  212. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_cavity_cylinder.py +46 -0
  213. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_cavity_sphere.py +40 -0
  214. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_motion.py +78 -0
  215. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_seismic_models.py +58 -0
  216. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_temperature.py +62 -0
  217. gragra-0.2.0rc1/docs_site/snippets/analytic_gen1_temperature_grid.py +54 -0
  218. gragra-0.2.0rc1/docs_site/snippets/backends_error_contract.py +70 -0
  219. gragra-0.2.0rc1/docs_site/snippets/point_sources_weighted_point_source.py +9 -0
  220. gragra-0.2.0rc1/docs_site/snippets/quickstart_array_conventions.py +65 -0
  221. gragra-0.2.0rc1/docs_site/snippets/quickstart_complex_amplitude.py +49 -0
  222. gragra-0.2.0rc1/docs_site/snippets/quickstart_point_mass_acceleration.py +38 -0
  223. gragra-0.2.0rc1/docs_site/snippets/quickstart_sign_conventions.py +42 -0
  224. gragra-0.2.0rc1/docs_site/snippets/quickstart_softening_and_chunking.py +76 -0
  225. gragra-0.2.0rc1/docs_site/snippets/quickstart_verify_install.py +24 -0
  226. gragra-0.2.0rc1/docs_site/snippets/readme_analytic_benchmark.py +18 -0
  227. gragra-0.2.0rc1/docs_site/snippets/readme_coherent_response.py +40 -0
  228. gragra-0.2.0rc1/docs_site/snippets/readme_continuous_sources.py +15 -0
  229. gragra-0.2.0rc1/docs_site/snippets/readme_geometry_primitives.py +21 -0
  230. gragra-0.2.0rc1/docs_site/snippets/readme_point_mass_acceleration.py +12 -0
  231. gragra-0.2.0rc1/examples/01_point_mass.py +42 -0
  232. gragra-0.2.0rc1/examples/02_weighted_point_source.py +69 -0
  233. gragra-0.2.0rc1/examples/03_geometry_primitives.py +33 -0
  234. gragra-0.2.0rc1/examples/04_analytic_benchmark.py +47 -0
  235. gragra-0.2.0rc1/examples/05_gravity_gradient_tensor.py +69 -0
  236. gragra-0.2.0rc1/examples/06_continuous_sources.py +191 -0
  237. gragra-0.2.0rc1/examples/07_coherent_response.py +159 -0
  238. gragra-0.2.0rc1/examples/08_meshio_surface_adapter.py +149 -0
  239. gragra-0.2.0rc1/examples/09_external_field_density.py +60 -0
  240. gragra-0.2.0rc1/examples/10_halfspace_rayleigh.py +101 -0
  241. gragra-0.2.0rc1/examples/12_cross_statistics_witness.py +159 -0
  242. gragra-0.2.0rc1/examples/13_sca_lower_limit_gate.py +211 -0
  243. gragra-0.2.0rc1/examples/15_analytic_stage1_benchmarks.py +234 -0
  244. gragra-0.2.0rc1/examples/README.md +65 -0
  245. gragra-0.2.0rc1/examples/cylinder_potential.py +38 -0
  246. gragra-0.2.0rc1/examples/finite_body_mesh_comparison.py +106 -0
  247. gragra-0.2.0rc1/examples/gravity_result.py +170 -0
  248. gragra-0.2.0rc1/examples/literature_b.py +119 -0
  249. gragra-0.2.0rc1/examples/literature_c.py +64 -0
  250. gragra-0.2.0rc1/examples/literature_r.py +74 -0
  251. gragra-0.2.0rc1/examples/openfoam_density_pipeline.py +214 -0
  252. gragra-0.2.0rc1/examples/oriented_analytic_fields.py +39 -0
  253. gragra-0.2.0rc1/examples/rayleigh_phasor_workflow.ipynb +342 -0
  254. gragra-0.2.0rc1/examples/rayleigh_response_workflow.ipynb +250 -0
  255. gragra-0.2.0rc1/examples/rigid_motion_fourier_workflow.ipynb +155 -0
  256. gragra-0.2.0rc1/examples/static_sources_workflow.py +139 -0
  257. gragra-0.2.0rc1/examples/trajectory_passage_and_rotation.py +99 -0
  258. gragra-0.2.0rc1/examples/uniform_sphere_workflow.ipynb +228 -0
  259. gragra-0.2.0rc1/mkdocs.yml +249 -0
  260. gragra-0.2.0rc1/pyproject.toml +197 -0
  261. gragra-0.2.0rc1/scripts/bench_five_model_common.py +87 -0
  262. gragra-0.2.0rc1/scripts/check_git_blob_pins.py +333 -0
  263. gragra-0.2.0rc1/scripts/check_import_boundaries.py +519 -0
  264. gragra-0.2.0rc1/scripts/check_pin_reconciliation.py +171 -0
  265. gragra-0.2.0rc1/scripts/check_spherical_cavity_symbolic.py +101 -0
  266. gragra-0.2.0rc1/scripts/check_u10_spherical_shell_general_symbolic.py +88 -0
  267. gragra-0.2.0rc1/scripts/check_u11_rayleigh_small_cavity_symbolic.py +37 -0
  268. gragra-0.2.0rc1/scripts/check_u9_sca_wall_observables_symbolic.py +109 -0
  269. gragra-0.2.0rc1/scripts/ci/classify_changes.py +52 -0
  270. gragra-0.2.0rc1/scripts/m3_p6_report.py +978 -0
  271. gragra-0.2.0rc1/scripts/prepare_anna_comparison.py +747 -0
  272. gragra-0.2.0rc1/scripts/pytest_origin_guard.py +18 -0
  273. gragra-0.2.0rc1/scripts/reproduce_analytic_stage1_report.py +946 -0
  274. gragra-0.2.0rc1/scripts/research_export_dt_half.py +96 -0
  275. gragra-0.2.0rc1/scripts/research_export_mesh_200m_blockwise.py +122 -0
  276. gragra-0.2.0rc1/scripts/research_m3a_rigid_motion.py +295 -0
  277. gragra-0.2.0rc1/scripts/research_make_part_array_from_rank_vtk.py +65 -0
  278. gragra-0.2.0rc1/scripts/research_openfoam_cosine_bell.py +1234 -0
  279. gragra-0.2.0rc1/scripts/research_openfoam_cosine_bell_precision.py +1118 -0
  280. gragra-0.2.0rc1/scripts/research_openfoam_density_export.py +133 -0
  281. gragra-0.2.0rc1/scripts/research_rayleigh_b6.py +411 -0
  282. gragra-0.2.0rc1/scripts/research_rayleigh_b6_12km.py +178 -0
  283. gragra-0.2.0rc1/scripts/research_rayleigh_cadence.py +411 -0
  284. gragra-0.2.0rc1/scripts/research_rayleigh_domain_sensitivity.py +597 -0
  285. gragra-0.2.0rc1/scripts/research_rayleigh_dt_sensitivity.py +157 -0
  286. gragra-0.2.0rc1/scripts/research_rayleigh_gravity_window_diagnostics.py +373 -0
  287. gragra-0.2.0rc1/scripts/research_rayleigh_mesh_sensitivity.py +153 -0
  288. gragra-0.2.0rc1/scripts/research_rayleigh_mpi_sensitivity.py +130 -0
  289. gragra-0.2.0rc1/scripts/research_rayleigh_sampling_sensitivity.py +114 -0
  290. gragra-0.2.0rc1/scripts/research_rayleigh_window_fit_diagnostics.py +273 -0
  291. gragra-0.2.0rc1/scripts/research_water_surface_models.py +1044 -0
  292. gragra-0.2.0rc1/scripts/research_wave456_rotation.py +772 -0
  293. gragra-0.2.0rc1/scripts/research_wave456_rotation_a_compare.py +359 -0
  294. gragra-0.2.0rc1/scripts/research_wave4_environment.py +205 -0
  295. gragra-0.2.0rc1/scripts/research_wave4_finite_body.py +563 -0
  296. gragra-0.2.0rc1/scripts/research_wave4_specfem_protocol.py +995 -0
  297. gragra-0.2.0rc1/scripts/research_wave5_crosspaths.py +2033 -0
  298. gragra-0.2.0rc1/scripts/research_wave5_environment_transport.py +1111 -0
  299. gragra-0.2.0rc1/scripts/research_wave5_environment_transport_centroids.py +171 -0
  300. gragra-0.2.0rc1/scripts/research_wave5_finite_body.py +507 -0
  301. gragra-0.2.0rc1/scripts/research_wave5_rayleigh_crosspaths.py +1240 -0
  302. gragra-0.2.0rc1/scripts/research_wave5_specfem_export.py +1181 -0
  303. gragra-0.2.0rc1/scripts/research_wave6_environment_acoustic.py +628 -0
  304. gragra-0.2.0rc1/scripts/research_wave6_environment_acoustic_series.py +547 -0
  305. gragra-0.2.0rc1/scripts/research_wave6_environment_gwexpy_bridge.py +164 -0
  306. gragra-0.2.0rc1/scripts/research_wave6_finite_body_cavity.py +589 -0
  307. gragra-0.2.0rc1/scripts/research_wave6_finite_body_oracle_retry.py +207 -0
  308. gragra-0.2.0rc1/scripts/research_wave6_finite_motion_mesh.py +329 -0
  309. gragra-0.2.0rc1/scripts/research_wave6_heterogeneous_box_reference.py +505 -0
  310. gragra-0.2.0rc1/scripts/research_wave6_mesh_exchange_e2e.py +393 -0
  311. gragra-0.2.0rc1/scripts/research_wave6_quadrature_library_comparison.py +390 -0
  312. gragra-0.2.0rc1/scripts/research_wave6_quadrature_order_study.py +412 -0
  313. gragra-0.2.0rc1/scripts/research_wave6_specfem_analysis.py +1016 -0
  314. gragra-0.2.0rc1/scripts/research_wave6_spherical_cavity_general_point.py +671 -0
  315. gragra-0.2.0rc1/scripts/research_wave6_spherical_cavity_near_wall.py +454 -0
  316. gragra-0.2.0rc1/scripts/run_rayleigh_phasor_notebook.py +146 -0
  317. gragra-0.2.0rc1/scripts/run_rayleigh_response_notebook.py +148 -0
  318. gragra-0.2.0rc1/scripts/run_uniform_sphere_notebook.py +151 -0
  319. gragra-0.2.0rc1/scripts/validate_spherical_cavity_axis.py +145 -0
  320. gragra-0.2.0rc1/scripts/validate_u10_spherical_shell_general.py +345 -0
  321. gragra-0.2.0rc1/scripts/validate_u11_rayleigh_small_cavity.py +434 -0
  322. gragra-0.2.0rc1/scripts/validate_u9_sca_wall_observables.py +306 -0
  323. gragra-0.2.0rc1/scripts/verify_cylinder_sca.py +34 -0
  324. gragra-0.2.0rc1/scripts/verify_gen1_clean.py +275 -0
  325. gragra-0.2.0rc1/scripts/verify_halfspace_psv.py +87 -0
  326. gragra-0.2.0rc1/src/gragra/__init__.py +46 -0
  327. gragra-0.2.0rc1/src/gragra/_analytic_evaluation.py +413 -0
  328. gragra-0.2.0rc1/src/gragra/_arrays.py +194 -0
  329. gragra-0.2.0rc1/src/gragra/_continuous_contract.py +427 -0
  330. gragra-0.2.0rc1/src/gragra/_continuous_fourier.py +890 -0
  331. gragra-0.2.0rc1/src/gragra/_continuous_rigid_motion.py +275 -0
  332. gragra-0.2.0rc1/src/gragra/_evaluation_setup.py +680 -0
  333. gragra-0.2.0rc1/src/gragra/_finite_window_fourier.py +627 -0
  334. gragra-0.2.0rc1/src/gragra/_interactions.py +26 -0
  335. gragra-0.2.0rc1/src/gragra/_periodic_fourier.py +522 -0
  336. gragra-0.2.0rc1/src/gragra/_phasor_matrix.py +74 -0
  337. gragra-0.2.0rc1/src/gragra/_plotting/__init__.py +1 -0
  338. gragra-0.2.0rc1/src/gragra/_plotting/_appearance.py +38 -0
  339. gragra-0.2.0rc1/src/gragra/_plotting/_contribution.py +363 -0
  340. gragra-0.2.0rc1/src/gragra/_plotting/_diagnostics.py +662 -0
  341. gragra-0.2.0rc1/src/gragra/_plotting/_dynamic_contribution.py +1281 -0
  342. gragra-0.2.0rc1/src/gragra/_plotting/_field.py +704 -0
  343. gragra-0.2.0rc1/src/gragra/_plotting/_formula_latex.py +59 -0
  344. gragra-0.2.0rc1/src/gragra/_plotting/_hist.py +775 -0
  345. gragra-0.2.0rc1/src/gragra/_plotting/_map.py +316 -0
  346. gragra-0.2.0rc1/src/gragra/_plotting/_radial_histogram.py +1029 -0
  347. gragra-0.2.0rc1/src/gragra/_plotting/_rayleigh_setup.py +567 -0
  348. gragra-0.2.0rc1/src/gragra/_plotting/_result_field.py +670 -0
  349. gragra-0.2.0rc1/src/gragra/_plotting/_setup.py +447 -0
  350. gragra-0.2.0rc1/src/gragra/_plotting/_setup_shapes.py +308 -0
  351. gragra-0.2.0rc1/src/gragra/_plotting/_source_contracts.py +287 -0
  352. gragra-0.2.0rc1/src/gragra/_plotting/_source_data.py +478 -0
  353. gragra-0.2.0rc1/src/gragra/_plotting/_source_field.py +1243 -0
  354. gragra-0.2.0rc1/src/gragra/_plotting/_source_quantities.py +541 -0
  355. gragra-0.2.0rc1/src/gragra/_rayleigh_contract.py +859 -0
  356. gragra-0.2.0rc1/src/gragra/_rayleigh_evaluation_setup.py +214 -0
  357. gragra-0.2.0rc1/src/gragra/_rayleigh_response_setup.py +151 -0
  358. gragra-0.2.0rc1/src/gragra/_spectral_from_timeseries.py +136 -0
  359. gragra-0.2.0rc1/src/gragra/_time_matrix.py +146 -0
  360. gragra-0.2.0rc1/src/gragra/adapters/__init__.py +136 -0
  361. gragra-0.2.0rc1/src/gragra/adapters/_gwexpy_series.py +210 -0
  362. gragra-0.2.0rc1/src/gragra/adapters/field_series_hdf5.py +906 -0
  363. gragra-0.2.0rc1/src/gragra/adapters/finite_body_mesh.py +153 -0
  364. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_adapter.py +243 -0
  365. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_density_series.py +69 -0
  366. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_displacement_series.py +35 -0
  367. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_observable.py +545 -0
  368. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_source.py +336 -0
  369. gragra-0.2.0rc1/src/gragra/adapters/gwexpy_surface_density_series.py +42 -0
  370. gragra-0.2.0rc1/src/gragra/adapters/hdf5_field.py +814 -0
  371. gragra-0.2.0rc1/src/gragra/adapters/hex8_series.py +174 -0
  372. gragra-0.2.0rc1/src/gragra/adapters/lebedev.py +59 -0
  373. gragra-0.2.0rc1/src/gragra/adapters/mesh_quality.py +252 -0
  374. gragra-0.2.0rc1/src/gragra/adapters/meshio_adapter.py +658 -0
  375. gragra-0.2.0rc1/src/gragra/adapters/openfoam_density.py +531 -0
  376. gragra-0.2.0rc1/src/gragra/adapters/specfem/__init__.py +55 -0
  377. gragra-0.2.0rc1/src/gragra/adapters/specfem/__main__.py +8 -0
  378. gragra-0.2.0rc1/src/gragra/adapters/specfem/_validation.py +501 -0
  379. gragra-0.2.0rc1/src/gragra/adapters/specfem/cli.py +137 -0
  380. gragra-0.2.0rc1/src/gragra/adapters/specfem/export.py +844 -0
  381. gragra-0.2.0rc1/src/gragra/adapters/specfem/gll.py +569 -0
  382. gragra-0.2.0rc1/src/gragra/adapters/specfem/provenance.py +939 -0
  383. gragra-0.2.0rc1/src/gragra/adapters/specfem/reader.py +152 -0
  384. gragra-0.2.0rc1/src/gragra/adapters/specfem/schema.py +1248 -0
  385. gragra-0.2.0rc1/src/gragra/adapters/specfem/specfem_bin.py +970 -0
  386. gragra-0.2.0rc1/src/gragra/adapters/specfem/streaming.py +412 -0
  387. gragra-0.2.0rc1/src/gragra/adapters/specfem/writer.py +332 -0
  388. gragra-0.2.0rc1/src/gragra/analytic/__init__.py +130 -0
  389. gragra-0.2.0rc1/src/gragra/analytic/_bessel.py +376 -0
  390. gragra-0.2.0rc1/src/gragra/analytic/_fullspace_bodywave.py +126 -0
  391. gragra-0.2.0rc1/src/gragra/analytic/_u10_shell_series.py +240 -0
  392. gragra-0.2.0rc1/src/gragra/analytic/_u9_spatial_derivatives.py +295 -0
  393. gragra-0.2.0rc1/src/gragra/analytic/_validation.py +140 -0
  394. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/__init__.py +59 -0
  395. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_acoustic.py +372 -0
  396. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/__init__.py +1 -0
  397. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/_cuboid.py +1674 -0
  398. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/_cylinder.py +3236 -0
  399. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/_model.py +760 -0
  400. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/_numerics.py +1168 -0
  401. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_cavity/_sphere_harmonics.py +177 -0
  402. gragra-0.2.0rc1/src/gragra/analytic/atmospheric/_temperature.py +591 -0
  403. gragra-0.2.0rc1/src/gragra/analytic/bodywave_literature.py +562 -0
  404. gragra-0.2.0rc1/src/gragra/analytic/cavity_coupling.py +193 -0
  405. gragra-0.2.0rc1/src/gragra/analytic/cavity_cuboid.py +488 -0
  406. gragra-0.2.0rc1/src/gragra/analytic/cavity_cylinder.py +1345 -0
  407. gragra-0.2.0rc1/src/gragra/analytic/cavity_sphere.py +848 -0
  408. gragra-0.2.0rc1/src/gragra/analytic/cylinder_potential.py +215 -0
  409. gragra-0.2.0rc1/src/gragra/analytic/cylinder_sca.py +47 -0
  410. gragra-0.2.0rc1/src/gragra/analytic/halfspace.py +155 -0
  411. gragra-0.2.0rc1/src/gragra/analytic/halfspace_psv.py +202 -0
  412. gragra-0.2.0rc1/src/gragra/analytic/objects/__init__.py +44 -0
  413. gragra-0.2.0rc1/src/gragra/analytic/objects/_cuboid_model.py +370 -0
  414. gragra-0.2.0rc1/src/gragra/analytic/objects/_cylinder_model.py +287 -0
  415. gragra-0.2.0rc1/src/gragra/analytic/objects/_gen1_motion.py +789 -0
  416. gragra-0.2.0rc1/src/gragra/analytic/objects/_uniform_sphere.py +59 -0
  417. gragra-0.2.0rc1/src/gragra/analytic/oriented.py +104 -0
  418. gragra-0.2.0rc1/src/gragra/analytic/rayleigh_literature.py +367 -0
  419. gragra-0.2.0rc1/src/gragra/analytic/sca_tensor.py +308 -0
  420. gragra-0.2.0rc1/src/gragra/analytic/seismic/__init__.py +36 -0
  421. gragra-0.2.0rc1/src/gragra/analytic/seismic/_gen1_point_force.py +422 -0
  422. gragra-0.2.0rc1/src/gragra/analytic/seismic/_gen1_sca_wall.py +404 -0
  423. gragra-0.2.0rc1/src/gragra/analytic/seismic/_halfspace_psv_model.py +629 -0
  424. gragra-0.2.0rc1/src/gragra/analytic/seismic/_phase_speed.py +139 -0
  425. gragra-0.2.0rc1/src/gragra/analytic/seismic/_rayleigh.py +73 -0
  426. gragra-0.2.0rc1/src/gragra/analytic/seismic/_rayleigh_response.py +104 -0
  427. gragra-0.2.0rc1/src/gragra/analytic/seismic/_spherical_cavity_model.py +572 -0
  428. gragra-0.2.0rc1/src/gragra/analytic/seismic/_spherical_shell_model.py +563 -0
  429. gragra-0.2.0rc1/src/gragra/analytic/spherical_cavity_series.py +343 -0
  430. gragra-0.2.0rc1/src/gragra/analytic/stochastic_acoustic.py +375 -0
  431. gragra-0.2.0rc1/src/gragra/analytic/stochastic_bodywave.py +201 -0
  432. gragra-0.2.0rc1/src/gragra/analytic/stochastic_rayleigh.py +170 -0
  433. gragra-0.2.0rc1/src/gragra/analytic/stochastic_temperature.py +221 -0
  434. gragra-0.2.0rc1/src/gragra/analytic/u10_spherical_shell_general.py +308 -0
  435. gragra-0.2.0rc1/src/gragra/analytic/u11_rayleigh_small_cavity.py +246 -0
  436. gragra-0.2.0rc1/src/gragra/analytic/u9_sca_wall_observables.py +213 -0
  437. gragra-0.2.0rc1/src/gragra/analytic/uniform_sphere.py +245 -0
  438. gragra-0.2.0rc1/src/gragra/analytic/values.py +279 -0
  439. gragra-0.2.0rc1/src/gragra/analytic/water.py +893 -0
  440. gragra-0.2.0rc1/src/gragra/analytic/wave456_reference.py +1192 -0
  441. gragra-0.2.0rc1/src/gragra/array_types.py +35 -0
  442. gragra-0.2.0rc1/src/gragra/coherent/__init__.py +20 -0
  443. gragra-0.2.0rc1/src/gragra/coherent/average.py +165 -0
  444. gragra-0.2.0rc1/src/gragra/coherent/bulk_weights.py +156 -0
  445. gragra-0.2.0rc1/src/gragra/coherent/cross.py +103 -0
  446. gragra-0.2.0rc1/src/gragra/coherent/ensemble.py +110 -0
  447. gragra-0.2.0rc1/src/gragra/coherent/weights.py +177 -0
  448. gragra-0.2.0rc1/src/gragra/constants.py +5 -0
  449. gragra-0.2.0rc1/src/gragra/evaluation.py +611 -0
  450. gragra-0.2.0rc1/src/gragra/exceptions.py +184 -0
  451. gragra-0.2.0rc1/src/gragra/fields/__init__.py +135 -0
  452. gragra-0.2.0rc1/src/gragra/fields/_series.py +157 -0
  453. gragra-0.2.0rc1/src/gragra/fields/_temperature.py +313 -0
  454. gragra-0.2.0rc1/src/gragra/fields/background.py +52 -0
  455. gragra-0.2.0rc1/src/gragra/fields/batch.py +285 -0
  456. gragra-0.2.0rc1/src/gragra/fields/density_series.py +100 -0
  457. gragra-0.2.0rc1/src/gragra/fields/dipole_diagnostics.py +288 -0
  458. gragra-0.2.0rc1/src/gragra/fields/displacement_series.py +69 -0
  459. gragra-0.2.0rc1/src/gragra/fields/evaluation.py +300 -0
  460. gragra-0.2.0rc1/src/gragra/fields/finite_body.py +441 -0
  461. gragra-0.2.0rc1/src/gragra/fields/finite_body_p1.py +595 -0
  462. gragra-0.2.0rc1/src/gragra/fields/generic_integration.py +597 -0
  463. gragra-0.2.0rc1/src/gragra/fields/hex8_geometry.py +198 -0
  464. gragra-0.2.0rc1/src/gragra/fields/material_hex8.py +249 -0
  465. gragra-0.2.0rc1/src/gragra/fields/regular_grid.py +364 -0
  466. gragra-0.2.0rc1/src/gragra/fields/surface.py +247 -0
  467. gragra-0.2.0rc1/src/gragra/fields/surface_density_series.py +83 -0
  468. gragra-0.2.0rc1/src/gragra/fields/surface_orientation.py +354 -0
  469. gragra-0.2.0rc1/src/gragra/fields/thermodynamic.py +115 -0
  470. gragra-0.2.0rc1/src/gragra/fields/unstructured.py +396 -0
  471. gragra-0.2.0rc1/src/gragra/geometry/__init__.py +62 -0
  472. gragra-0.2.0rc1/src/gragra/geometry/_appearance.py +34 -0
  473. gragra-0.2.0rc1/src/gragra/geometry/_cuboid.py +58 -0
  474. gragra-0.2.0rc1/src/gragra/geometry/_cylinder.py +64 -0
  475. gragra-0.2.0rc1/src/gragra/geometry/_frame.py +242 -0
  476. gragra-0.2.0rc1/src/gragra/geometry/_grid.py +202 -0
  477. gragra-0.2.0rc1/src/gragra/geometry/_halfspace.py +20 -0
  478. gragra-0.2.0rc1/src/gragra/geometry/_sphere.py +59 -0
  479. gragra-0.2.0rc1/src/gragra/geometry/_spherical_shell.py +64 -0
  480. gragra-0.2.0rc1/src/gragra/geometry/primitives.py +981 -0
  481. gragra-0.2.0rc1/src/gragra/geometry/surface_mesh.py +467 -0
  482. gragra-0.2.0rc1/src/gragra/geometry/tetra_quadrature.py +155 -0
  483. gragra-0.2.0rc1/src/gragra/gravity_sources/__init__.py +74 -0
  484. gragra-0.2.0rc1/src/gragra/gravity_sources/_discretize.py +77 -0
  485. gragra-0.2.0rc1/src/gragra/gravity_sources/_force_history.py +411 -0
  486. gragra-0.2.0rc1/src/gragra/gravity_sources/_models.py +165 -0
  487. gragra-0.2.0rc1/src/gragra/gravity_sources/_rigid_motion_model.py +505 -0
  488. gragra-0.2.0rc1/src/gragra/gravity_sources/surface.py +158 -0
  489. gragra-0.2.0rc1/src/gragra/gravity_sources/trajectory.py +313 -0
  490. gragra-0.2.0rc1/src/gragra/gravity_sources/volume.py +107 -0
  491. gragra-0.2.0rc1/src/gragra/gravity_sources/weighted_points.py +127 -0
  492. gragra-0.2.0rc1/src/gragra/integrators/__init__.py +22 -0
  493. gragra-0.2.0rc1/src/gragra/integrators/generic.py +1343 -0
  494. gragra-0.2.0rc1/src/gragra/integrators/point_direct.py +393 -0
  495. gragra-0.2.0rc1/src/gragra/integrators/rigid_motion.py +981 -0
  496. gragra-0.2.0rc1/src/gragra/integrators/streaming.py +684 -0
  497. gragra-0.2.0rc1/src/gragra/integrators/trajectory_direct.py +191 -0
  498. gragra-0.2.0rc1/src/gragra/interactions/__init__.py +5 -0
  499. gragra-0.2.0rc1/src/gragra/kernels/__init__.py +23 -0
  500. gragra-0.2.0rc1/src/gragra/kernels/_collision.py +20 -0
  501. gragra-0.2.0rc1/src/gragra/kernels/_cpp_inverse_square.py +184 -0
  502. gragra-0.2.0rc1/src/gragra/kernels/_cpp_parametric.py +140 -0
  503. gragra-0.2.0rc1/src/gragra/kernels/_cpp_planewave.py +55 -0
  504. gragra-0.2.0rc1/src/gragra/kernels/_cpp_required.py +38 -0
  505. gragra-0.2.0rc1/src/gragra/kernels/_cupy_inverse_square.py +263 -0
  506. gragra-0.2.0rc1/src/gragra/kernels/_cupy_parametric.py +101 -0
  507. gragra-0.2.0rc1/src/gragra/kernels/_cupy_planewave.py +127 -0
  508. gragra-0.2.0rc1/src/gragra/kernels/_numba_inverse_square.py +796 -0
  509. gragra-0.2.0rc1/src/gragra/kernels/_numba_parametric.py +366 -0
  510. gragra-0.2.0rc1/src/gragra/kernels/_numba_planewave.py +57 -0
  511. gragra-0.2.0rc1/src/gragra/kernels/_source_terms.py +137 -0
  512. gragra-0.2.0rc1/src/gragra/kernels/generic_backend.py +1021 -0
  513. gragra-0.2.0rc1/src/gragra/kernels/inverse_square.py +679 -0
  514. gragra-0.2.0rc1/src/gragra/kernels/parametric.py +358 -0
  515. gragra-0.2.0rc1/src/gragra/observables/__init__.py +171 -0
  516. gragra-0.2.0rc1/src/gragra/observables/_source_terms.py +64 -0
  517. gragra-0.2.0rc1/src/gragra/observables/acceleration.py +131 -0
  518. gragra-0.2.0rc1/src/gragra/observables/analytic.py +818 -0
  519. gragra-0.2.0rc1/src/gragra/observables/bodywave_literature.py +97 -0
  520. gragra-0.2.0rc1/src/gragra/observables/coherent.py +274 -0
  521. gragra-0.2.0rc1/src/gragra/observables/dipole.py +145 -0
  522. gragra-0.2.0rc1/src/gragra/observables/gradient.py +60 -0
  523. gragra-0.2.0rc1/src/gragra/observables/gravitoelastic.py +196 -0
  524. gragra-0.2.0rc1/src/gragra/observables/halfspace_psv.py +39 -0
  525. gragra-0.2.0rc1/src/gragra/observables/potential.py +57 -0
  526. gragra-0.2.0rc1/src/gragra/observables/projection.py +102 -0
  527. gragra-0.2.0rc1/src/gragra/observables/rayleigh_literature.py +50 -0
  528. gragra-0.2.0rc1/src/gragra/observables/rigid_motion.py +253 -0
  529. gragra-0.2.0rc1/src/gragra/observables/series.py +195 -0
  530. gragra-0.2.0rc1/src/gragra/observables/stochastic_acoustic.py +91 -0
  531. gragra-0.2.0rc1/src/gragra/observables/stochastic_bodywave.py +71 -0
  532. gragra-0.2.0rc1/src/gragra/observables/stochastic_rayleigh.py +52 -0
  533. gragra-0.2.0rc1/src/gragra/observables/stochastic_temperature.py +50 -0
  534. gragra-0.2.0rc1/src/gragra/observables/streaming.py +115 -0
  535. gragra-0.2.0rc1/src/gragra/observables/trajectory.py +190 -0
  536. gragra-0.2.0rc1/src/gragra/observables/u10_spherical_shell_general.py +28 -0
  537. gragra-0.2.0rc1/src/gragra/observables/u11_rayleigh_small_cavity.py +21 -0
  538. gragra-0.2.0rc1/src/gragra/observables/u9_sca_wall_observables.py +29 -0
  539. gragra-0.2.0rc1/src/gragra/observables/water.py +458 -0
  540. gragra-0.2.0rc1/src/gragra/observables/wave456_reference.py +86 -0
  541. gragra-0.2.0rc1/src/gragra/plotting/__init__.py +119 -0
  542. gragra-0.2.0rc1/src/gragra/py.typed +1 -0
  543. gragra-0.2.0rc1/src/gragra/reference/__init__.py +23 -0
  544. gragra-0.2.0rc1/src/gragra/reference/_cavern.py +130 -0
  545. gragra-0.2.0rc1/src/gragra/reference/_context.py +69 -0
  546. gragra-0.2.0rc1/src/gragra/reference/_types.py +49 -0
  547. gragra-0.2.0rc1/src/gragra/research/__init__.py +1 -0
  548. gragra-0.2.0rc1/src/gragra/research/rayleigh_timefit.py +55 -0
  549. gragra-0.2.0rc1/src/gragra/results/__init__.py +150 -0
  550. gragra-0.2.0rc1/src/gragra/results/_binding.py +70 -0
  551. gragra-0.2.0rc1/src/gragra/results/_comparison.py +655 -0
  552. gragra-0.2.0rc1/src/gragra/results/_context.py +301 -0
  553. gragra-0.2.0rc1/src/gragra/results/_coords.py +92 -0
  554. gragra-0.2.0rc1/src/gragra/results/_evaluation.py +574 -0
  555. gragra-0.2.0rc1/src/gragra/results/_field_definition.py +213 -0
  556. gragra-0.2.0rc1/src/gragra/results/_gen1_definitions.py +142 -0
  557. gragra-0.2.0rc1/src/gragra/results/_protocols.py +45 -0
  558. gragra-0.2.0rc1/src/gragra/results/_record.py +65 -0
  559. gragra-0.2.0rc1/src/gragra/results/_representation.py +18 -0
  560. gragra-0.2.0rc1/src/gragra/results/_response.py +589 -0
  561. gragra-0.2.0rc1/src/gragra/results/_spectral.py +163 -0
  562. gragra-0.2.0rc1/src/gragra/results/_time.py +64 -0
  563. gragra-0.2.0rc1/src/gragra/results/_time_grid.py +149 -0
  564. gragra-0.2.0rc1/src/gragra/targets/__init__.py +19 -0
  565. gragra-0.2.0rc1/src/gragra/targets/_high_points.py +71 -0
  566. gragra-0.2.0rc1/src/gragra/targets/points.py +45 -0
  567. gragra-0.2.0rc1/src/gragra/waves/__init__.py +61 -0
  568. gragra-0.2.0rc1/src/gragra/waves/directions.py +115 -0
  569. gragra-0.2.0rc1/src/gragra/waves/displacement.py +112 -0
  570. gragra-0.2.0rc1/src/gragra/waves/halfspace.py +53 -0
  571. gragra-0.2.0rc1/src/gragra/waves/phase.py +154 -0
  572. gragra-0.2.0rc1/src/gragra/waves/plane.py +331 -0
  573. gragra-0.2.0rc1/src/gragra/waves/polarization.py +198 -0
  574. gragra-0.2.0rc1/src/gragra/waves/rayleigh.py +352 -0
  575. gragra-0.2.0rc1/src/gragra/waves/stochastic.py +345 -0
  576. gragra-0.2.0rc1/tests/_continuous_fixtures.py +305 -0
  577. gragra-0.2.0rc1/tests/_convergence_utils.py +41 -0
  578. gragra-0.2.0rc1/tests/_finite_body_p1_reference.py +131 -0
  579. gragra-0.2.0rc1/tests/_finite_body_reference.py +145 -0
  580. gragra-0.2.0rc1/tests/_hex_volume_oracle.py +192 -0
  581. gragra-0.2.0rc1/tests/_m3_p6_oracles.py +302 -0
  582. gragra-0.2.0rc1/tests/_openfoam_synthetic.py +70 -0
  583. gragra-0.2.0rc1/tests/_provenance_contract.py +137 -0
  584. gragra-0.2.0rc1/tests/_reference_test_isolation.py +85 -0
  585. gragra-0.2.0rc1/tests/_specfem_synthetic.py +993 -0
  586. gragra-0.2.0rc1/tests/_tier_a_checks.py +717 -0
  587. gragra-0.2.0rc1/tests/conftest.py +240 -0
  588. gragra-0.2.0rc1/tests/continuous_acceptance.json +316 -0
  589. gragra-0.2.0rc1/tests/external_model/fixture_models.py +165 -0
  590. gragra-0.2.0rc1/tests/external_model/test_external_workflows.py +68 -0
  591. gragra-0.2.0rc1/tests/external_model/workflow_runner.py +140 -0
  592. gragra-0.2.0rc1/tests/fixtures/two_tetra_host_cavity.msh +21 -0
  593. gragra-0.2.0rc1/tests/high_level/_plot_extract.py +138 -0
  594. gragra-0.2.0rc1/tests/high_level/test_c2_compare_baseline.py +154 -0
  595. gragra-0.2.0rc1/tests/high_level/test_c2_rayleigh_definition.py +101 -0
  596. gragra-0.2.0rc1/tests/high_level/test_c2_result_integration.py +365 -0
  597. gragra-0.2.0rc1/tests/high_level/test_c2_sphere_definition.py +71 -0
  598. gragra-0.2.0rc1/tests/high_level/test_c4_contract_d.py +480 -0
  599. gragra-0.2.0rc1/tests/high_level/test_c5a_result_contract.py +233 -0
  600. gragra-0.2.0rc1/tests/high_level/test_common_contract.py +282 -0
  601. gragra-0.2.0rc1/tests/high_level/test_compare.py +345 -0
  602. gragra-0.2.0rc1/tests/high_level/test_context.py +247 -0
  603. gragra-0.2.0rc1/tests/high_level/test_d3_cuboid_model.py +307 -0
  604. gragra-0.2.0rc1/tests/high_level/test_d3_cylinder_model.py +218 -0
  605. gragra-0.2.0rc1/tests/high_level/test_d3_halfspace_psv_model.py +241 -0
  606. gragra-0.2.0rc1/tests/high_level/test_d3_public_factories.py +404 -0
  607. gragra-0.2.0rc1/tests/high_level/test_d3_spherical_cavity_model.py +392 -0
  608. gragra-0.2.0rc1/tests/high_level/test_d3_spherical_shell_model.py +477 -0
  609. gragra-0.2.0rc1/tests/high_level/test_discretize.py +138 -0
  610. gragra-0.2.0rc1/tests/high_level/test_docs_examples.py +65 -0
  611. gragra-0.2.0rc1/tests/high_level/test_evaluation.py +560 -0
  612. gragra-0.2.0rc1/tests/high_level/test_evaluation_result.py +220 -0
  613. gragra-0.2.0rc1/tests/high_level/test_field_definition.py +547 -0
  614. gragra-0.2.0rc1/tests/high_level/test_formula_latex.py +82 -0
  615. gragra-0.2.0rc1/tests/high_level/test_frame_basis_bool.py +99 -0
  616. gragra-0.2.0rc1/tests/high_level/test_frame_origin_bool.py +39 -0
  617. gragra-0.2.0rc1/tests/high_level/test_frame_precision.py +51 -0
  618. gragra-0.2.0rc1/tests/high_level/test_gravity_response_b.py +430 -0
  619. gragra-0.2.0rc1/tests/high_level/test_hist.py +1549 -0
  620. gragra-0.2.0rc1/tests/high_level/test_inputs.py +385 -0
  621. gragra-0.2.0rc1/tests/high_level/test_plot_contribution_hist.py +226 -0
  622. gragra-0.2.0rc1/tests/high_level/test_plot_hist.py +253 -0
  623. gragra-0.2.0rc1/tests/high_level/test_plot_result_field.py +684 -0
  624. gragra-0.2.0rc1/tests/high_level/test_plot_setup.py +472 -0
  625. gragra-0.2.0rc1/tests/high_level/test_plot_setup_shapes.py +191 -0
  626. gragra-0.2.0rc1/tests/high_level/test_plotting_lazy_import.py +260 -0
  627. gragra-0.2.0rc1/tests/high_level/test_point_sum_sources.py +355 -0
  628. gragra-0.2.0rc1/tests/high_level/test_pure_geometry_common.py +134 -0
  629. gragra-0.2.0rc1/tests/high_level/test_radial_histogram.py +1038 -0
  630. gragra-0.2.0rc1/tests/high_level/test_rayleigh_contract_d.py +428 -0
  631. gragra-0.2.0rc1/tests/high_level/test_rayleigh_gwexpy_contract.py +79 -0
  632. gragra-0.2.0rc1/tests/high_level/test_rayleigh_integration_i.py +224 -0
  633. gragra-0.2.0rc1/tests/high_level/test_rayleigh_model.py +216 -0
  634. gragra-0.2.0rc1/tests/high_level/test_rayleigh_plot_setup_c.py +456 -0
  635. gragra-0.2.0rc1/tests/high_level/test_rayleigh_response_a.py +327 -0
  636. gragra-0.2.0rc1/tests/high_level/test_rayleigh_response_integration_i.py +709 -0
  637. gragra-0.2.0rc1/tests/high_level/test_rayleigh_results_b.py +374 -0
  638. gragra-0.2.0rc1/tests/high_level/test_source_contribution_contracts.py +534 -0
  639. gragra-0.2.0rc1/tests/high_level/test_source_diagnostics_integration.py +204 -0
  640. gragra-0.2.0rc1/tests/high_level/test_source_field.py +1073 -0
  641. gragra-0.2.0rc1/tests/high_level/test_source_quantities.py +290 -0
  642. gragra-0.2.0rc1/tests/high_level/test_spherical_phase_speed.py +298 -0
  643. gragra-0.2.0rc1/tests/high_level/test_static_density_mesh.py +333 -0
  644. gragra-0.2.0rc1/tests/high_level/test_static_source_compare.py +278 -0
  645. gragra-0.2.0rc1/tests/high_level/test_workflow.py +51 -0
  646. gragra-0.2.0rc1/tests/oracles/cylinder_axis_potential_check.py +190 -0
  647. gragra-0.2.0rc1/tests/oracles/cylinder_axis_potential_reference.py +75 -0
  648. gragra-0.2.0rc1/tests/oracles/cylinder_elliptic_derivation.py +119 -0
  649. gragra-0.2.0rc1/tests/oracles/cylinder_potential_derivation.py +95 -0
  650. gragra-0.2.0rc1/tests/oracles/cylinder_potential_reference.py +75 -0
  651. gragra-0.2.0rc1/tests/oracles/cylinder_potential_validation_report.py +64 -0
  652. gragra-0.2.0rc1/tests/oracles/cylinder_surface_reference.py +68 -0
  653. gragra-0.2.0rc1/tests/oracles/cylinder_validation_report.py +70 -0
  654. gragra-0.2.0rc1/tests/oracles/data/finite_body_affine_v1.json +1104 -0
  655. gragra-0.2.0rc1/tests/oracles/data/halfspace_v1.json +1314 -0
  656. gragra-0.2.0rc1/tests/oracles/data/rayleigh_v1.json +2047 -0
  657. gragra-0.2.0rc1/tests/oracles/data/specfem_pilot_s1_v1.json +33 -0
  658. gragra-0.2.0rc1/tests/oracles/gen1/README.md +89 -0
  659. gragra-0.2.0rc1/tests/oracles/gen1/TRACE-F_B1_v2-obligations.md +93 -0
  660. gragra-0.2.0rc1/tests/oracles/gen1/acceptance.py +105 -0
  661. gragra-0.2.0rc1/tests/oracles/gen1/audit_frozen_refinement_traces.py +1815 -0
  662. gragra-0.2.0rc1/tests/oracles/gen1/audit_frozen_refinement_traces_v3.py +2110 -0
  663. gragra-0.2.0rc1/tests/oracles/gen1/audit_frozen_refinement_traces_v4.py +2195 -0
  664. gragra-0.2.0rc1/tests/oracles/gen1/b1-production-comparator-policy-v1.json +223 -0
  665. gragra-0.2.0rc1/tests/oracles/gen1/b1_analytic_enclosure.py +929 -0
  666. gragra-0.2.0rc1/tests/oracles/gen1/b1_exact_record_adapter.py +453 -0
  667. gragra-0.2.0rc1/tests/oracles/gen1/b1_formal_generator.py +831 -0
  668. gragra-0.2.0rc1/tests/oracles/gen1/cavity_fixtures.py +80 -0
  669. gragra-0.2.0rc1/tests/oracles/gen1/certify_frozen_zero_estimates.py +197 -0
  670. gragra-0.2.0rc1/tests/oracles/gen1/compare_noncavity_production.py +419 -0
  671. gragra-0.2.0rc1/tests/oracles/gen1/compare_source_production.py +386 -0
  672. gragra-0.2.0rc1/tests/oracles/gen1/compare_sphere_production.py +246 -0
  673. gragra-0.2.0rc1/tests/oracles/gen1/compare_stochastic_production.py +1639 -0
  674. gragra-0.2.0rc1/tests/oracles/gen1/compare_surface_production.py +342 -0
  675. gragra-0.2.0rc1/tests/oracles/gen1/derivations/certified_tail_envelopes.py +163 -0
  676. gragra-0.2.0rc1/tests/oracles/gen1/derivations/check_cuboid_transform.py +214 -0
  677. gragra-0.2.0rc1/tests/oracles/gen1/derivations/check_cylinder_cap_residual.py +215 -0
  678. gragra-0.2.0rc1/tests/oracles/gen1/derivations/check_cylinder_spectral.py +408 -0
  679. gragra-0.2.0rc1/tests/oracles/gen1/derivations/run_derivations.py +215 -0
  680. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cuboid_volume.py +302 -0
  681. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cylinder_cap_residual.py +314 -0
  682. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cylinder_cartesian.py +119 -0
  683. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cylinder_conditioning.py +274 -0
  684. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cylinder_paired_sensitivity.py +276 -0
  685. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_cylinder_single_cap_sensitivity_domain.py +120 -0
  686. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_non_cavity.py +298 -0
  687. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_point_force.py +82 -0
  688. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_polynomial_quadrature.py +288 -0
  689. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_sphere.py +109 -0
  690. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_stochastic_rayleigh.py +65 -0
  691. gragra-0.2.0rc1/tests/oracles/gen1/derivations/verify_transforms.py +169 -0
  692. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/__init__.py +1 -0
  693. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/__init__.py +1 -0
  694. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/bootstrap.py +769 -0
  695. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/deadline.py +511 -0
  696. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/governor.py +3335 -0
  697. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/ledger.py +1120 -0
  698. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/procfs.py +485 -0
  699. gragra-0.2.0rc1/tests/oracles/gen1/diagnostic_runtime/v1/source_catalog.py +308 -0
  700. gragra-0.2.0rc1/tests/oracles/gen1/noncavity_fixtures.py +76 -0
  701. gragra-0.2.0rc1/tests/oracles/gen1/noncavity_reference.py +533 -0
  702. gragra-0.2.0rc1/tests/oracles/gen1/plane_static_reference.py +168 -0
  703. gragra-0.2.0rc1/tests/oracles/gen1/record_cylinder_root_normalization.py +135 -0
  704. gragra-0.2.0rc1/tests/oracles/gen1/record_frozen_refinement_traces.py +3402 -0
  705. gragra-0.2.0rc1/tests/oracles/gen1/record_frozen_refinement_traces_v3.py +4446 -0
  706. gragra-0.2.0rc1/tests/oracles/gen1/record_frozen_refinement_traces_v4.py +4756 -0
  707. gragra-0.2.0rc1/tests/oracles/gen1/refinement_trace_provenance_v3.py +195 -0
  708. gragra-0.2.0rc1/tests/oracles/gen1/refinement_trace_provenance_v4.py +732 -0
  709. gragra-0.2.0rc1/tests/oracles/gen1/run_noncavity_reference.py +102 -0
  710. gragra-0.2.0rc1/tests/oracles/gen1/run_refinement_trace_validation.py +180 -0
  711. gragra-0.2.0rc1/tests/oracles/gen1/run_refinement_trace_validation_v4.py +1105 -0
  712. gragra-0.2.0rc1/tests/oracles/gen1/run_source_reference.py +112 -0
  713. gragra-0.2.0rc1/tests/oracles/gen1/run_sphere_high_degree_reference.py +119 -0
  714. gragra-0.2.0rc1/tests/oracles/gen1/run_sphere_reference.py +96 -0
  715. gragra-0.2.0rc1/tests/oracles/gen1/run_stochastic_acoustic_reference.py +122 -0
  716. gragra-0.2.0rc1/tests/oracles/gen1/run_stochastic_local.py +1041 -0
  717. gragra-0.2.0rc1/tests/oracles/gen1/run_stochastic_seismic_reference.py +82 -0
  718. gragra-0.2.0rc1/tests/oracles/gen1/run_stochastic_temperature_reference.py +36 -0
  719. gragra-0.2.0rc1/tests/oracles/gen1/run_surface_parallel.py +179 -0
  720. gragra-0.2.0rc1/tests/oracles/gen1/run_surface_reference.py +109 -0
  721. gragra-0.2.0rc1/tests/oracles/gen1/source_fixtures.py +80 -0
  722. gragra-0.2.0rc1/tests/oracles/gen1/source_reference.py +397 -0
  723. gragra-0.2.0rc1/tests/oracles/gen1/sphere_fixtures.py +42 -0
  724. gragra-0.2.0rc1/tests/oracles/gen1/sphere_high_degree_fixtures.py +20 -0
  725. gragra-0.2.0rc1/tests/oracles/gen1/sphere_high_degree_reference.py +271 -0
  726. gragra-0.2.0rc1/tests/oracles/gen1/sphere_reference.py +392 -0
  727. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_acceptance.py +510 -0
  728. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_acoustic_reference.py +976 -0
  729. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_attempt.py +484 -0
  730. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/A2-profile.md +100 -0
  731. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/README.md +155 -0
  732. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/__init__.py +1 -0
  733. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/a2.py +929 -0
  734. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/archive.py +183 -0
  735. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/arithmetic.py +226 -0
  736. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/authorship.py +120 -0
  737. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/b1.py +1012 -0
  738. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/closure.py +187 -0
  739. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/graph.py +686 -0
  740. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/reader.py +212 -0
  741. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/retrieval.py +131 -0
  742. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/source.py +161 -0
  743. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_delivery/v2.py +747 -0
  744. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_f_common_v2.py +307 -0
  745. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a1/generator.py +303 -0
  746. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a1/runner.py +627 -0
  747. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a1/verify_derivations.py +36 -0
  748. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/README.md +53 -0
  749. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/budget.py +561 -0
  750. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/freeze.py +174 -0
  751. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/oracle.py +293 -0
  752. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/purpose.py +79 -0
  753. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/review.py +175 -0
  754. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/runner.py +486 -0
  755. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/__init__.py +1 -0
  756. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/family_connections.py +790 -0
  757. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/family_driver.py +789 -0
  758. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/family_execution.py +132 -0
  759. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/family_source_review.py +144 -0
  760. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/family_supervisor.py +456 -0
  761. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/inventory.py +89 -0
  762. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/reader_contract.py +63 -0
  763. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v1/resource_adapter.py +1246 -0
  764. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/__init__.py +2 -0
  765. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/binding.py +823 -0
  766. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/coverage.py +463 -0
  767. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/manifest.py +123 -0
  768. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/retained_reference.py +1069 -0
  769. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/runner.py +225 -0
  770. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v2/worker.py +670 -0
  771. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v3/__init__.py +1 -0
  772. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/v3/binding.py +988 -0
  773. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a2/worker.py +91 -0
  774. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/a3/generator.py +65 -0
  775. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/b1_aux/reference.py +240 -0
  776. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/b1_aux/runner.py +537 -0
  777. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/b2/README.md +35 -0
  778. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/b2/generator.py +276 -0
  779. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/b2/runner.py +865 -0
  780. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/__init__.py +1 -0
  781. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/b1_connections.py +740 -0
  782. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/b1_driver.py +509 -0
  783. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/controller.py +188 -0
  784. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/dependencies.py +487 -0
  785. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/execution.py +126 -0
  786. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_adapter.py +376 -0
  787. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_connections_acoustic.py +272 -0
  788. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_connections_seismic.py +494 -0
  789. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_connections_temperature.py +434 -0
  790. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_controller.py +133 -0
  791. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_driver.py +728 -0
  792. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_execution.py +124 -0
  793. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_inventory.py +65 -0
  794. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_scales.py +193 -0
  795. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_source_review.py +139 -0
  796. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/family_supervisor.py +426 -0
  797. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/inventory.py +259 -0
  798. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/supervisor.py +228 -0
  799. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/common/transport.py +489 -0
  800. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/r1/README.md +57 -0
  801. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/r1/generator.py +266 -0
  802. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/r1/runner.py +865 -0
  803. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/t1/DERIVATION.md +103 -0
  804. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/t1/laplace.py +67 -0
  805. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/t1/reference.py +226 -0
  806. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_formal/t1/runner.py +778 -0
  807. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_seismic_reference.py +713 -0
  808. gragra-0.2.0rc1/tests/oracles/gen1/stochastic_temperature_reference.py +376 -0
  809. gragra-0.2.0rc1/tests/oracles/gen1/surface_crosschecks.py +130 -0
  810. gragra-0.2.0rc1/tests/oracles/gen1/surface_high_precision.py +318 -0
  811. gragra-0.2.0rc1/tests/oracles/gen1/surface_reference.py +501 -0
  812. gragra-0.2.0rc1/tests/oracles/gen1/test_frozen_refinement_trace_audit.py +810 -0
  813. gragra-0.2.0rc1/tests/oracles/gen1/test_refinement_trace_observer_v3.py +1691 -0
  814. gragra-0.2.0rc1/tests/oracles/gen1/test_refinement_trace_observer_v4.py +4054 -0
  815. gragra-0.2.0rc1/tests/oracles/gen1/test_refinement_trace_recorder.py +1215 -0
  816. gragra-0.2.0rc1/tests/oracles/gen1/test_run_refinement_trace_validation_v4.py +744 -0
  817. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/README.md +43 -0
  818. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/ac3_cas_checks.py +349 -0
  819. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/ac3_case_matrix.json +382 -0
  820. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/ac3_evaluation.py +546 -0
  821. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/gravity.py +300 -0
  822. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/oracle.py +156 -0
  823. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/t4_cas_checks.py +227 -0
  824. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/t4_case_matrix.json +444 -0
  825. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/t4_evaluation.py +665 -0
  826. gragra-0.2.0rc1/tests/oracles/gen1/wave1_3/verify_wave1_3.py +50 -0
  827. gragra-0.2.0rc1/tests/oracles/generate_finite_body_affine_oracle.py +366 -0
  828. gragra-0.2.0rc1/tests/oracles/generate_halfspace_oracle.py +548 -0
  829. gragra-0.2.0rc1/tests/oracles/generate_openfoam_volume_spike.py +498 -0
  830. gragra-0.2.0rc1/tests/oracles/generate_rayleigh_oracle.py +776 -0
  831. gragra-0.2.0rc1/tests/oracles/generate_specfem_pilot_invariants.py +164 -0
  832. gragra-0.2.0rc1/tests/oracles/halfspace_psv_derivation.py +55 -0
  833. gragra-0.2.0rc1/tests/oracles/rigid_motion.py +113 -0
  834. gragra-0.2.0rc1/tests/oracles/u10_spherical_shell_general_reference.py +346 -0
  835. gragra-0.2.0rc1/tests/oracles/u11_rayleigh_small_cavity_reference.py +243 -0
  836. gragra-0.2.0rc1/tests/oracles/u9_sca_wall_observables_reference.py +225 -0
  837. gragra-0.2.0rc1/tests/oracles/verify_generic_integration_m2_derivation.py +153 -0
  838. gragra-0.2.0rc1/tests/oracles/water_analytic_reference.py +861 -0
  839. gragra-0.2.0rc1/tests/oracles/water_surface_reference.py +271 -0
  840. gragra-0.2.0rc1/tests/oracles/wave456/assumptions.yaml +11 -0
  841. gragra-0.2.0rc1/tests/oracles/wave456/generate_references.py +352 -0
  842. gragra-0.2.0rc1/tests/oracles/wave456/run_generation.py +118 -0
  843. gragra-0.2.0rc1/tests/oracles/wave456/verify_derivations.py +164 -0
  844. gragra-0.2.0rc1/tests/reference_fixtures/generate_acoustic_halfspace.py +70 -0
  845. gragra-0.2.0rc1/tests/test_analytic_bodywave_literature.py +580 -0
  846. gragra-0.2.0rc1/tests/test_analytic_cavity_coupling.py +117 -0
  847. gragra-0.2.0rc1/tests/test_analytic_cavity_cuboid.py +167 -0
  848. gragra-0.2.0rc1/tests/test_analytic_cavity_cylinder.py +204 -0
  849. gragra-0.2.0rc1/tests/test_analytic_cavity_sphere.py +228 -0
  850. gragra-0.2.0rc1/tests/test_analytic_cavity_sphere_finite.py +381 -0
  851. gragra-0.2.0rc1/tests/test_analytic_cavity_sphere_shell_s.py +513 -0
  852. gragra-0.2.0rc1/tests/test_analytic_cavity_sphere_shell_s_stability.py +185 -0
  853. gragra-0.2.0rc1/tests/test_analytic_cross_validation.py +45 -0
  854. gragra-0.2.0rc1/tests/test_analytic_cuboid.py +471 -0
  855. gragra-0.2.0rc1/tests/test_analytic_cylinder.py +343 -0
  856. gragra-0.2.0rc1/tests/test_analytic_cylinder_offaxis.py +447 -0
  857. gragra-0.2.0rc1/tests/test_analytic_cylinder_potential.py +520 -0
  858. gragra-0.2.0rc1/tests/test_analytic_halfspace.py +127 -0
  859. gragra-0.2.0rc1/tests/test_analytic_observables_si.py +146 -0
  860. gragra-0.2.0rc1/tests/test_analytic_oriented.py +231 -0
  861. gragra-0.2.0rc1/tests/test_analytic_rayleigh_literature.py +1026 -0
  862. gragra-0.2.0rc1/tests/test_analytic_sca_tensor.py +236 -0
  863. gragra-0.2.0rc1/tests/test_analytic_uniform_sphere.py +224 -0
  864. gragra-0.2.0rc1/tests/test_analytic_values.py +197 -0
  865. gragra-0.2.0rc1/tests/test_analytic_water.py +730 -0
  866. gragra-0.2.0rc1/tests/test_anna_comparison_contract.py +473 -0
  867. gragra-0.2.0rc1/tests/test_anna_fullspace_fixture_contract.py +220 -0
  868. gragra-0.2.0rc1/tests/test_anna_halfspace_fixture_contract.py +203 -0
  869. gragra-0.2.0rc1/tests/test_arrays.py +97 -0
  870. gragra-0.2.0rc1/tests/test_background_advection.py +391 -0
  871. gragra-0.2.0rc1/tests/test_bodywave_literature_oracle.py +1442 -0
  872. gragra-0.2.0rc1/tests/test_check_pin_reconciliation.py +133 -0
  873. gragra-0.2.0rc1/tests/test_ci_policy.py +194 -0
  874. gragra-0.2.0rc1/tests/test_coherent_average.py +186 -0
  875. gragra-0.2.0rc1/tests/test_coherent_bulk_weights.py +120 -0
  876. gragra-0.2.0rc1/tests/test_coherent_ensemble.py +79 -0
  877. gragra-0.2.0rc1/tests/test_coherent_gravitoelastic.py +211 -0
  878. gragra-0.2.0rc1/tests/test_coherent_observables.py +213 -0
  879. gragra-0.2.0rc1/tests/test_coherent_weights.py +85 -0
  880. gragra-0.2.0rc1/tests/test_continuous_contract.py +732 -0
  881. gragra-0.2.0rc1/tests/test_continuous_docs_surface.py +58 -0
  882. gragra-0.2.0rc1/tests/test_continuous_fourier_integration.py +560 -0
  883. gragra-0.2.0rc1/tests/test_continuous_gates.py +381 -0
  884. gragra-0.2.0rc1/tests/test_continuous_public_api.py +461 -0
  885. gragra-0.2.0rc1/tests/test_continuous_rigid_motion.py +446 -0
  886. gragra-0.2.0rc1/tests/test_convergence_cuboid.py +201 -0
  887. gragra-0.2.0rc1/tests/test_convergence_cylinder.py +198 -0
  888. gragra-0.2.0rc1/tests/test_convergence_half_primitives.py +404 -0
  889. gragra-0.2.0rc1/tests/test_convergence_suite.py +127 -0
  890. gragra-0.2.0rc1/tests/test_cpp_backend_available.py +308 -0
  891. gragra-0.2.0rc1/tests/test_cpp_backend_missing.py +189 -0
  892. gragra-0.2.0rc1/tests/test_cpp_core_purity.py +34 -0
  893. gragra-0.2.0rc1/tests/test_cpp_dipole.py +272 -0
  894. gragra-0.2.0rc1/tests/test_cpp_required_symbols.py +58 -0
  895. gragra-0.2.0rc1/tests/test_cupy_backend_available.py +280 -0
  896. gragra-0.2.0rc1/tests/test_cupy_backend_missing.py +182 -0
  897. gragra-0.2.0rc1/tests/test_cupy_dipole.py +413 -0
  898. gragra-0.2.0rc1/tests/test_cupy_dipole_missing.py +126 -0
  899. gragra-0.2.0rc1/tests/test_cupy_parametric_missing.py +169 -0
  900. gragra-0.2.0rc1/tests/test_cupy_planewave.py +296 -0
  901. gragra-0.2.0rc1/tests/test_cupy_registry_contract.py +157 -0
  902. gragra-0.2.0rc1/tests/test_cylinder_elliptic.py +26 -0
  903. gragra-0.2.0rc1/tests/test_cylinder_potential_series.py +76 -0
  904. gragra-0.2.0rc1/tests/test_cylinder_sca_tensor.py +207 -0
  905. gragra-0.2.0rc1/tests/test_displacement_observables.py +154 -0
  906. gragra-0.2.0rc1/tests/test_docs_snippets.py +481 -0
  907. gragra-0.2.0rc1/tests/test_docs_status_blocks.py +545 -0
  908. gragra-0.2.0rc1/tests/test_dynamic_contributions.py +1043 -0
  909. gragra-0.2.0rc1/tests/test_examples.py +110 -0
  910. gragra-0.2.0rc1/tests/test_field_batch.py +306 -0
  911. gragra-0.2.0rc1/tests/test_field_dipole_diagnostics.py +430 -0
  912. gragra-0.2.0rc1/tests/test_field_endtoend.py +139 -0
  913. gragra-0.2.0rc1/tests/test_field_series_hdf5_lane_l.py +844 -0
  914. gragra-0.2.0rc1/tests/test_fields_evaluation.py +115 -0
  915. gragra-0.2.0rc1/tests/test_finite_body.py +497 -0
  916. gragra-0.2.0rc1/tests/test_finite_body_mesh_adapter.py +327 -0
  917. gragra-0.2.0rc1/tests/test_finite_body_mesh_rigid.py +143 -0
  918. gragra-0.2.0rc1/tests/test_finite_body_p1.py +426 -0
  919. gragra-0.2.0rc1/tests/test_finite_body_p1_quadrature.py +386 -0
  920. gragra-0.2.0rc1/tests/test_first_wave_imports.py +45 -0
  921. gragra-0.2.0rc1/tests/test_fixed_mesh_series.py +215 -0
  922. gragra-0.2.0rc1/tests/test_fullspace_bodywave_private.py +204 -0
  923. gragra-0.2.0rc1/tests/test_gate_mutation.py +265 -0
  924. gragra-0.2.0rc1/tests/test_generic_contraction_backend.py +327 -0
  925. gragra-0.2.0rc1/tests/test_generic_displacement_contraction.py +530 -0
  926. gragra-0.2.0rc1/tests/test_generic_enigma_harms_cylinder.py +378 -0
  927. gragra-0.2.0rc1/tests/test_generic_execution_planner.py +809 -0
  928. gragra-0.2.0rc1/tests/test_generic_execution_strategies.py +410 -0
  929. gragra-0.2.0rc1/tests/test_generic_mass_coupling.py +229 -0
  930. gragra-0.2.0rc1/tests/test_generic_quadrature_field_sampler.py +373 -0
  931. gragra-0.2.0rc1/tests/test_generic_source_provider.py +341 -0
  932. gragra-0.2.0rc1/tests/test_geometry.py +347 -0
  933. gragra-0.2.0rc1/tests/test_geometry_integration.py +225 -0
  934. gragra-0.2.0rc1/tests/test_geometry_primitives.py +293 -0
  935. gragra-0.2.0rc1/tests/test_geometry_surface_mesh.py +198 -0
  936. gragra-0.2.0rc1/tests/test_geometry_vs_analytic.py +92 -0
  937. gragra-0.2.0rc1/tests/test_git_blob_pins.py +273 -0
  938. gragra-0.2.0rc1/tests/test_gravity_result.py +237 -0
  939. gragra-0.2.0rc1/tests/test_gravity_result_examples.py +138 -0
  940. gragra-0.2.0rc1/tests/test_gwexpy_adapter_available.py +226 -0
  941. gragra-0.2.0rc1/tests/test_gwexpy_adapter_missing.py +42 -0
  942. gragra-0.2.0rc1/tests/test_gwexpy_observable.py +341 -0
  943. gragra-0.2.0rc1/tests/test_gwexpy_observable_missing.py +34 -0
  944. gragra-0.2.0rc1/tests/test_gwexpy_series.py +466 -0
  945. gragra-0.2.0rc1/tests/test_gwexpy_series_missing.py +26 -0
  946. gragra-0.2.0rc1/tests/test_gwexpy_source.py +277 -0
  947. gragra-0.2.0rc1/tests/test_gwexpy_source_missing.py +31 -0
  948. gragra-0.2.0rc1/tests/test_halfspace_gravity_oracle.py +226 -0
  949. gragra-0.2.0rc1/tests/test_halfspace_psv.py +432 -0
  950. gragra-0.2.0rc1/tests/test_hdf5_field_io.py +730 -0
  951. gragra-0.2.0rc1/tests/test_hex8_geometry.py +90 -0
  952. gragra-0.2.0rc1/tests/test_import.py +350 -0
  953. gragra-0.2.0rc1/tests/test_kernel_contract.py +98 -0
  954. gragra-0.2.0rc1/tests/test_kernel_dipole_contract.py +218 -0
  955. gragra-0.2.0rc1/tests/test_kernel_displacement_contracts.py +259 -0
  956. gragra-0.2.0rc1/tests/test_lebedev_grid.py +81 -0
  957. gragra-0.2.0rc1/tests/test_m3_p6_science.py +1633 -0
  958. gragra-0.2.0rc1/tests/test_m3b_h1_rigid_motion.py +197 -0
  959. gragra-0.2.0rc1/tests/test_m3b_h1_science.py +149 -0
  960. gragra-0.2.0rc1/tests/test_m3b_h2_h3_spectral.py +198 -0
  961. gragra-0.2.0rc1/tests/test_m3b_p2_regressions.py +164 -0
  962. gragra-0.2.0rc1/tests/test_m3b_rot_dft.py +137 -0
  963. gragra-0.2.0rc1/tests/test_material_hex8.py +491 -0
  964. gragra-0.2.0rc1/tests/test_mathjax_rendering.py +269 -0
  965. gragra-0.2.0rc1/tests/test_mesh_quality.py +180 -0
  966. gragra-0.2.0rc1/tests/test_meshio_adapter.py +128 -0
  967. gragra-0.2.0rc1/tests/test_meshio_volume_adapter.py +473 -0
  968. gragra-0.2.0rc1/tests/test_metadata.py +134 -0
  969. gragra-0.2.0rc1/tests/test_nonuniform_rho0.py +373 -0
  970. gragra-0.2.0rc1/tests/test_numba_backend_available.py +152 -0
  971. gragra-0.2.0rc1/tests/test_numba_backend_missing.py +111 -0
  972. gragra-0.2.0rc1/tests/test_numba_dipole.py +178 -0
  973. gragra-0.2.0rc1/tests/test_numba_displacement_derivatives.py +231 -0
  974. gragra-0.2.0rc1/tests/test_observable_series.py +195 -0
  975. gragra-0.2.0rc1/tests/test_observables.py +306 -0
  976. gragra-0.2.0rc1/tests/test_observables_bodywave_literature.py +72 -0
  977. gragra-0.2.0rc1/tests/test_observables_dipole.py +58 -0
  978. gragra-0.2.0rc1/tests/test_observables_rayleigh_literature.py +46 -0
  979. gragra-0.2.0rc1/tests/test_openfoam_density.py +164 -0
  980. gragra-0.2.0rc1/tests/test_openfoam_density_missing.py +244 -0
  981. gragra-0.2.0rc1/tests/test_parametric_contracts.py +220 -0
  982. gragra-0.2.0rc1/tests/test_parametric_cpp.py +150 -0
  983. gragra-0.2.0rc1/tests/test_parametric_numba.py +111 -0
  984. gragra-0.2.0rc1/tests/test_periodic_fourier.py +544 -0
  985. gragra-0.2.0rc1/tests/test_plane_wave_sources.py +123 -0
  986. gragra-0.2.0rc1/tests/test_planewave_backends.py +216 -0
  987. gragra-0.2.0rc1/tests/test_point_sources.py +233 -0
  988. gragra-0.2.0rc1/tests/test_prescribed_trajectory_csv.py +63 -0
  989. gragra-0.2.0rc1/tests/test_public_docs.py +82 -0
  990. gragra-0.2.0rc1/tests/test_r6_multipole_science.py +198 -0
  991. gragra-0.2.0rc1/tests/test_rayleigh_cadence.py +178 -0
  992. gragra-0.2.0rc1/tests/test_rayleigh_domain_sensitivity.py +130 -0
  993. gragra-0.2.0rc1/tests/test_rayleigh_gravity_oracle.py +242 -0
  994. gragra-0.2.0rc1/tests/test_rayleigh_production_path.py +164 -0
  995. gragra-0.2.0rc1/tests/test_rayleigh_timefit.py +44 -0
  996. gragra-0.2.0rc1/tests/test_regular_grid.py +322 -0
  997. gragra-0.2.0rc1/tests/test_reproduce_report.py +189 -0
  998. gragra-0.2.0rc1/tests/test_research_rayleigh_gravity_window_diagnostics.py +95 -0
  999. gragra-0.2.0rc1/tests/test_research_rayleigh_window_fit_diagnostics.py +85 -0
  1000. gragra-0.2.0rc1/tests/test_research_wave456_finite_body.py +285 -0
  1001. gragra-0.2.0rc1/tests/test_research_wave456_rotation.py +181 -0
  1002. gragra-0.2.0rc1/tests/test_research_wave4_specfem_protocol.py +522 -0
  1003. gragra-0.2.0rc1/tests/test_research_wave5_crosspaths_gwexpy.py +88 -0
  1004. gragra-0.2.0rc1/tests/test_research_wave5_crosspaths_hdf5.py +70 -0
  1005. gragra-0.2.0rc1/tests/test_research_wave5_rayleigh_crosspaths.py +690 -0
  1006. gragra-0.2.0rc1/tests/test_research_wave5_specfem_export.py +551 -0
  1007. gragra-0.2.0rc1/tests/test_research_wave6_heterogeneous_box_reference.py +131 -0
  1008. gragra-0.2.0rc1/tests/test_research_wave6_quadrature_order_study.py +134 -0
  1009. gragra-0.2.0rc1/tests/test_research_wave6_specfem_analysis.py +503 -0
  1010. gragra-0.2.0rc1/tests/test_research_wave6_spherical_cavity_general_point.py +200 -0
  1011. gragra-0.2.0rc1/tests/test_research_wave6_spherical_cavity_near_wall.py +75 -0
  1012. gragra-0.2.0rc1/tests/test_rigid_motion.py +476 -0
  1013. gragra-0.2.0rc1/tests/test_rigid_motion_observables.py +806 -0
  1014. gragra-0.2.0rc1/tests/test_rigid_motion_science.py +210 -0
  1015. gragra-0.2.0rc1/tests/test_ruff_exclusion_identity_v1.py +692 -0
  1016. gragra-0.2.0rc1/tests/test_scipy_dependency_scope.py +75 -0
  1017. gragra-0.2.0rc1/tests/test_softening.py +65 -0
  1018. gragra-0.2.0rc1/tests/test_source_kernel_terms.py +152 -0
  1019. gragra-0.2.0rc1/tests/test_specfem_bin.py +394 -0
  1020. gragra-0.2.0rc1/tests/test_specfem_exporter.py +568 -0
  1021. gragra-0.2.0rc1/tests/test_specfem_gll.py +462 -0
  1022. gragra-0.2.0rc1/tests/test_specfem_pilot_gate.py +229 -0
  1023. gragra-0.2.0rc1/tests/test_specfem_provenance.py +771 -0
  1024. gragra-0.2.0rc1/tests/test_specfem_reader.py +638 -0
  1025. gragra-0.2.0rc1/tests/test_specfem_schema.py +564 -0
  1026. gragra-0.2.0rc1/tests/test_specfem_streaming_lane_l.py +390 -0
  1027. gragra-0.2.0rc1/tests/test_specfem_streaming_numba.py +61 -0
  1028. gragra-0.2.0rc1/tests/test_spectral_conventions.py +541 -0
  1029. gragra-0.2.0rc1/tests/test_spectral_representation.py +236 -0
  1030. gragra-0.2.0rc1/tests/test_spherical_cavity_series.py +263 -0
  1031. gragra-0.2.0rc1/tests/test_stochastic_a2_continuity.py +212 -0
  1032. gragra-0.2.0rc1/tests/test_stochastic_acoustic.py +232 -0
  1033. gragra-0.2.0rc1/tests/test_stochastic_acoustic_zero_radius.py +68 -0
  1034. gragra-0.2.0rc1/tests/test_stochastic_bodywave.py +283 -0
  1035. gragra-0.2.0rc1/tests/test_stochastic_delivery_a2.py +601 -0
  1036. gragra-0.2.0rc1/tests/test_stochastic_delivery_arithmetic.py +228 -0
  1037. gragra-0.2.0rc1/tests/test_stochastic_delivery_authorship.py +153 -0
  1038. gragra-0.2.0rc1/tests/test_stochastic_delivery_b1.py +1154 -0
  1039. gragra-0.2.0rc1/tests/test_stochastic_delivery_dispatch.py +71 -0
  1040. gragra-0.2.0rc1/tests/test_stochastic_delivery_evidence.py +847 -0
  1041. gragra-0.2.0rc1/tests/test_stochastic_delivery_retrieval.py +168 -0
  1042. gragra-0.2.0rc1/tests/test_stochastic_delivery_v2.py +761 -0
  1043. gragra-0.2.0rc1/tests/test_stochastic_family_comparator.py +873 -0
  1044. gragra-0.2.0rc1/tests/test_stochastic_family_connections_a2.py +693 -0
  1045. gragra-0.2.0rc1/tests/test_stochastic_family_connections_acoustic.py +251 -0
  1046. gragra-0.2.0rc1/tests/test_stochastic_family_connections_seismic.py +491 -0
  1047. gragra-0.2.0rc1/tests/test_stochastic_family_record_serialization.py +172 -0
  1048. gragra-0.2.0rc1/tests/test_stochastic_rayleigh.py +204 -0
  1049. gragra-0.2.0rc1/tests/test_stochastic_reference_test_isolation.py +91 -0
  1050. gragra-0.2.0rc1/tests/test_stochastic_temperature.py +128 -0
  1051. gragra-0.2.0rc1/tests/test_stochastic_temperature_stability.py +90 -0
  1052. gragra-0.2.0rc1/tests/test_streaming_lane_l.py +647 -0
  1053. gragra-0.2.0rc1/tests/test_surface_field.py +344 -0
  1054. gragra-0.2.0rc1/tests/test_surface_orientation.py +522 -0
  1055. gragra-0.2.0rc1/tests/test_surface_sources.py +216 -0
  1056. gragra-0.2.0rc1/tests/test_thermodynamic.py +129 -0
  1057. gragra-0.2.0rc1/tests/test_third_wave_imports.py +30 -0
  1058. gragra-0.2.0rc1/tests/test_trajectory.py +306 -0
  1059. gragra-0.2.0rc1/tests/test_u10_spherical_shell_general.py +557 -0
  1060. gragra-0.2.0rc1/tests/test_u11_rayleigh_small_cavity.py +381 -0
  1061. gragra-0.2.0rc1/tests/test_u9_sca_wall_observables.py +500 -0
  1062. gragra-0.2.0rc1/tests/test_u9_u10_u11_integration.py +183 -0
  1063. gragra-0.2.0rc1/tests/test_unstructured_field.py +315 -0
  1064. gragra-0.2.0rc1/tests/test_validation_extra_available.py +139 -0
  1065. gragra-0.2.0rc1/tests/test_volume_sources.py +153 -0
  1066. gragra-0.2.0rc1/tests/test_water_surface_models.py +479 -0
  1067. gragra-0.2.0rc1/tests/test_wave456_observable_wrappers.py +25 -0
  1068. gragra-0.2.0rc1/tests/test_wave456_reference.py +377 -0
  1069. gragra-0.2.0rc1/tests/test_wave4_environment.py +45 -0
  1070. gragra-0.2.0rc1/tests/test_wave5_environment_transport.py +169 -0
  1071. gragra-0.2.0rc1/tests/test_wave6_environment_acoustic.py +146 -0
  1072. gragra-0.2.0rc1/tests/test_wave6_mesh_exchange_e2e.py +63 -0
  1073. gragra-0.2.0rc1/tests/test_wave_directions.py +131 -0
  1074. gragra-0.2.0rc1/tests/test_wave_halfspace.py +128 -0
  1075. gragra-0.2.0rc1/tests/test_wave_phase.py +123 -0
  1076. gragra-0.2.0rc1/tests/test_wave_polarization.py +210 -0
  1077. gragra-0.2.0rc1/tests/test_wave_rayleigh.py +302 -0
  1078. gragra-0.2.0rc1/tests/test_waves_displacement.py +88 -0
  1079. gragra-0.2.0rc1/tests/test_waves_stochastic.py +570 -0
@@ -0,0 +1,226 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ concurrency:
10
+ group: public-ci-${{ github.event.pull_request.number || github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ policy:
18
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public'
19
+ runs-on: ubuntu-latest
20
+ timeout-minutes: 10
21
+ steps:
22
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
23
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
24
+ with:
25
+ python-version: '3.11'
26
+ - run: python -m pip install '.[dev]'
27
+ - run: python -m pytest -q tests/test_ci_policy.py
28
+
29
+ changes:
30
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.policy.result == 'success'
31
+ runs-on: ubuntu-latest
32
+ timeout-minutes: 10
33
+ needs: policy
34
+ outputs:
35
+ docs_only: ${{ steps.classify.outputs.docs_only }}
36
+ reason: ${{ steps.classify.outputs.reason }}
37
+ steps:
38
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
39
+ with:
40
+ fetch-depth: 0
41
+ - id: classify
42
+ env:
43
+ BASE_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}
44
+ HEAD_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}
45
+ run: |
46
+ set -euo pipefail
47
+ if [[ "$BASE_SHA" == "0000000000000000000000000000000000000000" ]]; then
48
+ {
49
+ echo 'docs_only=false'
50
+ echo 'reason=full: initial push has no base commit'
51
+ } >> "$GITHUB_OUTPUT"
52
+ exit 0
53
+ fi
54
+ git diff --name-status --find-renames "$BASE_SHA" "$HEAD_SHA" > changes.status
55
+ python scripts/ci/classify_changes.py < changes.status > classification.out
56
+ cat classification.out >> "$GITHUB_OUTPUT"
57
+
58
+ docs:
59
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.changes.result == 'success' && needs.changes.outputs.docs_only == 'true'
60
+ runs-on: ubuntu-latest
61
+ timeout-minutes: 15
62
+ needs: changes
63
+ steps:
64
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
65
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
66
+ with:
67
+ python-version: '3.11'
68
+ - run: python -m pip install '.[dev,reference,field-io,docs,mesh]'
69
+ - run: ruff check src
70
+ - run: mkdocs build --strict
71
+ - run: python -m pytest -q tests/test_public_docs.py
72
+
73
+ reference:
74
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.changes.result == 'success' && needs.changes.outputs.docs_only != 'true'
75
+ runs-on: ubuntu-latest
76
+ timeout-minutes: 20
77
+ needs: changes
78
+ strategy:
79
+ matrix:
80
+ python-version: ['3.11', '3.12']
81
+ steps:
82
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
83
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
84
+ with:
85
+ python-version: ${{ matrix.python-version }}
86
+ - run: python -m pip install -e '.[dev,reference,field-io,docs,mesh]'
87
+ - run: ruff check src
88
+ - run: ruff format --check src
89
+ - run: python -m pytest -q
90
+ - run: mkdocs build --strict
91
+
92
+ numba-parity:
93
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.changes.result == 'success' && needs.changes.outputs.docs_only != 'true'
94
+ runs-on: ubuntu-latest
95
+ timeout-minutes: 20
96
+ needs: changes
97
+ steps:
98
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
99
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
100
+ with:
101
+ python-version: '3.11'
102
+ - run: python -m pip install '.[dev,reference,field-io,numba]'
103
+ - run: GRAGRA_SPECFEM_BACKEND=numba python -m pytest -q tests/test_specfem_reader.py::test_displacement_acceleration_backend_matches_numpy_when_required
104
+
105
+ cpp-parity:
106
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.changes.result == 'success' && needs.changes.outputs.docs_only != 'true'
107
+ runs-on: ubuntu-latest
108
+ timeout-minutes: 30
109
+ needs: changes
110
+ steps:
111
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
112
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
113
+ with:
114
+ python-version: '3.11'
115
+ - name: Build and install the C++ backend from a copied tree
116
+ run: |
117
+ set -euo pipefail
118
+ source_copy=$(mktemp -d)
119
+ build_cwd=$(mktemp -d)
120
+ cp -a "$GITHUB_WORKSPACE"/. "$source_copy"/
121
+ cd "$build_cwd"
122
+ CMAKE_ARGS=-DGRAGRA_BUILD_CPP=ON python -m pip install "$source_copy[dev,reference,field-io,docs,mesh]"
123
+ python - <<'PY'
124
+ import os
125
+ import pathlib
126
+ import gragra
127
+ import gragra._cpp_backend as backend
128
+ from gragra.kernels._cpp_required import ALL_REQUIRED
129
+
130
+ missing = [name for name in ALL_REQUIRED if not hasattr(backend, name)]
131
+ if missing:
132
+ raise SystemExit(f"missing required C++ symbols: {missing}")
133
+ if pathlib.Path(gragra.__file__).resolve().is_relative_to(
134
+ pathlib.Path(os.environ["CHECKOUT_ROOT"]).resolve()
135
+ ):
136
+ raise SystemExit(f"source-tree import: {gragra.__file__}")
137
+ PY
138
+ env:
139
+ CHECKOUT_ROOT: ${{ github.workspace }}
140
+ - name: Run strict C++ parity outside the checkout
141
+ run: |
142
+ set -euo pipefail
143
+ test_cwd=$(mktemp -d)
144
+ cd "$test_cwd"
145
+ GRAGRA_SPECFEM_BACKEND=cpp python -m pytest -q "$GITHUB_WORKSPACE/tests/test_specfem_reader.py::test_displacement_acceleration_backend_matches_numpy_when_required"
146
+
147
+ package-smoke:
148
+ if: github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public' && needs.changes.result == 'success' && needs.changes.outputs.docs_only != 'true'
149
+ runs-on: ubuntu-latest
150
+ timeout-minutes: 25
151
+ needs: changes
152
+ steps:
153
+ - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
154
+ - uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c
155
+ with:
156
+ python-version: '3.11'
157
+ - name: Build artifacts and test them in fresh environments
158
+ run: |
159
+ set -euo pipefail
160
+ artifact_dir=$(mktemp -d)
161
+ python -m pip install build
162
+ python -m build --wheel --sdist --outdir "$artifact_dir"
163
+ for artifact in "$artifact_dir"/*.whl "$artifact_dir"/*.tar.gz; do
164
+ venv_dir=$(mktemp -d)
165
+ python -m venv "$venv_dir"
166
+ "$venv_dir/bin/python" -m pip install "$artifact"
167
+ "$venv_dir/bin/python" - <<PY
168
+ import pathlib
169
+ import gragra
170
+
171
+ checkout = pathlib.Path(r"$GITHUB_WORKSPACE").resolve()
172
+ imported = pathlib.Path(gragra.__file__).resolve()
173
+ if checkout == imported or checkout in imported.parents:
174
+ raise SystemExit(f"source-tree import: {imported}")
175
+ print(imported)
176
+ PY
177
+ done
178
+
179
+ required:
180
+ if: always() && github.repository == 'tatsuki-washimi/gragra' && github.event.repository.visibility == 'public'
181
+ runs-on: ubuntu-latest
182
+ timeout-minutes: 10
183
+ needs: [policy, changes, docs, reference, numba-parity, cpp-parity, package-smoke]
184
+ steps:
185
+ - name: Require the selected public checks
186
+ env:
187
+ POLICY: ${{ needs.policy.result }}
188
+ CHANGES: ${{ needs.changes.result }}
189
+ DOCS: ${{ needs.docs.result }}
190
+ REFERENCE: ${{ needs.reference.result }}
191
+ NUMBA: ${{ needs.numba-parity.result }}
192
+ CPP: ${{ needs.cpp-parity.result }}
193
+ PACKAGE: ${{ needs.package-smoke.result }}
194
+ DOCS_ONLY: ${{ needs.changes.outputs.docs_only }}
195
+ run: |
196
+ set -euo pipefail
197
+ for status in "$POLICY" "$CHANGES" "$DOCS" "$REFERENCE" "$NUMBA" "$CPP" "$PACKAGE"; do
198
+ case "$status" in
199
+ failure|cancelled)
200
+ echo "selected check ended with $status"
201
+ exit 1
202
+ ;;
203
+ esac
204
+ done
205
+ [[ "$POLICY" == success ]] || { echo "policy=$POLICY"; exit 1; }
206
+ [[ "$CHANGES" == success ]] || { echo "changes=$CHANGES"; exit 1; }
207
+ case "$DOCS_ONLY" in
208
+ true)
209
+ [[ "$DOCS" == success ]] || { echo "docs=$DOCS"; exit 1; }
210
+ [[ "$REFERENCE" == skipped ]] || { echo "reference=$REFERENCE"; exit 1; }
211
+ [[ "$NUMBA" == skipped ]] || { echo "numba-parity=$NUMBA"; exit 1; }
212
+ [[ "$CPP" == skipped ]] || { echo "cpp-parity=$CPP"; exit 1; }
213
+ [[ "$PACKAGE" == skipped ]] || { echo "package-smoke=$PACKAGE"; exit 1; }
214
+ ;;
215
+ false)
216
+ [[ "$DOCS" == skipped ]] || { echo "docs=$DOCS"; exit 1; }
217
+ [[ "$REFERENCE" == success ]] || { echo "reference=$REFERENCE"; exit 1; }
218
+ [[ "$NUMBA" == success ]] || { echo "numba-parity=$NUMBA"; exit 1; }
219
+ [[ "$CPP" == success ]] || { echo "cpp-parity=$CPP"; exit 1; }
220
+ [[ "$PACKAGE" == success ]] || { echo "package-smoke=$PACKAGE"; exit 1; }
221
+ ;;
222
+ *)
223
+ echo "invalid docs_only=$DOCS_ONLY"
224
+ exit 1
225
+ ;;
226
+ esac
@@ -0,0 +1,103 @@
1
+ name: Deploy Pages
2
+
3
+ 'on':
4
+ # G3 production: deploy the pushed main commit. Manual SHA previews remain available.
5
+ push:
6
+ branches: [main]
7
+ workflow_dispatch:
8
+ inputs:
9
+ source_sha:
10
+ description: 'Exact commit SHA in main or historical PR #6 for manual preview'
11
+ required: true
12
+ default: 'b9f54481ec748aa28925dc30b349c7144336acfa'
13
+
14
+ concurrency:
15
+ group: pages-${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ build:
20
+ name: Build site (strict)
21
+ runs-on: ubuntu-latest
22
+ timeout-minutes: 15
23
+ permissions:
24
+ contents: read
25
+ steps:
26
+ - name: Validate source revision input
27
+ env:
28
+ SOURCE_SHA: ${{ github.event_name == 'push' && github.sha || inputs.source_sha }}
29
+ run: |
30
+ set -euo pipefail
31
+ if [[ ! "$SOURCE_SHA" =~ ^[0-9a-fA-F]{40}$ ]]; then
32
+ echo '::error::source_sha must be a complete 40-character commit SHA'
33
+ exit 1
34
+ fi
35
+ - name: Checkout source repository
36
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
37
+ with:
38
+ ref: ${{ github.event_name == 'push' && github.sha || inputs.source_sha }}
39
+ fetch-depth: 0
40
+
41
+ - name: Record and verify target revision
42
+ env:
43
+ SOURCE_SHA: ${{ github.event_name == 'push' && github.sha || inputs.source_sha }}
44
+ RUN_EVENT: ${{ github.event_name }}
45
+ run: |
46
+ set -euo pipefail
47
+ RESOLVED_SHA="$(git rev-parse HEAD)"
48
+ if [[ "${SOURCE_SHA,,}" != "$RESOLVED_SHA" ]]; then
49
+ echo '::error::Checked-out revision does not match requested source_sha'
50
+ exit 1
51
+ fi
52
+ # Manual previews may use a reviewed main or historical PR #6 commit.
53
+ # The main push path always checks out the event's exact commit SHA.
54
+ if [[ "$RUN_EVENT" == "workflow_dispatch" ]]; then
55
+ git fetch --no-tags origin main 'refs/pull/6/head:refs/remotes/origin/pr-6-preview'
56
+ if ! git merge-base --is-ancestor "$RESOLVED_SHA" refs/remotes/origin/main &&
57
+ ! git merge-base --is-ancestor "$RESOLVED_SHA" refs/remotes/origin/pr-6-preview; then
58
+ echo '::error::source_sha must be in main or PR #6 history'
59
+ exit 1
60
+ fi
61
+ fi
62
+ echo "Requested source_sha: $SOURCE_SHA"
63
+ echo "Resolved commit SHA: $RESOLVED_SHA"
64
+ echo "Commit Author: $(git log -1 --format='%an <%ae>')"
65
+ echo "Commit Date: $(git log -1 --format='%cd')"
66
+ echo "Commit Subject: $(git log -1 --format='%s')"
67
+ echo "RESOLVED_SHA=$RESOLVED_SHA" >> "$GITHUB_ENV"
68
+
69
+ - name: Set up Python 3.11
70
+ uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.3.0
71
+ with:
72
+ python-version: '3.11'
73
+ cache: 'pip'
74
+
75
+ - name: Install documentation dependencies
76
+ run: |
77
+ python -m pip install --upgrade pip
78
+ python -m pip install '.[dev,field-io,docs]'
79
+
80
+ - name: Build documentation (strict)
81
+ run: |
82
+ python -m mkdocs build --strict
83
+
84
+ - name: Upload Pages artifact
85
+ uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3.0.1
86
+ with:
87
+ path: site/
88
+
89
+ deploy:
90
+ name: Deploy to GitHub Pages
91
+ needs: build
92
+ runs-on: ubuntu-latest
93
+ timeout-minutes: 10
94
+ permissions:
95
+ pages: write
96
+ id-token: write
97
+ environment:
98
+ name: github-pages
99
+ url: ${{ steps.deployment.outputs.page_url }}
100
+ steps:
101
+ - name: Deploy to GitHub Pages
102
+ id: deployment
103
+ uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
@@ -0,0 +1,119 @@
1
+ name: Publish gragra 0.2.0rc1 to PyPI (manual)
2
+
3
+ # One-time, opt-in launch for the ENIGMA 2026 presentation.
4
+ # Run from the main branch on 2026-11-11 UTC, after the Trusted Publisher
5
+ # is registered at pypi.org (owner tatsuki-washimi, repo gragra,
6
+ # workflow publish-pypi.yml, no GitHub environment).
7
+ on:
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ build-and-check:
15
+ name: Build and smoke-test frozen release
16
+ # A release can only be initiated explicitly from main.
17
+ if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main'
18
+ runs-on: ubuntu-latest
19
+ timeout-minutes: 30
20
+ steps:
21
+ - name: Require UTC release day
22
+ shell: bash
23
+ run: |
24
+ set -euo pipefail
25
+ today="$(date -u +%F)"
26
+ if [[ "$today" != "2026-11-11" ]]; then
27
+ echo "::error::Publish only on 2026-11-11 UTC (09:00 KST onwards). Current UTC date: $today"
28
+ exit 1
29
+ fi
30
+
31
+ # Pin the distribution to the already verified public main revision.
32
+ # The workflow addition itself does not modify the source of the release.
33
+ - name: Check out frozen release source
34
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
35
+ with:
36
+ ref: f44716387d6c894efc0e20898ca7521ca4d97e53
37
+ persist-credentials: false
38
+
39
+ - name: Verify exact release commit and metadata
40
+ shell: bash
41
+ run: |
42
+ set -euo pipefail
43
+ test "$(git rev-parse HEAD)" = "f44716387d6c894efc0e20898ca7521ca4d97e53"
44
+ python - <<'PY'
45
+ import tomllib
46
+ from pathlib import Path
47
+
48
+ project = tomllib.loads(Path("pyproject.toml").read_text())["project"]
49
+ assert project["name"] == "gragra", project["name"]
50
+ assert project["version"] == "0.2.0rc1", project["version"]
51
+ assert 'version: 0.2.0rc1' in Path("CITATION.cff").read_text()
52
+ PY
53
+
54
+ - name: Set up Python 3.11
55
+ uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.3.0
56
+ with:
57
+ python-version: '3.11'
58
+
59
+ - name: Build wheel and sdist
60
+ shell: bash
61
+ run: |
62
+ set -euo pipefail
63
+ python -m pip install --upgrade build twine
64
+ python -m build --sdist --wheel --outdir dist
65
+ python -m twine check dist/*
66
+ test -f dist/gragra-0.2.0rc1-py3-none-any.whl
67
+ test -f dist/gragra-0.2.0rc1.tar.gz
68
+ sha256sum dist/*
69
+
70
+ - name: Install each artifact into a new environment and compute gravity
71
+ shell: bash
72
+ run: |
73
+ set -euo pipefail
74
+ for artifact in "$PWD"/dist/*.whl "$PWD"/dist/*.tar.gz; do
75
+ venv_dir="$(mktemp -d)"
76
+ test_dir="$(mktemp -d)"
77
+ python -m venv "$venv_dir"
78
+ "$venv_dir/bin/python" -m pip install "$artifact"
79
+ (
80
+ cd "$test_dir"
81
+ "$venv_dir/bin/python" - <<'PY'
82
+ from importlib.metadata import version
83
+ import numpy as np
84
+ from gragra import G_SI, PointMass, point_acceleration
85
+
86
+ assert version("gragra") == "0.2.0rc1"
87
+ a = point_acceleration(PointMass(1.0, [-1.0, 0.0, 0.0]), [[0.0, 0.0, 0.0]])
88
+ np.testing.assert_allclose(a, [[-G_SI, 0.0, 0.0]], rtol=0.0, atol=1e-25)
89
+ print("Fresh-install gravity smoke passed.")
90
+ PY
91
+ )
92
+ done
93
+
94
+ - name: Upload verified distributions for publish job
95
+ uses: actions/upload-artifact@v4
96
+ with:
97
+ name: gragra-0.2.0rc1-distributions
98
+ path: dist/*
99
+ if-no-files-found: error
100
+ retention-days: 14
101
+
102
+ publish:
103
+ name: Publish to PyPI using Trusted Publishing
104
+ needs: build-and-check
105
+ runs-on: ubuntu-latest
106
+ timeout-minutes: 15
107
+ permissions:
108
+ id-token: write
109
+ steps:
110
+ - name: Download checked distributions
111
+ uses: actions/download-artifact@v4
112
+ with:
113
+ name: gragra-0.2.0rc1-distributions
114
+ path: dist/
115
+
116
+ - name: Publish verified distributions
117
+ uses: pypa/gh-action-pypi-publish@release/v1
118
+ with:
119
+ packages-dir: dist/
@@ -0,0 +1,83 @@
1
+ # === Local AI tooling ===
2
+ # .harness/ holds the local AI agent harness (hooks, agents, rules, skills,
3
+ # workflows). The tool directories below are symlinks into .harness/ plus
4
+ # generated per-tool config and personal permission settings
5
+ # (e.g. .claude/settings.local.json). None of this is part of the package
6
+ # and it must not be published.
7
+ .harness/
8
+ .claude/
9
+ .codex/
10
+ .gemini/
11
+ .agent/
12
+ CLAUDE.md
13
+ AGENTS.md
14
+ paseo.json
15
+
16
+ # === Python build, packaging, caches ===
17
+ __pycache__/
18
+ *.py[cod]
19
+ *.egg
20
+ *.egg-info/
21
+ .eggs/
22
+ build/
23
+ dist/
24
+ *.so
25
+ *.o
26
+ *.a
27
+ CMakeCache.txt
28
+ CMakeFiles/
29
+ .ruff_cache/
30
+ .pytest_cache/
31
+ # MkDocs build output (mkdocs.yml has no explicit site_dir, so `mkdocs build`
32
+ # writes to ./site/). The built site is a generated artifact; the sources live
33
+ # in docs_site/.
34
+ site/
35
+ .mypy_cache/
36
+ .coverage
37
+ .coverage.*
38
+ htmlcov/
39
+ .tox/
40
+ .nox/
41
+
42
+ # === Virtual environments ===
43
+ .venv/
44
+ venv/
45
+ env/
46
+
47
+ # === Editor / OS noise ===
48
+ .idea/
49
+ .vscode/
50
+ *.swp
51
+ .DS_Store
52
+
53
+ # === Generated artifacts (see .harness/rules/common/scope.md) ===
54
+ # Computation/verification outputs (CSV / PNG / result JSON / large binaries)
55
+ # are never committed. Intentional figures or reference data under docs/ and
56
+ # tests/ are re-included by the negation patterns below.
57
+ *.csv
58
+ *.png
59
+ result*.json
60
+ *.npy
61
+ *.npz
62
+ *.h5
63
+ *.hdf5
64
+ !docs/**/*.png
65
+ !docs/**/*.csv
66
+ # Documentation-site assets. The blanket *.csv / *.png excludes above were
67
+ # written when docs/ was the only documentation tree, so their re-inclusions
68
+ # only cover docs/**. Without the line below, a diagram or reference dataset
69
+ # placed under docs_site/docs/assets/ is silently never committed: the local
70
+ # build stays green, the CI clean checkout has no such file, and MkDocs does
71
+ # not treat a missing image as an error -- so CI stays green too and the
72
+ # local documentation site simply loses the figure. Keep source assets visible
73
+ # to a clean checkout.
74
+ !docs_site/docs/assets/**
75
+ !tests/**/*.csv
76
+ !tests/**/*.npy
77
+ !tests/**/*.npz
78
+ !tests/**/*.h5
79
+ !tests/**/*.hdf5
80
+
81
+ # === References / Large Binaries ===
82
+ *.pdf
83
+ *.zip
@@ -0,0 +1,31 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ ## [0.2.0rc1] - 2026-11-11
6
+
7
+ ### Added
8
+
9
+ - R2 analytic formulas, R6 trajectory and rigid motion, R3 plane-wave and field
10
+ evaluation paths, and R4 material-region / hex8 geometry support from the
11
+ development line (source revision `b19ccbb`).
12
+ - Expanded documentation site, examples, and public regression tests aligned
13
+ with the above API surface.
14
+
15
+ ### Changed
16
+
17
+ - Package version and dependencies aligned with the development line (Astropy,
18
+ pandas, GWexpy, SciPy, Matplotlib, optional backends unchanged in role).
19
+ - Root public API follows `gragra.gravity_sources` and consolidated observables;
20
+ rc2 `gragra.sources` and root-level projection helpers are removed (breaking).
21
+
22
+ ### Removed
23
+
24
+ - `water_channel_uncorrelated_chen_taup2019_displacement_asd` from the public
25
+ API (independent uncorrelated channel models remain).
26
+
27
+ ### Migration from 0.1.0rc2
28
+
29
+ - Replace `gragra.sources` imports with `gragra.gravity_sources`.
30
+ - Replace removed root projection helpers with `gragra.observables` entry points
31
+ documented in the API reference.
@@ -0,0 +1,11 @@
1
+ cff-version: 1.2.0
2
+ message: If you use gragra, please cite this software.
3
+ title: gragra
4
+ authors:
5
+ - family-names: Washimi
6
+ given-names: Tatsuki
7
+ version: 0.2.0rc1
8
+ date-released: 2026-11-11
9
+ license: MIT
10
+ url: https://github.com/tatsuki-washimi/gragra
11
+ repository-code: https://github.com/tatsuki-washimi/gragra
@@ -0,0 +1,23 @@
1
+ cmake_minimum_required(VERSION 3.18)
2
+ project(gragra LANGUAGES NONE)
3
+
4
+ option(GRAGRA_BUILD_CPP "Build gragra C++ backend" OFF)
5
+
6
+ if(GRAGRA_BUILD_CPP)
7
+ enable_language(CXX)
8
+
9
+ # Modern C++ standard
10
+ set(CMAKE_CXX_STANDARD 17)
11
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
12
+
13
+ find_package(pybind11 CONFIG REQUIRED)
14
+ find_package(OpenMP)
15
+
16
+ pybind11_add_module(_cpp_backend MODULE cpp/inverse_square_backend.cpp)
17
+
18
+ if(OpenMP_CXX_FOUND)
19
+ target_link_libraries(_cpp_backend PRIVATE OpenMP::OpenMP_CXX)
20
+ endif()
21
+
22
+ install(TARGETS _cpp_backend DESTINATION gragra)
23
+ endif()
@@ -0,0 +1,27 @@
1
+ # Contributing
2
+
3
+ Please open an issue before proposing a substantial change. Contributions must
4
+ include focused tests and must not add private research material, solver output
5
+ or third-party source text without a documented redistribution permission.
6
+
7
+ ## Verification responsibility
8
+
9
+ The public repository covers public candidate code and user-facing package
10
+ quality. It does not cover private research branches or private data. The CI
11
+ workflow selects documentation-only checks for documentation changes and full
12
+ public-scope checks for source, tests, builds, dependencies, workflows,
13
+ scripts, and unknown paths. Full checks include the declared Python 3.11 and
14
+ 3.12 environments, NumPy/Numba and C++ parity, package wheel/sdist smoke
15
+ tests, and a strict docs build.
16
+
17
+ Supported environments are not the same as environments actually tested by CI.
18
+ CI success does not certify arbitrary scientific conditions. Run research-
19
+ required scientific verification locally with the exact code, environment,
20
+ inputs, and conditions relevant to the claim, and record those conditions in
21
+ the change description or accompanying research log. GitHub Actions success is
22
+ not a universal adoption condition for research PRs. Automatic Actions or
23
+ environment matrices are not reintroduced without an explicit policy change;
24
+ moving execution location or frequency does not weaken scientific acceptance
25
+ conditions.
26
+
27
+ The workflow performs no publication, deployment, or upload operation.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tatsuki Washimi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.