gpuwm-hex 0.3.2__tar.gz → 0.3.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. {gpuwm_hex-0.3.2/src/gpuwm_hex.egg-info → gpuwm_hex-0.3.3}/PKG-INFO +2 -2
  2. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/README.md +1 -1
  3. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/hex-point-hrrr.md +5 -2
  4. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/02-quickstart.md +4 -3
  5. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/06-forecast.md +41 -14
  6. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/index.md +1 -1
  7. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/pyproject.toml +1 -1
  8. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3/src/gpuwm_hex.egg-info}/PKG-INFO +2 -2
  9. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/gpuwm_hex.egg-info/SOURCES.txt +2 -0
  10. gpuwm_hex-0.3.3/src/hexcore/cuda_backend/arch_admission.py +735 -0
  11. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/doctor.py +180 -2
  12. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/drivers/run_cuda_v841_forecast.py +257 -3
  13. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/drivers/run_cuda_v841_full_physics_x4.py +13 -6
  14. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/forecast_door.py +105 -34
  15. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/hrrr_intermediate.py +12 -6
  16. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/render_door.py +5 -1
  17. gpuwm_hex-0.3.3/tests/_layout.py +59 -0
  18. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/conftest.py +3 -1
  19. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_admission_strings.py +6 -0
  20. gpuwm_hex-0.3.3/tests/test_arch_admission.py +2531 -0
  21. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_capacity_copy_elisions.py +2 -1
  22. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_cell_coordination_admission.py +2 -1
  23. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_convection_admission.py +4 -6
  24. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_cuda_regional_kernels.py +2 -1
  25. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_cuda_v841_full_physics_x4.py +2 -1
  26. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_cycle_cascade.py +3 -2
  27. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_device_admission.py +2 -1
  28. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_dt_admission.py +2 -1
  29. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_dual_edge_admission.py +2 -1
  30. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_element_parallel_kernels.py +2 -1
  31. gpuwm_hex-0.3.3/tests/test_f000_start_frame.py +236 -0
  32. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_forecast_door.py +102 -15
  33. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_forecast_preset.py +2 -1
  34. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_history_refl_q2.py +2 -1
  35. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_hrrr_intermediate.py +2 -1
  36. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_kernel_element_ab.py +1 -1
  37. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_mesh_rows.py +2 -1
  38. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_native_free_init_admission_305.py +2 -1
  39. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_nvrtc_reciprocal_rewrite.py +2 -1
  40. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_packaging_declaration.py +4 -5
  41. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_pbl_cadence.py +5 -4
  42. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_physics_rollback_policy.py +3 -2
  43. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_proof_guard_ordering.py +2 -1
  44. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_proof_guard_pins.py +2 -1
  45. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_forecast_anchor.py +3 -2
  46. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_mesh_binding.py +2 -1
  47. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_physics_seam.py +6 -5
  48. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_render_door.py +53 -0
  49. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_solve_region_checks.py +6 -3
  50. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_source_manifests.py +3 -2
  51. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_wheel_reach.py +6 -1
  52. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/audit_nvrtc_reciprocal_rewrite.py +6 -1
  53. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/battery/cpu_files.txt +5 -0
  54. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/diagnose_v841_restart_step16_x4.py +1 -1
  55. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/dump_1gpu_step_arrays.py +1 -1
  56. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/gate_v841_forecast_fork_equivalence.py +20 -2
  57. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/kernel_element_ab.py +17 -1
  58. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_v841_lw_capture_engine_inputs.py +1 -1
  59. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_v841_lw_localize.py +1 -1
  60. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_v841_lw_purity.py +1 -1
  61. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_v841_lw_purity_lwfix.py +1 -1
  62. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_v841_lw_purity_lwfix2.py +1 -1
  63. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_backend_benchmark.py +1 -1
  64. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_jw_dualrun.py +0 -1
  65. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_forecast_2gpu.py +1 -1
  66. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_jw_dualrun.py +0 -1
  67. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_numeric_ruler.py +0 -1
  68. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_real_x4.py +0 -1
  69. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_x1_163842_stabilized_products.py +1 -1
  70. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_real_gfs_cuda_forecast.py +0 -1
  71. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_v841_smagorinsky_authority_pin.py +1 -1
  72. gpuwm_hex-0.3.2/src/hexcore/cuda_backend/arch_admission.py +0 -199
  73. gpuwm_hex-0.3.2/tests/test_arch_admission.py +0 -336
  74. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/LICENSE +0 -0
  75. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/MANIFEST.in +0 -0
  76. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/NOTICE +0 -0
  77. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/cycle-door.md +0 -0
  78. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/declared-divergences.md +0 -0
  79. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/device-memory-ledger.md +0 -0
  80. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/init-door.md +0 -0
  81. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/local-timestep-lam.md +0 -0
  82. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/01-what-this-is.md +0 -0
  83. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/03-concepts.md +0 -0
  84. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/04-meshes-and-static.md +0 -0
  85. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/05-initial-conditions.md +0 -0
  86. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/07-render.md +0 -0
  87. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/08-troubleshooting.md +0 -0
  88. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/manual/09-reference.md +0 -0
  89. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/native-free-init-admission.md +0 -0
  90. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/obs-referee.md +0 -0
  91. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/render-door.md +0 -0
  92. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/docs/source-matrix.md +0 -0
  93. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/evidence/EVIDENCE.md +0 -0
  94. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/setup.cfg +0 -0
  95. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/gpuwm_hex.egg-info/dependency_links.txt +0 -0
  96. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/gpuwm_hex.egg-info/entry_points.txt +0 -0
  97. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/gpuwm_hex.egg-info/requires.txt +0 -0
  98. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/gpuwm_hex.egg-info/top_level.txt +0 -0
  99. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/__init__.py +0 -0
  100. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/__main__.py +0 -0
  101. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/acoustic.py +0 -0
  102. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/acoustic_v841.py +0 -0
  103. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cascade_row.py +0 -0
  104. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cell_coordination_admission.py +0 -0
  105. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cli.py +0 -0
  106. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/config.py +0 -0
  107. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/config_lts.py +0 -0
  108. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/config_v841.py +0 -0
  109. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/convection_admission.py +0 -0
  110. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_acoustic.py +0 -0
  111. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_acoustic_lts.py +0 -0
  112. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_acoustic_v841.py +0 -0
  113. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_arwen_physics_v841.py +0 -0
  114. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/__init__.py +0 -0
  115. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/compile_contract.py +0 -0
  116. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/containers.py +0 -0
  117. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/recovery.py +0 -0
  118. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/regional_admission.py +0 -0
  119. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_backend/runtime.py +0 -0
  120. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_driver.py +0 -0
  121. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_driver_lts.py +0 -0
  122. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_dualrun.py +0 -0
  123. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_dynamics_v841.py +0 -0
  124. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_fp32.py +0 -0
  125. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_ftz.py +0 -0
  126. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_ftz_v841.py +0 -0
  127. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_gwdo_v841.py +0 -0
  128. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_horizontal.py +0 -0
  129. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_horizontal_v841.py +0 -0
  130. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_physics_prep_v841.py +0 -0
  131. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_physics_tier_park_v841.py +0 -0
  132. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_physics_v841.py +0 -0
  133. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_regional_forecast_v841.py +0 -0
  134. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_regional_v841.py +0 -0
  135. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_solve_region_v841.py +0 -0
  136. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_transport.py +0 -0
  137. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_transport_v841.py +0 -0
  138. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cuda_v841.py +0 -0
  139. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cull_door.py +0 -0
  140. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cycle/__init__.py +0 -0
  141. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cycle/chain.py +0 -0
  142. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cycle/delayed_start.py +0 -0
  143. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cycle/door.py +0 -0
  144. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/cycle/errors.py +0 -0
  145. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/damping_v841.py +0 -0
  146. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/data/swath/placement-policy.v2.json +0 -0
  147. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/data/swath/threat-metrics.v3.json +0 -0
  148. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/device_admission.py +0 -0
  149. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/diagnostics.py +0 -0
  150. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/driver.py +0 -0
  151. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/drivers/__init__.py +0 -0
  152. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/drivers/mpas_mesh_binding.py +0 -0
  153. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/drivers/run_cuda_regional_contract.py +0 -0
  154. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/dt_admission.py +0 -0
  155. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/dual_edge_admission.py +0 -0
  156. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/dynamics.py +0 -0
  157. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/dynamics_v841.py +0 -0
  158. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/engine_pin.py +0 -0
  159. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/engines.py +0 -0
  160. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/errors.py +0 -0
  161. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/forecast_preset.py +0 -0
  162. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/horizontal.py +0 -0
  163. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/host_identity.py +0 -0
  164. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/init_door.py +0 -0
  165. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/initialization.py +0 -0
  166. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/integration.py +0 -0
  167. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/integration_v841.py +0 -0
  168. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/lbc.py +0 -0
  169. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/libm_identity.py +0 -0
  170. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/lts_v841.py +0 -0
  171. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh.py +0 -0
  172. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh_plan_door.py +0 -0
  173. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh_point.py +0 -0
  174. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh_row_candidate.py +0 -0
  175. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh_rows.py +0 -0
  176. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mesh_spec_gates.py +0 -0
  177. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mixing.py +0 -0
  178. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/mixing_v841.py +0 -0
  179. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/nomix_oracle.py +0 -0
  180. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/__init__.py +0 -0
  181. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/__main__.py +0 -0
  182. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/acquire.py +0 -0
  183. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/align.py +0 -0
  184. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/bootstrap.py +0 -0
  185. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/bundle.py +0 -0
  186. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/canonical.py +0 -0
  187. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/cli.py +0 -0
  188. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/errors.py +0 -0
  189. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/manifest.py +0 -0
  190. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/metrics.py +0 -0
  191. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/report.py +0 -0
  192. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/runner.py +0 -0
  193. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/scorecard.py +0 -0
  194. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/obs_referee/treatment.py +0 -0
  195. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/offcentering_v841.py +0 -0
  196. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/oracle.py +0 -0
  197. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/output.py +0 -0
  198. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/pair_door.py +0 -0
  199. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_assets_v841.py +0 -0
  200. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_device_scheduler_v841.py +0 -0
  201. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_executor_v841.py +0 -0
  202. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_local_mesh_v841.py +0 -0
  203. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_net_v841.py +0 -0
  204. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/partition_state_v841.py +0 -0
  205. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/pbl_cadence.py +0 -0
  206. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/physics_backend_admission.py +0 -0
  207. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/physics_seam.py +0 -0
  208. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/physics_seam_v841.py +0 -0
  209. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/regional_v841.py +0 -0
  210. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/regrid.py +0 -0
  211. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/rkind_libm.py +0 -0
  212. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/rust_renderer.py +0 -0
  213. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/shipped_sources.py +0 -0
  214. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/species_row.py +0 -0
  215. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/state.py +0 -0
  216. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/step_oracle.py +0 -0
  217. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/__init__.py +0 -0
  218. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/detect.py +0 -0
  219. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/door.py +0 -0
  220. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/errors.py +0 -0
  221. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/geometry.py +0 -0
  222. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/history.py +0 -0
  223. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/hysteresis.py +0 -0
  224. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/plan.py +0 -0
  225. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/rank.py +0 -0
  226. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/registry.py +0 -0
  227. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/sizing.py +0 -0
  228. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/swath/track.py +0 -0
  229. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/terrain.py +0 -0
  230. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/timestep_admission.py +0 -0
  231. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/tracer_oracle.py +0 -0
  232. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/transport.py +0 -0
  233. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/vector.py +0 -0
  234. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/vertical.py +0 -0
  235. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/vertical_spec.py +0 -0
  236. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/src/hexcore/wps_intermediate.py +0 -0
  237. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_backend_row_builder.py +0 -0
  238. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_checkout_reproducibility.py +0 -0
  239. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_cuda_physics_tier_park_v841.py +0 -0
  240. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_device_capacity.py +0 -0
  241. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_device_memory_capacity_tools.py +0 -0
  242. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_device_memory_ledger_probes.py +0 -0
  243. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_doctor_bridge_mode.py +0 -0
  244. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_domain_size_agreement.py +0 -0
  245. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_engine_pin.py +0 -0
  246. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_forecast_receipt_engine.py +0 -0
  247. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_fullstep_projection_probe.py +0 -0
  248. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_host_identity.py +0 -0
  249. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_init_door.py +0 -0
  250. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_lbc.py +0 -0
  251. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_libm_identity.py +0 -0
  252. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_local_timestep.py +0 -0
  253. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_mesh_point.py +0 -0
  254. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_mesh_spec_gates.py +0 -0
  255. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_mesh_validation.py +0 -0
  256. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_moist_coefficients_species_row.py +0 -0
  257. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_nest_ratio_ring_shell.py +0 -0
  258. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_no_conflict_markers.py +0 -0
  259. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_obs_referee.py +0 -0
  260. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_p3_seam_ab.py +0 -0
  261. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_pair_door.py +0 -0
  262. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_partition_device_admission.py +0 -0
  263. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_partition_executor_v841.py +0 -0
  264. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_physics_backend_rows.py +0 -0
  265. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_physics_carrier_kernels.py +0 -0
  266. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_plot_pair_gallery.py +0 -0
  267. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_point_source_placement.py +0 -0
  268. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_prep_species_row.py +0 -0
  269. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_refined_region_field.py +0 -0
  270. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_class_band.py +0 -0
  271. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_mesh_admission.py +0 -0
  272. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_regional_runtime.py +0 -0
  273. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_species_row.py +0 -0
  274. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_species_row_extended.py +0 -0
  275. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_composite_spec.py +0 -0
  276. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_detect.py +0 -0
  277. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_door.py +0 -0
  278. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_geometry.py +0 -0
  279. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_plan.py +0 -0
  280. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_real_forecast.py +0 -0
  281. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_swath_registry.py +0 -0
  282. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_tier_membership.py +0 -0
  283. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_tracked_file_writers_keep_lf.py +0 -0
  284. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_vertical_artifact_met_state.py +0 -0
  285. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tests/test_vertical_vectorized_equivalence.py +0 -0
  286. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/analyse_convection_off_ab.py +0 -0
  287. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/analyse_pbl_cadence_ab.py +0 -0
  288. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/analyze_step_divergence.py +0 -0
  289. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/audit_donor_padding.py +0 -0
  290. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/battery/README.md +0 -0
  291. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/battery/asset_gates.txt +0 -0
  292. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/battery/gpu_gates.txt +0 -0
  293. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_2way_part_v841.py +0 -0
  294. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_frozen_authority.sh +0 -0
  295. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_nonzero_tracer_input.py +0 -0
  296. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_partition_assets_v841.py +0 -0
  297. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_swath_composite_spec.py +0 -0
  298. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/build_swath_fixture_history.py +0 -0
  299. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/carry_lineage_to_cull.py +0 -0
  300. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/chain_forkgate_then_c.sh +0 -0
  301. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/check_mpas_citations.py +0 -0
  302. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/compare_2gpu_invariance_v841.py +0 -0
  303. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/compare_native_free_vertical.py +0 -0
  304. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/compare_regional_forecast_frames.py +0 -0
  305. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/compare_v841_compiled_endpoint.py +0 -0
  306. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/compare_v841_restart_step16_dumps.py +0 -0
  307. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/cuda_ftz_v841_authority_pins.json +0 -0
  308. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/cuda_ftz_v841_binding_validator.py +0 -0
  309. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/cuda_ftz_v841_isolated_bootstrap.py +0 -0
  310. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/cuda_jw_dualrun_isolated_bootstrap.py +0 -0
  311. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/README.md +0 -0
  312. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/capacity_model.py +0 -0
  313. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/copy_elision_accounting.py +0 -0
  314. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/kernel_reservation_probe.py +0 -0
  315. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/process_memory_probe.py +0 -0
  316. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/runtime_ledger.py +0 -0
  317. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_capacity/sibling_contamination_probe.py +0 -0
  318. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/hex_kernel_probe.py +0 -0
  319. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/hex_ledger_probe.py +0 -0
  320. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/kernel_reservation.py +0 -0
  321. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/ledger_table.py +0 -0
  322. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/module_image_probe.py +0 -0
  323. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/report_ledger.py +0 -0
  324. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/reservation_probe.py +0 -0
  325. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/run_arm.sh +0 -0
  326. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/device_memory_ledger/run_kern.sh +0 -0
  327. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/diagnose_genmesh_nonfinite.py +0 -0
  328. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/diagnose_v841_restart_trace_lwgate.py +0 -0
  329. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/evaluate_nonzero_tracer_scan.py +0 -0
  330. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/lts_forced_classing.py +0 -0
  331. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_domain_size_agreement.py +0 -0
  332. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_engine_seam_ab.py +0 -0
  333. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_engine_verdicts.py +0 -0
  334. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_lam_interior_agreement.py +0 -0
  335. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_nvrtc_reciprocal_effect.py +0 -0
  336. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_physics_tier_park.py +0 -0
  337. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_radiation_chunk_width.py +0 -0
  338. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_refined_region_w.py +0 -0
  339. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_swath_hysteresis.py +0 -0
  340. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/measure_w_band.py +0 -0
  341. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mint_dt_anchor.py +0 -0
  342. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_mesh_binding.py +0 -0
  343. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_operator_oracle/build_and_run.sh +0 -0
  344. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_operator_oracle/operator_oracle.F90 +0 -0
  345. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_step_oracle/README.md +0 -0
  346. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_step_oracle/build_manifest.py +0 -0
  347. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_step_oracle/extract.sh +0 -0
  348. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/mpas_step_oracle/extract_step_oracle.F90 +0 -0
  349. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/nvrtc_compile_check.py +0 -0
  350. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/package_nonzero_tracer_oracle.py +0 -0
  351. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_cascade_cost.py +0 -0
  352. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_domain_size_agreement.py +0 -0
  353. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_domain_size_geometry.py +0 -0
  354. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_dt_anchor_health.py +0 -0
  355. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_dual_edge_evidence.py +0 -0
  356. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_forecast_admission_evidence.py +0 -0
  357. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_four_swaths_evidence.py +0 -0
  358. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_lts_evidence.py +0 -0
  359. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_pair_gallery.py +0 -0
  360. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_as_lam_evidence.py +0 -0
  361. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_evidence.py +0 -0
  362. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_first_forecast.py +0 -0
  363. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_first_real.py +0 -0
  364. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_metrics_evidence.py +0 -0
  365. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/plot_swath_real_cascade.py +0 -0
  366. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/point_source_placement.py +0 -0
  367. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_dv_floor_boundary.py +0 -0
  368. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_lts_fullstep_projection.py +0 -0
  369. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_nvrtc_literal_divisor.py +0 -0
  370. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_partition_local_mesh_v841.py +0 -0
  371. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_partition_residency_v841.py +0 -0
  372. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_physics_tier_residency.py +0 -0
  373. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_polygon_attainment.py +0 -0
  374. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_regional_ring_shell.py +0 -0
  375. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/probe_swath_spec_generable.py +0 -0
  376. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/prove_compound_threat_is_data.py +0 -0
  377. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/prove_cull_pad_is_data.py +0 -0
  378. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/repin_source_tables.py +0 -0
  379. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/repro_v841_lw_engine_poison.py +0 -0
  380. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_arch_ftz_decks.py +0 -0
  381. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_ftz_contract.py +0 -0
  382. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_ftz_v841_trust_measurement.py +0 -0
  383. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_jw_dualrun_promotion.py +0 -0
  384. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_jw_dualrun_trust.py +0 -0
  385. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_regional_contract.py +0 -0
  386. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_regional_forecast.py +0 -0
  387. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_forecast.py +0 -0
  388. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_forecast_mesh.py +0 -0
  389. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_full_physics_x4.py +0 -0
  390. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_cuda_v841_resident_baseline_lwfix.py +0 -0
  391. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_dt_anchor_campaign.py +0 -0
  392. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_forkgate.sh +0 -0
  393. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_frozen_jw.sh +0 -0
  394. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_jw_dry_day.py +0 -0
  395. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_lts_dry_gates.py +0 -0
  396. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_nonzero_tracer_authority.sh +0 -0
  397. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_obs_referee.py +0 -0
  398. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_real_gfs_cuda_x1_163842.py +0 -0
  399. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_real_gfs_forecast.py +0 -0
  400. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_real_gfs_initialization.py +0 -0
  401. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_regional_dry_ladder.py +0 -0
  402. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_rust_renderer_gate.py +0 -0
  403. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_swath_placement_chain.py +0 -0
  404. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/run_v841_compiled_endpoint_gate.py +0 -0
  405. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/scale_region_about_centroid.py +0 -0
  406. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/step_match_pbl_cadence_dt5.py +0 -0
  407. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/v841_partstream_common.py +0 -0
  408. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/tools/validate_cuda_x1_163842_remote_evidence.py +0 -0
  409. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/CANONICAL-BUNDLE-CONTRACT.md +0 -0
  410. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/GF-HOOK-CONTRACT.md +0 -0
  411. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/README.md +0 -0
  412. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/admitted-engines.json +0 -0
  413. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/premeasure-273-20260913.json +0 -0
  414. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/premeasure-274-20260915.json +0 -0
  415. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/premeasure-280-20260929.json +0 -0
  416. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/repin-273-20260913.json +0 -0
  417. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/repin-274-20260915.json +0 -0
  418. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/repin-280-20260929.json +0 -0
  419. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-capped-2.6.5-vs-2.6.5-with-2.7.3-ysu.json +0 -0
  420. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-capped-2.6.5-vs-2.7.3.json +0 -0
  421. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-capped-2.6.5-with-2.7.3-ysu-vs-2.7.3.json +0 -0
  422. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-capped-2.7.3-vs-2.7.4.json +0 -0
  423. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-capped-2.7.4-vs-2.8.0.json +0 -0
  424. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-convective-2.6.5-vs-2.7.3.json +0 -0
  425. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-convective-2.7.3-vs-2.7.4.json +0 -0
  426. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/engine-verdicts/seam-ab-convective-2.7.4-vs-2.8.0.json +0 -0
  427. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/fixtures/build_synthetic_suite.py +0 -0
  428. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/manifests/obs-referee-283.production.json +0 -0
  429. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/producers/README.md +0 -0
  430. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/producers/model_bundle.py +0 -0
  431. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/producers/observation_bundles.py +0 -0
  432. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/producers/select_control_cases.py +0 -0
  433. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/schemas/gf-subsidence-treatment-v1.schema.json +0 -0
  434. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/schemas/normalized-artifact-receipt-v1.schema.json +0 -0
  435. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/vertical-specs/legacy41-v1.json +0 -0
  436. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/vertical-specs/native-comparison-policy.NOT-MEASURED.json +0 -0
  437. {gpuwm_hex-0.3.2 → gpuwm_hex-0.3.3}/verification/vertical-specs/tc55-v1.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpuwm-hex
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: GPU global atmospheric model on unstructured Voronoi meshes: a CUDA port of the MPAS-A v8.4.1 dycore with ArWen physics, arbitrary mesh generation, and single-card mesh streaming for 12-16 GB GPUs.
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/FahrenheitResearch/gpuwm-hex
@@ -177,7 +177,7 @@ verdict for each divergence is in
177
177
  | | |
