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.5.7.tar.gz (2.0 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.5.7-cp313-cp313-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.13Windows x86-64

rustwx-0.5.7-cp313-cp313-manylinux_2_39_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

rustwx-0.5.7-cp313-cp313-macosx_11_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustwx-0.5.7-cp312-cp312-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.12Windows x86-64

rustwx-0.5.7-cp312-cp312-manylinux_2_39_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

rustwx-0.5.7-cp312-cp312-macosx_11_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustwx-0.5.7-cp311-cp311-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.11Windows x86-64

rustwx-0.5.7-cp311-cp311-manylinux_2_39_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

rustwx-0.5.7-cp311-cp311-macosx_11_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustwx-0.5.7-cp310-cp310-win_amd64.whl (6.6 MB view details)

Uploaded CPython 3.10Windows x86-64

rustwx-0.5.7-cp310-cp310-manylinux_2_39_x86_64.whl (6.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

rustwx-0.5.7-cp310-cp310-macosx_11_0_arm64.whl (6.2 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for rustwx-0.5.7.tar.gz
Algorithm Hash digest
SHA256 97337ed0b1f6f7182edd2065dd58f3586c9203e9423547281593507b45a0bc0e
MD5 baa7092d60418b256d83275e58c16d12
BLAKE2b-256 9a71b1b29e13b14019d4519ea145f6db51da3776cc54216e039ef6a0e4b52020

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7.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.5.7-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.5.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 6.6 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.5.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 7f04fae4adb239f01d4be410a78654d448d348cf6b076d9d924d895f39b1ba21
MD5 d7585da1d45951757057625771a3f6c1
BLAKE2b-256 46490db4134337c0468cbdb807a99b940ac6f21d7d63a9a4cccc50c314deb108

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp313-cp313-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 befc464e70c99183f6820955ba66478567ce2cea8515e66365e68ba0de4c23d0
MD5 72a373713e0ce4fb91e7cb4988d6e647
BLAKE2b-256 3356510b3f99ab822511311e70b41d159792fea764bf9a4e699ec306e784e688

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d26bad9776504bbc6673a4f3f6243db0e6bce4861efe9410e3af713205dfc70b
MD5 54d33949a0da26913008f93f26e95da1
BLAKE2b-256 78edd00523cc88924ee63dcccd7f685969d8204390972d31cf5b2cd708275d5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.5.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.6 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.5.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f85068cf23c04275a629c8a8138b6b69c5473bf4fa42b0d15c122da37a1d50a1
MD5 7e18cf4b9c34da2711a32765f498aa70
BLAKE2b-256 cb1fdd41225de2b64f6ab128c7ca39edeabbf02316c15c3b8ec09b14d9b185a3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp312-cp312-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0473087450f1b27e401a26dc127ba3eb3e4f0ca71d384165df4622ba75d98df9
MD5 b5d9d50e9010fde898ac4abef8f2784c
BLAKE2b-256 2e2506bf6d43d9267107c23f2130a82840b0e47559b5eafee4f0897e646551b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e74fcfa8b898ebe0caf52386d294fa69c2d2ddcde22740b9fffef3342c6a764c
MD5 26b3a9eb016b7bb75db17f42f2e25420
BLAKE2b-256 c78b80f7c80a573ff0166a61cf96e23bc9ecfa7f5603d19979a05742d50a3db3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.5.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.6 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.5.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 8ebfbd07457b23e726ee8d606e20217a202b287d766ecbc4d5a4032b5698c3ea
MD5 16384b56fe4b8f5e9cf836debf218ae2
BLAKE2b-256 eb6efde45cd03231dc4106ec945fa0d798efaec0d24256bf22b19bd3a225854b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1c7bd8b7e7853f7aff9690629909dcdb11725936c05cec740184f7d34301eaca
MD5 afedd372751d85ad4eba867d80b56818
BLAKE2b-256 6a8ed7e4cc4d6e5b43afdde1efa31a2984995154de99c57f0902d57935c070b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f30beee0f71f279bf01f7fec8b0c453d5a7bdc87b4350715ce740c14b0e47a83
MD5 3879dc45793efe9de398b082f4d5855f
BLAKE2b-256 690258eca8b4fa4c99dbc4cf77ef71884f81f8e7d95b59d96129b5950ddb2e00

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: rustwx-0.5.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.6 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.5.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4d8db751cdf232d75e6486bf4bda1a58e9b15b6a2cb62a30c1b5d1a16fea8a07
MD5 078e94962583d9510f09b0083697f7fe
BLAKE2b-256 e6d224167dec5964ca2f6e990b6ab0f625e3a704ea13fac32be641c9ebaad006

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 03823aa1fa5efca0028d9d311bca0e90e7cdbc564a26ee45311d20bd712b4bbc
MD5 3399b656dd8b1dea617dfa001d9b1a6c
BLAKE2b-256 372721028c4c4d1eadb9c6dd605bcfb58b6ed3949905a1008bd50f593b8cba19

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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.5.7-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rustwx-0.5.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3a9ffd371187105571037f84cf24c79ac5be2c5dffeded9a6c99b2d779246795
MD5 ccdaa5c75dd24072cb2492cd2d236075
BLAKE2b-256 6bb3c938f78144cc1c89961e75f6730389edf831051583656ae19b06421e629a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rustwx-0.5.7-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