Skip to main content

Rust-first weather model metadata and projected map rendering bindings

Project description

rustwx Python bindings

rustwx is the optional Python binding package for the Rust-first rustwx weather workspace.

Design goal

Keep Python convenient, keep the hot path in Rust, and expose generic render/model metadata surfaces that are usable outside WRF-specific callers.

What is implemented

With the python feature enabled, the module exposes:

  • agent-facing discovery and map rendering via agent_capabilities_json, list_domains_json, render_maps_json, render_glm_lightning_json, and sample_point_timeseries_json
  • model listing and source/model helpers
  • projected-grid rendering via render_projected_map and render_projected_map_json
  • compatibility aliases render_wrf_map and render_wrf_map_json
  • standalone projected projection metadata via describe_projected_projection
  • standalone projected grid/layout metadata via describe_projected_geometry
  • standalone projected CONUS basemap overlay extraction via build_projected_basemap_overlays
  • future-facing cross-section request validation/normalization via normalize_cross_section_request
  • native sounding-column rendering via render_sounding_column and render_sounding_column_json

The wheel also installs a stable rustwx console command for agent and MCP adapters:

rustwx capabilities
rustwx list-domains --kind country --limit 5
rustwx render-maps --date 20260424 --model hrrr --domain california --product 2m_temperature_10m_winds --out-dir out
rustwx render-lightning --domain california --data-dir C:\Users\drew\lightning-test\data\glm --out-dir out
rustwx sample-point-timeseries --date 20260427 --cycle 0 --lat 40.802 --lon -124.164 --forecast-hour-end 6

render-maps accepts mixed product slugs and routes them to the appropriate direct, light derived, heavy ECAPE-derived, or HRRR windowed product path. Heavy ECAPE slugs such as sbecape, mlecape, muecape, ECAPE/CAPE ratios, NCAPE, ECIN, and ECAPE EHI/SCP/STP use the canonical derived_batch ECAPE path; they do not require callers to discover or run separate binaries.

When cache_dir / --cache-dir is omitted, the agent API uses a shared rustwx_outputs/cache fetch/decode cache, or RUSTWX_CACHE_DIR when that environment variable is set. The cache is intentionally independent of out_dir and map bounds, so city or bbox sweeps can reuse the same upstream GRIB fetches while writing PNGs into different output folders.

MCP servers should call these stable Python/CLI entry points instead of invoking internal proof binaries.

render_glm_lightning_json / rustwx render-lightning reads GOES GLM OR_GLM-L2-LCFA_*.nc files, renders native Rust projected flash maps, and writes a JSON flash artifact with lat/lon, time, energy, and area fields for agent consumption.

sample_point_timeseries_json samples native model fields at a lat/lon over a forecast-hour range for meteograms and point-and-click agent tools. The default variable set is HRRR-meteogram ready: 2 m T/Td/Tw/RH, 10 m wind/gust, hourly and accumulated QPF, low/mid/high clouds, MSLP, VPD, HDW, and the fire-weather composite. It uses rustwx's GRIB/idx fetch path and shared cache rather than cfgrib/xarray.

Every new projected helper has both a Python-object entry point and a _json variant:

  • Python-object entry points accept either a JSON string or a JSON-serializable Python dict
  • _json entry points keep returning pretty JSON strings for low-friction interop

Projected map API

The projected map surface is generic and public-facing. The caller supplies:

  • lat, lon, field as numpy.ndarray 2-D arrays
  • a render spec with product metadata, color scale, layout, and projection metadata
  • optional contour, overlay, and wind layers

render_projected_map(...) writes the PNG and returns a Python dict with:

  • typed projection, extents, layout, and layers sections
  • legacy pixel_bounds, data_extent, valid_data_extent, and projection_info keys for compatibility

Minimal example

import rustwx

print(rustwx.list_models_json())

Point time-series example

import json
import rustwx

report = rustwx.sample_point_timeseries_json(json.dumps({
    "model": "hrrr",
    "date_yyyymmdd": "20260427",
    "cycle_utc": 0,
    "source": "nomads",
    "lat": 40.802,
    "lon": -124.164,
    "forecast_hour_start": 0,
    "forecast_hour_end": 6,
    "variables": ["temperature_2m_c", "relative_humidity_2m_pct", "wind_speed_10m_ms", "hdw"],
}))
print(report)

