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

Uploaded CPython 3.13Windows x86-64

rustwx-0.4.4-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.4-cp313-cp313-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.12Windows x86-64

rustwx-0.4.4-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.4-cp312-cp312-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.11Windows x86-64

rustwx-0.4.4-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.4-cp311-cp311-macosx_11_0_arm64.whl (5.2 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.10Windows x86-64

rustwx-0.4.4-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.4-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.4.tar.gz.

File metadata

  • Download URL: rustwx-0.4.4.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.4.tar.gz
Algorithm Hash digest
SHA256 2ea47a2bcc00d011632d481fec9874c34a9a1369734343e7609eab8c4d0c800c
MD5 4db833a9fd0389245837c706e61bcbb4
BLAKE2b-256 0830a516306cacaa12e4db2fea8f4d4bb27920de7b3e5b2e4360db312290ecea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.4.4-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.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1aa361e278e513c595f02e9929fab32d5bff7e766e919e85a17194bc409ca606
MD5 8ee1cb866c99359c3b5b532887a39694
BLAKE2b-256 c861fc25e8aeb291cbc8650d1bb2babdce136fa698659c8b919d041d041a0310

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp313-cp313-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 e4ca0c7cd992e27b4714ff4a0c609972e55a8dd9dc882c8d662ecb79c6c29cb7
MD5 b450a8a50eca3531b9870bed404cc00c
BLAKE2b-256 e520555e966e4e94a9bf0f40eae10c9337c670cd65166b244a77033b662bf9c1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 61277be92a2f91765fb996ae072a7dcd200bb2b283f47ead19c200dbac571243
MD5 86cbb3a598dabbdcc8d53c31fd9c5c7d
BLAKE2b-256 28c9fe04eb6e2a66f83ed3b8ca9cd173b66636a94fe446e2405bc1cff5ea3a4d

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.4.4-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.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5ef56199d8a02a045c0e9509bbb2d8bd1daf773929fb08a684969406cae6770d
MD5 33bc8fc7832f5751b2559caa19c6f3fb
BLAKE2b-256 8633618d7a51ec474b2d00b7c8c17780812605690786b6a1f621f90ecc8b3ab0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp312-cp312-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 f54d8d70509aad841133e7436c23c8659f37aef433a57b75fa4fc44b5fd285e3
MD5 622740308398dda1254ba1e7f4caeb01
BLAKE2b-256 ae99b5ae8e004e242e5b118bd47acabcec251efa98acba7146eb1efa673ccdc1

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1592c118020a645d78b2fc98993880efa7207ae312fd3188643c33bf37580f12
MD5 d8b90eb665719a34a9a5d961f43b6035
BLAKE2b-256 a29ea620585fcaefe099e5354ae0a33d69dee83e92f7dfeae6e808cf9ee6bf8b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.4.4-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.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5a67aa18f7bf108c1c117b09d3640b74acaa58e2f105c265c881ecd28cb8e1e9
MD5 e1c37997fe759e74298dc650138a2a51
BLAKE2b-256 a6ebac66eac8f4ecbfe63848b956336286b7043b711b1655902dbe7a39a4f3ee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 23b5a2545238f9124aa4841d8da8d93f8dd6c9a347f06ad130bd31dc8843fffe
MD5 21c143c4d48aaa184c6e37aafa6925b8
BLAKE2b-256 6f9fbab665c6ac5f583233da9ff7269a8eb82da88f02eaeb661c711f70be4a9c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5a0c20d09012afc4a29f555e53493f540a39e5be8c23e7ef6b89259df31bbe40
MD5 45ef6f409510bd4039bc04442f6f1af4
BLAKE2b-256 506c23a0c59b8eb0325f867ca786146162c7ce48e46976075ce63856aceaf80b

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: rustwx-0.4.4-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.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a201c46c221f3ba76d7eb752ef4aac9133460d0e7c6fb5429a5d98434a5ae5dc
MD5 f7312cb97361caafc2aa95b520e622a2
BLAKE2b-256 9d4a9cf2a5b1139b7338dbd3e5f702a2bd6fab23e1b5d0a207d4747dd0f7f896

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b0e2baed4cf14351b76f148c0cf946f024b22f607f5d98cfc6d2548cb9cba2d6
MD5 086e39a026059d72afca3a050f8c15f7
BLAKE2b-256 42acdb8331e123c49ed9aa06456a21cc315bb56789df9c21d2a3798127819deb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for rustwx-0.4.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2e8d6ab8528600a9bf820c09d0e5283bb0f4dfa197d33da3ddc82025a561d287
MD5 290317fa36c35baa2503f61f346d8af9
BLAKE2b-256 45a0cb35ff46961e421f89beb7c266d2ff35b0670fe970e6253a3b7295102c7e

See more details on using hashes here.

Provenance

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