gpuwm-global 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gpuwm_global-0.1.0/.github/workflows/bridges.yml +311 -0
- gpuwm_global-0.1.0/.github/workflows/build.yml +122 -0
- gpuwm_global-0.1.0/.github/workflows/publish.yml +305 -0
- gpuwm_global-0.1.0/.github/workflows/test.yml +177 -0
- gpuwm_global-0.1.0/CHANGELOG.md +346 -0
- gpuwm_global-0.1.0/LICENSE +202 -0
- gpuwm_global-0.1.0/MANIFEST.in +66 -0
- gpuwm_global-0.1.0/NOTICE +98 -0
- gpuwm_global-0.1.0/PKG-INFO +476 -0
- gpuwm_global-0.1.0/README.md +438 -0
- gpuwm_global-0.1.0/RELEASE-NOTES-0.1.0.md +176 -0
- gpuwm_global-0.1.0/SOURCE.md +61 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL.md +1202 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL_CLIENT.md +398 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL_DA.md +748 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL_FULL.md +1049 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL_LEVEL5.md +904 -0
- gpuwm_global-0.1.0/docs/ARWEN_GLOBAL_QUICKSTART.md +221 -0
- gpuwm_global-0.1.0/docs/CLI-REFERENCE.md +682 -0
- gpuwm_global-0.1.0/docs/LEVEL3_GLOBAL_SPECTRAL_DYCORE.md +346 -0
- gpuwm_global-0.1.0/docs/arwen-global-abi-operator.md +473 -0
- gpuwm_global-0.1.0/docs/arwen-global-effective-resolution.md +1041 -0
- gpuwm_global-0.1.0/docs/arwen-global-ensemble-da.md +692 -0
- gpuwm_global-0.1.0/docs/arwen-global-microwave-operator.md +481 -0
- gpuwm_global-0.1.0/docs/arwen-global-observations.md +296 -0
- gpuwm_global-0.1.0/docs/demo/CAPTIONS.md +198 -0
- gpuwm_global-0.1.0/docs/demo/analysis-t2m-f003.png +0 -0
- gpuwm_global-0.1.0/docs/demo/mslp-f000.png +0 -0
- gpuwm_global-0.1.0/docs/demo/mslp-f024.png +0 -0
- gpuwm_global-0.1.0/docs/demo/pwat-f024.png +0 -0
- gpuwm_global-0.1.0/docs/demo/t2m-f024.png +0 -0
- gpuwm_global-0.1.0/docs/demo/t850-f024.png +0 -0
- gpuwm_global-0.1.0/docs/demo/z500-f024.png +0 -0
- gpuwm_global-0.1.0/pyproject.toml +203 -0
- gpuwm_global-0.1.0/setup.cfg +4 -0
- gpuwm_global-0.1.0/src/arwen_global/__init__.py +61 -0
- gpuwm_global-0.1.0/src/arwen_global/__main__.py +4 -0
- gpuwm_global-0.1.0/src/arwen_global/_version.py +35 -0
- gpuwm_global-0.1.0/src/arwen_global/abi_fast_model.py +456 -0
- gpuwm_global-0.1.0/src/arwen_global/abi_operator.py +1214 -0
- gpuwm_global-0.1.0/src/arwen_global/abi_radiance_operator.py +714 -0
- gpuwm_global-0.1.0/src/arwen_global/abi_reference.py +722 -0
- gpuwm_global-0.1.0/src/arwen_global/analysis_fetch.py +188 -0
- gpuwm_global-0.1.0/src/arwen_global/analysis_initial.py +1127 -0
- gpuwm_global-0.1.0/src/arwen_global/assimilate.py +2107 -0
- gpuwm_global-0.1.0/src/arwen_global/bands.py +1035 -0
- gpuwm_global-0.1.0/src/arwen_global/cards.py +1606 -0
- gpuwm_global-0.1.0/src/arwen_global/checkpoint.py +651 -0
- gpuwm_global-0.1.0/src/arwen_global/cli.py +2930 -0
- gpuwm_global-0.1.0/src/arwen_global/column_sounding.py +488 -0
- gpuwm_global-0.1.0/src/arwen_global/config.py +1535 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_imex_dry.toml +61 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_imex_dry_dt40.toml +61 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_jet48_24h.toml +133 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_24h.toml +135 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_24h_bare.toml +89 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_closure_24h.toml +144 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_imex_24h.toml +129 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_imex_24h_dt120.toml +119 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_imex_24h_dt135.toml +120 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_imex_wall.toml +113 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h.toml +138 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_alpha050.toml +133 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_alpha053.toml +133 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_alpha060.toml +133 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_dt100.toml +130 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_dt200.toml +130 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_dt450.toml +130 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_dt600.toml +130 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_24h_fluxform.toml +147 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_6h.toml +135 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_6h_unclipped.toml +140 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_native_sl_si_wall.toml +122 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t255_sl_si_dry.toml +66 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t383_native_24h.toml +90 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t383_native_imex_24h.toml +99 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t383_native_imex_24h_dt80.toml +114 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t383_native_sl_si_24h.toml +114 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t383_native_sl_si_wall.toml +122 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t533_24h.toml +61 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t533_native_24h.toml +90 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t533_native_imex_24h.toml +131 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t533_native_sl_si_24h.toml +114 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t533_native_sl_si_wall.toml +122 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t63_48h.toml +60 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_gdas_t799_native_sl_si_wall.toml +122 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_held_suarez_t42_imex.toml +75 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_held_suarez_t42_sl_si.toml +79 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_hybrid_6h_reference.toml +69 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t255_imex.toml +71 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t255_imex_steady.toml +71 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t255_sl_si.toml +76 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t255_sl_si_steady.toml +76 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t85_imex.toml +63 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t85_imex_steady.toml +63 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t85_sl_si.toml +68 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_jw06_t85_sl_si_steady.toml +68 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_level5_native_smoke.toml +73 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_moist_smoke.toml +84 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_native_physics_bridge_example.toml +63 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_t21_baroclinic_ten_day.toml +68 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_t255_quickstart.toml +137 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/arwen_global_t85_vertical_modes_ab.toml +87 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/global_spectral_held_suarez_smoke.toml +42 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/global_spectral_primitive_smoke.toml +42 -0
- gpuwm_global-0.1.0/src/arwen_global/configs/global_spectral_williamson2.toml +36 -0
- gpuwm_global-0.1.0/src/arwen_global/configs_dir.py +110 -0
- gpuwm_global-0.1.0/src/arwen_global/constants.py +99 -0
- gpuwm_global-0.1.0/src/arwen_global/core/__init__.py +46 -0
- gpuwm_global-0.1.0/src/arwen_global/core/gf.py +527 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/__init__.py +170 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/common.cuh +7 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/gf.cu +4325 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/glibc_flt32.cuh +649 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/morrison.cu +1207 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/noah.cu +1526 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/ntiedtke.cu +3840 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_cloud.cu +131 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_gas.cu +411 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_mcica.cu +159 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_planck_common.cuh +94 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_rte.cu +574 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/rrtmgp_validation.cu +119 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/sfclay.cu +554 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/ysu.cu +728 -0
- gpuwm_global-0.1.0/src/arwen_global/core/kernels/ysu_validation.cu +34 -0
- gpuwm_global-0.1.0/src/arwen_global/core/landuse.py +468 -0
- gpuwm_global-0.1.0/src/arwen_global/core/morrison.py +244 -0
- gpuwm_global-0.1.0/src/arwen_global/core/noah.py +513 -0
- gpuwm_global-0.1.0/src/arwen_global/core/npref.py +11296 -0
- gpuwm_global-0.1.0/src/arwen_global/core/ntiedtke.py +1590 -0
- gpuwm_global-0.1.0/src/arwen_global/core/physics.py +5486 -0
- gpuwm_global-0.1.0/src/arwen_global/core/physics_inventory.py +370 -0
- gpuwm_global-0.1.0/src/arwen_global/core/rrtmgp.py +5125 -0
- gpuwm_global-0.1.0/src/arwen_global/core/sfclay.py +181 -0
- gpuwm_global-0.1.0/src/arwen_global/core/ysu.py +264 -0
- gpuwm_global-0.1.0/src/arwen_global/core/ysu_contract.py +57 -0
- gpuwm_global-0.1.0/src/arwen_global/cycle.py +1233 -0
- gpuwm_global-0.1.0/src/arwen_global/da/__init__.py +106 -0
- gpuwm_global-0.1.0/src/arwen_global/da/analysis.py +1993 -0
- gpuwm_global-0.1.0/src/arwen_global/da/ensemble.py +767 -0
- gpuwm_global-0.1.0/src/arwen_global/da/letkf_point.py +1310 -0
- gpuwm_global-0.1.0/src/arwen_global/da/localisation.py +518 -0
- gpuwm_global-0.1.0/src/arwen_global/da/measure.py +166 -0
- gpuwm_global-0.1.0/src/arwen_global/da/observation_errors.py +131 -0
- gpuwm_global-0.1.0/src/arwen_global/da/observations.py +326 -0
- gpuwm_global-0.1.0/src/arwen_global/da/operators.py +685 -0
- gpuwm_global-0.1.0/src/arwen_global/da/options.py +819 -0
- gpuwm_global-0.1.0/src/arwen_global/da/osse.py +1189 -0
- gpuwm_global-0.1.0/src/arwen_global/da/perturbations.py +661 -0
- gpuwm_global-0.1.0/src/arwen_global/da/static_covariance.py +724 -0
- gpuwm_global-0.1.0/src/arwen_global/da/window.py +234 -0
- gpuwm_global-0.1.0/src/arwen_global/da_anchor.py +312 -0
- gpuwm_global-0.1.0/src/arwen_global/da_control.py +243 -0
- gpuwm_global-0.1.0/src/arwen_global/da_door.py +1105 -0
- gpuwm_global-0.1.0/src/arwen_global/da_filter.py +1597 -0
- gpuwm_global-0.1.0/src/arwen_global/da_scorecard.py +967 -0
- gpuwm_global-0.1.0/src/arwen_global/da_static.py +247 -0
- gpuwm_global-0.1.0/src/arwen_global/da_streams.py +697 -0
- gpuwm_global-0.1.0/src/arwen_global/da_twin.py +533 -0
- gpuwm_global-0.1.0/src/arwen_global/da_window.py +75 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-ecmwf-open-data-global-forecast-grib2.mapping.json +174 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-gdas-global-analysis-grib2.mapping.json +932 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-gdas-pgrb2-0p25-microwave-columns.mapping.json +1026 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-gfs-pgrb2-0p25-cloud-cover.mapping.json +1084 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-gfs-surface-flux-grib2.mapping.json +1090 -0
- gpuwm_global-0.1.0/src/arwen_global/data/authorities/rw-wps-gfs-surface-state-grib2.mapping.json +1046 -0
- gpuwm_global-0.1.0/src/arwen_global/data/door-pins.json +125 -0
- gpuwm_global-0.1.0/src/arwen_global/data/engine-seam.json +285 -0
- gpuwm_global-0.1.0/src/arwen_global/data/noah_tables/GENPARM.TBL +36 -0
- gpuwm_global-0.1.0/src/arwen_global/data/noah_tables/LANDUSE.TBL +586 -0
- gpuwm_global-0.1.0/src/arwen_global/data/noah_tables/PROVENANCE.md +28 -0
- gpuwm_global-0.1.0/src/arwen_global/data/noah_tables/SOILPARM.TBL +45 -0
- gpuwm_global-0.1.0/src/arwen_global/data/noah_tables/VEGPARM.TBL +291 -0
- gpuwm_global-0.1.0/src/arwen_global/data/render-catalog-global.json +3247 -0
- gpuwm_global-0.1.0/src/arwen_global/data/static-covariance-v1-receipt.json +503 -0
- gpuwm_global-0.1.0/src/arwen_global/data/static-covariance-v1.npz +0 -0
- gpuwm_global-0.1.0/src/arwen_global/device_memory.py +463 -0
- gpuwm_global-0.1.0/src/arwen_global/diurnal_phase.py +1099 -0
- gpuwm_global-0.1.0/src/arwen_global/doctor.py +686 -0
- gpuwm_global-0.1.0/src/arwen_global/doors.py +793 -0
- gpuwm_global-0.1.0/src/arwen_global/dynamics.py +3646 -0
- gpuwm_global-0.1.0/src/arwen_global/engine_compat.py +331 -0
- gpuwm_global-0.1.0/src/arwen_global/engine_seam.py +149 -0
- gpuwm_global-0.1.0/src/arwen_global/export.py +317 -0
- gpuwm_global-0.1.0/src/arwen_global/fetch_doors.py +281 -0
- gpuwm_global-0.1.0/src/arwen_global/go_door.py +192 -0
- gpuwm_global-0.1.0/src/arwen_global/imex.py +410 -0
- gpuwm_global-0.1.0/src/arwen_global/initial_conditions.py +161 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/__init__.py +39 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/budgets.py +285 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/capture.py +221 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/energy.py +425 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/ledger.py +567 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/options.py +91 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/spectra.py +95 -0
- gpuwm_global-0.1.0/src/arwen_global/insitu/tripwires.py +465 -0
- gpuwm_global-0.1.0/src/arwen_global/mapped_source_compat.py +503 -0
- gpuwm_global-0.1.0/src/arwen_global/massflux_diagnostic.py +731 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/__init__.py +88 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/__main__.py +266 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/absorption.py +211 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/atms_bridge.py +253 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/atms_fetch.py +568 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/calibrate.py +350 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/channels.py +101 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/columns.py +282 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/emissivity.py +105 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/entry.py +763 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/rte.py +447 -0
- gpuwm_global-0.1.0/src/arwen_global/microwave/score.py +568 -0
- gpuwm_global-0.1.0/src/arwen_global/migration.py +407 -0
- gpuwm_global-0.1.0/src/arwen_global/native_qualification.py +376 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_doors.py +201 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_operators.py +618 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_pack.py +152 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_scorecard.py +1637 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_streams.py +1360 -0
- gpuwm_global-0.1.0/src/arwen_global/obs_table.py +854 -0
- gpuwm_global-0.1.0/src/arwen_global/pbl_free_atmosphere.py +1001 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/__init__.py +18 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/arwen_bridge.py +196 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/arwen_massflux.py +844 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/banding.py +201 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/builtin_adapters.py +186 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/exchange.py +203 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/frozen_surface.py +464 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/native_batch.py +384 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/native_options.py +410 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/native_runtime.py +1788 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/native_state.py +297 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/native_suite.py +634 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/provenance.py +126 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/reference.py +1596 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/registry.py +224 -0
- gpuwm_global-0.1.0/src/arwen_global/physics/surface_diagnostics.py +217 -0
- gpuwm_global-0.1.0/src/arwen_global/pins.py +425 -0
- gpuwm_global-0.1.0/src/arwen_global/profile.py +552 -0
- gpuwm_global-0.1.0/src/arwen_global/radiance_streams.py +1013 -0
- gpuwm_global-0.1.0/src/arwen_global/radiance_tables/abi-fast-model.json +5321 -0
- gpuwm_global-0.1.0/src/arwen_global/radiance_tables/abi-operator-entries.json +351 -0
- gpuwm_global-0.1.0/src/arwen_global/radiance_tables/atms-noaa-20-2026-09-01.entry.json +325 -0
- gpuwm_global-0.1.0/src/arwen_global/radiance_tables/atms-noaa-21-2026-09-01.entry.json +325 -0
- gpuwm_global-0.1.0/src/arwen_global/radiation_scorecard.py +1392 -0
- gpuwm_global-0.1.0/src/arwen_global/receipt.py +174 -0
- gpuwm_global-0.1.0/src/arwen_global/regional/__init__.py +30 -0
- gpuwm_global-0.1.0/src/arwen_global/regional/artifact.py +379 -0
- gpuwm_global-0.1.0/src/arwen_global/regional/interpolation.py +234 -0
- gpuwm_global-0.1.0/src/arwen_global/regional/runtime.py +405 -0
- gpuwm_global-0.1.0/src/arwen_global/regional/translate.py +301 -0
- gpuwm_global-0.1.0/src/arwen_global/render_door.py +285 -0
- gpuwm_global-0.1.0/src/arwen_global/runner.py +1673 -0
- gpuwm_global-0.1.0/src/arwen_global/runplan.py +3005 -0
- gpuwm_global-0.1.0/src/arwen_global/semi_implicit.py +986 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/__init__.py +115 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/_cuda.py +60 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/cases.py +700 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/interpolate.py +479 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/kernels.cu +596 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/options.py +229 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/pins.py +64 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/rhs.py +220 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/state.py +102 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/step.py +592 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/tables.py +270 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/tracers.py +303 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/trajectory.py +963 -0
- gpuwm_global-0.1.0/src/arwen_global/semilag/vectors.py +147 -0
- gpuwm_global-0.1.0/src/arwen_global/sizing.py +3879 -0
- gpuwm_global-0.1.0/src/arwen_global/sources.py +565 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/__init__.py +55 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/__main__.py +4 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/backend.py +100 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/checkpoint.py +237 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/cli.py +420 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/compression.py +612 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/config.py +507 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/constants.py +16 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/diffusion.py +40 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/eddy_viscosity.py +193 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/export.py +211 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/fused.py +216 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/grid.py +231 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/initial_conditions.py +97 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/legendre.py +190 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/pins.py +72 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/primitive.py +437 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/receipt.py +47 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/runner.py +614 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/sampling.py +571 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/shallow_water.py +147 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/state.py +74 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/timestep.py +59 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/transform.py +1694 -0
- gpuwm_global-0.1.0/src/arwen_global/spectral/vector.py +137 -0
- gpuwm_global-0.1.0/src/arwen_global/spill.py +781 -0
- gpuwm_global-0.1.0/src/arwen_global/state.py +357 -0
- gpuwm_global-0.1.0/src/arwen_global/statics.py +972 -0
- gpuwm_global-0.1.0/src/arwen_global/statics_rows.py +172 -0
- gpuwm_global-0.1.0/src/arwen_global/status.py +162 -0
- gpuwm_global-0.1.0/src/arwen_global/storm_reader.py +845 -0
- gpuwm_global-0.1.0/src/arwen_global/surface_energy.py +1122 -0
- gpuwm_global-0.1.0/src/arwen_global/surface_seeding.py +694 -0
- gpuwm_global-0.1.0/src/arwen_global/testcases.py +373 -0
- gpuwm_global-0.1.0/src/arwen_global/transport.py +1191 -0
- gpuwm_global-0.1.0/src/arwen_global/trigger_diagnostic.py +717 -0
- gpuwm_global-0.1.0/src/arwen_global/tui_worker.py +153 -0
- gpuwm_global-0.1.0/src/arwen_global/upper_air_scorecard.py +2048 -0
- gpuwm_global-0.1.0/src/arwen_global/vertical.py +624 -0
- gpuwm_global-0.1.0/src/arwen_global/water.py +221 -0
- gpuwm_global-0.1.0/src/arwen_global/water_budget.py +1393 -0
- gpuwm_global-0.1.0/src/arwen_global/wrfout_export.py +515 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/PKG-INFO +476 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/SOURCES.txt +500 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/dependency_links.txt +1 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/entry_points.txt +2 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/requires.txt +17 -0
- gpuwm_global-0.1.0/src/gpuwm_global.egg-info/top_level.txt +1 -0
- gpuwm_global-0.1.0/tests/conftest.py +445 -0
- gpuwm_global-0.1.0/tests/data/sph_harm_reference_scipy115.json +91 -0
- gpuwm_global-0.1.0/tests/doc_command_parity.py +129 -0
- gpuwm_global-0.1.0/tests/global_spectral_dense_reference.py +594 -0
- gpuwm_global-0.1.0/tests/goes_pack_fixtures.py +365 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_abi_entries.py +505 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_abi_fast_model.py +224 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_abi_operator.py +326 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_abi_reference.py +189 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_analysis_fill.py +417 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_analysis_initial.py +464 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_assimilate.py +1269 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_assimilate_mass.py +235 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_assimilate_moisture.py +460 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_band_pipeline.py +665 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_bands.py +608 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_bias_vs_gfs_tool.py +129 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_cards.py +907 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_carried_core.py +283 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_checkpoint_runner.py +375 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_completed_plans.py +140 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_config_resolution.py +223 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_config_vertical.py +581 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_convection_timing.py +270 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_cycle.py +427 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_amendments.py +777 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_balance.py +428 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_control.py +487 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_door.py +817 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_ensemble.py +430 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_hybrid.py +556 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_letkf_point.py +535 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_operators_device.py +270 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_radiances.py +506 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_refutation.py +420 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_scorecard.py +168 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_streams_complete.py +503 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_da_twin.py +131 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_decode_receipts.py +343 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_default_core.py +182 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_device_memory.py +173 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_diffusion_default.py +137 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_door.py +484 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_engine_seam.py +290 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_eulerian_step_rule.py +258 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_export_registry_cli.py +244 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_gf_massflux.py +253 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_gf_massflux_cuda.py +316 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_grid_tracers.py +594 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_host_spill.py +642 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_igra2_levels.py +148 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_imex.py +768 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_insitu_energy.py +282 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_insitu_energy_bands.py +501 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_insitu_energy_rossby_haurwitz.py +152 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_insitu_instruments.py +313 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_insitu_runtime.py +241 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_level5_migration.py +213 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_level5_native.py +2826 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_level5_qualification_cli.py +279 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_level5_regional.py +429 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_level5_water_sustainability.py +613 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_massflux.py +429 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_memory_levers.py +411 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_microwave.py +379 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_microwave_entry.py +442 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_native_fused.py +71 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_native_ntiedtke.py +547 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_obs_operators.py +121 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_obs_pack.py +188 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_obs_scorecard.py +437 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_obs_streams.py +247 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_obs_table_v2.py +135 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_pbl_free_atmosphere.py +409 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_physics_bands.py +320 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_physics_split.py +92 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_pins.py +219 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_profile.py +282 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_quickstart.py +409 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_radiation_carriers.py +68 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_radiation_scorecard.py +372 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_reference_physics.py +710 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_render_door_contract.py +67 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_run_plan.py +1752 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_screen_level_diagnostics.py +189 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semi_implicit.py +268 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_cuda.py +438 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_interpolate.py +328 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_quintic.py +342 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_spill.py +272 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_step.py +835 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_tracers.py +800 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_semilag_trajectory.py +367 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_shipped_reductions.py +138 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_sizer_doors.py +587 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_sizing.py +1113 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_source_mappings.py +403 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_spectral_eddy_viscosity.py +356 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_spectrum_bands_levels.py +85 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_statics.py +739 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_surface_energy.py +848 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_surface_seeding.py +916 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_transport_fused.py +108 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_transport_stacked.py +227 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_tui_worker.py +192 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_upper_air_scorecard.py +702 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_vertical_jet_refined.py +332 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_vertical_modes.py +722 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_vertical_numerics.py +328 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_vertical_surface_stretched.py +263 -0
- gpuwm_global-0.1.0/tests/test_arwen_global_water_budget.py +329 -0
- gpuwm_global-0.1.0/tests/test_ci_workflows.py +417 -0
- gpuwm_global-0.1.0/tests/test_cli_doors.py +530 -0
- gpuwm_global-0.1.0/tests/test_doors_bundle.py +391 -0
- gpuwm_global-0.1.0/tests/test_engine_compat.py +120 -0
- gpuwm_global-0.1.0/tests/test_engine_signature_gaps.py +277 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_bit_identity.py +213 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_checkpoint.py +182 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_cli_artifacts.py +212 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_compression.py +193 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_config_cli.py +151 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_export.py +37 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_fourier_waist.py +420 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_fused_kernels_cpu.py +363 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_primitive.py +177 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_sampling.py +101 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_sampling_device.py +147 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_shallow_water.py +48 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_streaming.py +228 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_transform.py +344 -0
- gpuwm_global-0.1.0/tests/test_global_spectral_vector.py +59 -0
- gpuwm_global-0.1.0/tests/test_line_endings.py +191 -0
- gpuwm_global-0.1.0/tests/test_mapped_source_compat.py +643 -0
- gpuwm_global-0.1.0/tests/test_no_provenance.py +1010 -0
- gpuwm_global-0.1.0/tests/test_obs_doors_fallback.py +118 -0
- gpuwm_global-0.1.0/tests/test_obs_stream_doors.py +152 -0
- gpuwm_global-0.1.0/tests/test_package_data_coverage.py +126 -0
- gpuwm_global-0.1.0/tests/test_packaging_declaration.py +598 -0
- gpuwm_global-0.1.0/tests/test_python_floor.py +113 -0
- gpuwm_global-0.1.0/tests/test_resync_core_carve.py +363 -0
- gpuwm_global-0.1.0/tests/test_suite_device_and_gap_marks.py +365 -0
- gpuwm_global-0.1.0/tools/__init__.py +11 -0
- gpuwm_global-0.1.0/tools/arwen_global_band_probe.py +302 -0
- gpuwm_global-0.1.0/tools/arwen_global_bias_vs_gfs.py +368 -0
- gpuwm_global-0.1.0/tools/arwen_global_cfl_sweep.py +289 -0
- gpuwm_global-0.1.0/tools/arwen_global_checkpoint_diff.py +119 -0
- gpuwm_global-0.1.0/tools/arwen_global_checkpoint_identity.py +92 -0
- gpuwm_global-0.1.0/tools/arwen_global_control_twin_chart.py +99 -0
- gpuwm_global-0.1.0/tools/arwen_global_energy_bands.py +484 -0
- gpuwm_global-0.1.0/tools/arwen_global_ensemble_osse_chart.py +211 -0
- gpuwm_global-0.1.0/tools/arwen_global_fft_band_probe.py +225 -0
- gpuwm_global-0.1.0/tools/arwen_global_igra2_levels_csv.py +208 -0
- gpuwm_global-0.1.0/tools/arwen_global_ke_stick.py +114 -0
- gpuwm_global-0.1.0/tools/arwen_global_level_set_evidence.py +167 -0
- gpuwm_global-0.1.0/tools/arwen_global_microwave_evidence.py +294 -0
- gpuwm_global-0.1.0/tools/arwen_global_pack_probe.py +157 -0
- gpuwm_global-0.1.0/tools/arwen_global_precip_trace.py +558 -0
- gpuwm_global-0.1.0/tools/arwen_global_profile_report.py +276 -0
- gpuwm_global-0.1.0/tools/arwen_global_reduction_probe.py +431 -0
- gpuwm_global-0.1.0/tools/arwen_global_render_catalog.py +148 -0
- gpuwm_global-0.1.0/tools/arwen_global_resident_floor_probe.py +236 -0
- gpuwm_global-0.1.0/tools/arwen_global_ringing_fraction.py +118 -0
- gpuwm_global-0.1.0/tools/arwen_global_score_compare.py +210 -0
- gpuwm_global-0.1.0/tools/arwen_global_score_upper_air.sh +86 -0
- gpuwm_global-0.1.0/tools/arwen_global_semilag_cases.py +272 -0
- gpuwm_global-0.1.0/tools/arwen_global_spectrum_bands.py +198 -0
- gpuwm_global-0.1.0/tools/arwen_global_waist_probe.py +502 -0
- gpuwm_global-0.1.0/tools/arwen_global_waist_step_probe.py +180 -0
- gpuwm_global-0.1.0/tools/arwen_global_ysu_lane_charts.py +341 -0
- gpuwm_global-0.1.0/tools/build_cli_reference.py +186 -0
- gpuwm_global-0.1.0/tools/build_door_bundle.py +298 -0
- gpuwm_global-0.1.0/tools/check_case_token_leakage.py +972 -0
- gpuwm_global-0.1.0/tools/check_doc_examples.py +315 -0
- gpuwm_global-0.1.0/tools/check_line_endings.py +246 -0
- gpuwm_global-0.1.0/tools/ci_test_replay.py +339 -0
- gpuwm_global-0.1.0/tools/gf_wrf461_oracle/gf_field_lists.py +176 -0
- gpuwm_global-0.1.0/tools/global_spectral_dycore.py +5 -0
- gpuwm_global-0.1.0/tools/global_spectral_streaming_probe.py +141 -0
- gpuwm_global-0.1.0/tools/gpu_selftest_rhs.py +724 -0
- gpuwm_global-0.1.0/tools/measure_boundary.py +222 -0
- gpuwm_global-0.1.0/tools/measure_engine_signatures.py +160 -0
- gpuwm_global-0.1.0/tools/pin_engine_seam.py +353 -0
- gpuwm_global-0.1.0/tools/provenance_sweep.py +91 -0
- gpuwm_global-0.1.0/tools/resync_from_owner.py +1051 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# Build the Rust doors this package publishes, on both platforms, and pin
|
|
2
|
+
# them.
|
|
3
|
+
#
|
|
4
|
+
# THIS WORKFLOW PUBLISHES NOTHING. It has `contents: read` and no other
|
|
5
|
+
# permission, no `environment`, and no `id-token`, so it holds no PyPI
|
|
6
|
+
# identity and no authority to write to a release. What it produces is two
|
|
7
|
+
# build artifacts and a pins document; publish.yml is the only file that can
|
|
8
|
+
# attach them to anything, and every job in that file is gated on a
|
|
9
|
+
# repository variable that does not exist.
|
|
10
|
+
#
|
|
11
|
+
# WHY THIS FILE EXISTS AT ALL. The wheel carries no Rust. Eight of the
|
|
12
|
+
# fourteen binaries the model runs on are published by this package rather
|
|
13
|
+
# than by the engine: six have no binary in any published bundle, and two
|
|
14
|
+
# (rw_asos, rw_goes) exist in the engine's bundle under the same filename in
|
|
15
|
+
# an older build with none of the subcommands this package calls. Without a
|
|
16
|
+
# bundle, obtaining those eight means a Rust toolchain, a source checkout and
|
|
17
|
+
# a few minutes of compiling, which by the rule that a capability a user
|
|
18
|
+
# cannot reach does not exist means eight doors were never shipped.
|
|
19
|
+
#
|
|
20
|
+
# WHERE THE CRATES COME FROM. Not from this repository. They live in the
|
|
21
|
+
# engine's `tools/rustwx` workspace and stay there: two copies of a decoder
|
|
22
|
+
# is how the two drift. This workflow checks the engine's public repository
|
|
23
|
+
# out at the revision `src/arwen_global/data/door-pins.json` names and builds
|
|
24
|
+
# only the targets the engine's own bundle does not carry.
|
|
25
|
+
#
|
|
26
|
+
# WHAT IS KNOWN NOT TO WORK YET, STATED HERE RATHER THAN DISCOVERED IN A RUN.
|
|
27
|
+
# As of 2026-09-07 the engine's public repository does not carry the crates
|
|
28
|
+
# this builds. `FahrenheitResearch/arwen` at the 2.7.0 snapshot has a
|
|
29
|
+
# `rw-obs` with four binaries (mrms, stage4, asos, opera) and no `rw-atms`
|
|
30
|
+
# crate at all; the five observation binaries and the ATMS door exist only on
|
|
31
|
+
# the branch this package was carved from, and the `asos.rs` and `rw-goes`
|
|
32
|
+
# there are ahead of the public ones by the subcommands named above. So the
|
|
33
|
+
# `preflight` job below asks the checkout for every crate and binary it is
|
|
34
|
+
# about to build and FAILS NAMING THE MISSING ONES rather than producing a
|
|
35
|
+
# bundle with holes in it. The breakage that prevents: a release page
|
|
36
|
+
# carrying an eight-door bundle that holds four doors, whose users get a
|
|
37
|
+
# missing-subcommand error deep inside a DA cycle.
|
|
38
|
+
#
|
|
39
|
+
# The day the engine takes those crates onto its own line, this workflow
|
|
40
|
+
# starts passing with a revision bump and nothing else, and the bundle it
|
|
41
|
+
# builds shrinks to nothing. That is the better end state.
|
|
42
|
+
|
|
43
|
+
name: bridges
|
|
44
|
+
|
|
45
|
+
on:
|
|
46
|
+
workflow_call:
|
|
47
|
+
inputs:
|
|
48
|
+
engine_ref:
|
|
49
|
+
description: >-
|
|
50
|
+
The engine revision to build the doors from. Defaults to the
|
|
51
|
+
`engine_source_rev` in the packaged pins, which is the one number
|
|
52
|
+
that says which source the shipped binaries came from.
|
|
53
|
+
type: string
|
|
54
|
+
required: false
|
|
55
|
+
default: ""
|
|
56
|
+
outputs:
|
|
57
|
+
bundle_artifact_prefix:
|
|
58
|
+
description: The artifact name prefix each platform's bundle is uploaded under.
|
|
59
|
+
value: ${{ jobs.declare.outputs.bundle_artifact_prefix }}
|
|
60
|
+
platforms:
|
|
61
|
+
description: Space-separated platform keys this run built bundles for.
|
|
62
|
+
value: ${{ jobs.declare.outputs.platforms }}
|
|
63
|
+
engine_ref:
|
|
64
|
+
description: The engine revision the doors were actually built from.
|
|
65
|
+
value: ${{ jobs.declare.outputs.engine_ref }}
|
|
66
|
+
workflow_dispatch:
|
|
67
|
+
inputs:
|
|
68
|
+
engine_ref:
|
|
69
|
+
description: Engine revision to build from (blank = the packaged pin)
|
|
70
|
+
type: string
|
|
71
|
+
required: false
|
|
72
|
+
default: ""
|
|
73
|
+
|
|
74
|
+
permissions:
|
|
75
|
+
contents: read
|
|
76
|
+
|
|
77
|
+
concurrency:
|
|
78
|
+
group: bridges-${{ github.repository }}-${{ github.ref }}
|
|
79
|
+
cancel-in-progress: true
|
|
80
|
+
|
|
81
|
+
defaults:
|
|
82
|
+
run:
|
|
83
|
+
shell: bash
|
|
84
|
+
|
|
85
|
+
env:
|
|
86
|
+
# The engine's public repository. The crates are read from it and never
|
|
87
|
+
# copied into this one.
|
|
88
|
+
ENGINE_REPOSITORY: FahrenheitResearch/arwen
|
|
89
|
+
ARTIFACT_PREFIX: arwen-global-doors
|
|
90
|
+
|
|
91
|
+
jobs:
|
|
92
|
+
# ---------------------------------------------------------------------
|
|
93
|
+
# 1. What this run is going to build, decided once and read by the rest.
|
|
94
|
+
# The release string and the engine revision both come out of the
|
|
95
|
+
# packaged pins so there is no second place to state either.
|
|
96
|
+
# ---------------------------------------------------------------------
|
|
97
|
+
declare:
|
|
98
|
+
runs-on: ubuntu-latest
|
|
99
|
+
outputs:
|
|
100
|
+
bundle_artifact_prefix: ${{ env.ARTIFACT_PREFIX }}
|
|
101
|
+
platforms: ${{ steps.read.outputs.platforms }}
|
|
102
|
+
engine_ref: ${{ steps.read.outputs.engine_ref }}
|
|
103
|
+
release: ${{ steps.read.outputs.release }}
|
|
104
|
+
doors: ${{ steps.read.outputs.doors }}
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
107
|
+
with:
|
|
108
|
+
persist-credentials: false
|
|
109
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
110
|
+
with:
|
|
111
|
+
python-version: "3.11"
|
|
112
|
+
- id: read
|
|
113
|
+
env:
|
|
114
|
+
REQUESTED_REF: ${{ inputs.engine_ref }}
|
|
115
|
+
run: |
|
|
116
|
+
python - <<'PY' >> "$GITHUB_OUTPUT"
|
|
117
|
+
import json, os, sys
|
|
118
|
+
sys.path.insert(0, "tools")
|
|
119
|
+
from pathlib import Path
|
|
120
|
+
import importlib.util
|
|
121
|
+
spec = importlib.util.spec_from_file_location(
|
|
122
|
+
"doors", "src/arwen_global/doors.py")
|
|
123
|
+
doors = importlib.util.module_from_spec(spec)
|
|
124
|
+
# Registered before it executes: doors.py declares dataclasses,
|
|
125
|
+
# and dataclasses resolve a field's annotation through
|
|
126
|
+
# sys.modules[cls.__module__]; a module executed from a spec and
|
|
127
|
+
# never registered is None there, and the first public run of this
|
|
128
|
+
# job died on that AttributeError before it read the pins.
|
|
129
|
+
sys.modules[spec.name] = doors
|
|
130
|
+
spec.loader.exec_module(doors)
|
|
131
|
+
pins = json.loads(
|
|
132
|
+
Path("src/arwen_global/data/door-pins.json").read_text("utf-8"))
|
|
133
|
+
requested = os.environ.get("REQUESTED_REF", "").strip()
|
|
134
|
+
engine = requested or pins.get("engine_source_rev") or ""
|
|
135
|
+
if not engine:
|
|
136
|
+
raise SystemExit(
|
|
137
|
+
"bridges: no engine revision to build from. The packaged "
|
|
138
|
+
"pins carry no engine_source_rev and none was passed in, "
|
|
139
|
+
"so there is nothing that says which source these binaries "
|
|
140
|
+
"would come from.")
|
|
141
|
+
names = [d.name for d in doors.doors_from_bundle(doors.COMPANION_BUNDLE)]
|
|
142
|
+
print(f"engine_ref={engine}")
|
|
143
|
+
print(f"release={pins.get('release') or 'v0.0.0-dev'}")
|
|
144
|
+
print("platforms=" + " ".join(doors.SUPPORTED_PLATFORMS))
|
|
145
|
+
print("doors=" + " ".join(names))
|
|
146
|
+
PY
|
|
147
|
+
- run: |
|
|
148
|
+
echo "engine ${{ steps.read.outputs.engine_ref }}"
|
|
149
|
+
echo "release ${{ steps.read.outputs.release }}"
|
|
150
|
+
echo "doors ${{ steps.read.outputs.doors }}"
|
|
151
|
+
|
|
152
|
+
# ---------------------------------------------------------------------
|
|
153
|
+
# 2. Does the engine checkout actually carry what this builds?
|
|
154
|
+
#
|
|
155
|
+
# THE BREAKAGE THIS PREVENTS: a bundle that packs whatever targets
|
|
156
|
+
# happened to build, published as the eight doors, whose missing
|
|
157
|
+
# members surface as an unknown-subcommand error in the middle of a
|
|
158
|
+
# user's DA cycle rather than at the door. Asked once, before any
|
|
159
|
+
# compiling, so a run that cannot succeed says why in its first
|
|
160
|
+
# minute.
|
|
161
|
+
# ---------------------------------------------------------------------
|
|
162
|
+
preflight:
|
|
163
|
+
needs: declare
|
|
164
|
+
runs-on: ubuntu-latest
|
|
165
|
+
steps:
|
|
166
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
167
|
+
with:
|
|
168
|
+
persist-credentials: false
|
|
169
|
+
path: package
|
|
170
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
171
|
+
with:
|
|
172
|
+
repository: ${{ env.ENGINE_REPOSITORY }}
|
|
173
|
+
ref: ${{ needs.declare.outputs.engine_ref }}
|
|
174
|
+
persist-credentials: false
|
|
175
|
+
path: engine
|
|
176
|
+
- name: every crate and binary target this run needs is present
|
|
177
|
+
env:
|
|
178
|
+
DOORS: ${{ needs.declare.outputs.doors }}
|
|
179
|
+
run: |
|
|
180
|
+
set -uo pipefail
|
|
181
|
+
missing=()
|
|
182
|
+
for door in $DOORS; do
|
|
183
|
+
hits=$(grep -rl "name = \"${door}\"" engine/tools/rustwx/crates/*/Cargo.toml 2>/dev/null || true)
|
|
184
|
+
if [ -z "$hits" ]; then
|
|
185
|
+
missing+=("$door")
|
|
186
|
+
else
|
|
187
|
+
echo "ok ${door} <- ${hits}"
|
|
188
|
+
fi
|
|
189
|
+
done
|
|
190
|
+
if [ ${#missing[@]} -ne 0 ]; then
|
|
191
|
+
echo >&2
|
|
192
|
+
echo "bridges: the engine checkout at ${{ needs.declare.outputs.engine_ref }} of ${ENGINE_REPOSITORY} declares no binary target for: ${missing[*]}" >&2
|
|
193
|
+
echo "bridges: those crates live only on the branch this package was carved from. Until the engine's line carries them, this workflow cannot build the bundle, and a partial bundle is worse than none: its members would fail as an unknown subcommand inside a run rather than at the door." >&2
|
|
194
|
+
echo "bridges: the remedy is the patch series delivered with this package, which lands crates/rw-atms and the five rw-obs binaries (plus the asos.rs and rw-goes subcommands) on the engine. Then bump engine_source_rev in src/arwen_global/data/door-pins.json." >&2
|
|
195
|
+
exit 1
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
# ---------------------------------------------------------------------
|
|
199
|
+
# 3. Build and pack, one job per platform. `--locked --offline` against
|
|
200
|
+
# the workspace's own vendored closure, so the bytes do not depend on
|
|
201
|
+
# what crates.io served that morning, and GPUWM_BRIDGE_SOURCE_REV is
|
|
202
|
+
# set explicitly because a CI checkout's HEAD is the package's, not
|
|
203
|
+
# the engine's.
|
|
204
|
+
# ---------------------------------------------------------------------
|
|
205
|
+
build:
|
|
206
|
+
needs: [declare, preflight]
|
|
207
|
+
strategy:
|
|
208
|
+
fail-fast: false
|
|
209
|
+
matrix:
|
|
210
|
+
include:
|
|
211
|
+
- platform: linux-x86_64
|
|
212
|
+
runs-on: ubuntu-latest
|
|
213
|
+
- platform: win-x86_64
|
|
214
|
+
runs-on: windows-latest
|
|
215
|
+
runs-on: ${{ matrix.runs-on }}
|
|
216
|
+
steps:
|
|
217
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
218
|
+
with:
|
|
219
|
+
persist-credentials: false
|
|
220
|
+
path: package
|
|
221
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
222
|
+
with:
|
|
223
|
+
repository: ${{ env.ENGINE_REPOSITORY }}
|
|
224
|
+
ref: ${{ needs.declare.outputs.engine_ref }}
|
|
225
|
+
persist-credentials: false
|
|
226
|
+
path: engine
|
|
227
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
228
|
+
with:
|
|
229
|
+
python-version: "3.11"
|
|
230
|
+
- name: rust toolchain
|
|
231
|
+
run: |
|
|
232
|
+
rustup toolchain install stable --profile minimal
|
|
233
|
+
rustup default stable
|
|
234
|
+
rustc --version
|
|
235
|
+
cargo --version
|
|
236
|
+
- name: build the door targets
|
|
237
|
+
working-directory: engine/tools/rustwx
|
|
238
|
+
env:
|
|
239
|
+
GPUWM_BRIDGE_SOURCE_REV: ${{ needs.declare.outputs.engine_ref }}
|
|
240
|
+
DOORS: ${{ needs.declare.outputs.doors }}
|
|
241
|
+
run: |
|
|
242
|
+
set -euo pipefail
|
|
243
|
+
args=()
|
|
244
|
+
for door in $DOORS; do args+=(--bin "$door"); done
|
|
245
|
+
# One cargo invocation so the workspace resolves once and every
|
|
246
|
+
# door is built against the same dependency graph.
|
|
247
|
+
cargo build --release --locked --offline \
|
|
248
|
+
-p rw-obs -p rw-goes -p rw-atms "${args[@]}"
|
|
249
|
+
- name: pack the bundle
|
|
250
|
+
working-directory: package
|
|
251
|
+
env:
|
|
252
|
+
RELEASE: ${{ needs.declare.outputs.release }}
|
|
253
|
+
run: |
|
|
254
|
+
python tools/build_door_bundle.py pack \
|
|
255
|
+
--release "$RELEASE" \
|
|
256
|
+
--platform ${{ matrix.platform }} \
|
|
257
|
+
--search ../engine/tools/rustwx/target/release \
|
|
258
|
+
--out dist-doors
|
|
259
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
260
|
+
with:
|
|
261
|
+
name: ${{ env.ARTIFACT_PREFIX }}-${{ matrix.platform }}
|
|
262
|
+
path: package/dist-doors/*.zip
|
|
263
|
+
if-no-files-found: error
|
|
264
|
+
|
|
265
|
+
# ---------------------------------------------------------------------
|
|
266
|
+
# 4. Pin, on one machine, from the bundles the build jobs produced.
|
|
267
|
+
# Every number written is a hash of bytes that exist here now. The
|
|
268
|
+
# source-revision stamp is checked out of each member without running
|
|
269
|
+
# it, so a bundle predating the declared engine revision is refused
|
|
270
|
+
# before it can become a perfectly-pinned release asset.
|
|
271
|
+
# ---------------------------------------------------------------------
|
|
272
|
+
pin:
|
|
273
|
+
needs: [declare, build]
|
|
274
|
+
runs-on: ubuntu-latest
|
|
275
|
+
steps:
|
|
276
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
277
|
+
with:
|
|
278
|
+
persist-credentials: false
|
|
279
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
280
|
+
with:
|
|
281
|
+
python-version: "3.11"
|
|
282
|
+
- uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4
|
|
283
|
+
with:
|
|
284
|
+
pattern: ${{ env.ARTIFACT_PREFIX }}-*
|
|
285
|
+
path: bundles
|
|
286
|
+
merge-multiple: true
|
|
287
|
+
- name: pin the bundles into the packaged pins document
|
|
288
|
+
env:
|
|
289
|
+
RELEASE: ${{ needs.declare.outputs.release }}
|
|
290
|
+
ENGINE_REF: ${{ needs.declare.outputs.engine_ref }}
|
|
291
|
+
run: |
|
|
292
|
+
set -euo pipefail
|
|
293
|
+
ls -l bundles/
|
|
294
|
+
# rw_atms is named here, and only rw_atms, because its crate
|
|
295
|
+
# declares the source-revision stamp as a `pub static` nothing
|
|
296
|
+
# reads, so the linker drops it and the binary carries none. The
|
|
297
|
+
# exemption is on the command line of every cut precisely so it
|
|
298
|
+
# cannot be mistaken for a door that was checked; the one-line fix
|
|
299
|
+
# is in this release's patch series and deletes this flag.
|
|
300
|
+
python tools/build_door_bundle.py pin \
|
|
301
|
+
--release "$RELEASE" \
|
|
302
|
+
--source-rev "$ENGINE_REF" \
|
|
303
|
+
--engine-rev "$ENGINE_REF" \
|
|
304
|
+
--allow-unstamped rw_atms \
|
|
305
|
+
bundles/*.zip
|
|
306
|
+
git --no-pager diff --stat -- src/arwen_global/data/door-pins.json
|
|
307
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
308
|
+
with:
|
|
309
|
+
name: door-pins
|
|
310
|
+
path: src/arwen_global/data/door-pins.json
|
|
311
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# The distribution itself: an sdist, a wheel, well-formed metadata, and one
|
|
2
|
+
# number that agrees with itself everywhere it is stated.
|
|
3
|
+
#
|
|
4
|
+
# Separate from test.yml because the two ask different questions. test.yml
|
|
5
|
+
# asks whether the installed package works; this asks whether the thing that
|
|
6
|
+
# would be uploaded is the thing the repository says it is. A cut that fails
|
|
7
|
+
# only here has working code and an artefact nobody should publish.
|
|
8
|
+
name: build
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
pull_request:
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
# A bare `push:` fires on branch pushes AND on tag pushes, which is what
|
|
15
|
+
# gives the version-against-tag gate below something to compare. Building
|
|
16
|
+
# on a tag PUBLISHES NOTHING: this workflow has no PyPI identity, no
|
|
17
|
+
# `environment`, and no `id-token` permission, so it could not upload if it
|
|
18
|
+
# tried.
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
concurrency:
|
|
24
|
+
group: build-${{ github.repository }}-${{ github.ref }}
|
|
25
|
+
cancel-in-progress: true
|
|
26
|
+
|
|
27
|
+
defaults:
|
|
28
|
+
run:
|
|
29
|
+
shell: bash
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
build:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
|
36
|
+
with:
|
|
37
|
+
persist-credentials: false
|
|
38
|
+
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: "3.11"
|
|
41
|
+
|
|
42
|
+
- name: build the sdist and the wheel
|
|
43
|
+
run: |
|
|
44
|
+
python -m pip install --upgrade pip
|
|
45
|
+
python -m pip install build twine "setuptools>=77" wheel
|
|
46
|
+
python -m build
|
|
47
|
+
ls -l dist/
|
|
48
|
+
|
|
49
|
+
# THE BREAKAGE THIS PREVENTS: a wheel and an sdist whose metadata
|
|
50
|
+
# differ, or whose long description PyPI refuses to render. Both land
|
|
51
|
+
# after the upload, where nothing can be taken back.
|
|
52
|
+
- name: the metadata is well formed
|
|
53
|
+
run: python -m twine check --strict dist/*
|
|
54
|
+
|
|
55
|
+
- name: exactly one wheel and exactly one sdist, and nothing else
|
|
56
|
+
run: |
|
|
57
|
+
set -euo pipefail
|
|
58
|
+
shopt -s nullglob
|
|
59
|
+
wheels=(dist/gpuwm_global-*.whl)
|
|
60
|
+
sdists=(dist/gpuwm_global-*.tar.gz)
|
|
61
|
+
everything=(dist/*)
|
|
62
|
+
if [ "${#wheels[@]}" -ne 1 ] || [ "${#sdists[@]}" -ne 1 ] || [ "${#everything[@]}" -ne 2 ]; then
|
|
63
|
+
echo "dist/ must hold exactly one wheel and one sdist for gpuwm-global" >&2
|
|
64
|
+
ls -l dist/ >&2
|
|
65
|
+
exit 1
|
|
66
|
+
fi
|
|
67
|
+
|
|
68
|
+
# The version is READ BACK from the installed distribution's metadata,
|
|
69
|
+
# not from pyproject.toml. Reading it from the source would compare
|
|
70
|
+
# the declaration against itself and pass on a wheel built from
|
|
71
|
+
# something else. THE BREAKAGE: the engine shipped a runtime constant
|
|
72
|
+
# that disagreed with its own wheel for four releases, because two
|
|
73
|
+
# files stated one number.
|
|
74
|
+
#
|
|
75
|
+
# The wheel is installed WITH its dependencies. `arwen_global` imports
|
|
76
|
+
# the model at package level, and the model imports numpy and the
|
|
77
|
+
# engine, so a --no-deps install cannot be imported at all: the first
|
|
78
|
+
# public run of this job (2026-09-10) died on ModuleNotFoundError for
|
|
79
|
+
# numpy before it read a version. Resolving the engine from PyPI here
|
|
80
|
+
# is also the first proof that the wheel's dependency table resolves.
|
|
81
|
+
- name: the version the wheel carries is the version the package reports
|
|
82
|
+
run: |
|
|
83
|
+
set -euo pipefail
|
|
84
|
+
python -m venv "$RUNNER_TEMP/metadata-venv"
|
|
85
|
+
"$RUNNER_TEMP/metadata-venv/bin/python" -m pip install --quiet --upgrade pip
|
|
86
|
+
"$RUNNER_TEMP/metadata-venv/bin/python" -m pip install --quiet dist/gpuwm_global-*.whl
|
|
87
|
+
metadata=$("$RUNNER_TEMP/metadata-venv/bin/python" -c "from importlib.metadata import version; print(version('gpuwm-global'))")
|
|
88
|
+
runtime=$("$RUNNER_TEMP/metadata-venv/bin/python" -c "import arwen_global; print(arwen_global.__version__)")
|
|
89
|
+
echo "wheel metadata: $metadata"
|
|
90
|
+
echo "package reports: $runtime"
|
|
91
|
+
test "$metadata" = "$runtime" || {
|
|
92
|
+
echo "the wheel's metadata says $metadata and the installed package says $runtime" >&2
|
|
93
|
+
exit 1
|
|
94
|
+
}
|
|
95
|
+
echo "GPUWM_GLOBAL_VERSION=$metadata" >> "$GITHUB_ENV"
|
|
96
|
+
|
|
97
|
+
# Only meaningful on a tag, and it is the gate that stops a vX.Y.Z tag
|
|
98
|
+
# from carrying a wheel of some other version. A tag is spent once it
|
|
99
|
+
# exists (forward commits only), so a mismatch discovered after the
|
|
100
|
+
# upload costs a version number.
|
|
101
|
+
- name: on a tag, the version equals the tag
|
|
102
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
103
|
+
run: |
|
|
104
|
+
set -euo pipefail
|
|
105
|
+
tag="${GITHUB_REF_NAME}"
|
|
106
|
+
expected="${tag#v}"
|
|
107
|
+
test "$GPUWM_GLOBAL_VERSION" = "$expected" || {
|
|
108
|
+
echo "tag ${tag} expects version ${expected}; the built distribution carries ${GPUWM_GLOBAL_VERSION}" >&2
|
|
109
|
+
exit 1
|
|
110
|
+
}
|
|
111
|
+
echo "tag ${tag} and distribution ${GPUWM_GLOBAL_VERSION} agree"
|
|
112
|
+
|
|
113
|
+
- name: record the digests of what was built
|
|
114
|
+
run: |
|
|
115
|
+
cd dist
|
|
116
|
+
sha256sum -- * | tee SHA256SUMS
|
|
117
|
+
|
|
118
|
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
119
|
+
with:
|
|
120
|
+
name: python-dists
|
|
121
|
+
path: dist/*
|
|
122
|
+
if-no-files-found: error
|