178
178
  | --- | --- |
179
179
  | Python | 3.11 or newer |
180
- | GPU | A CUDA device. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
180
+ | GPU | A CUDA device: any NVIDIA card of compute capability 7.5 (Turing) or newer runs, on CUDA 13, with no flag. sm_86 and sm_89 are anchored (the numerical contract measured again on that architecture), sm_120 is the proven contract floor where it was first measured, and any other card runs unanchored and its receipt says so; `gpuwm-hex doctor` names your card and its status. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
181
181
  | CUDA | CuPy matching your driver's CUDA major — there is no way for pip to detect it, so you choose (below). |
182
182
  | Engine | The `gpuwm` distribution, `>=2.8.0,<2.8.1`, a bounded range, and pip resolves it for you: the physics seam, and the bundle that carries the MPAS bridge binaries the doors drive. The forecast runs on the installed engine; a git clone at `v2.8.0` is optional (receipts then name its commit) — see *The engine pin*. |
183
183
  | Assets | A mesh grid file, a matching static file, and (for the init door) a vertical-grid declaration — normally a `--vertical-spec` JSON; a native-minted init file as a capsule is the compatibility mode. **gpuwm-hex ships none of these and has no fetch path for them.** See *Assets you must supply*. |
@@ -139,7 +139,7 @@ verdict for each divergence is in
139
139
  | | |
