vibeProj¶
vibeProj
GPU-accelerated coordinate projection. 24 projections, each with a fused NVRTC kernel that runs its mathematical stage in one launch.
Fused Kernels
One fused launch per mathematical stage. Projection-only transforms need no intermediate buffers; Helmert/SVD pipelines reuse bounded device scratch between their stage launches.
24 Projections
Transverse Mercator, Lambert, Albers, Stereographic, and 20 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 arithmetic and I/O by default, with guarded device-specific transcendental strategies. Experimental double-single (ds) mode remains available for TM research.
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(2.0, 49.0) # scalar
x, y = t.transform(lon_array, lat_array) # NumPy or CuPy arrays