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.
- 2683835 Remove deprecated stuff @aaron-skydio
- b660c97 opt output-args by reference, not ptr @bradley-solliday-skydio
- c3d2f3c Expose optimization status @aaron-skydio
🧠 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
.
- 1c6ad68 Add basic test of Dense optimizer @bradley-solliday-skydio
- d30d1b2 CheckDerivatives gets any linearizer @bradley-solliday-skydio
- bdc665b Be Sparse/Dense Linearizer agnostic @bradley-solliday-skydio
- 9d0e3e1 Allow dense linearization in optimizer @bradley-solliday-skydio
- fd74776 OptimizationStats Linearizat'n agnostic @bradley-solliday-skydio
- 6501a45 Add DenseCholeskySolver @bradley-solliday-skydio
- c3d2f3c Expose optimization status @aaron-skydio
- ff17a89 Overload ComputeCovariance for MatrixX @bradley-solliday-skydio
- d792e99 Add dense linearizer @bradley-solliday-skydio
- 47b4ccc Factor out core of ComputeFactorHelper @bradley-solliday-skydio
- f5356d8 Rename opt/cholesky opt/sparse_cholesky @bradley-solliday-skydio
- caea9da add in compute_all_covariances to the py optimizer @harrison-skydio
- f37a783 Make LevenbergMarquardt Sparse agnostic @bradley-solliday-skydio
- f8cad34 Add helpful err msg if unopt'zed factor @bradley-solliday-skydio
- 6c3902d Template Linearization on sparsity @bradley-solliday-skydio
- 7a34ec0 Rename linearization_sparse_key_helper @bradley-solliday-skydio
- 0abeb62 Reduce # of public Linearizer methods @bradley-solliday-skydio
- 978ea34 Make optimization stats sparse agnostic @bradley-solliday-skydio
- 4f70119 Move ComputeKeysToOptimize to factor.h @bradley-solliday-skydio
- f03e353 Correct init residual order @bradley-solliday-skydio
- 8fd8c1c Update doc-string to reflect signature @bradley-solliday-skydio
- 59a0309 output_arg& UpdateXXXFactorIntoTriplets @bradley-solliday-skydio
- 7eda493 Add PreallocatedLinearizedDenseFactors @bradley-solliday-skydio
- a066808 Reduce # of index lookups in linearizer @bradley-solliday-skydio
- bdb848b Avoid second unordered_map lookup @bradley-solliday-skydio
- f8743e7 rm index from LinearizedFactor types @bradley-solliday-skydio
- d1b538c Add shape to sparsity pattern in stats @aaron-skydio
- b660c97 opt output-args by reference, not ptr @bradley-solliday-skydio
- 9266eb5 Add full stats to Python result object @aaron-skydio
- 596e3bc Explicit instantiations for opt @bradley-solliday-skydio
- e37758d Add missing pragma once @bradley-solliday-skydio
- 52fc289 Declare explicit instantiation @bradley-solliday-skydio
📚 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!
- 3aef619 Add note about numerical epsilon @aaron-skydio
- c1d1ecb More docs @aaron-skydio
- ee77f27 Fix returns in docstrings @aaron-skydio
- 2dc5dda Clean up python sym docs @aaron-skydio
- 43cdfff Switch docs theme to Furo @aaron-skydio
- 12529d3 Clean up
opt
docs @aaron-skydio - 0e0fafc Partially clean up sym opt C++ docs @aaron-skydio
- cce64be Fix links from generated to symbolic classes @aaron-skydio
- caf55f4 Docs cleanup, take 2 @aaron-skydio
- e75ffb0 Docs cleanup, take 1 @aaron-skydio
- e833903 Update cameras tutorial @xipengwang
- 8ad6bab Added example code for initialization of sf.Rot3 using a quaternion @VineetTambe
- fb0e6cb Fix docs for
Pose*.(retract|local_coordinates)
@aaron-skydio - dfa4d18 Add comment on sf.atan2 @aaron-skydio
- 7269521 Reorder optimizer.py docstring @aaron-skydio
- 40f129c Clean up tangent_D_storage @aaron-skydio
🖊️ 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())
- 1387297 Broadcast tensors before stacking in pytorch backend @zachary-teed-skydio
- 5c0d48d TemplateList.render supports specifying external search paths @gareth-cross
- b7bc699 Add update_template_data to CodegenConfig @gareth-cross
- 03fc8be Add lambdify, numbify @aaron-skydio
- 5a36e4c Use Codegen.name as python function name @bradley-solliday-skydio
- d805697 NumericFactor sets return_2d_vectors @aaron-skydio
- 6adfbee Add
evict
option forload_generated_function
@aaron-skydio - 68f3924 Generate Rot3.(from_angle_axis, from_two_unit_vectors) @aaron-skydio
🔣 Symbolic API Improvements
- 5bb0bdd Consolidate lists of types @aaron-skydio
- c1b37fd no more logmap_acos_clamp_max @aaron-skydio
- c1fdca1 Check types of geo constructor arguments @aaron-skydio
- d337809 Add
Matrix.det()
@aaron-skydio
⚙️ Buildsystem / Infra Changes
- df4f86c Print out fmt and spdlog version when finding packages @chao-qu-skydio
- e64a1d8 Small fix to tl-optional handling in cmakelists @chao-qu-skydio
- fe2a559 Fix symengine_wrapper search @aaron-skydio
- ae2173a Clarify error on failed symengine import @aaron-skydio
- f9c21ad Specify fmt version in find_package @chao-qu-skydio
- d7a40fa Bump cmake_minimum_required version to 3.19 @chao-qu-skydio
- 5bce25c Upgrade requirements @aaron-skydio
- c2283db Fix test include paths @aaron-skydio
- 33f46d8 Packaging cleanup @aaron-skydio
- 6c54bf5 Force pybind11 version @asaba96
- c91bd03 Add max cmake policy version @aaron-skydio
- db687f0 Remove unnecessary tl::optional alias @aaron-skydio
- d56c10c Install symforce slam @johhat
- 951884c Use URL for FetchContent @aaron-skydio
- c7de467 Fix symforce dependency of TartanLlama/optional @arturo-skydio
- 8545df6 Upgrade dependencies @aaron-skydio
- 30bd18e Drop bionic from CI @aaron-skydio
- ee6ac28 build_wheels works on forks @aaron-skydio
- 29b1ad1 Upgrade pylint @aaron-skydio
👮 SkyMarshal
- 7714ea7 [SkyMarshal] Print eigen_lcm types @aaron-skydio
- fd6543b [SkyMarshal] Enums have getTypeNameArrayPtr @aaron-skydio
- 61d70f0 skymarshal: only parse argfiles for the first argument @william-smith-skydio
- ccb5620 [SkyMarshal] Make enums mypy-checkable @aaron-skydio
- 5815fbd Add/fix some type annotations in skymarshal @aaron-skydio
✨ Misc
- 0940fa5 Fix new_symbol on py3.10+ @aaron-skydio
- 2afcce3 Objects returned from generated functions are const @aaron-skydio
- ace29ab More stuff includes-what-it-uses @aaron-skydio
- 024818f SYM_ASSERT takes messages @aaron-skydio
- df0a8d2 Remove redundant virtual in GncOptimizer @chao-qu-skydio
- b8821c9 A couple of random typos @chao-qu-skydio
- 3cc6061 Replace empty ctor with =default in factor and values @chao-qu-skydio
- 82d3a1a Use range-based for instead of index-based @chao-qu-skydio
- 07a53fd Finish removing os.path @aaron-skydio
- 5be27bd Fix a shadowing declaration in PopulateIterationStats @chao-qu-skydio
- 4539394 Add a SetNew method that throws if key already exists @chao-qu-skydio
- 72c45e4 Use the _t variant instead of ::type @chao-qu-skydio
- cfa72f1 Replace a couple of typedefs with using @chao-qu-skydio
- 0f0c802 Remove redundant static in an unnamed namespace @chao-qu-skydio
- 7b22108 Add Unit3 to cc_sym @aaron-skydio
- 35fd2d9 return size_t instead of int32_t from values::NumEntries() @chao-qu-skydio