Skip to main content

Rust port of beamcon from RACS-tools: smooth FITS images and cubes to a common beam via UV-plane (FFT) convolution

Project description

convolve-rs

Docs docs.rs PyPI crates.io

Documentation: Python API, CLI, and algorithm background at convolve-rs.readthedocs.io; Rust API at docs.rs/convolve-rs.

A Rust port of beamcon from RACS-tools. Smooths FITS images and spectral cubes to a common beam using UV-plane (FFT) convolution to avoid numerical issues with undersampled kernels.

Note: This is an experiment in LLM-assisted coding with Claude. Do not trust this software as far as you can throw it.

Installation

Python library

pip install convolve-rs

CLI binary

Requires Rust 1.85+.

cargo install convolve-rs

Python usage

from astropy.io import fits
import numpy as np
from convolve_rs import Beam, common_beam, smooth

hdu = fits.open("image.fits")
data = hdu[0].data.squeeze().astype(np.float32)
dx_deg = hdu[0].header["CDELT1"]   # may be negative
dy_deg = hdu[0].header["CDELT2"]

current = Beam.from_fits_header(hdu[0].header)
target = Beam(0.002, 0.002, 0.0)   # or common_beam([...]) across channels

# `bunit` selects the flux scaling: Jy/beam images are rescaled to stay in
# Jy/beam; Kelvin (brightness temperature) images are left unscaled. An
# unrecognised unit emits a UserWarning and is treated as Jy/beam.
smoothed = smooth(data, current, target, dx_deg, dy_deg, bunit=hdu[0].header.get("BUNIT"))

hdu[0].data[0, 0] = smoothed
fits.writeto("smoothed.fits", hdu[0].data, hdu[0].header, overwrite=True)

CLI usage

convolvers --help
convolvers 2d --help
convolvers 3d --help

Development

Install in editable mode:

uv pip install -e .

After changing the Python-facing Rust API in src/python.rs, rebuild with the stubgen feature (the default build omits _generate_stubs) and regenerate the type stubs:

uv run maturin develop --features stubgen
uv run --no-sync python -c "from convolve_rs._convolve_rs import _generate_stubs; _generate_stubs()"

This overwrites convolve_rs/_convolve_rs.pyi from the Rust annotations and docstrings. Commit the result alongside any API changes.

Running tests

Python tests need the compiled extension and the test extra (pytest, radio-beam, astropy). uv sync builds the maturin extension into .venv, so a plain uvx pytest won't work — it runs in an isolated env with neither the module nor the deps:

uv sync --extra test       # builds the extension + installs test deps
uv run --no-sync pytest

Rust tests run with cargo test. One integration test compares output against MIRIAD; point MIRIAD_BIN at a MIRIAD bin directory to enable it (it is skipped when unset):

cargo test
MIRIAD_BIN=/path/to/miriad/bin cargo test   # include the MIRIAD comparison

Pre-commit hooks

Formatters and linters run via prek, a fast drop-in pre-commit reimplementation. The hooks (.pre-commit-config.yaml) are the same checks CI enforces: ruff lint + format, ty type checking, cargo fmt, and cargo clippy.

uv sync --extra dev   # installs prek + ty into the venv
uvx prek install      # install the git hook (runs on every commit)
uvx prek run --all-files   # run all hooks manually

License

convolve-rs is released under the BSD 3-Clause License.

It builds on prior work in the radio-astronomy community: the UV-plane convolution and cube handling are ported from RACS-tools, and the common-beam computation follows radio_beam (both BSD). The Gaussian beam algebra implements the standard formulae of Wild (1970), and MIRIAD (GPL) serves as a validation reference in the test suite. See NOTICE.md for full attributions.

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

convolve_rs-1.1.3.tar.gz (510.6 kB view details)

Uploaded Source

Built Distributions

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

convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (694.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (588.5 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

convolve_rs-1.1.3-cp310-abi3-macosx_11_0_arm64.whl (533.5 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file convolve_rs-1.1.3.tar.gz.

File metadata

  • Download URL: convolve_rs-1.1.3.tar.gz
  • Upload date:
  • Size: 510.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for convolve_rs-1.1.3.tar.gz
Algorithm Hash digest
SHA256 37e3a130536d992ec616c746719d0a845dba55a923cb879836df47af45f5a938
MD5 0be43dd3d68d1f0c4b218780bd020b6d
BLAKE2b-256 dfeef5d807fcb67b9602d7892e71adc4dedc45d7edfbeca5344f117f948815cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.1.3.tar.gz:

Publisher: cd.yml on AlecThomson/convolve-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4f3c026289af01a53f0c0b77285410598013d02fb04da5d95c8b2a6410fbe11d
MD5 2f183ed3142cd7c8dc611d2dc70b3653
BLAKE2b-256 b2187062d5d87761e921413fcbfc09db248da98adaddb439c8903441889b501f

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: cd.yml on AlecThomson/convolve-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fe17a448f6d2bf241c02d28ecb8334d44f7c247676ed8436a62222371b32d252
MD5 40cfcbc0617ecbabc87ac2d83e317aa7
BLAKE2b-256 3ca058135dc45a68081d55b71ed91f68c80aea029b4fcb0d3b8508d519b4ed11

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.1.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: cd.yml on AlecThomson/convolve-rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file convolve_rs-1.1.3-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.1.3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7cc7e20b2e7d034975a8e96bbaf9ae27f1741eb53849e36397481ecb7a6ff4fb
MD5 b4cb2f91a1e1e5dad6a42c514054bb65
BLAKE2b-256 ad477e07ef970c1e4f37177fe5a099cd7b8f90f133d85a4c7991004b0e5c4d5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.1.3-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: cd.yml on AlecThomson/convolve-rs

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