itu-rs
itu-rs is a Rust implementation of selected ITU-R P-series atmospheric
propagation routines, ported from python-itu-r for fast Earth-space slant-path
attenuation calculations.
This first crate is intentionally scoped: it supports the propagation features
needed by the current Rust port, not the full python-itu-r API surface.
Data Files
The working repository checkout includes the required ITU-R grids under
itu-rs/data, so local development is self-contained.
The crates.io package excludes those grids because the compressed data package is
larger than the crates.io .crate upload limit. For published-package use, set
ITU_RS_DATA_DIR to a directory containing the same itur/data layout copied
from python-itu-r:
$env:ITU_RS_DATA_DIR = "C:\path\to\ITU-Rpy\itur\data"
Example
Compute the full atmospheric attenuation contribution set for one Earth-space slant path:
use ;
Sweep multiple elevation angles for one fixed site and link configuration:
use ;
Use exact gaseous attenuation or disable individual components through
SlantPathOptions:
use ;
Supported Coverage
| python-itu-r function or feature | Rust support | Status |
|---|---|---|
itur.atmospheric_attenuation_slant_path |
Yes | Public API |
| Batched slant-path attenuation over elevation angles | Yes | Public API |
| Gas-only default slant-path attenuation helper | Yes | Public API |
| P.676 gaseous attenuation, exact and approximate paths | Yes | Internal/public through slant path |
| P.618 rain attenuation contribution | Yes | Internal/public through contributions |
| P.618 scintillation attenuation contribution | Yes | Internal/public through contributions |
| P.840 cloud attenuation contribution | Yes | Internal/public through contributions |
| P.1511 topographic altitude lookup | Yes | Internal data support |
| P.1510 surface mean temperature lookup | Yes | Internal data support |
| P.836 water vapour density and total content lookup | Yes | Internal data support |
| P.837 rainfall rate lookup | Yes | Internal data support |
| P.839 rain height lookup | Yes | Internal data support |
| P.453 wet-term radio refractivity lookup | Yes | Internal data support |
Full python-itu-r package API |
No | Out of scope for this crate |
Benchmarks
The current comparison benchmark was run from the source workspace on
May 8, 2026 using the existing Python parity harness against python-itu-r and
the Rust port. Results are means over repeated runs.
| Scenario | Python mean | Rust mean | Speedup | Max absolute error |
|---|---|---|---|---|
| Batched default slant path, 4 locations x 169 elevations | 0.195419 s |
0.005600 s |
34.89x |
7.105e-15 dB |
| Exact scalar slant path with explicit overrides | 0.140981 s |
0.002637 s |
53.46x |
0.000e+00 dB |
Run the Rust-only Criterion benchmarks with:
cargo bench
API
The primary public calls are:
| Function | Purpose |
|---|---|
atmospheric_attenuation_slant_path |
Compute gas, cloud, rain, scintillation, and total attenuation for one elevation angle. |
atmospheric_attenuation_slant_path_many |
Compute the same contribution set for many elevation angles. |
gas_attenuation_default |
Compute gas-only default attenuation for one elevation angle. |
gas_attenuation_default_many |
Compute gas-only default attenuation for many elevation angles. |
gas_attenuation_default_many_checked |
Compatibility alias for strict gas-only batch validation. |
SlantPathOptions::default() matches the default slant-path configuration used
by the port. Set exact = true to use exact gaseous attenuation.
Validation
Current local checks:
cargo check
cargo test
cargo test --doc
Before publishing, also run:
cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo package --allow-dirty
The local source checkout packages to a small crates.io-compatible .crate by
excluding data/**. Keep the data directory in the repository for development
and parity testing, but do not include it in the crates.io upload unless the
registry size limit is handled another way.
Attribution
This crate contains a Rust port of selected functionality from
python-itu-r, which is MIT
licensed. See NOTICE.md.