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.8.tar.gz (1.1 MB 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.8-cp313-cp313-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.13Windows x86-64

metrust-0.3.8-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.8-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.8-cp312-cp312-win_amd64.whl (1.3 MB view details)

Uploaded CPython 3.12Windows x86-64

metrust-0.3.8-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.8-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.8-cp312-cp312-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

metrust-0.3.8-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.8-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.8-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.8-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.8.tar.gz.

File metadata

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

File hashes

Hashes for metrust-0.3.8.tar.gz
Algorithm Hash digest
SHA256 0e89c9558e73127e491896de901e9625c1f090e02f6ded642f9c27b1ca1cba8f
MD5 18ac4ef447fcc563ea1b5542484b6b85
BLAKE2b-256 bfe5007c4703d8eb84c7cbdf797f1b44a5f83a781c0cee44933a8175411ec07e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: metrust-0.3.8-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.8-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 f13c7af17e1a28dd1b79a7ff8b34bceb96b0ea959d83b9fd0bed0b2934dc6eee
MD5 47873227021ed86f973000a9cfc7fe8a
BLAKE2b-256 70aae468d6c571b94442bf3a1e4a0cd547e52547cf60cbc1c56fed81015716fb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3490a69bf0c10af76eef3bb3eb26d6d3320dbe1bd97470a5e2c72790347b3658
MD5 d0005153a910d7e96a134b519e6b53a3
BLAKE2b-256 67c26e3ee1c1f66110b4a082ab1905c197276978644411e9a58a06d1f0007ca8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e640db63d7faaf21f60bcadfc8da7b3869f47f7a77c1550b7005ca30cf022540
MD5 6056e953c15c6a51abf6cb09b22b2c09
BLAKE2b-256 c1402f7352c32d8e8c25d3bd4cfe0e858c7b85c8245ca12eaa761786d934a48a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: metrust-0.3.8-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.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 35d4a359b48cc4ab2651201076e4e4226a07b0ba220e4175053d91c3cc89a5d6
MD5 abfd11a8ab76cd7ebbc1f5879ad7df89
BLAKE2b-256 10a519ffed568aa236242e031c9b6d1b613b0bd36a7be42ec8bc0ec198fe2b4c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 382072d9dc230de29ad8fb03c750264a02f01f344573c3b5c4aee8964e0df067
MD5 db6c203293b073d45d72a4f93bdbfb8f
BLAKE2b-256 305ed4f2498b9e3dc6362d63dfe0b4c499da1a22865914c6e3f3b58af632b187

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 59c1b370f9e0ce4e817948d79c4825a6a62e5d55ec96940aad0166107edf216b
MD5 9583f26b22ccfea4df76f9d27e73e532
BLAKE2b-256 0bf7aa2c7631417796fdc6c0f4328d1f2ecf17c2879985dba3ed6023ce11cae3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e95d9702178192fc70f3c41ca717aff07419b5f0af1cac47730700eaa3d13b91
MD5 c23477e7b9f4218723a4e862c0b1a371
BLAKE2b-256 edceeb2f4ff61ed0e8b2a2ad41f2076bec7a0bee4771c67b95356740916a2d3b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 51f539e2d2ac5230882d1cb285f93c2b2dc46a7fbb9671f02cdaa2fb17078047
MD5 bf5290b3597f629cef0fa8cc7025112b
BLAKE2b-256 bbd18203b5a0f5fca268010c4aa44c3fdad7d36a901133e650715a5272484209

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a155b78d3929ebddb41f5b33207bb26f79b04bcb579830db910b8498ed0464d
MD5 0ae6d8bc87afc1e0b38801fce9e9433a
BLAKE2b-256 29a0fd13cd5d3eae922b034ab338048ef4dd866a906e4e117555692f21dd6ceb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dd6b0ac7bc30a106f6cc0b1647d6371a0fb1bb0b7f8b40bf4a8a66124924b689
MD5 e058df1bee5a3af83976c1d3f763c980
BLAKE2b-256 bc483889ed05018d97953c82ff61609c2b1adf291fca1b831eef2bee5c191ed1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 37c66932f0400e98d4f5fb24168a970958650a4fd7b4dbd9e7871a25ed60eeee
MD5 f4cffb4afd9411dd6b5a8143d497ca5b
BLAKE2b-256 19775ad491d798a69533f3c52f5f1e98e2ed6d928ff97244f2c694170f45d0ab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for metrust-0.3.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1689b6b60fb5e220a6c82bf01d793ffa82dad533e5fcbf29278103c60d25a8e8
MD5 0838c6577392b92943215b280de24999
BLAKE2b-256 f9cd2a1be1e8b4bcbbe8879534904cac9e72299788e41e875cd28865b1c67a5d

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