Skip to content

v0.9.0

Latest
Compare
Choose a tag to compare
@aaron-skydio aaron-skydio released this 08 Jun 14:37
· 142 commits to main since this release

Full Changelog: v0.8.0...v0.9.0

New in this release, we’ve added an experimental dense optimizer, greatly improved the docs, and made some additions to the core symbolic API and codegen API. We also have lots of under-the-hood changes, to the optimizer and the build in particular. Keep reading for more details, and thanks to everyone who contributed!

🚨 Breaking Changes

We're removing a few things that have been marked as deprecated for several releases now. We're also switching our C++ API to use references for mandatory input-output arguments, and deprecating the versions that used pointers, for consistency with our styleguide and modern best practices. And finally, we've removed the early_exited field from the OptimizationStats in favor of a more comprehensive description of exit status.

🧠 Optimizer Changes

SymForce now has a dense optimizer! This is designed for problems where the problem linearization is dense enough that it's better to perform a dense Cholesky decomposition rather than a sparse one. It's currently in an experimental state, you can find example usage here.

As part of this, we've also made several changes to make it easier to swap out different parts of the optimizer like this.

Plus, we now expose more information about the result of an optimization beyond whether it just exited early - you can find that in status and failure_reason in the OptimizationStats.

📚 Documentation Improvements

We've made multiple improvements to our docs for this release, both in readability and content. We have a new theme (with dark mode 😎 ), and the API docs now have things formatted and cross-linked correctly. Check them out at https://symforce.org!

🖊️ Codegen Improvements

We've made improvements and additions to codegen usage, and to the Python and PyTorch backends. In particular, we've added lambdify and numbify functions, to easily convert symbolic functions to numerical ones for fast evaluation in Python. For example,

def foo(x: sf.Scalar, R: sf.Rot3) -> sf.Scalar:
    return (R * sf.V3(x, 0, 0)).x

foo_numeric = symforce.util.lambdify(foo)

foo_numeric(5.0, sym.Rot3())

🔣 Symbolic API Improvements

⚙️ Buildsystem / Infra Changes

👮 SkyMarshal

✨ Misc