Skip to main content

Rust-powered drop-in replacement for MetPy -- 150/150 calc functions plus 36 extras, 10-93000x faster

Project description

metrust

Drop-in replacement for MetPy's calculation layer, powered by Rust.

150/150 metpy.calc functions implemented natively, plus 36 extras. 6-30x faster on real-world workflows. Verified against MetPy on SounderPy, MetPy Cookbook examples, and synthetic global grids.

# The only change: swap the import
from metrust.calc import cape_cin, potential_temperature, vorticity
from metrust.units import units

Installation

pip install metrust

For plotting, xarray accessor, or Level2File (forwarded to MetPy):

pip install metrust metpy

What It Does

metrust implements every function in metpy.calc with a Rust backend compiled via PyO3. The Python API matches MetPy's signatures, units, and return types:

import numpy as np
from metrust.calc import (
    cape_cin, parcel_profile, bunkers_storm_motion,
    storm_relative_helicity, significant_tornado_parameter,
    vorticity, divergence, advection,
)
from metrust.units import units

# Sounding analysis (same API as MetPy)
p = np.array([1000, 925, 850, 700, 500, 300]) * units.hPa
T = np.array([25, 20, 15, 5, -15, -40]) * units.degC
Td = np.array([20, 15, 10, -5, -25, -50]) * units.degC

prof = parcel_profile(p, T[0], Td[0])
cape, cin = cape_cin(p, T, Td, prof)  # MetPy parcel_profile form works

# Grid kinematics with xarray (dx/dy inferred from lat/lon coords)
vort = vorticity(u_xarray, v_xarray)  # spherical metric corrections included
div = divergence(u_xarray, v_xarray)

Speed

Benchmarked on real-world workflows (v0.3.3, validated by Codex against MetPy):

Workflow Speedup Notes
MetPy Cookbook sounding analysis 6.0x Full severe weather stack
MetPy Cookbook 500 hPa grid 6.1x Vorticity, smoothing, advection
MetPy Cookbook Q-vectors 6.1x Q-vector divergence
SounderPy compute-heavy subset 29.7x Thermo + wind + severe params
MetPy isentropic example 2.3x Isentropic interpolation + Montgomery
Vorticity/divergence (global grid) 2.3x Spherical corrections on 721x1440

Array operations on 1M elements (32-core Ryzen, rayon parallel):

Function Time Throughput
potential_temperature 1.8 ms 550 M/s
wet_bulb_temperature 7.3 ms 137 M/s
wind_speed 1.5 ms 660 M/s

Numerical Parity

Verified on the MetPy OUN 2011-05-22 12Z test sounding:

Metric Difference from MetPy
CAPE +4.0 J/kg
MUCAPE +7.6 J/kg
SRH (0-1 km) +0.3 m^2/s^2
Critical angle +0.2 deg
Bunkers RM +0.02 m/s
STP +0.01
Montgomery streamfunction corr 1.0000
Isentropic pressure 7e-13 hPa diff
Vorticity (global lat/lon) corr 1.0000

Uses MetPy-exact physical constants (Rd, Cp, Lv, epsilon), MetPy's CAPE integration formula (g * dTv/Tv * dz), pressure-weighted Bunkers algorithm, Newton solver for isentropic interpolation, and spherical metric tensor corrections for lat/lon grid kinematics.

Coverage

  • 150/150 metpy.calc functions (100% coverage)
  • 36 extras not in MetPy (grid composites, fire weather indices, etc.)
  • 28 Rust array bindings with rayon parallelism and GIL release
  • Pint application registry shared with MetPy (no cross-registry errors)
  • xarray support with coordinate inference and shape preservation

What's Not Native

These forward to MetPy when installed:

  • metrust.plots (matplotlib-based plotting)
  • metrust.xarray (xarray accessor)
  • metrust.io.Level2File (NEXRAD Level II)

Core metrust.calc is 100% native Rust with no MetPy dependency.

Examples

See examples/ for complete drop-in demos:

  • cookbook_sounding.py — MetPy Cookbook sounding analysis
  • cookbook_500hpa_grid.py — MetPy Cookbook 500 hPa vorticity advection
  • sounderpy_dropin.py — SounderPy-style full sounding pipeline

Testing

cargo test --workspace          # 1,186 Rust tests
python -m pytest tests/ -q      # 20 Python tests (including MetPy drop-in regression)

Documentation

Full docs at fahrenheitresearch.github.io/metrust-py, including:

  • API reference for all 186 functions
  • Beginner tutorials (Weather 101, soundings, grids, recipes)
  • Migration guide from MetPy
  • Performance benchmarks

License

MIT

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

metrust-0.3.7.tar.gz (718.7 kB view details)

Uploaded Source

Built Distributions

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

metrust-0.3.7-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