140
140
  | --- | --- |
141
141
  | Python | 3.11 or newer |
142
- | GPU | A CUDA device. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
142
+ | GPU | A CUDA device: any NVIDIA card of compute capability 7.5 (Turing) or newer runs, on CUDA 13, with no flag. sm_86 and sm_89 are anchored (the numerical contract measured again on that architecture), sm_120 is the proven contract floor where it was first measured, and any other card runs unanchored and its receipt says so; `gpuwm-hex doctor` names your card and its status. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
143
143
  | CUDA | CuPy matching your driver's CUDA major — there is no way for pip to detect it, so you choose (below). |
144
144
  | Engine | The `gpuwm` distribution, `>=2.8.0,<2.8.1`, a bounded range, and pip resolves it for you: the physics seam, and the bundle that carries the MPAS bridge binaries the doors drive. The forecast runs on the installed engine; a git clone at `v2.8.0` is optional (receipts then name its commit) — see *The engine pin*. |
145
145
  | Assets | A mesh grid file, a matching static file, and (for the init door) a vertical-grid declaration — normally a `--vertical-spec` JSON; a native-minted init file as a capsule is the compatibility mode. **gpuwm-hex ships none of these and has no fetch path for them.** See *Assets you must supply*. |
@@ -129,8 +129,11 @@ Fifty hybrid levels are carried as level-indexed slabs with the 3-D
129
129
  `PRESSURE` beside them (the init engine's model-level branch, the ERA5-ML
130
130
  convention), plus the 200100.0 surface level, so `--nfglevels 51
131
131
  --nfgsoillevels 4 --use-spechumd yes --extrap-airtemp constant`. Hydrometeors
