Skip to content

v0.4.0

Compare
Choose a tag to compare
@aaron-skydio aaron-skydio released this 24 May 13:14
· 496 commits to main since this release

v0.4.0 is the first public release of SymForce outside the early-access program, and the first release after the paper was accepted to RSS 2022. SymForce can now be pip installed on Linux and Mac with pre-built wheels.

History: v0.3.0...v0.4.0

✨ Support for sparse matrices and factors in Python

Previously, SymForce could generate C++ functions of sparse matrices (in Eigen) and use them in the C++ optimizer, but it could not generate Python functions of sparse matrices or use Python optimizer. This release adds support for generating Python functions that use SciPy's sparse matrix format, and also the ability to convert them to Eigen in the pybind wrapper, so they can be used with the optimizer from Python.

  • 77b8678 Add sym::Factor::SparseJacobianFunc
  • 3ec069c Calculate hessian & rhs in one place
  • eef1c9c Add sparse outputs to generate py code
  • 3d8cd89 Expose symbolic jacobians computed by factor
  • a43a296 Factor out py residual wrapper - cc_sym
  • 2f91fb2 Make sparse_matrix_init more readable
  • 357507e Replace Matrix arg with CSCFormat arg
  • d2b1042 Remove None check in C++ sparse mat gen
  • 4e2e586 More arguments passed through OptimizationProblem and Factor
  • ff6cd01 get_sparse_mat_data to CSCFormat method
  • 1fab87c Consistent Matrix storage order
  • e2fbce0 CSCFormat type instead of dict

🧊 Data Buffers

Added initial support for data buffers, which are external arrays of data passed in to symbolic expressions, for example lookup tables, images, or volumetric maps. Code generation is currently supported, but not optimization.

  • 2cd9dfe Initial work for values to support DataBuffer entries
  • 236e27f don't allow DataBuffer to be iterable
  • e0db744 Allow symengine to simplify DatabufferElement index expressions
  • a550ed0 fix bug w/ databuffer storage ops
  • 9f1345b databuffer tests
  • 981d48a implement databuffer

⏱️ Code Generation

Many improvements to code generation quality and speed for large problems.

  • 0c67bb8 Allow specific explicit template instantiations
  • 0f03029 Give generate_function return type
  • e7c1388 Convert matrix elements to float in to_numerical()
  • 9a1069e Fix return type: str -> sm.Symbol
  • ca55474 fix bug w/ symbol formatting in codegen_util
  • 33184aa Remove unused codegen_util code
  • aea7eb0 Rename output_terms to dense_terms
  • 2862b26 Remove dead jinja code
  • 7414072 Fixed codegen bug with dataclasses
  • a626932 Allow explicit template instantiation for C++ codegen
  • d094cda add an option to symengine wrapper to skip eval on sympy
  • 04c6274 Changed codegen folder names from python2.7 to python
  • 6aa7e0d add dont_flatten_args to _get_subs_dict
  • c1d482d Disable code format when generating temp factors
  • e654de2 move lazy imports outside for loop
  • e76c6d6 Fix SymforceCodegenTest doc-string
  • 015e968 Allow symforce to generate code from functions w/ dataclasses as args

👁️ Bundle Adjustment in the Large

Added an example that optimizes the datasets from Bundle Adjustment in the Large to parallel the GTSAM and Ceres examples. This is not yet a benchmark optimized for performance.

  • bad1035 Bundle-Adjustment-in-the-Large Example

🥇 Optimization

Improve the optimization library based on testing larger multi-objective problems.

  • 4540121 Fixed typo in optimizer
  • 304654e Explicit template intantiate Optimizer
  • af280a3 Added a type check on optimized values
  • 34e6c17 fix bug w/ custom jacobians
  • 46e8a0c Added some useful timestep objectives
  • 2c926e8 Added support for loading factors from files

🛠️ Build System

Support pip install symforce with pre-built wheels, and upgrade dependencies.

  • af687c1 Pin pip requirements
  • 92c30f7 Support pip install [-e] .
  • a3b2dc0 Bump skymarshal required cmake version to 3.19
  • 24e9601 Split CMakeLists
  • 3769c2d Upgrade sympy to version 1.10.1

✍🏼 Documentation

Improved the README, tutorials, and examples across the board to prepare for public release.

🎁 Miscellaneous

  • 78d7844 [Skymarshal] lextab updates
  • fb1bd27 Delete cholesky/assert
  • f127562 Autoformat with clang-format 14
  • 8591d8f Include cassert where we use it
  • 185be31 Simplify ArrayStorageOps
  • d32d14b Have ndarray ops use AbstractVectorOps
  • 359bf11 [Skymarshal] Optional printing
  • 5d52d76 Allow geo.M.setitem with np.float64
  • 97a47dc Assert geo.Matrix shape == arg shape
  • 69ea6d6 Diffs in test failures
  • cfc0b87 Remove #hashable from sym.key_t.