metrust 0.4.2__tar.gz → 0.4.4__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.
- {metrust-0.4.2 → metrust-0.4.4}/.github/workflows/ci.yml +55 -11
- {metrust-0.4.2 → metrust-0.4.4}/.github/workflows/docs.yml +4 -4
- {metrust-0.4.2 → metrust-0.4.4}/.github/workflows/release.yml +12 -12
- {metrust-0.4.2 → metrust-0.4.4}/Cargo.lock +1 -1
- {metrust-0.4.2 → metrust-0.4.4}/Cargo.toml +1 -1
- {metrust-0.4.2 → metrust-0.4.4}/PKG-INFO +8 -3
- {metrust-0.4.2 → metrust-0.4.4}/README.md +6 -1
- {metrust-0.4.2 → metrust-0.4.4}/benches/bench_python.py +18 -1
- metrust-0.4.4/benches/bench_workflows.py +413 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/compatibility.md +20 -9
- metrust-0.4.4/docs/delegation-ledger.md +22 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/guides/installation.md +3 -3
- {metrust-0.4.2 → metrust-0.4.4}/docs/index.md +10 -2
- {metrust-0.4.2 → metrust-0.4.4}/docs/performance.md +17 -0
- metrust-0.4.4/docs/workflow-benchmarks.md +47 -0
- {metrust-0.4.2 → metrust-0.4.4}/mkdocs.yml +2 -0
- {metrust-0.4.2 → metrust-0.4.4}/pyproject.toml +2 -2
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/calc/__init__.py +504 -320
- metrust-0.4.4/tests/run_ci_mode.py +45 -0
- metrust-0.4.4/tests/test_cookbook_replays.py +289 -0
- metrust-0.4.4/tests/test_delegation_ledger.py +205 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_metpy_dropin_compat.py +30 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_interp_dataset.py +2 -2
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_sounding_core.py +6 -4
- {metrust-0.4.2 → metrust-0.4.4}/.gitignore +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/BENCHMARKS.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/VERIFICATION.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/benches/bench_hrrr.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/benches/bench_hrrr_vs_metpy.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/Cargo.toml +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/benches/calc_bench.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/atmo.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/kinematics.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/severe.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/smooth.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/thermo.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/utils.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/calc/wind.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/constants.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/interpolate/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/gempak.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/gempak_dm.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/gempak_sounding.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/gempak_surface.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/gini.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/level3.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/metar.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/station.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/io/wpc.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/plots/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/projections.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/src/units.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/tests/test_gempak.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/metrust/tests/test_new_functions.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/Cargo.toml +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/composite.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/cache.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/catalog.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/client.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/fallback.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/idx.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/sources.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/download/streaming.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/dynamics.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/error.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/grid.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/ops.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/parser.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/search.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/streaming.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/tables.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/tests.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/unpack.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/grib2/writer.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/gridmath.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/metfuncs.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/cfs.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/ecmwf.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/era5.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/gefs.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/gfs.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/href.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/hrrr.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/hrrr_ak.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/latest.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/mrms.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/nam.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/nbm.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/rap.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/rrfs.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/rtma.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/sref.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/urma.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/models/wpc.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/products.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/projection.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/regrid.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/ansi.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/colormap.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/contour.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/cross_section.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/encode.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/filled_contour.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/hodograph.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/mod.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/overlay.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/raster.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/skewt.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-core/src/render/station.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/Cargo.toml +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/error.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/field.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/meta.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/projection.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/radial.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/site.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/sounding.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-field/src/time.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/Cargo.toml +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/composite.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/dynamics.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/gridmath.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/interpolate.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/regrid.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-math/src/thermo.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/Cargo.toml +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/cells.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/color_table.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/derived.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/detection.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/level2.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/products.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/render.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/crates/wx-radar/src/sites.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/demos/hrrr_diffusion_training.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/atmospheric.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/grid-composites.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/io.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/kinematics.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/moisture.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/severe.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/smoothing.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/thermodynamics.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/units.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/api/wind.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/guides/arrays.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/guides/migration.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/architecture.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/grid-kinematics.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/index.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/interpolation.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/io-formats.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/metpy-compatibility.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/moisture.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/parallelism.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/severe-weather.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/smoothing.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/thermodynamics.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/units-and-pint.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/methodology/wind.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/tutorials/first-grid.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/tutorials/first-sounding.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/tutorials/reading-the-numbers.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/tutorials/recipes.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/docs/tutorials/weather-101.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/examples/cookbook_500hpa_grid.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/examples/cookbook_sounding.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/examples/sounderpy_dropin.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/__init__.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/constants/__init__.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/interpolate/__init__.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/io/__init__.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/plots/__init__.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/units.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/python/metrust/xarray.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/lib.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_atmo.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_constants.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_interpolate.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_io.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_kinematics.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_severe.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_smooth.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_thermo.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_utils.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/src/py_wind.rs +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/api_audit_calc.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/api_audit_other.md +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmark.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmark_gpu.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_01_hrrr_severe.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_02_gfs_upper_air.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_03_rap_warm_front.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_04_nam_winter.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_05_hrrr_supercell.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_06_gfs_jet.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_07_hrrr_fire.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_08_era5_tropical.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_09_rap_aviation.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_10_hrrr_squall.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_11_gfs_cold_air.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/benchmarks/bench_12_hrrr_pbl.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/sounding_3way.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/sounding_comparison.png +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_gpu_backend.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_python_compat.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_kinematics_extra.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_remaining.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_thermo_layers.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_utils_misc.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_runtime_parity_wind_profiles.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/test_signature_parity.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_constants.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_edge_cases.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_kinematics.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_severe_atmo.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_smooth_interp.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_thermo.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_units.py +0 -0
- {metrust-0.4.2 → metrust-0.4.4}/tests/verify_wind.py +0 -0
|
@@ -5,23 +5,31 @@ on:
|
|
|
5
5
|
branches: [master, main]
|
|
6
6
|
pull_request:
|
|
7
7
|
|
|
8
|
+
env:
|
|
9
|
+
METPY_VERSION: "1.7.1"
|
|
10
|
+
|
|
8
11
|
jobs:
|
|
9
|
-
|
|
12
|
+
smoke:
|
|
13
|
+
name: Smoke (${{ matrix.os }}, py${{ matrix.python-version }})
|
|
10
14
|
runs-on: ${{ matrix.os }}
|
|
11
15
|
strategy:
|
|
16
|
+
fail-fast: false
|
|
12
17
|
matrix:
|
|
13
|
-
os: [ubuntu-latest, windows-latest, macos-
|
|
14
|
-
python-version: ["3.
|
|
18
|
+
os: [ubuntu-latest, windows-latest, macos-14]
|
|
19
|
+
python-version: ["3.12"]
|
|
15
20
|
steps:
|
|
16
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v5
|
|
17
22
|
|
|
18
|
-
- uses: actions/setup-python@
|
|
23
|
+
- uses: actions/setup-python@v6
|
|
19
24
|
with:
|
|
20
25
|
python-version: ${{ matrix.python-version }}
|
|
21
26
|
|
|
22
27
|
- name: Install Rust
|
|
23
28
|
uses: dtolnay/rust-toolchain@stable
|
|
24
29
|
|
|
30
|
+
- name: Rust cache
|
|
31
|
+
uses: Swatinem/rust-cache@v2
|
|
32
|
+
|
|
25
33
|
- name: Install package and test deps
|
|
26
34
|
run: |
|
|
27
35
|
python -m pip install --upgrade pip
|
|
@@ -33,11 +41,47 @@ jobs:
|
|
|
33
41
|
- name: Run Python compatibility tests
|
|
34
42
|
run: python -m pytest tests/test_python_compat.py -q
|
|
35
43
|
|
|
44
|
+
differential:
|
|
45
|
+
name: Differential (${{ matrix.mode }}, py${{ matrix.python-version }})
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
strategy:
|
|
48
|
+
fail-fast: false
|
|
49
|
+
matrix:
|
|
50
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
51
|
+
mode: ["metrust-only", "metpy", "metpy-xarray"]
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v5
|
|
54
|
+
|
|
55
|
+
- uses: actions/setup-python@v6
|
|
56
|
+
with:
|
|
57
|
+
python-version: ${{ matrix.python-version }}
|
|
58
|
+
|
|
59
|
+
- name: Install Rust
|
|
60
|
+
uses: dtolnay/rust-toolchain@stable
|
|
61
|
+
|
|
62
|
+
- name: Rust cache
|
|
63
|
+
uses: Swatinem/rust-cache@v2
|
|
64
|
+
|
|
65
|
+
- name: Install test dependencies
|
|
66
|
+
shell: bash
|
|
67
|
+
run: |
|
|
68
|
+
python -m pip install --upgrade pip
|
|
69
|
+
python -m pip install -e "." pytest numpy pint pandas
|
|
70
|
+
if [[ "${{ matrix.mode }}" != "metrust-only" ]]; then
|
|
71
|
+
python -m pip install "MetPy==${METPY_VERSION}"
|
|
72
|
+
fi
|
|
73
|
+
if [[ "${{ matrix.mode }}" == "metpy-xarray" ]]; then
|
|
74
|
+
python -m pip install xarray
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
- name: Run differential test mode
|
|
78
|
+
run: python tests/run_ci_mode.py ${{ matrix.mode }}
|
|
79
|
+
|
|
36
80
|
bench-rust:
|
|
37
81
|
name: Rust Benchmarks
|
|
38
82
|
runs-on: ubuntu-latest
|
|
39
83
|
steps:
|
|
40
|
-
- uses: actions/checkout@
|
|
84
|
+
- uses: actions/checkout@v5
|
|
41
85
|
|
|
42
86
|
- name: Install Rust
|
|
43
87
|
uses: dtolnay/rust-toolchain@stable
|
|
@@ -49,7 +93,7 @@ jobs:
|
|
|
49
93
|
run: cargo bench --package metrust --bench calc_bench
|
|
50
94
|
|
|
51
95
|
- name: Upload criterion artifacts
|
|
52
|
-
uses: actions/upload-artifact@
|
|
96
|
+
uses: actions/upload-artifact@v7
|
|
53
97
|
if: always()
|
|
54
98
|
with:
|
|
55
99
|
name: criterion-report
|
|
@@ -60,9 +104,9 @@ jobs:
|
|
|
60
104
|
name: Python Benchmarks
|
|
61
105
|
runs-on: ubuntu-latest
|
|
62
106
|
steps:
|
|
63
|
-
- uses: actions/checkout@
|
|
107
|
+
- uses: actions/checkout@v5
|
|
64
108
|
|
|
65
|
-
- uses: actions/setup-python@
|
|
109
|
+
- uses: actions/setup-python@v6
|
|
66
110
|
with:
|
|
67
111
|
python-version: "3.12"
|
|
68
112
|
|
|
@@ -75,13 +119,13 @@ jobs:
|
|
|
75
119
|
- name: Install metrust and MetPy
|
|
76
120
|
run: |
|
|
77
121
|
python -m pip install --upgrade pip
|
|
78
|
-
python -m pip install -e "." numpy pint
|
|
122
|
+
python -m pip install -e "." numpy pint "MetPy==${METPY_VERSION}"
|
|
79
123
|
|
|
80
124
|
- name: Run three-tier benchmark
|
|
81
125
|
run: python benches/bench_python.py --json
|
|
82
126
|
|
|
83
127
|
- name: Upload benchmark results
|
|
84
|
-
uses: actions/upload-artifact@
|
|
128
|
+
uses: actions/upload-artifact@v7
|
|
85
129
|
if: always()
|
|
86
130
|
with:
|
|
87
131
|
name: python-bench-results
|
|
@@ -18,13 +18,13 @@ jobs:
|
|
|
18
18
|
build:
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
22
|
-
- uses: actions/setup-python@
|
|
21
|
+
- uses: actions/checkout@v5
|
|
22
|
+
- uses: actions/setup-python@v6
|
|
23
23
|
with:
|
|
24
24
|
python-version: "3.12"
|
|
25
25
|
- run: pip install mkdocs-material
|
|
26
26
|
- run: mkdocs build
|
|
27
|
-
- uses: actions/upload-pages-artifact@
|
|
27
|
+
- uses: actions/upload-pages-artifact@v4
|
|
28
28
|
with:
|
|
29
29
|
path: site
|
|
30
30
|
|
|
@@ -36,4 +36,4 @@ jobs:
|
|
|
36
36
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
37
37
|
steps:
|
|
38
38
|
- id: deployment
|
|
39
|
-
uses: actions/deploy-pages@
|
|
39
|
+
uses: actions/deploy-pages@v5
|
|
@@ -22,8 +22,8 @@ jobs:
|
|
|
22
22
|
- runner: ubuntu-22.04
|
|
23
23
|
target: aarch64
|
|
24
24
|
steps:
|
|
25
|
-
- uses: actions/checkout@
|
|
26
|
-
- uses: actions/setup-python@
|
|
25
|
+
- uses: actions/checkout@v5
|
|
26
|
+
- uses: actions/setup-python@v6
|
|
27
27
|
with:
|
|
28
28
|
python-version: '3.12'
|
|
29
29
|
- name: Build wheels
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
args: --release --out dist -i python3.10 python3.11 python3.12 python3.13
|
|
34
34
|
manylinux: auto
|
|
35
35
|
- name: Upload wheels
|
|
36
|
-
uses: actions/upload-artifact@
|
|
36
|
+
uses: actions/upload-artifact@v7
|
|
37
37
|
with:
|
|
38
38
|
name: wheels-linux-${{ matrix.platform.target }}
|
|
39
39
|
path: dist
|
|
@@ -50,8 +50,8 @@ jobs:
|
|
|
50
50
|
- runner: macos-14
|
|
51
51
|
target: aarch64
|
|
52
52
|
steps:
|
|
53
|
-
- uses: actions/checkout@
|
|
54
|
-
- uses: actions/setup-python@
|
|
53
|
+
- uses: actions/checkout@v5
|
|
54
|
+
- uses: actions/setup-python@v6
|
|
55
55
|
with:
|
|
56
56
|
python-version: '3.12'
|
|
57
57
|
- name: Build wheels
|
|
@@ -60,7 +60,7 @@ jobs:
|
|
|
60
60
|
target: ${{ matrix.platform.target }}
|
|
61
61
|
args: --release --out dist
|
|
62
62
|
- name: Upload wheels
|
|
63
|
-
uses: actions/upload-artifact@
|
|
63
|
+
uses: actions/upload-artifact@v7
|
|
64
64
|
with:
|
|
65
65
|
name: wheels-macos-${{ matrix.platform.target }}
|
|
66
66
|
path: dist
|
|
@@ -72,8 +72,8 @@ jobs:
|
|
|
72
72
|
matrix:
|
|
73
73
|
target: [x64]
|
|
74
74
|
steps:
|
|
75
|
-
- uses: actions/checkout@
|
|
76
|
-
- uses: actions/setup-python@
|
|
75
|
+
- uses: actions/checkout@v5
|
|
76
|
+
- uses: actions/setup-python@v6
|
|
77
77
|
with:
|
|
78
78
|
python-version: '3.12'
|
|
79
79
|
architecture: ${{ matrix.target }}
|
|
@@ -82,7 +82,7 @@ jobs:
|
|
|
82
82
|
with:
|
|
83
83
|
args: --release --out dist
|
|
84
84
|
- name: Upload wheels
|
|
85
|
-
uses: actions/upload-artifact@
|
|
85
|
+
uses: actions/upload-artifact@v7
|
|
86
86
|
with:
|
|
87
87
|
name: wheels-windows-${{ matrix.target }}
|
|
88
88
|
path: dist
|
|
@@ -91,14 +91,14 @@ jobs:
|
|
|
91
91
|
sdist:
|
|
92
92
|
runs-on: ubuntu-latest
|
|
93
93
|
steps:
|
|
94
|
-
- uses: actions/checkout@
|
|
94
|
+
- uses: actions/checkout@v5
|
|
95
95
|
- name: Build sdist
|
|
96
96
|
uses: PyO3/maturin-action@v1
|
|
97
97
|
with:
|
|
98
98
|
command: sdist
|
|
99
99
|
args: --out dist
|
|
100
100
|
- name: Upload sdist
|
|
101
|
-
uses: actions/upload-artifact@
|
|
101
|
+
uses: actions/upload-artifact@v7
|
|
102
102
|
with:
|
|
103
103
|
name: wheels-sdist
|
|
104
104
|
path: dist
|
|
@@ -115,7 +115,7 @@ jobs:
|
|
|
115
115
|
id-token: write # trusted publishing
|
|
116
116
|
steps:
|
|
117
117
|
- name: Download all wheels
|
|
118
|
-
uses: actions/download-artifact@
|
|
118
|
+
uses: actions/download-artifact@v8
|
|
119
119
|
with:
|
|
120
120
|
pattern: wheels-*
|
|
121
121
|
merge-multiple: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: metrust
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.4
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Science/Research
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -15,7 +15,7 @@ Summary: Rust-powered MetPy-compatible calculation layer with optional GPU accel
|
|
|
15
15
|
Keywords: meteorology,weather,rust,metpy,atmospheric-science,nwp,cape,sounding
|
|
16
16
|
Author: Fahrenheit Research
|
|
17
17
|
License: MIT
|
|
18
|
-
Requires-Python: >=3.
|
|
18
|
+
Requires-Python: >=3.10
|
|
19
19
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
20
20
|
Project-URL: Documentation, https://fahrenheitresearch.github.io/metrust-py/
|
|
21
21
|
Project-URL: Homepage, https://github.com/FahrenheitResearch/metrust-py
|
|
@@ -125,6 +125,9 @@ Benchmarked on real-world workflows (v0.3.3, validated by Codex against MetPy):
|
|
|
125
125
|
| MetPy isentropic example | **2.3x** | Isentropic interpolation + Montgomery |
|
|
126
126
|
| Vorticity/divergence (global grid) | **2.3x** | Spherical corrections on 721x1440 |
|
|
127
127
|
|
|
128
|
+
Current replay-harness snapshot from `benches/bench_workflows.py` on Windows 11 / Python `3.13.7`:
|
|
129
|
+
sounding `2.16x`, grid diagnostics `8.53x`, xarray workflow `1.46x`.
|
|
130
|
+
|
|
128
131
|
### Three-Way Benchmark: MetPy vs Rust vs CUDA
|
|
129
132
|
|
|
130
133
|
Real HRRR model output (40 isobaric levels, 1059 × 1799 grid, ~1.9 M points). RTX 5090, `python tests/benchmark_gpu.py`.
|
|
@@ -231,7 +234,9 @@ These forward to MetPy when installed:
|
|
|
231
234
|
- `metrust.xarray` (xarray accessor)
|
|
232
235
|
- `metrust.io.Level2File` (NEXRAD Level II)
|
|
233
236
|
|
|
234
|
-
Core `metrust.calc` stays native Rust by default with no required MetPy dependency.
|
|
237
|
+
Core `metrust.calc` stays native Rust by default with no required MetPy dependency. The shared calc surface now stays on native metrust implementations even when MetPy is installed. The optional `met-cu` backend is an explicit accelerator, not a requirement.
|
|
238
|
+
|
|
239
|
+
End-to-end replay benchmarks for sounding, grid, and xarray workflows live in `benches/bench_workflows.py` and the published docs page `workflow-benchmarks.md`.
|
|
235
240
|
|
|
236
241
|
## Examples
|
|
237
242
|
|
|
@@ -101,6 +101,9 @@ Benchmarked on real-world workflows (v0.3.3, validated by Codex against MetPy):
|
|
|
101
101
|
| MetPy isentropic example | **2.3x** | Isentropic interpolation + Montgomery |
|
|
102
102
|
| Vorticity/divergence (global grid) | **2.3x** | Spherical corrections on 721x1440 |
|
|
103
103
|
|
|
104
|
+
Current replay-harness snapshot from `benches/bench_workflows.py` on Windows 11 / Python `3.13.7`:
|
|
105
|
+
sounding `2.16x`, grid diagnostics `8.53x`, xarray workflow `1.46x`.
|
|
106
|
+
|
|
104
107
|
### Three-Way Benchmark: MetPy vs Rust vs CUDA
|
|
105
108
|
|
|
106
109
|
Real HRRR model output (40 isobaric levels, 1059 × 1799 grid, ~1.9 M points). RTX 5090, `python tests/benchmark_gpu.py`.
|
|
@@ -207,7 +210,9 @@ These forward to MetPy when installed:
|
|
|
207
210
|
- `metrust.xarray` (xarray accessor)
|
|
208
211
|
- `metrust.io.Level2File` (NEXRAD Level II)
|
|
209
212
|
|
|
210
|
-
Core `metrust.calc` stays native Rust by default with no required MetPy dependency.
|
|
213
|
+
Core `metrust.calc` stays native Rust by default with no required MetPy dependency. The shared calc surface now stays on native metrust implementations even when MetPy is installed. The optional `met-cu` backend is an explicit accelerator, not a requirement.
|
|
214
|
+
|
|
215
|
+
End-to-end replay benchmarks for sounding, grid, and xarray workflows live in `benches/bench_workflows.py` and the published docs page `workflow-benchmarks.md`.
|
|
211
216
|
|
|
212
217
|
## Examples
|
|
213
218
|
|
|
@@ -127,6 +127,7 @@ _raw_calc = None # metrust._metrust.calc (T1)
|
|
|
127
127
|
_mr_calc = None # metrust.calc (T2 -- Pint wrapper)
|
|
128
128
|
_mp_calc = None # metpy.calc (T3)
|
|
129
129
|
_mp_units = None # metpy.units.units
|
|
130
|
+
_mr_units = None # metrust.units.units
|
|
130
131
|
|
|
131
132
|
|
|
132
133
|
def _import_raw():
|
|
@@ -145,6 +146,14 @@ def _import_metrust():
|
|
|
145
146
|
return _mr_calc
|
|
146
147
|
|
|
147
148
|
|
|
149
|
+
def _import_metrust_units():
|
|
150
|
+
global _mr_units
|
|
151
|
+
if _mr_units is None:
|
|
152
|
+
from metrust.units import units as mu
|
|
153
|
+
_mr_units = mu
|
|
154
|
+
return _mr_units
|
|
155
|
+
|
|
156
|
+
|
|
148
157
|
def _import_metpy():
|
|
149
158
|
global _mp_calc, _mp_units
|
|
150
159
|
if _mp_calc is None:
|
|
@@ -345,8 +354,16 @@ def _bench_wind(tiers):
|
|
|
345
354
|
lambda: rc.storm_relative_helicity(u_p, v_p, z_p, 1000.0, 10.0, 5.0)))
|
|
346
355
|
if 2 in tiers:
|
|
347
356
|
mc = _import_metrust()
|
|
357
|
+
mu = _import_metrust_units()
|
|
348
358
|
results.append(run_bench(name, 2, "T2 metrust+Pint",
|
|
349
|
-
lambda: mc.storm_relative_helicity(
|
|
359
|
+
lambda: mc.storm_relative_helicity(
|
|
360
|
+
z_p * mu.meter,
|
|
361
|
+
u_p * mu("m/s"),
|
|
362
|
+
v_p * mu("m/s"),
|
|
363
|
+
1000 * mu.meter,
|
|
364
|
+
storm_u=10 * mu("m/s"),
|
|
365
|
+
storm_v=5 * mu("m/s"),
|
|
366
|
+
)))
|
|
350
367
|
if 3 in tiers:
|
|
351
368
|
try:
|
|
352
369
|
mpc, mu = _import_metpy()
|