132
- are not carried: the init stream has no slot for them, and hour zero has no
133
- ice (README, limited-area lane).
132
+ are not carried, although the engine's window decodes them: the init stream
133
+ has slots for cloud water and rain (`qc`, `qr`), but the init and boundary
134
+ writers read no hydrometeor record from an intermediate file and write both
135
+ as zero, and it has no slot for cloud ice, snow or graupel, so hour zero has
136
+ no ice (README, limited-area lane).
134
137
 
135
138
  The source is a ROW (`hexcore.hrrr_intermediate.SOURCE_ROWS`): decoder key,
136
139
  loader module, file names, field map, soil nodes, level count. Nothing below
@@ -329,14 +329,15 @@ version and `RECORD` digest.
329
329
 
330
330
  On a card that holds the mesh, preflight binds it, admits it, runs the
331
331
  driver's own source-pin and host checks, and exits 0. This transcript is
332
- from a 10 GiB RTX 3080 with a desktop session on it, run 2026-08-25; the `ADMISSION` line is the
333
- one the door prints for that card and that free reading today:
332
+ from a 10 GiB RTX 3080 with a desktop session on it, run 2026-08-25; the `ADMISSION` and
333
+ `ARCHITECTURE` lines are the ones the door prints for that card and that
334
+ free reading today:
334
335
 
