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

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.

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 draws on prior work in the radio-astronomy community: the UV-plane convolution and cube handling are ported from RACS-tools (BSD), and the common-beam computation follows radio_beam (BSD). The Gaussian beam algebra is an independent implementation of standard formulae (Wild 1970) — MIRIAD is used only 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.0.1.tar.gz (461.1 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.0.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (692.8 kB view details)

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

convolve_rs-1.0.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (585.4 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

convolve_rs-1.0.1-cp310-abi3-macosx_11_0_arm64.whl (530.5 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: convolve_rs-1.0.1.tar.gz
  • Upload date:
  • Size: 461.1 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.0.1.tar.gz
Algorithm Hash digest
SHA256 a64ec5953ff3b59b1c07605136056fc488ccbe0f876c257ec89def50e9cbfe85
MD5 1bfb77ca2c5d5912266d909bcc2e05f5
BLAKE2b-256 1021136106eead5a55df441f24c110f365b511982bcc91439928607d9faa3a6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.0.1.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.0.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.0.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 01e56c04d1e6f43505e75468bc7682c5cd7849cb14c9c14fd9ad5cef39979ca3
MD5 b771fadc1011173651af1c5a11e3a82e
BLAKE2b-256 7a90a35cd1ab379a7b056efde9f9f064ffa95f41c5df7e55a09d82bc76fb60ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.0.1-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.0.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.0.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a106326b3cd1f70d9af57672baa9f59972c98a7cbd24688bfcfd4077ca76b4fc
MD5 94c149f7d3ac163ce7fdceace729244c
BLAKE2b-256 b59c0df20834d65e4b2a5ff410ffdc773255179709b35ad0e340ad736210e7ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.0.1-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.0.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for convolve_rs-1.0.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d0a4ad2b566c36408b4774a79853b264829c0399a271e81baac95f4de64967af
MD5 7df4ebe19f984e1c9fbfbbcdd98c7c8e
BLAKE2b-256 54b30f6b15536648019d769f9457304af38bae0c7633c5ad81fa109ed4ad41dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for convolve_rs-1.0.1-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