vibeProj

vibeProj

GPU-accelerated coordinate projection. 20 projections, each with a fused NVRTC kernel that runs the full transform pipeline in a single launch.

Fused Kernels

One kernel launch per transform. Axis swap, deg/rad, projection math, scale/offset — all fused into a single NVRTC kernel. No intermediate buffers.

20 Projections

Transverse Mercator, Lambert, Albers, Stereographic, and 16 more. Forward and inverse. Each projection has a handwritten CUDA kernel.

Zero-Copy Integration

Reads CuPy device buffers, writes to pre-allocated output. No host↔device round-trips. Designed for vibeSpatial's buffer protocol.

CRS Resolution

Pass an EPSG code, get a transformer. Uses pyproj under the hood to extract parameters, then dispatches to the right fused kernel.

Precision Control

fp64 by default. Experimental double-single (ds) mode pairs two fp32 values for fp64-equivalent accuracy at fp32 throughput on consumer GPUs.

CPU Fallback

NumPy-backed element-wise path for every projection. Same API, same results. Tests validate GPU output against the CPU reference.

Quick Example

from vibeproj import Transformer

t = Transformer.from_crs("EPSG:4326", "EPSG:32631")
x, y = t.transform(49.0, 2.0)           # scalar
x, y = t.transform(lat_array, lon_array) # NumPy or CuPy arrays