Skip to content

v0.6.0

Compare
Choose a tag to compare
@aaron-skydio aaron-skydio released this 30 Sep 02:25
· 389 commits to main since this release

History: v0.5.0...v0.6.0

🔣 Default Epsilon Configuration

Building on the tools from v0.5 for enabling configurable default epsilons for library functions, add checks to enable confidently generating code without worrying about forgetting to pass an epsilon somewhere, which would previously result in an unsafe generated function. Generating a function without calling symforce.set_epsilon_to_symbol() or symforce.set_epsilon_to_number() will produce a warning, since this allows unintentionally calling functions with singularities with an epsilon of 0. Similarly, setting epsilon to a symbol, but then attemptting to generate a function that doesn't take an argument for epsilon, will yield a descriptive error message. This behavior is also configurable through new additions to the CodegenConfig. The error messages are intended to have thorough explanations, so let us know if they don't make sense by creating an issue!

  • 559e521 Set the default epsilon to a symbol for codegen
  • f17d8b2 Run python tests with ctest
  • 713a00a Add sym.epsilon

➕ Call User-Defined Functions from Generated C++

The code generator supports replacing builtin functions with user-provided alternatives. For instance, a custom my_lib::fast_sin function can be replaced for std::sin. The CppConfig has a new argument override_methods which can be used to specify these functions.

Shoutout to Roy Vorster for contributing this!

  • 7f9cf25 Add function specific overwrites to sympy CPP printer

🏭 More methods on generated types

Add more methods to bring generated Python types up to parity with generated C++ types. In addition, automatically generate some previously handwritten methods.

  • 48f6968 Codegen PoseX.position and rotation
  • 90f14a0 Generate handwritten sym geo methods
  • 81fa502 Uniform position/rotation accessors
  • 1e95863 Generate to_homogenous_matrix for pose types
  • 8e2b19c Codegen ToYawPitchRoll for C++ Rot3

🐍 Generated Python functions are more rigorous about Matrix shapes

PythonConfig supports options for whether generated Python functions should expect all matrix inputs to be 2D arrays, or allow vectors to be 1D arrays. This fixes the previous unintuitive behavior of expecting storage arrays.

  • c163cb6 Reshape matrix inputs to be rank 2
  • 652eb97 Add matrix accessor format function to config and remove matrix_is_1d param

🔧 CI/CD

Add a continuous testing suite on main and on pull requests across compilers and Python versions. In addition, add automatic deployment of the symforce docs to https://symforce.org.

  • ff5a34b Rerun tests with output on failure
  • 716befd Add docs as an artifact of CI runs
  • 6dd9f9a Run CI on push to main and build badge
  • d9633f3 Preserve downloads symforce-org.github.io
  • de296a8 Auto-deploy docs on push to main
  • 20548c3 Add SymForce CI

🧹 Code Quality Improvements

Various internal improvements, fixing C++ build warnings, sorting imports, and refactoring internal modules

  • d10ac9a Sort imports with isort
  • 6d1c918 Fix warnings
  • 322faba Sort some imports
  • b268447 Removed unused imports in symforce python function codegen template
  • c3d0a25 Move things to typing_util
  • 525f229 Misc changes to tests
  • a7999d6 TemplateListEntry -> dataclass
  • d154598 Modify optionality of template_dir arg
  • 3f467fa Make TemplateList.add arg order match
  • 429e6ac Take relative path in render_template

👮 SkyMarshal

  • 58e37ea [SkyMarshal] Sort imports
  • a815051 [SkyMarshal] static functions in lcm_coretypes are __attribute__((unused))
  • d2760d7 [SkyMarshal] Explicitly static_cast hashes to int64

🎁 Misc

  • 693f270 Clarify docstrings on SE(n) classes
  • da612a9 Update installation instructions
  • 8f01c0d Bump version to 0.6
  • a948a31 Add failing test for factor cache with custom jacobians
  • 9b3c47b More factor cache fixes
  • 48fd72d Use corrected runpaths w/ setup.py develop too
  • 29310df dev_requirements.txt errors on py < 3.8
  • d2181a8 Add note about building from a release
  • 94d1bfa SparseCholesky is MPL2
  • b3d6edb Fix of pip install -e . on both macos and ubuntu
  • e97a5fd Upgrade to sympy 1.11
  • 9a20a81 Fix factor cache
  • 48699d1 Add more named Matrix types
  • 47f4adb Fix values_tutorial link
  • 324bba2 LM Optimizer prints out id with iteration stats
  • 40a6c9e Pull in the latest tl::optional
  • b339396 Add numba to dev_requirements.txt
  • e2ed962 Symforce add sparse_linearization option to factor.py
  • 7289ce0 Don't add symengine to sys.modules if import fails
  • e131eae Use SYMFORCE_PYTHON for rerun_if_needed
  • 75201b6 Fix build on cmake >=3.23
  • d8e992f Fix broken links in README
  • 71d36b0 Raise ValueError if subs args are different lengths
  • 73d5dbe Symforce Values.from_storage allow different scalar types
  • 73b22a5 Allow symforce storage ops to return numeric types
  • d50dbba Fix docs for Group and LieGroup
  • eeadcee Added getter function for symforce optimizer params
  • cea8701 Move error message for wrong number of keys
  • 367eeb8 Added helper function for converting Symforce Values to dicts
  • 68384d0 Dataclass ops support T.Tuple
  • 2d1a615 Codegen performance improvements
  • e9ef402 LinearCameraCal doesn't take Abs(z)
  • 65f6d00 Use sf.sympy.Eq in symbolic_computation_speedups.ipynb
  • 52d2b5d Regenerate with make test_update_all
  • 87c031b Better errors from wrong factor results
  • c0933d0 Fix type annotation
  • f6496d6 Remove local Catch2 (instead fetch it)
  • cdf8560 fix bug w/ lcm gen for large matrix
  • d614535 Make cc_sym types pickleable