Skip to content

v0.11.0

Latest

Choose a tag to compare

@aaron-skydio aaron-skydio released this 01 Jun 09:16

⚡ Caspar

Caspar is a library for GPU-accelerated nonlinear optimization, powered by SymForce. It's designed for Bundle Adjustment (BA) and Structure from Motion (SfM), but transfers well to other problems also. Caspar supports SymForce expressions and types, and achieves state-of-the-art performance (5x to 20x improved runtime, and similar or lower GPU memory) through expression manipulation and code generation optimized for the GPU, as well as careful kernel fusion. Check out the paper on arXiv (and at ICRA 2026), and check out the code in SymForce here. It's also available in COLMAP as one of the optimizers there.

🚨 Breaking Changes

Dropped support for Python 3.8 and C++14, requirements are now Python 3.9 or newer and C++17 or newer

We also now support SymPy 1.13 and 1.14.

We no longer build wheels for Intel Macs in CI or publish them to PyPI

Changed the argument order for Values::LocalCoordinates

to be consistent with other LocalCoordinates functions

Removed some deprecated function signatures

Mostly for the Optimizer. These have been deprecated for a while, and have newer equivalents described in the commit:

CUDA backend header extensions changed to .cuh

These are files containing __device__ functions that can only be compiled as CUDA C++, not as regular C++, so they're correctly marked as .cuh and not .h

🦾 New Features

📐 Marginalization

Marginalization now comes built into SymForce, at symforce/opt/marginalization.h

🌐 Unit3 Type

We've significantly improved the formulation of our Unit3 type (for 3D unit vectors, i.e. elements of S(2)), to be more stable and use a more minimal parameterization. See the commit message and new docstring for more details.

🧑‍💻 Experimental TypeScript backend

Currently supports codegen of functions, but doesn't have TypeScript Geo and Cam types, so generated functions must convert to vector/matrix/scalar inputs/outputs.

🔣 Improvements to lambdify

Lambdify is now imported to sf, so you can use it just as sf.lambdify. It also now supports both the original SymForce lambdify signature (which takes a symbolic function), and SymPy's lambdify signature, which takes a list of inputs and an expression.

Other Small Feature Improvements

🏃 Performance Improvements

Various improvements especially to the C++ Optimizer

🔏 SkyMarshal

🐞 Internal Maintenance and Bugfixes

Full Changelog: v0.10.0...v0.11.0