335
336
  ```
336
337
  [mesh-binding] bound x1.40962: nCells=40962, nEdges=122880, dx=120000.0 m, dt=120.0 s
337
338
  BIND mesh=x1.40962 rebound=True dt=120.0 s
338
339
  ADMISSION mesh=x1.40962 cells=40,962 card=68 SM row=measured global predicted=5,682.0 MiB margin=884.0 MiB free=9,097.0 MiB of 10,239.5 MiB -> admitted
339
- ARCHITECTURE sm=sm_86 -> admitted (per-architecture anchor of 2026-08-25 (evidence/sm86-tier-20260825/RECEIPT.md))
340
+ ARCHITECTURE sm=sm_86 -> admitted, anchored: the 2026-08-25 anchor (evidence/sm86-tier-20260825/RECEIPT.md, evidence pin 75437c663c9894dc...)
340
341
  PREFLIGHT mesh=x1.40962 problems=0 status=preflight_passed
341
342
  ```
342
343
 
@@ -170,20 +170,47 @@ what the door selected. `--headroom-mib` overrides the margin the same
170
170
  way; its default is no longer a flat 512 MiB but the model's own two named
171
171
  terms, priced from your card.
172
172
 
173
- **Architecture is admission too, and it is a registry rather than one
174
- number.** The port's numerical contract was proven on sm_120, so an
175
- architecture below that floor runs only if it holds its own anchor — a
176
- measured contract receipt and a frozen-authority anchor taken on real
177
- hardware of that architecture
173
+ **Architecture is admission too, and every NVIDIA architecture NVRTC can
174
+ compile the kernels for is admitted, with no flag.** The kernels are
175
+ compiled by NVRTC for your card when the run starts, and they ask for
176
+ nothing an older card lacks, so the floor is the CUDA 13 toolkit's:
177
+ compute capability 7.5 (Turing) and newer. A card NVRTC cannot compile for
178
+ is refused by name, because no kernel could be built for it. The one other
179
+ architecture refusal is the IEEE check below, on an unanchored card, when
180
+ ordinary arithmetic is not IEEE; nothing else about the architecture
181
+ refuses a run.
182
+
183
+ What differs between architectures is the evidence behind the numbers. The
184
+ port's numerical contract was first measured on sm_120; an architecture
185
+ holds an **anchor** when the same contract has been measured again on real
186
+ hardware of it, a contract receipt and a frozen-authority anchor, each row
187
+ pinned to its evidence by SHA-256
178
188
  (`src/hexcore/cuda_backend/arch_admission.py`). **sm_86 holds one**
