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.1.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.1-cp313-cp313-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.13Windows x86-64

rustwx-0.5.1-cp313-cp313-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.39+ x86-64

rustwx-0.5.1-cp313-cp313-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rustwx-0.5.1-cp312-cp312-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.12Windows x86-64

rustwx-0.5.1-cp312-cp312-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.39+ x86-64

rustwx-0.5.1-cp312-cp312-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rustwx-0.5.1-cp311-cp311-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.11Windows x86-64

rustwx-0.5.1-cp311-cp311-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

rustwx-0.5.1-cp311-cp311-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rustwx-0.5.1-cp310-cp310-win_amd64.whl (6.1 MB view details)

Uploaded CPython 3.10Windows x86-64

rustwx-0.5.1-cp310-cp310-manylinux_2_39_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

rustwx-0.5.1-cp310-cp310-macosx_11_0_arm64.whl (5.7 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: rustwx-0.5.1.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.1.tar.gz
Algorithm Hash digest
SHA256 b603d10e586e830726a484e8f40cab494b081a14c1752fd7460501c8db435995
MD5 e329cb02de0dfa44af8385275d8e847a
BLAKE2b-256 4dff81c4a9e043ad51edd1d951cef8af075b4bae2093e92d67fb10802be129a6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.5.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 6.1 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.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 0d5813fcdba01159d7bea6a9125ad8603592ad73b920648413d3e0738c6e4886
MD5 ef42424fdbef3a3913097dc411c9af50
BLAKE2b-256 f66727e95f6e2b919eed8bb42a22662c6987efa452cad16cfbc4dfa7e305d404

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 8af3e07b2844a39409d67ef875244fd9391d0e70184752b9f88315cc10633c8d
MD5 ed4a62f87b4eece979a538ac73d7c546
BLAKE2b-256 065377a062eff69f7d925abeaf059caefb925517d217f1a0e3eb2dfc4d603067

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4a289fb091cffbc9903588d3b73ed0209e01080658b1b9f0a0e100517e27eaa
MD5 6a164a7e47df9b8367fb2af24a8a4675
BLAKE2b-256 7d966a3d4efac669b3cd29e48abb0c0fe93e22b7cce1e7272b02358cd7e68440

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.5.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.1 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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f50182d15faa42c19e3af49e5902044c9fcd8647f799c460d0c13eb2d7c19ec2
MD5 14107b2b86a49bfe068ec08096e21f2d
BLAKE2b-256 da3bacc3d9abbd691aec8cb3b2d708952363eca9ffdf8b1c51b71969ad4656bd

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1f164f0198c7768f578450ab7e2cb751be955aca26d1316ef653d6406982ca75
MD5 71c8237501bc26ae2b19a73874122850
BLAKE2b-256 97194c15e4ec1da010877472396676bcd3666e834d6000390482026436510f39

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 122d8ae788c11889951d6628f8f161caff48b3b13bc4bf2104effdb20bd06ff2
MD5 1a6021c6f53f5817482fb7e93265b0f4
BLAKE2b-256 a17710ea1ad11d0d41c9fa1325d134201c52e6a1370d31ea05c2c4766761c495

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.5.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.1 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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3499d4e96cf738f69f3b31a7f40d40caf6fbf190e0ceda668d5dc2fd97c00aec
MD5 fb6f563c22c06002a1fb721ae05edd8b
BLAKE2b-256 76bed4b8f377fd02f3bd1a209b8cc92b83032577fda131f1a1543feaa2509859

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b3bad0fa01c0cfff2c52d27e9413a51f16a44cd5f05ddfd61bc5fb418632913b
MD5 fe3986abc20b8d779cbf2108ce45c531
BLAKE2b-256 c3e4627f229b8e384ae76760983e691a7a67d5c637bc59627a4e052a9390c309

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8d14bb6690a71007ebb17e746063058ec3487c726c3669771795962f0104d048
MD5 99a67cad5fc156a5a9350cbbdceb4d2d
BLAKE2b-256 c32f1262c5ec0cfaa2962305db9c8fd627e64bfd6e4212a1d2fbf6fdaa627e28

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.5.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.1 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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 f6bd0c505f9c5d3b09264319c1209587c5bc11599465dbf0db72244d3ac66a5d
MD5 59b06d679a1c6e63f39d3b7d6b8c8ada
BLAKE2b-256 e7a9d440cff3c6c74950e33efd35f3a7dca7c141a2ca93d73339c2720b7c1dac

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 eb6a3dc236ae4cdb6e4b3a631342b5c9735788e0e7e31c7c362022a03466255d
MD5 8be8dbe9df8bd804c1c1545b59966b73
BLAKE2b-256 ad3dae2b7ae252edaa34d70090c71e98a60fbe6a5ad39fe44d30eb9693277e80

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.5.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 105d490431ab8ca879fb5efc3d134b91092f65ce29141d0c21bdc759d72bb88a
MD5 856900c1c0d38a869bea52e8e08df473
BLAKE2b-256 7a7597c55b39abfe091e6ba862b463fd5883a41fd1160e4b9c70e47c934de4fb

See more details on using hashes here.

Provenance

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