metrust-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

metrust-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

metrust-0.3.7-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

metrust-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

metrust-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

metrust-0.3.7-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

metrust-0.3.7-cp312-cp312-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

metrust-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

metrust-0.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

metrust-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

metrust-0.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file metrust-0.3.7.tar.gz.

File metadata

  • Download URL: metrust-0.3.7.tar.gz
  • Upload date:
  • Size: 718.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for metrust-0.3.7.tar.gz
Algorithm Hash digest
SHA256 68e86500c2e7085b6d95fe6a0eab2aa02c78342e44d897480fb3796960de4db1
MD5 706e4de58f8fa09333b6da55b81b2c9f
BLAKE2b-256 fd0675003fc62f912bff23543311e3fcfcffd66cd37dd7ec64c98ea5081c4a0c

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: metrust-0.3.7-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for metrust-0.3.7-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 62e4174e27562616ebdd6cf3530ba8367a33edc894a1c651467b7c9c5fb70c97
MD5 836d06ed4a2830a3062cc9551930627f
BLAKE2b-256 3a7f1cd979de9b674372370d8c1f38e5785417c57e4484ffa0b1d2e3bc162583

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a78cc5d706ddcd68278084f4d4139a8f61e3a057c3153880380cb7086fadb673
MD5 22e825fd878bea23d5ccd10768ed6703
BLAKE2b-256 3d531739a846d67e9145a2aebe1e05c720f0419434356a582b35d5a492e5018c

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 da1d94fd72b40ad9fc1fa59e0617e425f0bee474863927af516dfa69080cbb0f
MD5 f85367e4a24a0fc85a011a749c9ed6bb
BLAKE2b-256 478f2b9be83283f130679ff6c87a4c83a6fd86d0daa826070260eb99e8808d09

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: metrust-0.3.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for metrust-0.3.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 bc6ca336684655deccf2927fe672b1dad6677a0bf22535d5f213c7e7606e007b
MD5 1479410b41e4ccbd1e56082073a3577b
BLAKE2b-256 f4da08b51a11b3888c1d19e1ee752337e086b0e03ee2ffca636054c7c6b0400c

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 65175fe93736af9660bc95835e212e180d1eca6b2111c06e75c6dcc2430cd7ec
MD5 1521636105ac1a0a0a1f4ebf6cbabca5
BLAKE2b-256 8a75b60d140774b07d05789c021d5b202f8284414b60cd652f9149659e943845

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f186b61773fdd44285c5ddab3e2b4f4df376c113bd0e22af5035153924ef4df4
MD5 999166028e8d8078840ced0b61d6331d
BLAKE2b-256 df147b3601eb1eb84a2fc33180af7a89ec69f39bdc83b73558d6af41bd84aff2

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 482dda1cd5348dbfd2994be22ddb3d2817a3b20e0330ee3df029c24a446cbacf
MD5 4b06e5220caab8e4cb7f7154821c88d7
BLAKE2b-256 f0212ce18c67655a8ddbc5030ec1bd87bf46250ba885bd3cd260cd9338262554

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8c1ba6ec5f8dd1e156ebaee50cce8150872838fe1ba9b04067f2e500baf47448
MD5 f9a0768cdf5a44d6492cbb60690d624c
BLAKE2b-256 bcb5799467a59c9a817a5e76e2af0bb68ec0f872bdd79dea1912fc9c327d5936

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 424f8355d9087d3f9737a4c820cab53aca99225b5e6fe2861327dc8cf227da88
MD5 cc4cd01546729fb4bd57b76cb6a58d7f
BLAKE2b-256 57f59f48e2d90477f88b77e8abc617440a2dcc48a4351b5a2a5d940b42379723

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6c1723fb41040ca4452bf98e9624f73a67d3fbbf8eeaf2d200007e94a9cfa48b
MD5 59cafe144f56e5b96d24fa5499f3fb77
BLAKE2b-256 f516968fb87525cc8f0769b24ea5d6e2013f5dcacfc6a6c5081a0ca108e2a972

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c538669f2bb85e06fc3d3555d2c1d518ef38dc985dbc792c1b0e85fd1ef8b61b
MD5 b1deea3bd853471f99642159384b5213
BLAKE2b-256 64ece505e12d8f405df30d52e5af086f1ffec5b937958c6ff2437b936d7b9edf

See more details on using hashes here.

File details

Details for the file metrust-0.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for metrust-0.3.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2cca76d1e2be632103065988cd8d10bd569f859afa333e5c27cb455da2138adf
MD5 0c57fb3b379de40a4c5aa03cd60da0e7
BLAKE2b-256 3a4da7e5f268f3209687f0689e04718ca640be21035d4d93fac5de3c0c37b6bc

See more details on using hashes here.

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