Projected render example

import rustwx

spec = {
    "output_path": "example.png",
    "product_key": "Example",
    "field_units": "dBZ",
    "scale": {
        "kind": "palette",
        "palette": "reflectivity",
        "levels": [5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
        "extend": "Both",
    },
    "projection": {
        "map_proj": 1,
        "truelat1": 30.0,
        "truelat2": 60.0,
        "stand_lon": -97.0,
        "cen_lat": 38.0,
        "cen_lon": -97.0,
    },
    "width": 1100,
    "height": 850,
    "basemap_style": "none",
}

metadata = rustwx.render_projected_map(spec, lat, lon, field)
print(metadata["projection"]["kind"])
print(metadata["pixel_bounds"])

Geometry and overlay metadata example

surface = {
    "projection": spec["projection"],
    "width": 1100,
    "height": 850,
    "visual_mode": "filled_meteorology",
    "basemap_style": "filled",
}

geometry = rustwx.describe_projected_geometry(
    surface,
    lat,
    lon,
    include_projected_domain=False,
)
overlays = rustwx.build_projected_basemap_overlays(
    surface,
    lat,
    lon,
    include_geometry=False,
)

print(geometry["extents"]["padded"])
print(overlays["counts"])

Cross-section request normalization example

normalize_cross_section_request(...) does not render a cross-section yet. It validates and fills defaults for a future shared cross-section API surface.

xsect = rustwx.normalize_cross_section_request(
    {
        "path": {
            "start": {"lat": 39.74, "lon": -104.99, "label": "Denver"},
            "end": {"lat": 41.88, "lon": -87.63, "label": "Chicago"},
        },
        "field": {"product_key": "temperature", "field_units": "degC"},
    }
)

print(xsect["path_metrics"])
print(xsect["request"]["axis"])

Current limits

  • projected rendering still expects caller-owned arrays
  • cross-section support is validation/normalization only in this crate
  • render_maps_json covers model fetch/download/render orchestration for direct, derived, heavy ECAPE-derived, and HRRR windowed map products
  • sample_point_timeseries_json is a point data primitive; consumer-specific meteogram styling stays outside the Python wheel
  • sounding rendering expects a caller-supplied validated column; model fetch and lat/lon extraction live in the Rust CLI for now

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rustwx-0.4.5.tar.gz (1.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

rustwx-0.4.5-cp313-cp313-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.13Windows x86-64

rustwx-0.4.5-cp313-cp313-manylinux_2_39_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

rustwx-0.4.5-cp313-cp313-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustwx-0.4.5-cp312-cp312-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.12Windows x86-64

rustwx-0.4.5-cp312-cp312-manylinux_2_39_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

rustwx-0.4.5-cp312-cp312-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustwx-0.4.5-cp311-cp311-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.11Windows x86-64

rustwx-0.4.5-cp311-cp311-manylinux_2_39_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

rustwx-0.4.5-cp311-cp311-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustwx-0.4.5-cp310-cp310-win_amd64.whl (5.4 MB view details)

Uploaded CPython 3.10Windows x86-64

rustwx-0.4.5-cp310-cp310-manylinux_2_39_x86_64.whl (5.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

rustwx-0.4.5-cp310-cp310-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file rustwx-0.4.5.tar.gz.

File metadata

  • Download URL: rustwx-0.4.5.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustwx-0.4.5.tar.gz
Algorithm Hash digest
SHA256 4f21e90940624b9ff71797139132fd691102cec59dc7e5486ab18f30a7aeaed5
MD5 dc6266625873555c8a9547bce98ce38d
BLAKE2b-256 004743b170d4a69b36d1bcc8d6e4bca165039386c2246c4210b9b8613d46d0c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5.tar.gz:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.4.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustwx-0.4.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 331eeffeb63265b557ddc6601366ad25ac943d850b5c09aaba0698c531dcfc6c
MD5 26a8f7bc35934975229e5f33234bade9
BLAKE2b-256 f6f5012ffd1f41559bbb5a3043bfaaf5bcacda18dde297878b06d22128cb7854

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp313-cp313-win_amd64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bba385e314828e05abfe02b6db0069c0cc5e7d71a6215112fff54721602c096d
MD5 64e4af274f7ba3ba260b6002f688a1bf
BLAKE2b-256 4d80a068cbd7f5229607e664c177dde53d6f82966b016248d01d5be52346ec7d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp313-cp313-manylinux_2_39_x86_64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d397b49f63f21de8232d8d7fce5e60a7d3334e0a5f0d091c5783baf6e898bc1b
MD5 c04dc4c6d19528e1064dc31045764d58
BLAKE2b-256 dcab57b33ef1fc4cee70f7c2f8b3809c7a7ad53dc7d3ae3cedf6b8ee9ccc5d0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.4.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustwx-0.4.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 07c339c60bac639a2fca4da99d326018088fbf3d362110b7f2313ad1719b11bb
MD5 2c45c9f15d713fb819b413db30d3056f
BLAKE2b-256 5baca9ae08dfdc5879341011843e542211d821108871018f85e1b7e811e3cb0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp312-cp312-win_amd64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 909f38914f1db075b5f12086cfc86fe92e115677e6d395c221e9c161ae20628c
MD5 ddccfd5237483feb23296173185f634c
BLAKE2b-256 f260d845aa0f5885d3fbf08019c5fc2f6ddaf536b137f49ccfbb8e35a4bb3236

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp312-cp312-manylinux_2_39_x86_64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5afd72b54be7435c2208e6d095faebac2fbe119727c79e3220ce155ded61a344
MD5 ee7b629a36cb8345b340450f24d3b72a
BLAKE2b-256 1fdd4c7e46a40bbef703c5d1e7bd59ab659eb6078bfbcbe69de10d52022771a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.4.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustwx-0.4.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 b428e4d8f47efe2945fe8537495f93a2616536658a348e0c7c858d0f36ad2127
MD5 719aaddba86abd92adbfcfee141c6e22
BLAKE2b-256 2c17ea0fbb7df92d8c65d228849ee0ea83c3c16f6c66034d128a45a050efa209

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp311-cp311-win_amd64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 00abb22211f1f449468fe0e551255e877c009e222e6c3920ad2d8a1e2b0a74d0
MD5 21cb98a3f0ac06515c77e69a38db277f
BLAKE2b-256 d6baae6a5f8d5c0710a304504e116b86e4eb498541c83eb4823ec32bc526b90f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp311-cp311-manylinux_2_39_x86_64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 850d6ace7d3ed1573b2d7f3690b5c546ac09d9c79d9819ff662ee6d735dc0a10
MD5 3050f9a1e857b7ed41a649d263c56be8
BLAKE2b-256 37d3a53243bbce543a13a4024f1cd5560b1d138f7045cab77b1e5b98edcd516f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.4.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 5.4 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rustwx-0.4.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0fdc233a9a191b0c58c028861e2109109e4f3c7a7f43bb4c2b610bd46c0c093a
MD5 7d1ff7ed1bea4d8aa158d04b3a33ca8e
BLAKE2b-256 33c3000181a7a7731a37291b6632b58090fef9bf3012c841337b464f8c5f3aaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp310-cp310-win_amd64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e67bca2062b77a4b8b79afd54d38b1ab4a0a37ff556528490b53b176f9a1400c
MD5 962867150d61d67cd6d2dbdea5165f4a
BLAKE2b-256 70e11248c88d55213d60aea67195b412b72545e35c1b31ff2cfa8a80b4d65014

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp310-cp310-manylinux_2_39_x86_64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rustwx-0.4.5-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.4.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 072b04ecf397edca73a61f07db6506ebdb14db3285298187ed46b3362695259c
MD5 f2e611c0b48ca30a0286143cd4e10aed
BLAKE2b-256 e649fe4cd05349d71f1100bfb9570cd4d7037ad4fe55c79948d2c064b01b5e6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.4.5-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: workflow.yml on FahrenheitResearch/rustwx

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page