179
- (2026-08-25, a 10 GiB RTX 3080), which is
180
- why the quickstart's preflight prints `ARCHITECTURE sm=sm_86 -> admitted`
181
- and why a full-physics limited-area forecast runs on that card (6.8). An
182
- architecture holding no anchor is refused by name before a single
183
- allocation, with the roster of the ones that do. `--preflight` answers this
184
- half from a device-properties read rather than from the driver's CUDA
185
- import, so it can no longer say `preflight_passed` about a card the run
186
- then refuses by architecture.
189
+ (2026-08-25, a 10 GiB RTX 3080) and **sm_89 holds one** (2026-09-24, an
190
+ RTX 4090, so the RTX 40 series and the L40S), each with the guard-cost
191
+ ceiling measured on its card (1.75 and 1.55). The preflight prints one line
192
+ saying which it is, with the evidence pin of an anchored row:
193
+
194
+ ```
195
+ ARCHITECTURE sm=sm_89 -> admitted, anchored: the 2026-09-24 anchor (evidence/sm89-tier-20260924/RECEIPT.md, evidence pin 15357eb4d576853f...)
196
+ ```
197
+
198
+ On a card of any other architecture the line reads `admitted, unanchored`,
199
+ and before the run the door measures the numeric route on that card in one
200
+ tiny compile and launch: what the route does with an FP32 subnormal, what
201
+ the port's guarded fallback returns for it, whether `--fmad=false` keeps
202
+ `a*b+c` separately rounded, and whether ordinary FP32 and FP64 arithmetic
203
+ agree with IEEE 754. The line ends with what it found. Only the last check
204
+ refuses, because on such a card every number the run produced would be
205
+ wrong; the others are recorded. Every receipt (the door's, the driver's and
206
+ the proof harness's) records the compute capability and either `anchored`
207
+ or `unanchored`. An anchored row carries its evidence pin; sm_120, the
208
+ proven contract floor where the contract was first measured, is anchored
209
+ and carries no pin. No receipt claims an anchor its architecture does not
210
+ hold, and `gpuwm-hex doctor` names the card, its compute capability and
211
+ the same status before you run. `--preflight` answers this half from a
212
+ device-properties read and NVRTC's own target list, so it and the run
213
+ agree about the architecture.
187
214
 
188
215
  **`--preflight` answers the whole question.** It runs every check —
189
216
  inputs, the mesh bind, the admission decision, and the driver's own
@@ -197,7 +224,7 @@ question is the one no file fixes:
197
224
  INPUT MISSING --init names a missing file: .../x1.40962.init.nc. Build one with `gpuwm-hex init` (chapter 5 of the manual).
198
225
  BIND mesh=x1.40962 rebound=True dt=120.0 s
199
226
  ADMISSION mesh=x1.40962 cells=40,962 card=68 SM row=measured global predicted=5,682.0 MiB margin=884.0 MiB free=9,097.0 MiB of 10,239.5 MiB -> admitted
200
- ARCHITECTURE sm=sm_86 -> admitted (per-architecture anchor of 2026-08-25 (evidence/sm86-tier-20260825/RECEIPT.md))
227
+ ARCHITECTURE sm=sm_86 -> admitted, anchored: the 2026-08-25 anchor (evidence/sm86-tier-20260825/RECEIPT.md, evidence pin 75437c663c9894dc...)
201
228
  PREFLIGHT mesh=x1.40962 problems=1 status=preflight_refused
202
229
  ```
203
230
 
@@ -74,7 +74,7 @@ three measured, physics-shaped ways. They are stated in chapter 3, quantified
74
74
  in [`docs/declared-divergences.md`](../declared-divergences.md), and never
75
75
  hidden behind an option. Read them before trusting a number.
76
76
 
77
- **Version.** This manual describes gpuwm-hex 0.3.2 with the gpuwm 2.8.0
77
+ **Version.** This manual describes gpuwm-hex 0.3.3 with the gpuwm 2.8.0
78
78
  engine. Where a measurement was taken on specific hardware, the card is
79
79
  named beside the number.
80
80
 
@@ -38,7 +38,7 @@ name = "gpuwm-hex"
38
38
  # partition-invariant, but it has no door, no demo, and no re-proof at the
39
39
  # current engine pin, so it is not what a version number should be sold on.
40
40
  # Numbers are not reserved here any more. A minor bump names what shipped.
41
- version = "0.3.2"
41
+ version = "0.3.3"
42
42
  description = "GPU global atmospheric model on unstructured Voronoi meshes: a CUDA port of the MPAS-A v8.4.1 dycore with ArWen physics, arbitrary mesh generation, and single-card mesh streaming for 12-16 GB GPUs."
43
43
  readme = "README.md"
44
44
  requires-python = ">=3.11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpuwm-hex
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: GPU global atmospheric model on unstructured Voronoi meshes: a CUDA port of the MPAS-A v8.4.1 dycore with ArWen physics, arbitrary mesh generation, and single-card mesh streaming for 12-16 GB GPUs.
5
5
  License-Expression: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/FahrenheitResearch/gpuwm-hex
@@ -177,7 +177,7 @@ verdict for each divergence is in
177
177
  | | |
178
178
  | --- | --- |
179
179
  | Python | 3.11 or newer |
180
- | GPU | A CUDA device. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
180
+ | GPU | A CUDA device: any NVIDIA card of compute capability 7.5 (Turing) or newer runs, on CUDA 13, with no flag. sm_86 and sm_89 are anchored (the numerical contract measured again on that architecture), sm_120 is the proven contract floor where it was first measured, and any other card runs unanchored and its receipt says so; `gpuwm-hex doctor` names your card and its status. Memory is set by mesh size *and* by the card, and not by a line through the two: the footprint is a per-card core, plus the Grell-Freitas and YSU column workspaces charged at `min(cells, tile)`, plus a per-cell term, all in `hexcore.device_admission`. Measured 2026-08-26 on an RTX 5090 at the merged tip: the published 40,962-cell global mesh (x1.40962, about 120 km) peaked at **8,874 MiB — inside a 12 GiB card's budget**; the 163,842-cell mesh (x4.163842, about 24 km) peaked at **20,446 MiB**, and every free-memory gate admits at the measured floor — the prediction plus that card's own margin, **about 21.7 GiB free at x4** — so x4 remains in practice a 32 GiB-card configuration. The core is a property of the card, not the mesh, and the door reads the card's multiprocessor count at the decision rather than assuming a 5090: the 16 GiB and 10 GiB parts each carry their own measured row, and a card nobody has measured gets a derived row that is labelled derived. A card with its own per-allocation ledger can still supply it with `--device-fixed-mib` / `--device-bytes-per-cell`. |
181
181
  | CUDA | CuPy matching your driver's CUDA major — there is no way for pip to detect it, so you choose (below). |
182
182
  | Engine | The `gpuwm` distribution, `>=2.8.0,<2.8.1`, a bounded range, and pip resolves it for you: the physics seam, and the bundle that carries the MPAS bridge binaries the doors drive. The forecast runs on the installed engine; a git clone at `v2.8.0` is optional (receipts then name its commit) — see *The engine pin*. |
183
183
  | Assets | A mesh grid file, a matching static file, and (for the init door) a vertical-grid declaration — normally a `--vertical-spec` JSON; a native-minted init file as a capsule is the compatibility mode. **gpuwm-hex ships none of these and has no fetch path for them.** See *Assets you must supply*. |
@@ -175,6 +175,7 @@ src/hexcore/swath/rank.py
175
175
  src/hexcore/swath/registry.py
176
176
  src/hexcore/swath/sizing.py
177
177
  src/hexcore/swath/track.py
178
+ tests/_layout.py
178
179
  tests/conftest.py
179
180
  tests/test_admission_strings.py
180
181
  tests/test_arch_admission.py
@@ -197,6 +198,7 @@ tests/test_dt_admission.py
197
198
  tests/test_dual_edge_admission.py
198
199
  tests/test_element_parallel_kernels.py
199
200
  tests/test_engine_pin.py
201
+ tests/test_f000_start_frame.py
200
202
  tests/test_forecast_door.py
201
203
  tests/test_forecast_preset.py
202
204
  tests/test_forecast_receipt_engine.py