Publishing details

Changelog

gtsam (4.2.0-4ubuntu2) jammy; urgency=medium

  [ Frank Dellaert ]
  * Added a number of docker images

  [ Ellon Paiva Mendes ]
  * Bump version to 4.0.2
  * Install GTSAMConfigVersion.cmake

  [ Jose Luis Blanco-Claraco ]
  * Remove obsolete cmake FindXX modules.

  [ Michael Bosse ]
  * Make variable names consistent with math

  [ Fan Jiang ]
  * Add pybind11

  [ Thomas Jespersen ]
  * Added ported C++ version of ISAM2 Kitti example

  [ kvmanohar22 ]
  * adding functionality to use ISAM2 for imu preintegration example

  [ yetongumich ]
  * remove distance in noisemodel, replace with error
  * add test on robust loss functions to behave like quadratic
  * Revert "add implementation for deprecated Mahalanobis"
  * merge with mahalanobis renaming
  * re-add implemntation for deprecated Mahalanobis
  * renamed mahalanobisDistance
  * add document for robust noise model
  * noise in robust should be gaussian, change variable names
  * revised comments
  * change test cases to use the updated names, remove 2nd Create in robust
  * modified document, remove commented function, add deprecated distance
  * check if noisemodel is gaussian, if not throw exception
  * change unweightedwhiten back
  * rename residual to loss
  * modified document

  [ Varun Agrawal ]
  * typo fix

  [ Frank dellaert ]
  * Inlined derivatives and fixed one issue with Jacobians around image center
  * Re-ordered  and cleaned up tests, added derivative tests for image center

  [ Frank Dellaert ]
  * Setup and simulateMeasurements
  * Built TranslationFactor class and partially completed TranslationRecovery class
  * Added initalizeRandomly
  * Running optimization
  * Moved TranslationFactor prototype into sfm directory
  * unit test, incl Jacobians
  * Optimization works!
  * copyright 2020
  * Move to its own compilation unit

  [ Binit Shah ]
  * Include corrupting noise param to parse3DFactors

  [ Jose Luis Blanco-Claraco ]
  * more precise use of setZero() and add comments

  [ Binit Shah ]
  * Sampler initialized with noise argument
  * Using optional sampler outside loop

  [ Varun Agrawal ]
  * Added FunctorizedFactor and corresponding tests
  * fixes, better tests, docs
  * remove TODO
  * improved documentation

  [ Martin Vonheim Larsen ]
  * Added test for Unit3::operator=
  * Properly handle basis in Unit3::operator=

  [ Varun Agrawal ]
  * removed dependency on Eigen3 since we provide Eigen 3.3.7 and Ubuntu Bionic provides Eigen 3.3.4.

  [ Martin V. Larsen ]
  * Update testUnit3.cpp

  [ Varun Agrawal ]
  * improve and modernize the Dockerfiles
  * small logistical fixes

  [ Gerry Chen ]
  * put file stream inside scope to force buffer flush This was already fixed for serializeXML but not for serializeToXMLFile or deserializeFromXMLFile.
  * bypass assert_equal tests for file roundtrips
  * better comments on serializationTestHelper functions

  [ Jose Luis Blanco-Claraco ]
  * unhide doc section in PDF

  [ Varun Agrawal ]
  * remove extra semicolon

  [ David ]
  * Add unit test for oriented plane 3 factor jacobian

  [ Frank dellaert ]
  * Fixed override warnings and added a few missing headers

  [ Varun Agrawal ]
  * renamed testScenarios to testScenarioRunner
  * fix deprecation warnings from Matplotlib
  * reduce for loops, add titles to plots, better space subplots for IMU data
  * vastly improved the basic ImuFactorExample script
  * move Eigen format definition to Matrix.h
  * use Eigen formatting for Rot3 ostream
  * updated filename in brief
  * don't align matrix columns
  * fix print tests for Rot3 and Pose3
  * set CMAKE_VERBOSE_MAKEFILE flag to OFF
  * Cleaned up printing of Rot3
  * Cleaned up printing of Pose3
  * Cleaned up printing of NavState

  [ Jose Luis Blanco-Claraco ]
  * Finish undo of #310 fill with zeros (not actually needed)

  [ Varun Agrawal ]
  * moved matlab-style matrix format definition back to cpp, updated all formatters
  * use static_cast for Rot3 matrix

  [ David ]
  * Add Pose3-Point3 factor
  * Update incorrect test name
  * Add more documentation and clang-format

  [ Frank Dellaert ]
  * Importing Frobenius error factors from Shonan effort

  [ Fan Jiang ]
  * Fix UAF

  [ David ]
  * Fix OrientedPlane3Factor jacobian using numericalDerivative

  [ Fan Jiang ]
  * Fixed all alignment problems
  * Add missing include
  * Fix wrap tests
  * Address Frank's comments
  * Move away from boost

  [ Varun Agrawal ]
  * export cython install path so it can be picked up by other cmake projects
  * cmake function to install python package once make install is completed

  [ Gerry Chen ]
  * use boost paths append to have platform agnostic path separators

  [ Varun Agrawal ]
  * add new make command for installing python wrapper

  [ Gerry Chen ]
  * Separate stream creation and serialization Recommended by @ProfFan in #343 with the objective of making (de)serialize to string and to file more similar
  * formatting to Google style

  [ Varun Agrawal ]
  * added comments and removed unnecessary code

  [ Gerry Chen ]
  * fixed unit test failure on `testSerializationBase` object `output` was getting reused, but should be re-loaded into a "blank" object each time.

  [ David ]
  * Address Frank's comments and clean up changes

  [ Gerry Chen ]
  * reset filesystem - forgot to uncomment these after debugging

  [ akrishnan86 ]
  * optional initialization for LMParams

  [ Varun Agrawal ]
  * Set minimum supported numpy version to 1.11.0 (#366)

  [ Fan Jiang ]
  * Revise comments

  [ David ]
  * Update style and switch to errorVector()

  [ Gerry Chen ]
  * remove file roundtrip test for pointers

  [ Varun Agrawal ]
  * updated comments in shell script
  * added Windows batch script to install python wrapped package

  [ Fan Jiang ]
  * Style fixes as commented by @dellaert

  [ Gerry Chen ]
  * serialization docstrings
  * rename serialization functions with less ambiguous names According to Varun's suggestion. Note: string functions should be automatically inlined by compiler to avoid passing big strings.

  [ Varun Agrawal ]
  * pure CMake script to install Python wrapper after compiling
  * removed extra line
  * reset to previous version

  [ Fan Jiang ]
  * Add comments
  * Switch to the new alignment marker type

  [ Varun Agrawal ]
  * Load Cython requirements file instead of reading it in cmake
  * Added cmake variable GTSAM_CYTHON_INSTALL_FULLPATH to include build tag directly
  * Vastly improved setup.py template
  * Specify working directory from where to call setup.py
  * print Eigen Unsupported status message correctly
  * wrap the biasHat function for PreintegratedMeasurement
  * added .gitignore for when building the sample cmake projects

  [ Fan Jiang ]
  * Add missing lf

  [ akrishnan86 ]
  * fix SfmData naming

  [ Varun Agrawal ]
  * Revert "added .gitignore for when building the sample cmake projects"

  [ akrishnan86 ]
  * review1 changes

  [ Varun Agrawal ]
  * improved result printing and use of flags for ImuFactorExample.py
  * renamed ImuFactorExample2 to ImuFactorISAM2Example
  * added function to plot trajectory incrementally
  * improvements to ImuFactorExample
  * updated file docstring for ImuFactorExample2.cpp
  * make python-install command depends on gtsam target
  * cleaner version of execution script which only needs 'make install'
  * run setup.py after installing the gtsam_eigency module
  * capture stdout in python test [only for python3]
  * newline added to end of CMake file
  * Set high level Cython/Eigency variables to reduce duplication
  * Create and use cython build directory
  * Use the high level cython variables, improve install process
  * Remove redundant postfix checking since the postfix is already added at the top level
  * updated cython wrapper README
  * In-place cython build
  * fixed CYTHON_INSTALL_PATH cmake variable wrt cache
  * Python Wrapper CMake update
  * removed unneeded install commands and updated README
  * Add python-install dependency for gtsam_unstable as well
  * make utils and test code python2 compliant
  * small improvements to the ImuFactorExample.py

  [ akrishnan86 ]
  * forking code for mfas from 1dsfm

  [ Varun Agrawal ]
  * update python build location in travis script

  [ Fan Jiang ]
  * Fix memory leak in Expressions
  * Fix TranslationFactor with Vector3 as Point3
  * Fix MSVC build

  [ Varun Agrawal ]
  * Improved paths and added checks

  [ akrishnan86 ]
  * changing mfas to use gtsam keys

  [ Jose Luis Blanco-Claraco ]
  * Fix missing DLL exported symbol

  [ Varun Agrawal ]
  * new definition for FunctorizedFactor to allow for using std::function and lambdas
  * Simplified FunctorizedFactor

  [ Fan Jiang ]
  * Fix FrobeniusWormholeFactor Python test

  [ Varun Agrawal ]
  * fix working directory for python install target
  * test SmartFactor when body_P_sensor is passed in

  [ Thomas Jespersen ]
  * ISAM2 Kitti example: Addressed review comments

  [ akrishnan86 ]
  * adding tests

  [ Mike Sheffler ]
  * Second attempt at a wrapper fix.

  [ Varun Agrawal ]
  * Abstracted out serialization code for PreintegrationBase

  [ Mike Sheffler ]
  * Unnecessary include statement

  [ Varun Agrawal ]
  * Updated  PreintegratedImuMeasurements docstring

  [ Fan Jiang ]
  * Fix lambda check in logging optimizer

  [ Varun Agrawal ]
  * Replace scoped name with direct name and instantiate base class in constructor
  * Major updates to CombinedImuFactor to make it Testable as well as serializable
  * Fix typo
  * Added and updated serialization tests to include all IMU factors
  * revert variable change

  [ akrishnan86 ]
  * tests and documentation
  * formatting headers and removing debugging code

  [ Varun Agrawal ]
  * reduced tolerance for checking jacobian

  [ Fan Jiang ]
  * add return value in gtsam_optimize

  [ Frank dellaert ]
  * Eliminated some copy/paste
  * Added g2o test files
  * Added tests on determinants of read rotations
  * Normalized quaternions before converting to Rot3 to account for limited precision in text files.
  * Avoided extra conversions to quaternions

  [ Varun Agrawal ]
  * Add indentation
  * Handle extrinsics and intrinsics for jacobian

  [ Frank dellaert ]
  * Formatted and fixed discrete examples

  [ Varun Agrawal ]
  * Use built in Matrix serialization
  * Generic Eigen::Matrix serialization for boost
  * add compiler flags to suppress warnings if built in release mode
  * Add MATLAB root and Mex paths to cmake output, align GTSAM specific output
  * Quote variable so it works on Windows
  * Use static matrix and constexpr
  * use boost serialization macro instead of make_array

  [ Fan Jiang ]
  * Added wrapping for the PCG solver in Cython
  * add comments

  [ Varun Agrawal ]
  * suppress warnings only for 3rd party code for Release builds
  * fix init issues with Vector3, use static matrices where possible
  * added note about code source and eigen resize for both static and dynamic matrices
  * Explicit type definition to handle warning
  * support for landmarks in g2o files

  [ Fan Jiang ]
  * Add check to ensure we are calling lambda on a LM

  [ Varun Agrawal ]
  * correct compiler flag for Windows

  [ Fan Jiang ]
  * Add unit test
  * use isinstance

  [ Varun Agrawal ]
  * added cmake policy for AppleClang compiler identification

  [ Fan Jiang ]
  * Move the declaration to cpp

  [ Varun Agrawal ]
  * Better way of exporting Boost serialization guid

  [ Frank dellaert ]
  * Resurrecting DiscreteBayesTree tests

  [ yetongumich ]
  * modified test

  [ Frank dellaert ]
  * Checked in pdf for easy reference
  * added printSignature and evaluate
  * Fixed link issue
  * Cleaned up formatting
  * Fixed tests

  [ Varun Agrawal ]
  * perform equality comparison on root of class hierarchy
  * correct vector init
  * delete extra pdf file
  * Revert "delete extra pdf file"

  [ yetongumich ]
  * deprecate error in noisemodel, use loss instead; revise virtual with override
  * deprecate error in noisemodel, use loss instead; revise virtual with override

  [ Frank dellaert ]
  * Extra tests on frontal keys
  * Some more refactoring of marginals
  * Fix confusion between parents and frontals
  * Added code to re-jigger Signature cpt so that frontal keys are always first, consistent with how the DiscreteElimination function works.
  * New discrete example
  * Better print
  * Cleaned up tests
  * Use dict notation in print
  * Add explicit HMM example
  * Modernized sample function

  [ yetongumich ]
  * modify testNoiseModel to use loss instead of error
  * change doc

  [ Varun Agrawal ]
  * fix serialization warning for boost::optional<Vector3>

  [ Frank dellaert ]
  * Partial Specialization
  * Add BayesNet-inst.h at end of BayesNet.h

  [ Varun Agrawal ]
  * correct indentation for Python version

  [ Mike Sheffler ]
  * Missing BOOST_SERIALIZATION_NVP wrapper macro for an argument to be serialized

  [ Jose Luis Blanco Claraco ]
  * docker tag and pip3 fixes; add a readme
  * complete README

  [ David ]
  * Fix all unit tests. Only remaining item is the analytical Jacobian for Unit3::localCoordinates.

  [ acxz ]
  * set default initialization

  [ akrishnan86 ]
  * changing MFAS to oops and refactoring
  * minor comments change

  [ Frank dellaert ]
  * Fixed conventions for Jacobians
  * Unit test for transformPoseFrom
  * Some more name changes and documentation

  [ Varun Agrawal ]
  * Added more comments for clearer understanding

  [ Fan Jiang ]
  * Bump version and switch Pose3 expmap default

  [ Varun Agrawal ]
  * nicer formatting when printing values

  [ Fan Jiang ]
  * Fix test for full Pose3 expmap
  * Remove pybind11

  [ Frank dellaert ]
  * Replaced flag with 4.1 version
  * Removed all deprecated code w Stephanie...

  [ akrishnan86 ]
  * constructor API change after review1

  [ acxz ]
  * replace boost random with std random

  [ Varun Agrawal ]
  * add axis labels to the trajectory plot

  [ acxz ]
  * use reasonable distribution names
  * use reasonable distribution name
  * remove unused base variable

  [ Varun Agrawal ]
  * fix test for FunctorizedFactor printing
  * Fix minor bugs
  * test for readG2o
  * added axis labels and figure titles as optional params
  * increase number of build cores and remove sudo requirement
  * added backwards compatibility for parseVertex

  [ Frank dellaert ]
  * Improved comment
  * Made params const

  [ acxz ]
  * pass in expected Rot3 and parameter p

  [ Jose Luis Blanco Claraco ]
  * recover SLAM serialization test

  [ akrishnan86 ]
  * changes after review - removing positiveEdgeWeights

  [ Jose Luis Blanco Claraco ]
  * Add docs on serializing expressions.
  * enable compiler warnings and errors for safer code
  * Fix all new gcc warnings/errors: make explicit virtual/override methods.
  * Avoid -Woverride in clang <12.0.0
  * relax override -Werror for now
  * Fix missing virtual dtors
  * Fix warnings on incorrect for range reference bindings
  * remove leftover cmake debug trace

  [ acxz ]
  * fix warnings on incorrect for range reference bindings
  * remove useless Planning test
  * fix return copy

  [ Fan Jiang ]
  * Copy cython files
  * Add unstable files
  * Replace with new python tests
  * Sync ImuFactorExample
  * Sync ImuFactorExample2
  * Fix Pose2 plot
  * Update to match cython
  * Update more to match cython

  [ Varun Agrawal ]
  * update ImuFactorExample.py
  * fix warnings from subplots and improve code
  * add incremental plotting function
  * update ImuFactorExample2.py
  * rename ImuFactorExample2 to more descriptive name

  [ acxz ]
  * add override keyword

  [ Varun Agrawal ]
  * replaced SimpleCamera with PinholeCamera and updated tests
  * sort imports in python examples

  [ acxz ]
  * workaround to dereferencing a nullptr

  [ Jose Luis Blanco Claraco ]
  * Add genericValue() helper
  * Values initializer_list constructor

  [ Varun Agrawal ]
  * use \n instead of endl

  [ Jose Luis Blanco-Claraco ]
  * docs and missing traits
  * Add variadic-template N-ary ExpressionFactor
  * typo

  [ Jose Luis Blanco Claraco ]
  * Deprecate ExpressionFactor2
  * port ExpressionFactor{2->N}

  [ Jose Luis Blanco-Claraco ]
  * Add unit test revealing deserialization error
  * Fix serialization bug in RangeFactor

  [ Fan Jiang ]
  * Fix import typo
  * Change to new KeyVector accessor

  [ Jose Luis Blanco Claraco ]
  * Deprecate ExpressionFactor2 for 4.1
  * Recover the convenient evaluateError() method
  * fix evaluateError() methods

  [ Varun Agrawal ]
  * fixed tests

  [ acxz ]
  * remove empty smart folder
  * remove smart from cmake

  [ Varun Agrawal ]
  * fix indentation of macro guard

  [ Fan Jiang ]
  * Sync with varun's pr

  [ akrishnan86 ]
  * add binary measurement class

  [ Varun Agrawal ]
  * wrap preintegrated function

  [ Fan Jiang ]
  * Moved python files
  * import from is working
  * Sync with new_wrapper develop branch
  * remove function import
  * Import classes used more than once
  * Newline

  [ Stephanie McCormick ]
  * change from const Params back to non-const Params

  [ Varun Agrawal ]
  * remove virtual

  [ Frank Dellaert ]
  * Allow graph to be queried
  * VectorizedGenerators
  * Removed superfluous size, added doxygen partitions
  * Allow to pass in pre-computed generators. Should save some energy.
  * Update README.md

  [ Varun Agrawal ]
  * fix warning in FrobeniusWormholeFactor

  [ akrishnan86 ]
  * changes with passing unit tests

  [ mawallace ]
  * Remove set_zlabel from plot_pose2

  [ akrishnan86 ]
  * binary measurement wrap

  [ ss ]
  * Fix pose2 align bug.

  [ Sam Bateman ]
  * added mutex to BayesTreeCliqueBase for access to cached variable and added copy/copy assignment constructors to allow for full previous functionality while adding thread safety to marginalCovariance.
  * update spelling/indent

  [ Varun Agrawal ]
  * Revert "fix warning in FrobeniusWormholeFactor"
  * fix warning in FrobeniusWormholeFactor
  * function for consistent width printing of CMake flags

  [ akrishnan86 ]
  * sfm changes to docs, format, wrapper

  [ ss ]
  * Finish Sim3 align and transformFrom functions.

  [ akrishnan86 ]
  * update binary measurement brief

  [ ss ]
  * Fix document.
  * Improve code quality.
  * Update doc.

  [ Frank Dellaert ]
  * Added Spectra 0.9.0 to 3rdparty

  [ Varun Agrawal ]
  * example using CombinedImuFactor
  * renamed ImuFactorExample2 to be more consistent with naming
  * revert author change
  * reworked basic ImuFactorsExample
  * use boost program_options for command line parsing

  [ alexma3312 ]
  * Change typedef into using.

  [ Varun Agrawal ]
  * default string value for printing Imu factors
  * fix FrobeniusBetweenFactor declaration
  * comment out timing-out CI stage

  [ Frank Dellaert ]
  * Templated some methods internally
  * Very generic parseToVector
  * refactored load2d
  * Templated parse methods
  * Turn off gcc build as it times out every time
  * Avoid clang warnings about double-brace initialization
  * Hunted down deprecated use of parse3DLandmarks

  [ Fan Jiang ]
  * Backport GitHub Actions CI (#259)
  * Remove travis and appveyor
  * Limit python triggering
  * Remove pybind build
  * Correct .travis.sh
  * switch to boost 1.69.0
  * typo
  * Add a display for current boost version
  * Manually specify BOOST_ROOT

  [ Frank Dellaert ]
  * Some behavior changes.

  [ Fan Jiang ]
  * typo
  * Ignore system boost
  * Fix wrong include path
  * Do not search for the cmake boost file
  * Real reason why cannot find boost

  [ Varun Agrawal ]
  * renamed from build-cython to build-python
  * remove travis.python.sh and instead add script in .github folder
  * updates to python CI yml file
  * moved CI script for unix based systems
  * updates to macOS and Linux CIs
  * fix script name
  * fix cython path

  [ Frank Dellaert ]
  * Fixed covariance bug

  [ Varun Agrawal ]
  * fix build script
  * set LD_LIBRARY_PATH
  * test LD_LIBRARY_PATH
  * correctly add LD_LIBRARY_PATH boost lib directory
  * remove unnecessary prints
  * add description for CI scripts

  [ alexma3312 ]
  * Fix GTSAM_TYPEDEF_POINTS_TO_VECTORS.

  [ Frank Dellaert ]
  * Addressed review comments

  [ Fan Jiang ]
  * Always build unstable
  * Add Python to the name of CI

  [ Frank Dellaert ]
  * Feature/shonan averaging (#473)

  [ Varun Agrawal ]
  * replace atof/atoi with standardized stof/stoi

  [ Fan Jiang ]
  * Ported MATLAB Examples
  * Python supplementary files
  * Remove old wrap
  * Squashed 'wrap/' content from commit 21ee82f75
  * Initial migration
  * Fixes the specialization order
  * Squashed 'wrap/' changes from 21ee82f75..49d831588

  [ alexma3312 ]
  * Correct variable names and refactor code.

  [ Fan Jiang ]
  * Fix some unstable MATLAB examples
  * Small fixes
  * Change build target
  * No submodules

  [ Jose Luis Blanco-Claraco ]
  * Include 3rdparty libraries as 'system' headers to avoid warnings

  [ Fan Jiang ]
  * Remove offending include
  * Remove python folder temporarily
  * Renamed cython to python
  * Remove eigency
  * Migrated all examples and tests
  * Add supplimentary files used by the new pybind11 wrapper
  * update readme
  * Disable unstable MATLAB by default
  * Add documentation to the templates
  * Document tricks to allow direct import from xxx
  * Add docs for preamble and specialization.h
  * Reformat CMake files
  * Add MATLAB root prompt
  * Fix CI Script for Pybind11

  [ Varun Agrawal ]
  * Improve Github Actions (#476)

  [ Fan Jiang ]
  * Add dependency for python-install

  [ Frank Dellaert ]
  * Fix override warning
  * Recreated initializeRandomlyAt
  * Added Shonan Averaging unit tests

  [ Frank dellaert ]
  * Fixed example printing

  [ Varun Agrawal ]
  * CI for special cases
  * reduce special cases to only Ubuntu+GCC, disable Python CI for Ubuntu GCC9
  * updated step name
  * comment out python ubuntu-gcc-9 completely

  [ Claudius Tewari ]
  * Fix "Wrapper" heading anchor link in README.

  [ Frank dellaert ]
  * Added g2o to search
  * Transpose translation when printing
  * Moved common code to InitializePose

  [ alexma3312 ]
  * Change sim3 variable from T to S.

  [ Frank dellaert ]
  * Shonan C++ CLI
  * Python CLI

  [ Fan Jiang ]
  * Add script to update the wrap subtree

  [ alexma3312 ]
  * Modify the print function print out format.

  [ Frank dellaert ]
  * Fixed test

  [ Fan Jiang ]
  * Fix Python wrapper with TBB on
  * Add missing newline

  [ Frank dellaert ]
  * Fixed Point2 and Point3 to have similar behavior as in C++ - to also take vectors - to be initialized to Nan
  * Added more support for Pose2 data
  * Now plots 2D or 3D trajectories (on a 3D plot)
  * Made 2D and 3D translation recovery work, and added plot
  * Remove distinction between Typedef and Point3.

  [ Fan Jiang ]
  * Remove GTSAM_DEFINE_POINTS_TO_VECTORS
  * Cleanup preamble and specialization
  * Add TBB test for Python and GTSAM C++
  * Fix special builds
  * Add TBB Python CI to matrix

  [ Frank dellaert ]
  * Address review comments
  * Fixed compilation and removed absolute path.

  [ Fan Jiang ]
  * Fix TBB env not propagated
  * Fix preamble.h

  [ alexma3312 ]
  * Replace rotAveraging with gtsam::FindKarcherMean.
  * Add Compatibility unittest.
  * reformat pose3 declaration.
  * create a helper function to remove repeat code.
  * Add a comment for transformFrom pose.

  [ Fan Jiang ]
  * Bump version to 4.1.0

  [ alexma3312 ]
  * Modify comments and move header file declaration.

  [ jingwuOUO ]
  * Replace MakeATangentVector with MakeATangentVectorValues

  [ Fan Jiang ]
  * Make sure our readme is proper restructuredText

  [ alexma3312 ]
  * Add mean function into Point3 class.
  * Create AlignGivenR function and refactor code.
  * Change CMakelist file to fix merge conflict.

  [ Fan Jiang ]
  * Remove unnecessary comment
  * Proper method to deal with markdown in setup.py

  [ Frank dellaert ]
  * Linting and getAnchor wrap

  [ jingwuOUO ]
  * Fixed checkwitheigen testcase failure

  [ Frank dellaert ]
  * added missing namespace

  [ jingwuOUO ]
  * Rename and small fix.
  * Changed TangentVectorValues test

  [ akrishnan86 ]
  * wrapping translation recovery doesnt build

  [ Christian Berg ]
  * Added Jacobians for Rot3::RzRyRx and related named constructors

  [ akrishnan86 ]
  * TAvg wrapper builds

  [ Varun Agrawal ]
  * Define dataset directory for Python package
  * Add python dataset directory to search options
  * Add data files to python package
  * Better location for setting Python dataset directory in CMake

  [ Christian Berg ]
  * Also add jacobians to Rot3::RzRyRx for when quaternions are selected

  [ Varun Agrawal ]
  * Print Vectors horizontally for easier reading
  * Undo previous changes for common directory
  * don't wrap findExampleDataFile
  * Add python version of findExampleDataFile
  * Undo Point operator overloading and instead update NavState print
  * check for null pointer in general

  [ Timothy Setterfield ]
  * fixed issue that pos and vel are in nav frame
  * added another coriolis unit test
  * added cached rotation bRn
  * cleaned up notation
  * fixed typo

  [ Varun Agrawal ]
  * new function readBal which returns the SfmData object, allowing for single line calling
  * follow Google Style for function naming
  * Wrapper updates

  [ JIanzhu Huai ]
  * correct coefficients of approximated SE3 Q_r

  [ Varun Agrawal ]
  * update minimum Boost version required

  [ JIanzhu Huai ]
  * test computeQforExpmapDerivative

  [ Fan Jiang ]
  * Wrap DSFMap so SFM can use them
  * Add the unit test for DSF in Python
  * Fix include issue

  [ akrishnan86 ]
  * translation recovery py test

  [ Akshay Krishnan ]
  * translation recovery unit tests pass
  * remove binarymeasurementsunit3 class in wrapper

  [ alexma3312 ]
  * remove commented out code
  * document and use std::tie
  * Refactor mean and mean_pair test case.

  [ akrishnan86 ]
  * adding binarymeasurementsunit3

  [ Frank dellaert ]
  * Fix typo

  [ Varun Agrawal ]
  * ISAM2 helper methods and wrapper to evaluate nonlinear error

  [ Christian Berg ]
  * Added Jacobians for Rot3::xyz and related conversions to euler angles

  [ akrishnan86 ]
  * code changes to increase modularity
  * fixes1
  * fixes2

  [ Akshay Krishnan ]
  * fixes3

  [ alexma3312 ]
  * Fix double computation.

  [ Christian Berg ]
  * Throw exception in Rot3::RQ for derivatives close to singularity

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 49d831588..314b121fd
  * Use cmake to identify best Python version if Default requested
  * Make SharedNoiseModel as optional parameter, remove hardcoded verbosity, and silence test.
  * print version of TBB found
  * Don't print private compile options
  * fix wrapper TODOs for ISAM2 and BearingRange
  * minor formatting

  [ akrishnan86 ]
  * wrap MFAS

  [ Akshay Krishnan ]
  * changing to boost shared_ptr

  [ Ayush Baid ]
  * Adding logmap API which applied a logarithmic map taking the object to the argument
  * Removing logmap in case of failure

  [ alexma3312 ]
  * Refactor Align with short functions.

  [ Akshay Krishnan ]
  * remove unusede ptr member in MFAS
  * translation averaging example

  [ John Lambert ]
  * Update README.md
  * improve python wrapper cmake flag instructions
  * Update README.md
  * Update README.md
  * Update README.md
  * use cleaner checkmark symbol in readme
  * update example list
  * update python examples list
  * add p
  * add python equivalent of c++ sfm data calls
  * cannot retrieve p attribute

  [ akrishnan86 ]
  * adding documentation for example

  [ Varun Agrawal ]
  * update numericalDerivative functions to take in optional dimension template parameter and added corresponding tests

  [ John Lambert ]
  * remove BAL for now, and add get3dPoint() for p access
  * mark SFMExample_bal as still in progress

  [ Varun Agrawal ]
  * remove logmap function from LieVector and LieMatrix
  * added calibrate with jacobians for Cal3Bundler

  [ John Lambert ]
  * rename get3dPoint() to point3()

  [ Varun Agrawal ]
  * combine the calibrate functions into one
  * put the jacobians at the end so that the calibrate function can be wrapped
  * make tolerance as a constructor param
  * update calibrate in wrapper

  [ lcarlone ]
  * adding robust cost function - version 1
  * robust noise in place - test fails due to non-isotropic covariance?
  * solving issue with robust model

  [ Varun Agrawal ]
  * small fixes to ensure marginals are computed correctly

  [ lcarlone ]
  * attempting robustification in Frobenius factor

  [ Varun Agrawal ]
  * update wrapper to also work for Matlab

  [ lcarlone ]
  * added nice unit test
  * improved test

  [ akrishnan86 ]
  * naming and other changes - review1

  [ JIanzhu Huai ]
  * test Qr with old codebase fails
  * correct Qr coefficients in approximation

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 314b121fd..5e1373486

  [ alexma3312 ]
  * Move private func to .cpp.
  * Change getXY to calculateScale.
  * Emphasize Rdb is a vector.
  * Change input into centroids.
  * Refactor code to increase speed.

  [ Varun Agrawal ]
  * wrapped BearingRange::Measure method and removed deprecated classes

  [ lcarlone ]
  * added check and unit test

  [ Varun Agrawal ]
  * remove all LieScalar/LieVector/LieMatrix references from wrapper
  * MATLAB readme update
  * remove Point3 serialization test since Point3 is now just a vector

  [ lcarlone ]
  * added control over minimum rank in ShonanAveraging example, and resolved hard-coded sigma in FrobeniusFactor

  [ alexma3312 ]
  * Fix quaternions test failure.

  [ akrishnan86 ]
  * updating defaultdict init

  [ alexma3312 ]
  * Throw an exception when n=0 .

  [ Varun Agrawal ]
  * use implicit function theorem to compute jacobians of Cal3Bundler::calibrate
  * added test for Cal3Bundler::calibrate Jacobians1
  * make Cal3Bundler wrapper constructor backwards compatible
  * fixed sized matrices and minor improvements

  [ alexma3312 ]
  * Modify error message to be more descriptive.

  [ Varun Agrawal ]
  * compute inverse only once
  * wrap PinholeCameraCal3Bundler

  [ Frank Dellaert ]
  * Small formatting changes and removal of test header
  * New method "add" as in GaussianFactorGraph
  * Re-formatting and using "add"/"auto" where we can.
  * Fixed spelling mistake

  [ lcarlone ]
  * reverted changes to cproject and language settings
  * fixed typo
  * reverted changes to cproject

  [ akrishnan86 ]
  * renaming variables

  [ Frank Dellaert ]
  * Changed name to avoid template confusion in VC 2016
  * Clean up code and tests and use "means"

  [ Varun Agrawal ]
  * remove all Cython references

  [ Frank Dellaert ]
  * Update Point3.h

  [ John Lambert ]
  * add

  [ akrishnan86 ]
  * outlier rejection in separate fn and other readability changes
  * readability changes
  * fixing one variable that was not renamed

  [ Varun Agrawal ]
  * find python if using Default

  [ Frank Dellaert ]
  * Fixed include error

  [ Varun Agrawal ]
  * check if mex compiler exists for Matlab wrapper, formatting

  [ akrishnan86 ]
  * removing shared ptr, iostream, renaming

  [ Varun Agrawal ]
  * added normalize function to orthogonalize the rotation after composition
  * normalized needs to be called explicitly

  [ John Lambert ]
  * add WIP PR

  [ Varun Agrawal ]
  * Moved normalize next to ClosestTo and add more docs

  [ Jose Luis Blanco Claraco ]
  * refactor cmake scripts into smaller files
  * Remove obsolete comments
  * Use system eigen3 only if first quietly found.

  [ Fan Jiang ]
  * Squashed 'wrap/' changes from 5e1373486..2192b194e
  * Resurrect serialization tests
  * Add unit test for python serdes
  * Squashed 'wrap/' changes from 2192b194e..dfa624e77

  [ Jose Luis Blanco Claraco ]
  * Use camel case for cmake files
  * Revert use system Eigen if found

  [ Akshay Krishnan ]
  * Wrapping SfmCamera to be used with GeneralSFMFactor

  [ John Lambert ]
  * remove breakpoints

  [ Akshay Krishnan ]
  * Renaming SFMCamera to PinholeCameraCal3Bundler

  [ Fan Jiang ]
  * Fix LLVM repo keys

  [ jingwuOUO ]
  * Add acc power method in Alg6
  * Completed and tested power method with unittest
  * Added PowerMinimumEigenValue method and unittest.
  * feat: Add  Best Heavy Ball alg  to set beta
  * Refactor power and accelerated method

  [ Sushmita ]
  * python wrapper for sfmdata

  [ Fan Jiang ]
  * Add comments

  [ Frank dellaert ]
  * Fix warning on clang
  * Fixed some warnings
  * Printing now transpose
  * Simplified evaluateError
  * Use keyFormatter
  * Added unit test for issue 561

  [ jingwuOUO ]
  * Reformat code.
  * Small fix

  [ John Lambert ]
  * use argparse defaults
  * make a note about how the eror drops

  [ Fan Jiang ]
  * Add comments
  * Add comments

  [ John Lambert ]
  * fix typo

  [ Fan Jiang ]
  * Fix inteminent sks keyserver failure
  * Add notes

  [ John Lambert ]
  * clean up comments

  [ Sushmita ]
  * unittested features in SfmData
  * python wrapped SfmData and SfmTrack
  * python wrapper sfmtrack reflected in other files

  [ Jose Luis Blanco-Claraco ]
  * Use METIS system library if so selected

  [ John Lambert ]
  * renamed myData to scene_data, and explained BAL parameterization
  * update list of C++ examples that have been ported to Python

  [ Sushmita ]
  * changed Measurements to measurements
  * wrapped sfmtrack
  * removed measurements from sfmdata

  [ jingwuOUO ]
  * Revise according to Frank and David's comments
  * Correct unittest input error
  * Added more detailed documentation
  * Fixed not solve errors and detailed documentation

  [ Jose Luis Blanco-Claraco ]
  * Add alternativeName()

  [ Jose Luis Blanco Claraco ]
  * replaced lambda with class plus functor
  * less verbose name path for SymbolGenerator

  [ Sushmita ]
  * changed setP method name removed commented code
  * remved commented code

  [ jingwuOUO ]
  * Revised as David's second review
  * Refined unittest

  [ Sushmita ]
  * added new constructor and changed to emplace

  [ Jose Luis Blanco-Claraco ]
  * Automatic detection of correct suggest-override flag

  [ Tim McGrath ]
  * adding additional Unit3 support in the wrapper: PriorFactorUnit3, Values::insert/update/at(Unit3)

  [ jingwuOUO ]
  * Delete forcing compare eigenvector in unittest
  * Revised documentation

  [ Sushmita ]
  * sfmtrack constructor changed to accept point

  [ Fan Jiang ]
  * Attempt to fix spooky boost in Homebrew
  * Use my tap
  * Use my tap
  * Use explict tap name
  * Last resort: use the explict 1.73 formula
  * Use my tap

  [ jingwuOUO ]
  * Fixed forcing comparing eigenvector.

  [ Varun Agrawal ]
  * Added flag for absolute error
  * add test
  * cleaner assertion
  * Consistent interface for pixel center (#579)
  * minor typo fixes
  * Fix python discovery for MATLAB wrapper

  [ Jose Luis Blanco-Claraco ]
  * Avoid redundant calls to error()
  * Add iteration hook in non-linear optimizers

  [ Varun Agrawal ]
  * Use new env files for github actions
  * Roustify BinaryMeasurements in a functional way, plus formatting
  * Remove goto, update docs, formatting
  * delete old, unused file
  * ubuntu with gcc-9 in CI
  * fix path setting for Windows

  [ Martin Vonheim Larsen ]
  * Docs: Use https for mathjax

  [ Varun Agrawal ]
  * Force EXPMAP option for both if either POSE3 or ROT3 is set
  * uncomment tests
  * Improved CayleyChart Local
  * Similarity3 test only for Rot3 Expmap
  * comment out Windows build which is timing out
  * Update Boost since 1.69.0 has been deprecated in CI images
  * Comment out Windows 2016 since it times out
  * Revert "Improved CayleyChart Local"
  * Use older and faster Cayley transform but add det check and docs
  * Print message when either Pose3 or Rot3 expmap is ON
  * CI path for Cayley transform
  * small doc fix
  * Add new assertions and update tests
  * pass in params to optimizer
  * upload build directory after workflow completes

  [ jingwuOUO ]
  * Fixed doxygen

  [ Jose Luis Blanco Claraco ]
  * Add docs, fix ctor placement
  * further extended docs

  [ Varun Agrawal ]
  * use KeyVector to allow proper wrapping with TBB
  * update MFAS tests
  * fix indentation and add upload for Windows
  * correct form for workspace env variable
  * differentiate between Release and Debug builds
  * Better fkag naming, and more docs
  * placed MEX check to new cmake file
  * restructuring
  * encapsulated and updated all the CMake related to Matlab
  * better flag name and docs
  * only upload release builds
  * enforce constant term in quadratic to be 0
  * Make Values::at return as const
  * correct conditional syntax
  * FIx indentation for Values-inl.h
  * syntax update

  [ jingwuOUO ]
  * Added test for subgraph preconditioner in shonan
  * Refined error message in subgraphbuilder

  [ Frank dellaert ]
  * Initial design

  [ lcarlone ]
  * starting to create test and code for gncParams

  [ Sushmita ]
  * vector of cameras and triangulation function wrapped

  [ lcarlone ]
  * added equals in NonlinearOptimizerParams
  * params parsed correctly
  * added gnc loop
  * now we have very cool tests!
  * 2 tests to go
  * simplified small test to make it more understandable
  * 1 test to go
  * stuck on conversion of noise model
  * finally I have a way to properly change the noise model!
  * working on make graph
  * new constructor test which gets rid of robust loss now passes!
  * yay! only the final monster to go!

  [ Varun Agrawal ]
  * Assign pointer to prevent errors
  * fixes to plot code
  * suppress warnings from clang as well

  [ lcarlone ]
  * added verbosity
  * ladies and gents... GNC!
  * added functionality to fix weights
  * correct formatting
  * done - PGO works like a charm!

  [ Sushmita ]
  * docs fixed and error threshold reduced
  * moved landmark variable to setup
  * push back arguments changed to const reference
  * removed commented code

  [ akrishnan86 ]
  * new test doesnt pass
  * translation recovery unit tests pass

  [ Varun Agrawal ]
  * Deprecate SimpleCamera properly
  * deprecate SimpleCamera tests

  [ jingwuOUO ]
  * Fixed typo

  [ Varun Agrawal ]
  * Jacobians for Camera models
  * update Python test
  * Revert "FIx indentation for Values-inl.h"
  * uncomment calibration applications
  * Removed unnecessary copy constructor and robust noise model is caller's responsibility
  * throw runtime errors and explicitly form robust noise model
  * makeNoiseModelRobust assumes responsibility for robustifying noise models
  * use goto flow
  * formatting

  [ jingwuOUO ]
  * Added more description to the toyExample.g2o

  [ Varun Agrawal ]
  * fix tests
  * Don't throw error for Kappa and test parameter print

  [ jingwuOUO ]
  * Added dense matrix test case in power/acc

  [ Varun Agrawal ]
  * added Imu parameter units to doc
  * formatting
  * Common function to compute Jacobians of calibrate method

  [ akrishnan86 ]
  * changing test names and adding documentation

  [ Varun Agrawal ]
  * Revert "added Imu parameter units to doc"
  * Revert "formatting"

  [ akrishnan86 ]
  * documenting member variables

  [ Varun Agrawal ]
  * Added units for imu noise and bias sigmas
  * common header file for all calibration models
  * Base class for all calibration models
  * Refactor Cal3_S2 and Cal3_S2Stereo classes
  * Refactor all Cal3D based models
  * Refactor Bundler and Fisheye models
  * Minor updates
  * Remove deprecated calibration method from wrapper
  * replace typedef with using

  [ Sushmita ]
  * templated functions where possible
  * removed push_back method from cameraset wrapper
  * added utility functions and code cleanup

  [ Varun Agrawal ]
  * modernized default constructors
  * Cal3 code improvements
  * matrix_inverse() -> inverse()
  * remove using-namespace and fix print test
  * Added tests for printing, plus small formatting
  * stream printing for all calibration models
  * Improved constructor for loading parameters from file
  * Override dim(), cleanup, and add unicode
  * Added tests for checking calibration model dimensions
  * Consistent and better formatting
  * additional formatting

  [ Jose Luis Blanco Claraco ]
  * SymbolGenerator: add chr() and made constexpr-capable

  [ Varun Agrawal ]
  * mark getters as const
  * Helper method to robustify measurements
  * calibrate and uncalibrate for Cal3_S2Stereo model
  * throw error if robust model used but not specified in parameters

  [ Sushmita ]
  * added cmake and preamble
  * moved measurement generation to separate function
  * code formatted

  [ Varun Agrawal ]
  * disambiguate overloaded base class

  [ Sushmita ]
  * removed typedef and formatted code

  [ Varun Agrawal ]
  * function to save graph as graphviz file via wrapper

  [ Sushmita ]
  * moved camera_set to generate_measurements

  [ lcarlone ]
  * moved class to .h
  * added comments
  * fixed typo
  * added more explanation on throw

  [ Varun Agrawal ]
  * added flag to enable optimality certification, some formatting
  * correct flag checking
  * Revert "code formatted"
  * format python triangulation tests
  * more formatting
  * remove unused imports

  [ jingnanshi ]
  * fix comment

  [ Varun Agrawal ]
  * formatting and small fixes

  [ jingnanshi ]
  * TLS wip
  * tls done except unit tests
  * minor fix
  * fix scoping
  * mu initialization test & minor formatting fixes
  * mu update test
  * correctly check relative difference between mu valus at consecutive iterations
  * test fix
  * more unit tests

  [ Varun Agrawal ]
  * better documentation

  [ Russell Buchanan ]
  * Adds unit test for imu preintegration of a single step

  [ lcarlone ]
  * fixed small typos

  [ Varun Agrawal ]
  * explicitly initialize Point3
  * formatting

  [ jingwuOUO ]
  * Added the example graph in powerMethodExample.h
  * Refined reference documentation
  * Make purturb static

  [ Varun Agrawal ]
  * refactored code for ImuMeasurements
  * refactored code for testing ImuPreintegration with impact
  * add simulation data
  * save time in CSV, formatting

  [ lcarlone ]
  * templating on params is still problematic
  * finally fixed the typedef
  * fixed templating, added a strict unit test on inlier threshold
  * made function name less ambiguous, added more comments on inlierThreshold

  [ jingnanshi ]
  * Fix TLS convergence check
  * update function name
  * fix test

  [ lcarlone ]
  * - fixed stopping conditions - handled degenerate case in mu initialization - set TLS as default - added more unit tests

  [ jingnanshi ]
  * minor fixes

  [ Varun Agrawal ]
  * wrap Symbol class and methods
  * minor formatting of cmake file

  [ Ayush Baid ]
  * Wrapping Cal3Bundler's prior and GeneralSFMFactor2

  [ lcarlone ]
  * moved GncParams to separate file, addressing comments by Frank, 1/n
  * renamed enum
  * addressed all except 2 comments by Frank. waiting for inputs on the 2 outstanding issues

  [ Ayush Baid ]
  * Adding Cal3DS2 prior factor and using template instead of typedefs

  [ lcarlone ]
  * moved gncLossType outside params

  [ cttdev ]
  * Adding BearingFactor3D to the wrapper definition.

  [ lcarlone ]
  * addressed final comments by Frank

  [ Varun Agrawal ]
  * Pose3 interpolateRt method (#647)

  [ Ayush Baid ]
  * adding serialization and other functions to enable testing
  * adding track serialization and testable trait
  * improving formatting
  * fixing variable names and comments
  * adding serialization functions to wrapper

  [ Varun Agrawal ]
  * remove build upload since it can't be used downstream

  [ Ayush Baid ]
  * fixing xml serialization issues
  * reverting SfmTrack to struct
  * printing out the 3d point
  * adding equals function to wrapper
  * adding inline comment for round trip
  * Adding serialization support to be used for GT-SFM (#650)

  [ Varun Agrawal ]
  * documentation for compiling on windows
  * improvements to windows doc
  * Squashed 'wrap/' changes from dfa624e77..09f8bbf71
  * updates to Cmake to use the new wrap package
  * updated python setup files so that example data is loaded correctly
  * more precise python version control in CI
  * Revert "more precise python version control in CI"

  [ Frank Dellaert ]
  * add virtual constructor
  * Removed reference for iterating over values. Also used auto where I could, when changing.

  [ Varun Agrawal ]
  * fix metis based warnings in CMake and compiling
  * add std namespacing
  * fix warnings for vectors and matrices
  * verbose printing of exceptions
  * remove verbose flag and print exception to std::cerr
  * cleanly initialize matrices in test
  * remove exception print, add TODO

  [ Ayush Baid ]
  * adding default color values to fix equality check

  [ Varun Agrawal ]
  * update completed TODOs
  * add unit test for NonlinearFactor weight with different noise models

  [ John Lambert ]
  * make r,g,b part of constructor w/ default values
  * add getter for rgb
  * make getter const

  [ Varun Agrawal ]
  * use older form of CMake install
  * add docs for cmake update
  * follow correct doxygen format
  * Squashed 'wrap/' changes from 09f8bbf71..186ed2c79
  * Squashed 'wrap/' changes from 186ed2c79..85d34351c

  [ David ]
  * Add getters to line3

  [ John Lambert ]
  * add robust shonan updates to python wrapper

  [ RamadanAhmed ]
  * Fix GTSAM_EXPORT for some classes and function

  [ Varun Agrawal ]
  * added FunctorizedFactor2

  [ Toni ]
  * Split .h/.cpp, use const& (WIP)

  [ Jose-Luis Blanco Claraco ]
  * CMake scripts compatible with gtsam as git submodule

  [ Ayush Baid ]
  * changing robust noise model to Gaussian

  [ Toni ]
  * Move example to gtsam_unstable
  * Fix formatting
  * Remove gtsam_unstable lib from examples
  * Fix formatting

  [ Gerry Chen ]
  * Mandy+Fan's original code for converting sparse matrices to Eigen format
  * merge Mandy + Fan's sparseJacobian unit test additions
  * organize/isolate sparseEigen functionality
  * fix off-by-one bug
  * cleanup

  [ jingwuOUO ]
  * Set estimateBeta() as optional

  [ Russell Buchanan ]
  * clean up

  [ Gerry Chen ]
  * rename matrix type from `SpMat` to `SparseEigen`
  * roll back some cosmetic changes to minimize the diff
  * SparseEigen docstring
  * typo: `expected` changed to `expectedMatlab`

  [ David Wisth ]
  * Add a simplifed version of the minimal failing example

  [ Gerry Chen ]
  * timing sparse eigen
  * minor efficiency modifications

  [ Varun Agrawal ]
  * use streams instead of printf
  * use of passed in stream for print capture
  * stream printing for Pose2
  * add BearingRange measured to wrapper
  * add override and formatting
  * remove cout statements from testImuPreintegration tests

  [ David Wisth ]
  * Add hessian calculation

  [ Gerry Chen ]
  * add generic optional parameters to sparseJacobian Also, the unit test changed due to a 0 entry that was previously wrongly included in the b-column of the sparse representation.
  * more generic sparseJacobianInPlace function
  * eliminate copy/pasta from SparseEigen with generic version of sparseJacobian
  * populate sparse matrix with `insert` rather than `setFromTriplets` About 5% speed improvement.

  [ Varun Agrawal ]
  * upgrade minimum required Boost version to 1.67.
  * Revert "upgrade minimum required Boost version to 1.67."
  * add known issues section with info about march=native

  [ Gerry Chen ]
  * move SparseMatrixBoostTriplets typedef to gfg
  * remove templating while maintaining efficiency Templating still used in cpp file for generic-ness, but not exposed anymore
  * revert Matrix.h
  * formatting

  [ Frank Dellaert ]
  * use transform rather than deprecated static function
  * Got rid of extra keys
  * Got rid of static versions of methods
  * Cleaned up derivative code
  * Cleanup

  [ Toni ]
  * Fix can be marked override warning

  [ Varun Agrawal ]
  * make non-editable CMake variables as INTERNAL
  * set TBB default to Release unless TBB_USE_DEBUG_BUILD is set

  [ lcarlone ]
  * changed barcsq to be a vector, such that the user can provide a bound for each factor
  * trying to include chi2
  * working unit tests: added chi2
  * done with new default noise thresholds!

  [ Varun Agrawal ]
  * fix bug in Pose2 print
  * use standard function to check for empty string

  [ Gerry Chen ]
  * remove unnecessary function overloads and typedefs
  * remove InPlace jacobian from .h file
  * fix comment and remove whitespace diff
  * disambiguate double template >>
  * replace sparseJacobian with "fast" version
  * auto and reserve fewer

  [ Peter Mullen ]
  * type in test hidden by duplicate test values

  [ Toni ]
  * Fix override warnings: modernize-use-override

  [ Frank Dellaert ]
  * cleanup

  [ lcarlone ]
  * improved comments
  * removed commented line

  [ jingnanshi ]
  * use std namespace qualifier

  [ Frank Dellaert ]
  * Comments

  [ Toni ]
  * Fix issue #689
  * Remove unnecessary include eigen3

  [ Jose Luis Blanco Claraco ]
  * Avoid target collision if gtsam used as submodule

  [ Mostafa ]
  * Update LieGroups.lyx
  * Generate LieGroups.pdf

  [ lcarlone ]
  * starting to implement tests and class for DisplacedPinholeCamera

  [ David Wisth ]
  * Add new oriented plane 3 factors with local linearisation point
  * Update print method of OrientedPlane3Factor
  * remove deprecated Unit3::error() which is replaced by Unit3::errorVector()
  * Update documentation on new factor

  [ Fan Jiang ]
  * Fix GTSAM MATLAB
  * Squashed 'wrap/' changes from 85d34351c..b28b3570d
  * Use latest Boost

  [ David Wisth ]
  * Revert "remove deprecated Unit3::error() which is replaced by Unit3::errorVector()"
  * remove the error() function from OrientedPlane3 (it had incorrect derivatives)
  * Tidy up comments and use cpplint
  * small tidy and fix unit tests

  [ John Lambert ]
  * Start moving Sim(3) functionality into Python wrapper

  [ David Wisth ]
  * Add inline comments on commented-out unit tests

  [ Asa Hammond ]
  * Initial implimentation of a Constant Velocity Constraint between NavStates
  * add gtsam namespace
  * bind a lambda instead of a static function

  [ John Lambert ]
  * add sim3 Point3 align to wrapper
  * Fix typo in using -> typedef conversion
  * move sim3 to stable version
  * move unit test out of gtsam unstable
  * move typedef to header file
  * add Align() for pose3pairs

  [ Asa Hammond ]
  * Add docstrings, use update() to build predicted state and build the error calc
  * remove AAA style for Dellaert style on simpler types
  * rename some vars for consistency
  * static const for placeholder vars
  * fixup noisemodel so its correct dimension
  * cleanup some cruft, add license text
  * corrected license header

  [ John Lambert ]
  * add standard interface for Sim3 in wrapper

  [ Asa Hammond ]
  * test cleanup

  [ John Lambert ]
  * add interface for transformFrom
  * PointPairs to Point3Pairs, and move to Point3.h
  * move PointPairs to Point3.h
  * update the docstring
  * Rename PointPairs to Point3Pairs everywhere per popular demand
  * add a unit test for line case
  * add another unit test, but this one fails
  * move Point3Pairs to Point3.h part of gtsam.i
  * fix notation
  * fix bugs in Karcher mean
  * switch typedef to using per popular request
  * update author list

  [ Akshay Krishnan ]
  * unit test + fix segfault

  [ akrishnan86 ]
  * formatting changes

  [ John Lambert ]
  * Use brew's boost, instead of Fan's version
  * fix notations
  * clean up Sim(3) notations
  * update test notation to have just 1 world frame, and fix typo in abPointPairs
  * dont conflate notation on aTb

  [ Ayush Baid ]
  * Squashed 'wrap/' changes from b28b3570d..d37b8a972
  * Squashed 'wrap/' changes from d37b8a972..10e1efd6f
  * enabling markers and testing pickle roundtrip for few classes

  [ Varun Agrawal ]
  * offload matlab wrapping to the wrap project
  * Make matlab wrapping rely completely on the wrap project

  [ John Lambert ]
  * improve docstring
  * improve docstring

  [ Varun Agrawal ]
  * update Matlab CMakeLists.txt to use the wrapper
  * delete example project since it is now its own git template
  * Squashed 'wrap/' changes from b28b3570d..b0eb968f2

  [ John Lambert ]
  * add const on Rot3
  * improve docstring
  * reformat with black
  * use different brace indent format

  [ Varun Agrawal ]
  * Fix Matlab tests and add saveGraph method to GaussianBayesNet

  [ Asa Hammond ]
  * Avoid derivative calcs if they aren't asked for
  * Move to fixed size matrix for derivative calculations

  [ John Lambert ]
  * temporarily turn off Python + tbb in CI because of OOM

  [ Frank Dellaert ]
  * fixed inhertance
  * Added explicit header as suggested in issue #634

  [ lcarlone ]
  * removed new class and test

  [ Varun Agrawal ]
  * clean up the CMake
  * Squashed 'wrap/' changes from b0eb968f2..d19cda546
  * templated return types are now supported
  * Move wrapper documentation to the wrap project

  [ lcarlone ]
  * added test
  * created .h
  * done factor!
  * compiles and all tests pass!!
  * simple tests are passing, but now we start on the serious ones
  * fixed equals
  * error computation also looks fine!
  * moving to other tests
  * moving to noisy tests
  * fixed unit test
  * got it!
  * test failure: now we can start computing jacobians

  [ Varun Agrawal ]
  * fix holder_type typo
  * make ignore list consistent across Python and Matlab
  * Squashed 'wrap/' changes from d19cda546..91f3835a8
  * Squashed 'wrap/' changes from 91f3835a8..aae9b4605

  [ lcarlone ]
  * trying to figure out jacobians

  [ Varun Agrawal ]
  * undo ignore updates, all tests now pass

  [ lcarlone ]
  * isolated schur complement!
  * pipeline up and running, need to fix Jacobians next, then Schur complement
  * debugging jacobians
  * still segfaults

  [ Jose Luis Blanco Claraco ]
  * fix missing verbosityLMTranslator case

  [ Varun Agrawal ]
  * fix the Similarity3 export declarations and wrapper
  * Fix CI with separate boost install
  * temporarily added required check
  * explicitly add python version

  [ lcarlone ]
  * working on new sym matrix

  [ Milo Knowles ]
  * Three examples of failing PartialPriorFactor<Pose3> Jacobians
  * Add successful unit test for identity pose
  * Correct Jacobian in PartialPriorFactor, modify derived factors for compatibility
  * Change mask to indices and update factor docstring

  [ lcarlone ]
  * solving key problem
  * trying to fix crucial test
  * fixed optimization test: now we have to (i) allow reuse of same calibration, (ii) enable all other tests, (iii) remove cout

  [ Milo Knowles ]
  * Prefer localCoordinates over logmap

  [ lcarlone ]
  * adding test with single key
  * removed tests that are not applicable - merging to develop now

  [ Navid Mahabadi ]
  * fix: UnaryFactor Jacobian
  * update: use avialble rot2 class

  [ Varun Agrawal ]
  * fix numpy deprecation warnings
  * more specific version of python to test against
  * Squashed 'wrap/' changes from aae9b4605..3eff76f60
  * Squashed 'wrap/' changes from 3eff76f60..548e61b1f
  * added CMake variable to set the matlab.h include
  * Squashed 'wrap/' changes from 548e61b1f..29628426d
  * switch back to simple python3
  * fix number of arguments to matlab_wrap for unstable
  * Squashed 'wrap/' changes from 29628426d..9a467794e

  [ lcarlone ]
  * fixed print, removed cout, test still failing
  * amended

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 9a467794e..96ccdfd0b

  [ Milo Knowles ]
  * Fix x/y mismatch in unit tests
  * Add constructor tests and extend tests to Pose2
  * Switch to cleaner T::Logmap
  * Fix incorrect Vector dimension that was causing CI failures
  * Add LocalCoordinates() to ProductLieGroup and remove unnecessary <Eigen/Core> include to reduce compile memory

  [ lcarlone ]
  * moving to more appropriate construction of Hessian

  [ Milo Knowles ]
  * Fix Rot3::LocalCoordinates runtime error when using Cayley map

  [ lcarlone ]
  * getting better
  * test still failing
  * now I have a working prototype!
  * works now!!
  * getting ready to enable monocular operation
  * 2 tests to go
  * 1 test to go!
  * need to clean up templates and remove 2 redundant lines
  * removed extra "else"

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 96ccdfd0b..5ddaff8ba
  * operator overloading for compose
  * add operator overloading and fix some TODOs in the wrapper

  [ lcarlone ]
  * added extra unit test
  * formatting
  * improved naming, formatting, comments
  * cleanup
  * fixed glitch highlighted by CI
  * trying to fix CI error

  [ Frank Dellaert ]
  * Added double as template arg

  [ lcarlone ]
  * added comment

  [ Varun Agrawal ]
  * added double as a template for PriorFactor, NavState retract and local, some formatting

  [ Aleksei Evlampev ]
  * fix boost serialization version includes
  * remove unnecessary includes in SubgraphBuilder.h

  [ Varun Agrawal ]
  * disable Wrapper CI for GCC 5 until we optimize the wrapper
  * change KeyFormatter from boost::function to std::function
  * bunch of minor fixes

  [ Gerry Chen ]
  * remove boost::function from Key.h
  * Squashed 'wrap/' changes from 5ddaff8ba..b43f7c6d7
  * update gtsam.i print function declarations
  * update default args to match with c++
  * include pybind11/function

  [ Aleksei Evlampev ]
  * return back including boost version.hpp header

  [ Gerry Chen ]
  * Squashed 'wrap/' changes from 5ddaff8ba..bae34fac8
  * include pybind::iostream to the python wrapper cpp template
  * documentation about wrap update instructions

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from bae34fac8..b80bc63cf

  [ Asa Hammond ]
  * Remove unused body_P_sensor param
  * update docstring for dt param

  [ Varun Agrawal ]
  * remove redundant stuff
  * Squashed 'wrap/' changes from b80bc63cf..903694b77
  * Squashed 'wrap/' changes from 903694b77..b2144a712
  * Squashed 'wrap/' changes from b2144a712..0124bcc45
  * assign default variables for string in print()

  [ yotams ]
  * rolling shutter projection factor

  [ Milo Knowles ]
  * Add MagPoseFactor
  * Compute error in the body frame and fix print()
  * Improve docs

  [ Ayush Baid ]
  * Adding factor with shared calibration as a variable

  [ Varun Agrawal ]
  * fix printing of preintegration params

  [ Ayush Baid ]
  * fixing tests by moving to Cal3_S2
  * using fixed size matrix, and adding jacobian in homogeneous conversion
  * renaming key variable
  * fixing docstring
  * reverting jacobian computation from homogeneous function

  [ Jose Luis Blanco-Claraco ]
  * Avoid potential wrong memory access

  [ Varun Agrawal ]
  * print default arguments update

  [ Ayush Baid ]
  * adding prior on calibrations

  [ Varun Agrawal ]
  * override print methods and update wrapper
  * remove virtual from overridden methods, add virtual destructors to appease compiler
  * fix warnings from tests
  * fix unused warning
  * fix some interface todos
  * add pybind11/operators.h to interface template
  * update boost download link

  [ lcarlone ]
  * addeed gnc example
  * added GNC example
  * adding knownOutlier input to GNC
  * all tests done!
  * user can now also set the weights to initialize gnc!

  [ yetongumich ]
  * refactor tests and add comments
  * resolve some nits

  [ lcarlone ]
  * added comment on example interface
  * amended

  [ Fan Jiang ]
  * Working CustomFactor
  * Change to using nullptr
  * Allow KeyVector to just be lists
  * Add comment on functor signature
  * Add comment in gtsam.i
  * Add printing for CustomFactor
  * Remove unnecessary comment
  * Add documentation
  * Address Frank's comments
  * Add more comments

  [ lcarlone ]
  * fixed formatting glitch

  [ HMellor ]
  * Correct ImuFactorExamples frame description

  [ Varun Agrawal ]
  * update docstrings and format
  * Add Akshay's Cal3Bundler test
  * account for radial distortion in initial guess for `calibrate`
  * add test for rekey of LinearContainerFactor
  * override the rekey methods so as to update the properties as well
  * added destructor for CameraSet to remove warning

  [ Tim McGrath ]
  * fix bug on computation of SO(3) logmap

  [ Milo Knowles ]
  * Update commment syntax and replace typedef with using

  [ Varun Agrawal ]
  * initialize with intrinsic coordinates which has radial distortion modeled
  * add all of Akshay's tests for default model
  * addressed comments and added an additional test
  * make rr and g as const

  [ Dan Barladeanu ]
  * Comments Only.
  * fix comment to docstring

  [ Frank Dellaert ]
  * Added Range to Point2

  [ Fan Jiang ]
  * Fixed Python factor for TBB
  * Trajectory Estimation example
  * Add unit test for optimization a factor graph
  * Address Frank's comments
  * Fix example in docs

  [ Varun Agrawal ]
  * fix bug in LinearContainerFactor and warnings about Point3
  * added test for this issue

  [ Ayush Baid ]
  * updating tests
  * creating 18 point example

  [ Milo Knowles ]
  * Move MagPoseFactor to gtsam

  [ Ayush Baid ]
  * switching to sampson point line error

  [ Nithya ]
  * Added *.bib file

  [ Ayush Baid ]
  * fixing jacobians and reformatting
  * changing error values in test
  * adding jacobians on input points
  * adding jacobians on input points
  * moving to squared sampson error
  * using correct jacobian computation for calibration
  * fixing unit tests

  [ John Lambert ]
  * add transformFrom() for Point3 in Similarity3

  [ Ayush Baid ]
  * adding 11 point example for cal3bundler
  * fixing test cases

  [ Jose Luis Blanco Claraco ]
  * add expressions for cross() and dot()

  [ Nithya ]
  * additional citations

  [ Varun Agrawal ]
  * merge double into Values templates
  * add cmake command to run GTSAM python tests

  [ Akshay Krishnan ]
  * removing Sampson error + some tests cleanup
  * increasing calibrate() tolerance
  * small covariance change

  [ akrishnan86 ]
  * formatting changes
  * removing duplicate data file

  [ acxz ]
  * use size_t variable type
  * update timeLago.cpp with newer Sampler interface
  * use size_t variable type
  * update boost::bind usage

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 0124bcc45..07330d100

  [ Akshay Krishnan ]
  * removing failing test and unused data

  [ akrishnan86 ]
  * updating documentation for factor

  [ acxz ]
  * explicitly use boost::placeholders:_X for compilers that do not respect function scope
  * replace deprecated tbb functionality

  [ Akash Patel ]
  * formatting

  [ acxz ]
  * formatting
  * using using for boost placeholders in tests
  * add comment for purpose of variable
  * formatting

  [ Akshay Krishnan ]
  * updating points name, constexpr
  * changing to macro EssenstialMatrixfactor4
  * all jacobian tests for essential matrix use macro

  [ akrishnan86 ]
  * formatting example

  [ Varun Agrawal ]
  * update the pgp servers to get the LLVM GPG key
  * update key server in other workflow files

  [ Jay Elrod ]
  * Add user-defined copy constructor for Rot2

  [ roderick-koehle ]
  * Forward declaration of PinholeCameraCal3Fisheye
  * Forward declaration for Set of Fisheye Cameras
  * Extend python wrapper to include fisheye models.
  * Forward declaration of fisheye camera.
  * Unit test for equidistant fisheye
  * Extend unit testing of omnidirectional projection

  [ Varun Agrawal ]
  * Added lots of tests for BetweenFactor
  * add Pose3 expmap to wrapper
  * typo fix

  [ roderick-koehle ]
  * Introduce setUpClass, python snake_case variables
  * Use of common setUpClass method
  * Correct tab to spaces to fix formatting
  * Improved accuracy for analytic undistortion

  [ Varun Agrawal ]
  * cleaner variables
  * fix dimension for Pose3 test

  [ Scott ]
  * Fix serialization of ISAM2 class

  [ John Lambert ]
  * Update ShonanAveraging.h
  * add interface in C++, and helper extractRot2Measurements()
  * fix typo
  * add ShonanAveraging2 constructor to wrapper, that accepts BetweenFactorPose2s as input
  * add conversion function for Pose2 -> BinaryMeasurement<Rot2>
  * fix typo on 3x3 matrix def

  [ Scott ]
  * Added ISAM2 serialize test

  [ John Lambert ]
  * use default parameters if none provided, and remove gtsam namespace prefix in .h file
  * check in python unit test for new functionality

  [ roderick-koehle ]
  * Add comment about initial guess in undistortion

  [ John Lambert ]
  * add missing import to python unit test
  * improve docs about compiling without TBB
  * improve wrapper compilation instructions, when TBB not installed
  * set pmin and pmax in unit test

  [ roderick-koehle ]
  * Add ambiguous calibrate/uncalibrate declarations.
  * Missing CameraSet binding specialisations
  * Update ignore list in CMakeFile

  [ Varun Agrawal ]
  * replaced boost with std for placeholders, bind and function
  * update all the tests

  [ John Lambert ]
  * fix typo in block indexing, 3x3 covariance for Pose2 should have just 1x1 block for theta

  [ roderick-koehle ]
  * Testing CameraSet and triangulatePoint3
  * Unittest, triangulation for Cal3Unified

  [ Varun Agrawal ]
  * break interface file into multiple files
  * break up preamble and specializations so there are no duplicate includes
  * update template for wrapper
  * move RedirectCout to base/utilities.h
  * update CMake
  * wrapper updates
  * enable CI builds
  * fixes
  * Squashed 'wrap/' changes from 07330d100..d9ae5ce03

  [ John Lambert ]
  * try increasing pmax to pass test
  * fix typo

  [ Varun Agrawal ]
  * matlab wrapper header update

  [ John Lambert ]
  * use simple example for unit test
  * use mod when comparing angles
  * fix assert on angles
  * update logic in angular error comparison

  [ roderick-koehle ]
  * Shared data for triangulation unit tests
  * Shared setup triangulation unit test
  * Minor fix test_Cal3Unified
  * Minor fix test_Cal3Fisheye
  * Remove commented out line
  * Remove comment
  * Remove spaces in empty line

  [ Varun Agrawal ]
  * update interface files with latest develop
  * remove extraneous file

  [ Akash Patel ]
  * Revert "replace deprecated tbb functionality"

  [ Scott ]
  * Try macOS fix

  [ lcarlone ]
  * added templates for factors
  * setting up .h and tests - compiles and tests pass.
  * put in place initial functions
  * removed cpp
  * now I need to move to testing and interpolation
  * added interpolation function from shteren1
  * removed interp from Pose3, starting to take pass on projection factor and test
  * amended
  * pass on projection factor, but looks great overall
  * everything working out so far with the tests
  * all tests are passing!
  * added nice test on cheirality exception - done with projectionFactorRollingShutter

  [ Akshay Krishnan ]
  * wrapping triangulate nonlinear

  [ John Lambert ]
  * use upper 3x3 sub-block of covariance matrix for converting BetweenFactor to BinaryMeasurement, and use Isotropic in ShonanAveraging2
  * add comments about tangent space and covariance matrix ordering

  [ lcarlone ]
  * started serious testing: all tests pass for now
  * solidified add and equal
  * finding best way to test RS errors
  * yay! error test passes!
  * jacobians are good to go!
  * jacobians and errors are well tested now
  * got to the final monster. Now I need to implement createHessian
  * stuck on compile issue

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from d9ae5ce03..571c23952

  [ lcarlone ]
  * all pass!
  * all pass!
  * moved common function to cameraSet. commented issues with templated calls to functions in cameraSet
  * removed comments. Code is complete now. Need few more unit tests and we are good to go
  * removed printout, solved CI issue

  [ akrishnan86 ]
  * adding gtsam scope

  [ lcarlone ]
  * fixed another test, few more to go
  * fixed test with lmk distance
  * test with EPI fixed
  * working on testing + cosmetic improvements to print for smart factors
  * fixed another test.
  * done with tests, now I only have to rename gamma to keep consistency with the projection factors RS
  * renamed params. need one last test
  * extra cleanup
  * added timing test
  * CHECK -> EXPECT
  * test still in progress; removed a tmp function
  * fixed last test - this is good to go!
  * fixing ci issue

  [ Varun Agrawal ]
  * add Windows export symbols for PinholeCamera
  * first pass at IMUKittiExampleGPS.py
  * speed up boost install
  * improvements to CI files
  * Install boost directly from binary
  * use Boost 1.67.0 for Windows
  * use env variables and fix setting of GITHUB_ENV
  * use more cores for make on unix systems
  * improvements to windows builds
  * Boost 1.72.0 for Windows

  [ Jose Luis Blanco Claraco ]
  * Add missing getter

  [ John Lambert ]
  * start wrapping GNC
  * Remove std prefix in .i fn signatures
  * Remove ‘class’ from template specifications
  * try imports
  * provide template list of typedef
  * test GNC along with other non-linear optimizers in python unit tests
  * remove Dogleg from GNC-supported base-optimizers, and use nested templates
  * add virtual to all classes in the .i file
  * add GTSAM_EXPORT to GncParams.h
  * add GTSAM_EXPORT to GncOptimizer.h
  * clean up test_Pose3SLAMExample.py
  * add type hints, use numpy instead of math module
  * add type hints to visual_data_generator.py
  * clean up plot.py with modern type hints
  * add more missing type hints
  * add missing type hint
  * add missing docstring for an input arg
  * use custom typedefs for GNC + GaussNewton and GNC + LM
  * import GncLMParams, GncLMOptimizer to prevent pybind's automatic long names from name concat
  * add missing gtsam prefix
  * add Optional type annotations where needed

  [ lcarlone ]
  * now using MakeJacobian
  * simplified jacobian computation, improved comments
  * reformatted using google style
  * renamed interp param to alpha, improved comments, added cpp

  [ John Lambert ]
  * Start wrapping the verbosity options for GNC

  [ Varun Agrawal ]
  * modernize NonlinearEquality.h
  * update docs to reflect min Boost version
  * small wrapper updates
  * fix extractPoint2/3 and added C++ tests
  * added Python tests
  * updated docs
  * full slew of tests
  * update wrapper with defaults
  * set lowest common boost version
  * Link to GTSAM-EXPORT doc
  * only format c++ file (no code changes)
  * working implementation

  [ Eric ]
  * Small clarification and md cleanup

  [ John Lambert ]
  * Expand DSF map unit tests
  * improve docstring
  * clean up SFMdata

  [ Varun Agrawal ]
  * format and modernize NonlinearEquality2
  * wrap NonlinearEquality2 + python unit test
  * Update `make python-test` so that it works even if GTSAM is already installed
  * Add section about Boost version requirement
  * add missing import of Pose3

  [ lcarlone ]
  * starting to make templates for smart projection factors uniform (all on cameras)
  * investigating potential templating alternatives
  * don't like it - going to create a different class
  * reverted all changes back to master
  * and created a new factor instead - moving to testing now
  * compiles, testing now
  * fixed bug
  * progress on tests
  * removed line
  * still challenging to parse extrinsics
  * tests finally passing!

  [ Varun Agrawal ]
  * add guards for system Metis
  * CI special case for using system version of 3rd party libraries
  * formatting
  * add appropriate guards for metis

  [ lcarlone ]
  * plot twist: templating new factor on CAMERA
  * added capability to use multiple measurements from the same pose. unfortunately still had to define a non-templated function from cameraSet
  * all tests pass except one on serialization
  * passing tough test - nice!
  * done with all tests
  * adding basic function, get ready for testing
  * done with tests
  * testing mode: step 1: need to figure out the manifold stuff
  * testing mode: still stuck, getting closer to the problem

  [ Varun Agrawal ]
  * Basis functions (#403)

  [ Gerry Chen ]
  * python unit test for FitBasis
  * add <pybind/stl.h> and fix constructor argument order
  * docstrings and formatting

  [ lcarlone ]
  * nice cleanup to triangulation, moved get camera matrix to cameras, to generalize to other cameras
  * linear triangulation solved!
  * good progress - still need to work on TriangulatePoint3
  * habemus triangulation
  * all tests are ready. 2 minor refinements to go: - remove default error - leverage full range of spherical camera in triangulation
  * polished empty calibration
  * adjusted rolling shutter as well
  * almost done: need to: - fix jacobian for reprojection error of the spherical camera - need to improve DLT to fully leverage range of spherical camera
  * fixed reproj error jacobians and added solid tests
  * supertriangulation! with spherical camera
  * all tests pass also with THROW cheirality

  [ Varun Agrawal ]
  * fix python tests and make verbose so they are easy to debug

  [ lcarlone ]
  * added test on rank Tol for different camera model
  * done!

  [ Frank Dellaert ]
  * Added override
  * Some formatting
  * Got rid of SchurComplementAndRearrangeBlocks_3_12_6
  * Check equals not assert_equal
  * Google-style formatting in new files.
  * Cleaned up interpolate

  [ Varun Agrawal ]
  * verbose python testing

  [ lcarlone ]
  * Merge branch 'develop' into feature/cameraTemplateForAllSmartFactors

  [ Varun Agrawal ]
  * Fix bug in FourierBasis
  * break down tests to make reporting clearer

  [ Frank Dellaert ]
  * Removed types defined in Base class
  * Documented linear factors better.
  * Formatting and better documentation
  * Added two ReadMe files to document the plethora of smart factors.
  * Address review comments, docs only.

  [ John Lambert ]
  * add Pose2.align() to wrapper
  * add Point2Pairs typedef to Point2.h
  * add gtsam::Point2Pairs to CMakeLists.txt
  * add Point2Pairs to specializations
  * move align as function, not as class method
  * start python unit test for align()
  * add python unit test on Pose2.align()
  * fix missing imports
  * import align from gtsam directly
  * directly import only classes from gtsam
  * use boost::optional in .i file directly

  [ Varun Agrawal ]
  * add a cmake flag for easy toggling BetweenFactor jacobian computations
  * add support for boost::optional return type in geometry.i
  * formatting
  * update documentation for boost::optional binding

  [ John Lambert ]
  * use updated wrap syntax for Verbosity enum in .i file

  [ Varun Agrawal ]
  * refactor to remove all pylint errors
  * fix matplotlib deprecation

  [ lcarlone ]
  * added comment on rankTol

  [ Varun Agrawal ]
  * removed duplicate
  * wrap smart flags for various noise models

  [ Frank Dellaert ]
  * Added virtual constructor and re-formatted constructors
  * Switched to borglab hub
  * Updated README
  * Fixed TODOs

  [ Frank dellaert ]
  * Fixed VNC docs for Mac

  [ Varun Agrawal ]
  * clean up and refactoring to use custom preintegration params
  * formatting
  * wrap key printing funcs and remove redundancy
  * wrap more JacobianFactor constructors
  * update template to record correct name of cpp file
  * minor improvements to CombinedImuFactor
  * account for bias on position in jacobians of CombinedImuFactor
  * Add unit test for checking covariance of CombinedImuFactor
  * additional comments to make understanding the code easier
  * no need to assign negative to jacobians as they cancel out later
  * add details about noise propagation for CombinedImuFactor in ImuFactor.pdf

  [ Akash Sharma ]
  * Update Find TBB to handle TBB installed with homebrew on OS X Better Error message for TBB handling with versions greater than 2021.1 on OS X

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 571c23952..add6075e8
  * make TBB finding depend on the GTSAM_WITH_TBB flag
  * Add the Preintegrated IMU jacobians tech report and mention it in the docs
  * update ImuFactor reference
  * add test for checking covariances between ImuFactor and CombinedImuFactor
  * print statements in ImuFactor
  * typedef for Vector15
  * updated CombinedImuFactor covariance with additional off-diagonal elements
  * CombinedScenarioRunner
  * actually test the covariances and fix bug
  * update test with comments
  * update ImuFactor doc
  * remove print statements
  * minor refactoring
  * Squashed 'wrap/' changes from add6075e8..d6350c214
  * updated ImuFactor doc with details about CombinedImuFactor
  * added details about covariance discretization with references
  * add test for MC based covariance estimation
  * undo name change from 984a90
  * detailed implementation of CombinedImuFactor noise propagation
  * test passes

  [ lcarlone ]
  * renamed smartProjectionFactorP -> smartProjectionRigFactor
  * modernized factor
  * fixed equal
  * fixing tests
  * halfway there
  * working on tests
  * all tests work except serialization
  * added extra test with multi cam

  [ Gerry Chen ]
  * OptionalJacobian fixed constructor with dynamic pointer
  * AdjointMap jacobians for Pose3
  * only compute jacobians when needed
  * AdjointTranspose
  * only compute intermediate jacobians when needed
  * review comment: move check outside lambda

  [ lcarlone ]
  * added more comments here and there
  * changing API for rolling shutter

  [ Frank Dellaert ]
  * Added wrapper files
  * Added WIP python test

  [ lcarlone ]
  * bug fix - finalizing last few tests
  * all tests are passing!
  * done with tests
  * now I only need to fix comments in rolling shutter factor
  * all set here!

  [ John Lambert ]
  * add failing unit test on axisAngle for Rot3 in c++
  * add python unit test for Rot3
  * fix typo
  * fix assert

  [ Varun Agrawal ]
  * run tests for C++ CI

  [ Fan Jiang ]
  * Add wrapping and tests

  [ Varun Agrawal ]
  * lyx update

  [ Fan Jiang ]
  * Revert "Revert "replace deprecated tbb functionality""
  * Fixed numerical problems near +-pi
  * Revert "Revert "Revert "replace deprecated tbb functionality"""
  * Cleanup equation

  [ Varun Agrawal ]
  * update proxy functions to use the Adjoint and AdjointTranpose methods
  * add docs explaining why pRw_H_t is the same as Rw_H_R
  * make threshold more lenient

  [ jerredchen ]
  * added new Python examples using iSAM2
  * Added minor comments for documentation

  [ Fan Jiang ]
  * simplify logic of biggest diagonal
  * Fix typo

  [ John Lambert ]
  * Add specific examples to stress-test the log map
  * loosen tolerance on trace(R) == -1

  [ Fan Jiang ]
  * Fix again with better approximation

  [ jerredchen ]
  * adjusted docstrings to match google style guide

  [ Fan Jiang ]
  * Revert "Revert "replace deprecated tbb functionality""

  [ Gerry Chen ]
  * correct jacobians
  * documentation
  * explicitly define simpified jacobian expressions for efficiency
  * stricter tolerances
  * Revert "stricter tolerances"
  * address frank review comments

  [ Varun Agrawal ]
  * use variables to store targets
  * clean up the __init__ file
  * address review comments

  [ yetongumich ]
  * add logmap expression
  * add logmap expression

  [ John Lambert ]
  * add LAGO (for Pose2) to python wrapper

  [ Ivor Wanders ]
  * Fix dangling reference in static allocation.

  [ John Lambert ]
  * add LAGO example to Python
  * use nested namespace in wrapper from Varun's suggestion
  * use nested namespace

  [ Varun Agrawal ]
  * add type annotations
  * fix type annotation
  * use python f-strings

  [ John Lambert ]
  * fix typos in python example file
  * add lago unit test, since lago namespace cannot be imported properly be wrapper

  [ Varun Agrawal ]
  * refactor the example to make it cleaner
  * replace static variable with variable of greater scope in cpp example
  * fix the included_imu_measurement_count scope

  [ Fan Jiang ]
  * TBB revival

  [ John Lambert ]
  * use unittest framework instead of pytest
  * add missing default arg on useOdometricPath

  [ roderick-koehle ]
  * Test of jacobian of Cal3Fisheye for on-axis point
  * Test jacobian of Cal3Unified for on-axis point
  * Avoid division by zero in jacobian calculation

  [ Varun Agrawal ]
  * put all example scripts inside main() functions and apply formatting

  [ John Lambert ]
  * use Point3 instead of artificial vector3
  * use Point3 instead of artificial vector3

  [ Varun Agrawal ]
  * add type annotations
  * add conjoining constructor for VectorValues
  * generate GTSAM_UNSTABLE Cmake exports
  * update cmake function to set default package version number

  [ jerredchen ]
  * made changes according to Frank

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from d6350c214..0ab10c359
  * update CMake
  * Add tests for Lie::interpolate jacobians

  [ Gerry Chen ]
  * much cleaner Adjoint jacobian
  * delete "FIXME" because `compose` unit tests check `AdjointMap`

  [ Varun Agrawal ]
  * address review comments
  * fix small bug
  * specify optional args as Optional type

  [ Frank Dellaert ]
  * Add main

  [ jerredchen ]
  * removed ground truth; angles set in deg and converted to rad
  * removed ground truth; set ang in deg and convert to rad for Pose3iSAM2

  [ roderick-koehle ]
  * Check numeric stability close to optical axis
  * Numerically stable refactoring of fisheye jacobian
  * Fix missing semicolons
  * Undo change in scaling function
  * Fix type in extression for dyd_dyi
  * Convergence of equidistant scaling utilizing atan2

  [ Varun Agrawal ]
  * address review comments

  [ roderick-koehle ]
  * Fix calling scaling_factor static method.

  [ jerredchen ]
  * formatting by Google style

  [ Varun Agrawal ]
  * address review comments

  [ Gerry Chen ]
  * Address review comments: negative sign and AdjointTranspose section

  [ yetongumich ]
  * enable expression double multiply

  [ Gerry Chen ]
  * add jacobian of second argument to adjoint and adjointTranpsose

  [ Jose Luis Blanco Claraco ]
  * Fix warnings raised by GCC -Wpedactic
  * more consistent notation of macros

  [ Varun Agrawal ]
  * add printErrors method to GaussianFactorGraph

  [ Frank Dellaert ]
  * Use Eigen expressions more effectively and kill & in code.
  * Cleaner Jacobian.

  [ John Lambert ]
  * Create Similarity2.h
  * Create Similarity2.cpp
  * add basic Python interface to .i file
  * add python unit tests
  * fix typo
  * add Pose2Pair typedef

  [ lcarlone ]
  * fixed formatting (plus small fix: std::vector -> fastVector)
  * formatting + const&
  * more const&
  * now throwing exception is params are incorrect
  * added variable in loop
  * point2 -> measurement
  * this will need to be applied in #861
  * disabled timing for test

  [ John Lambert ]
  * fix typo in types
  * add means() function to Point2.h
  * add missing `means()` function for Point2

  [ lcarlone ]
  * vector<Key>  -> keyVector
  * Merge branch 'develop' into feature/sphericalCamera
  * fixed test, but what decreased basin of convergence?
  * fixed readme
  * serialization is still off
  * final cosmetics
  * added intermediate camera variable for clarity
  * applied formatting to modified files
  * got rid of second constructor
  * further cleanup before moving to sharedPtrs
  * moved rig to use shared ptrs
  * now using shared ptrs

  [ John Lambert ]
  * fix typo in size of mean vector for Point2Pair means()

  [ Jose Luis Blanco Claraco ]
  * prefer semicolon in definitions
  * more extra semicolon warnings fixed

  [ Varun Agrawal ]
  * fix warning
  * reduce call stack
  * use safer eigen indexing syntax
  * wrap Colamd function
  * format and refactor the SFM BAL example
  * properly deprecate eliminate functions
  * address reviewer comments
  * add return type definitions
  * fix OrderingType declaration
  * update cmake to copy python tests whenever they are updated

  [ Gerry Chen ]
  * update python wrapper

  [ Varun Agrawal ]
  * properly deprecate additional methods to fully finish deprecation
  * fix VectorValues include

  [ duembgen ]
  * Add namespace to ambiguous placeholders

  [ Frank Dellaert ]
  * Formatting with Google style
  * Formatted sudokus better
  * Revamped arc consistency
  * Formatting only

  [ Varun Agrawal ]
  * wrap KeyVector methods

  [ Frank Dellaert ]
  * use emplace_shared
  * Cleaned up AC1 implementation
  * use emplace_shared
  * Got rid of sharedValues
  * Got rid of straggling typedefs
  * Fixed all examples
  * Fixed up sudoku tests after merge

  [ Fan Jiang ]
  * Add deprecations
  * Fix windows build

  [ beetleskin ]
  * Use FastDefaultAllocator for Values to adhere allocation compile flags

  [ Fan Jiang ]
  * Remove Exports

  [ roderick-koehle ]
  * Removed comments

  [ Varun Agrawal ]
  * wrap additional ISAM2 methods
  * comment out method

  [ lcarlone ]
  * added template arguments to triangulatePoint3 in test
  * adding to python?
  * removed again
  * added template argument

  [ Varun Agrawal ]
  * make noise model default constructors available for serialization
  * enable pickling for a bunch of objects
  * comment out incomplete code
  * remove commented out code
  * fix all axpy deprecations
  * update the packaged Eigen to 3.3.9
  * Revert "update the packaged Eigen to 3.3.9"
  * add workaround for Eigen serialization issue
  * Add Eigen/Core header
  * make LinearContainerFactor public for serialization
  * wrap other ISAM2 methods
  * wrap alternate ISAM2::update method

  [ Brice Rebsamen ]
  * .gitignore: swp files
  * don't return a const
  * missing shared_ptr include
  * ParseMeasurement<Pose2> initializer list needs an extra argument

  [ beetleskin ]
  * add missing interface for PoseTranslationPrior

  [ Fan Jiang ]
  * Fix the template substitution

  [ Gerry Chen ]
  * NoiseModelFactorN - fixed-number of variables >6
  * c++11 doesn't support std::size so use obj.size() instead
  * alternate make_index_sequence impl if no boost::mp11
  * optional jacobian overloads backwards compatibility
  * backward compatibility unit tests for NoiseModelFactor4
  * NoiseModelFactor4 implemented as derived class of NoiseModelFactorN
  * converted all NoiseModelFactorX to inherit from NoiseModelFactorN
  * documentation
  * avoid inheritance by conditionally defining backwards compatibility types/funcs in NoiseModelFactorN
  * switch template bool specialization order
  * can't get "using NoiseModelFactorX = NoiseModelFactorN" to work

  [ Fan Jiang ]
  * Fix quaternion on M1
  * Only keep essentials

  [ lcarlone ]
  * renamed README
  * added test, removed check that was not supposed to work
  * formatting/comment
  * addressed final comments

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 0ab10c359..248971868
  * update interface files for correct wrapping
  * update all the matlab tests to add missing arguments
  * CMake updates

  [ John Lambert ]
  * add Rot2.ClosestTo()
  * finish Rot2.ClosestTo()
  * fix typo
  * use ClosestTo() in initializer list
  * fix Eigen error

  [ lcarlone ]
  * generalized factor and enabled unit tests

  [ David Wisth ]
  * add override keyword to functions
  * remove "virtual" keyword for functions with "override"

  [ Gerry Chen ]
  * alternate option for typedef-ing X1, X2, ...
  * revert typedef X1, X2, ... to old version, and clean up a little
  * switch `using NoiseModelFactorX = ...` to `#define ...`.
  * fix Windows CI issue: VALUE happens to have the same name in PriorFactor
  * review comments
  * update doxygen (review comment)
  * Matlab Wrapper function to extract Vectors from a Values object (#733)

  [ Varun Agrawal ]
  * Windows Fixes (#904)
  * Add new upsert method to Values

  [ Frank Dellaert ]
  * Fixed small typos
  * wrapped and tested EssentialMatrixConstraint
  * Fix spelling

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 248971868..086be59be

  [ Frank Dellaert ]
  * Get rid of "and" business
  * Added DiscreteValues file

  [ Varun Agrawal ]
  * remove previously added parameters now that we support defaults

  [ Frank Dellaert ]
  * Use DiscreteValues everywhere
  * Moved traits
  * Added value, for wrapper

  [ peterQFR ]
  * Set the install path to be colconone

  [ Frank Dellaert ]
  * Wrapped more DiscreteFactorGraph functionality
  * Use evaluate not value
  * Simplified parsing as we moved on from this boost version
  * New, non-fancy constructors

  [ Varun Agrawal ]
  * replace upsert with insert_or_assign

  [ Frank Dellaert ]
  * Added chooseAsFactor method for wrapper
  * Wrapped and test Discrete Bayes Nets

  [ Varun Agrawal ]
  * add default constructor for DiscreteKeys and minor improvements

  [ Frank Dellaert ]
  * Add operators
  * Add documentation and test for it
  * Wrap () operators
  * Attempt at fixing CI issue

  [ peterQFR ]
  * Add Barometric Factor
  * Remove custom install for ament environment

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 086be59be..2cbaf7a3a

  [ Frank Dellaert ]
  * Added dot methods

  [ Varun Agrawal ]
  * remove pickle declarations from interface files

  [ Frank Dellaert ]
  * dot methods
  * wrap and test dot method
  * dot methods for Bayes tree
  * reversed order of nodes in dot

  [ lcarlone ]
  * added clone to play well with gnc

  [ peterQFR ]
  * Add non-zero tests, error
  * Apply Google Format

  [ Frank Dellaert ]
  * wrap and notebook
  * compilation issue
  * Generic dot export with DotWriter
  * Show factor graph in notebook
  * GraphvizFormatting refactor - separate file - inherit from DotWriter - made dot/dot/saveGraph the pattern - deprecated saveGraph(ostream) method
  * fixed method naming convention

  [ Varun Agrawal ]
  * fix axpy warning

  [ Fan Jiang ]
  * Bump version to 4.1.1

  [ peterQFR ]
  * Use translation method to get jacobian for pose in pose coordinates
  * Apply google format

  [ Varun Agrawal ]
  * add alignment macro and modernize typedefs
  * add class-level GTSAM_EXPORT
  * remove unnecessary instantiations
  * use passed in calibration for initialization and add EmptyCal serialization
  * initialize all EmptyCal shared pointers

  [ Frank Dellaert ]
  * Use non-deprecated graphviz methods

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 2cbaf7a3a..3e076c9ac
  * make gtsam_unstable conform to python wrapping layout

  [ Frank Dellaert ]
  * Update README.md
  * Better Bayestree wrapping
  * Test and dot file

  [ Yun Chang ]
  * correctly parse optimizer params for base optimizer in gnc

  [ Frank Dellaert ]
  * Create markdown representation in DTFactor
  * Formatting, unused variable
  * Added print with keyformatter
  * Add formatter
  * Added conditional markdown formatter
  * Fix compilation issues
  * Expose key formatter in wrapper
  * More sophisticated markdown
  * Push fix for windows
  * markdown for Bayes nets
  * markdown for DiscreteFactorGraph
  * Made parent-less vertical, like a factor
  * markdown for DiscreteBayesTree

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 3e076c9ac..767a74718
  * replace _repr_markdown_ with markdown
  * Add DiscreteConditional unit test for markdown printing

  [ Frank Dellaert ]
  * Fix markdown names (that somehow reverted)
  * switch formatter and writer arguments
  * Fix missing argument
  * Fix test
  * Fix some typos
  * DiscretePrior class
  * Wrap DiscretePrior
  * single argument variants
  * cpp file
  * Wrap single-argument methods
  * Additional DiscreteConditional constructors to support wrapper.
  * markdown that renders better on github/pages
  * Add no-argument solve and sample to DiscretePrior
  * Specialized DecisionTreeFactor constructors
  * Replaced add variants with single variadic template
  * Allow a vector of doubles for single-variable factors
  * likelihood
  * Fix typo in test
  * enumerate
  * Removed all specialized constructors, because wrapper is awesome!
  * Removed 2 and 3 key constructors for DecisionTreeFactor because wrapper is awesome!
  * single-value sample()
  * Version logic + version bump to 4.2a0
  * Fix ambiguity
  * Add auto
  * Removed shared_ptr from Bayes nets and factor graphs
  * Fix compilation issues
  * Fix wrap of subgraph

  [ John Lambert ]
  * forece nonnegative scale for Sim(3)

  [ Frank Dellaert ]
  * Moved empty to Factor base class.
  * Revive BetweenFactorEM, without LieVector
  * Remove Deprecated Lie* classes
  * "fixed" Unstable MATLAB examples - untested
  * Fix unstable c++ examples
  * Tested python wrapper without Lie*
  * Global replace to V42
  * Fix everything to work with no deprecated methods allowed.
  * Remove deprecated methods from wrapper

  [ Varun Agrawal ]
  * fix decision tree equality and move default constructor to public
  * add formatting capabilities to DecisionTree
  * revert incorrect change
  * new DecisionTree constructor and methods that takes an op to convert from one type to another
  * minor format
  * added SFINAE methods for Leaf node equality checks
  * replace dot with DOT to prevent collision with vector dot product
  * minor fix
  * undo change to test
  * formatter passed as reference and added a default formatter method
  * undo dot changes
  * add comparator as argument to equals method
  * address more review comments
  * rename comparator to compare and capture tol in the function lambda.

  [ Frank Dellaert ]
  * Removed copy/paste convert
  * Define empty and check for it in apply variants
  * Refactor print, equals, convert
  * Fixed dot to have right arguments
  * Renamed protected method convert -> convertFrom
  * Fix compile error on windows
  * Added an optional names argument for discrete markdown renderers
  * Fix sample()
  * italicized parent values
  * Fixed some examples
  * Fixed issues with sample
  * Fixed python test

  [ Varun Agrawal ]
  * Move DefaultFormatter to base class and add defaults. Also replace Super with Base and add using.
  * kill commented out code
  * replace typedef with using and improve docstrings

  [ David Wisth ]
  * fix destructor virtual keyword
  * change from SharedGaussian to SharedNoiseModel
  * remove unnessecary constructor - use default arguments instead
  * fix constructor documentation
  * change a couple of variables to const

  [ Varun Agrawal ]
  * Undo DefaultFormatter change

  [ Frank Dellaert ]
  * Undo changes in 3dparty
  * Added more GTSAM_DEPRECATED directives
  * Some small doc changes
  * Address comments
  * Added test and fixed constructor
  * Straight-up depth-first fold method
  * visit and visitWith
  * Use template parameter for functions, enables auto
  * Fix compile issues on Ubuntu/windows
  * Use make-shared where possible
  * Avoid internal warnings with GTSAM_ALLOW_DEPRECATED_SINCE_V42 ON
  * Fix small bug with names not being passed if no parents
  * Bump prerelease version to alpha 1
  * Fix segfault when showZero==false
  * Added tests

  [ lcarlone ]
  * ruled out corner case where weights are outside [0,1] in TLS

  [ Fan Jiang ]
  * Remove Potentials
  * remove Potentials.cpp
  * Address comments

  [ Varun Agrawal ]
  * undo deprecation in BayesTree until later

  [ Frank Dellaert ]
  * fail fast in linux matrix

  [ lcarlone ]
  * added robustness to triangulation
  * moved invDepth-related variables

  [ Frank Dellaert ]
  * Initial attempt at html
  * Remove styling: use css
  * Refactor of markdown
  * Working html for conditionals
  * Fix include
  * html for all graphs
  * Made cartesian product static, and added specialization in DiscreteValues. Added markdown and html methods for the latter.
  * Make free versions and wrap
  * Fix failing test
  * Bump version
  * Fix failing test
  * Fix single quotes
  * Fix single quotes

  [ Jose Luis Blanco-Claraco ]
  * FG print(): fix empty lines on nullptr; avoid endl

  [ John Lambert ]
  * Update test_Triangulation.py
  * fix syntax errors
  * add missing type hint
  * yapf pep8 reformat
  * wrap new noise model arg for gtsam.triangulatePoint3
  * add missing type hint import

  [ Varun Agrawal ]
  * add better tests for probPrime and add a fix

  [ John Lambert ]
  * add missing type hint annotation import

  [ lcarlone ]
  * thresholded mu to avoid case mu = 0 in TLS. improved verbosity handling

  [ Calvin ]
  * Added a convenience function for plotting 2D points.

  [ Frank Dellaert ]
  * Constructor from PMF
  * exposing more factor methods
  * Comments only
  * Replace buggy/awkward Combine with principled operator*, remove toFactor
  * Wrapped multiplication
  * marginals without parents

  [ Varun Agrawal ]
  * fix tests

  [ Frank Dellaert ]
  * Rename DiscretePrior -> DiscreteDistribution
  * Bump version to 4.2a3
  * sample variants

  [ Calvin ]
  * Removed a spurious commented line and included a comment about what the K value signifies.

  [ Frank Dellaert ]
  * Some reformatting/docs/using
  * Wrap push_back methods
  * Change default to not confuse people
  * New, more powerful choose, yields a Conditional now
  * Fix unit tests after default changed
  * Add formatter
  * Wrap partial eliminate
  * Use key formatter for dot
  * Fix docs
  * cleanup
  * Better print and new `max` variant
  * `optimize` now computes MPE
  * New lookup classes
  * Deprecated solve
  * Now doing MPE with DAG class
  * deprecated solve
  * deprecated optimize
  * MPE now works
  * made internal protected choose to avoid copy/paste in Lookup
  * optimalAssignment -> optimize. Not deprecating as in unstable.
  * Added optimize variants that take custom ordering
  * fix typos
  * Fix wrapper
  * updates to fix various issues
  * moved argmax to conditional
  * Fix python tests
  * Fix examples

  [ Varun Agrawal ]
  * fix for setup.py install deprecation

  [ senselessDev ]
  * expose some iSAM2/FixedLagSmoothing functionality for the bindings

  [ Varun Agrawal ]
  * Update python install in CI to use pip

  [ Frank Dellaert ]
  * cpp file for utilities
  * Default constructor
  * New constructor
  * discreteKeys method
  * expNormalize, from Kevin Doherty
  * discreteKeys method
  * remove export, typo
  * more precise printing
  * typo
  * test new unzip method
  * Change template type
  * exact equality
  * expose advanced interface
  * exact equality

  [ Varun Agrawal ]
  * Update python install in CI to use pip

  [ senselessDev ]
  * use direct memeber access for ISAM2Params
  * use default for parameter instead of overloading

  [ Frank Dellaert ]
  * Fix most lint errors
  * Fix formatting
  * Thresholding test
  * New test on marginal
  * linting
  * linting
  * linting
  * Added missing header
  * Added cautionary notes about fold/visit
  * Fixed thresholding and fold example

  [ senselessDev ]
  * add position to Point2 nodes in GraphViz
  * expose GraphvizFormatting and test it in Python
  * add python test files to test target dependencies
  * consider CMAKE_INSTALL_PREFIX for python-install target
  * dont copy GT copyright
  * remove --prefix for setup.py

  [ Frank Dellaert ]
  * Added sumProduct as a convenient alias
  * Python

  [ Calvin ]
  * Modified the scaling values for plotting uncertainty ellipses to properly display 3 standard deviations for both 2D and 3D cases.

  [ Frank Dellaert ]
  * Fix return type
  * Fix docs (#1064)
  * Added inference module
  * Made all Bayesnets derive from BayesNet

  [ John Lambert ]
  * Update slam.i
  * fix typo
  * fix typo

  [ Frank Dellaert ]
  * Remove obsolete definitions
  * Variable positions for Bayes nets

  [ John Lambert ]
  * fix template bug
  * add new type for vector of Rot3's
  * add Rot3Vector type to specializations
  * add Rot3Vector to python/CMakeLists.txt
  * make vector of Rot3's opaque

  [ Frank Dellaert ]
  * Expose things in the wrapper
  * fix unit test

  [ John Lambert ]
  * Address Akshay comments
  * fix templated function

  [ Frank Dellaert ]
  * Added position hints
  * allow for boxes!

  [ John Lambert ]
  * define FindKarcherMean in .i file

  [ Frank Dellaert ]
  * Add dot in all wrappers
  * Distinguish writer from formatting
  * allow factorPositions

  [ John Lambert ]
  * use Eigen::aligned_allocator
  * use Eigen::aligned_allocator
  * use aligned allocator for Rot3Vector

  [ Frank Dellaert ]
  * Bump version
  * Fix wrapping

  [ Calvin ]
  * Changed all instances of the Sigma value, k, to 5 for plotting the covariance ellipse.
  * Updated comments to reflect standard deviations instead of variances in the discussions regarding the values for k.

  [ senselessDev ]
  * revert FactorIndices default argument to overloading for now
  * remove last overseen stub for bindings
  * adapt examples to new direct member access
  * expose iSAM2 parameter factorization enum
  * expose iSAM object for iFLS, fix __repr__ of iFLS, bFLS

  [ Frank Dellaert ]
  * add space after commas
  * use const &
  * fix argument name
  * Better wrap of load
  * Add rangeFactor typedefs
  * wrap more eliminate variants (and dot)
  * Expose all ordering methods

  [ Gerry Chen ]
  * create backwards compatibility unit test for NoiseModelFactor1
  * revert some template stuff with inheritance for readability NoiseModelFactor123456 are now minimal classes that inherit from NoiseModelFactorN
  * move boost::index_sequence stuff to utilities file
  * fix namespace collision with symbol_shorthand::X in unit test
  * Revert "create backwards compatibility unit test for NoiseModelFactor1"
  * Serialize test strings generated with Boost 1.65
  * fix test xml file path

  [ Frank Dellaert ]
  * fix python example
  * Moved Sfm classes to their own files
  * Deprecated incorrectly named methods
  * Fix test
  * Moved loading code
  * moved tests
  * moved wrapping
  * fix CI issue
  * Fix DiscreteBayesTree test
  * nr -> number
  * Made reading static named constructors
  * Add to wrapper
  * fix typo
  * Keys for poses/cameras are naked
  * Fix test
  * Fixed print_ -> print
  * Fix ugly printing
  * bump version
  * Address comments
  * str !

  [ Varun Agrawal ]
  * Fixes to get matlab wrapper working properly
  * Get matlab wrapping for discrete.i working
  * Squashed 'wrap/' changes from 767a74718..56e7c0c81

  [ Scott ]
  * Add default constructor to PoseRotationPrior to fix serialization

  [ David Wisth ]
  * Add shared_ptr definition for remainder of camera objects

  [ Frank Dellaert ]
  * Add test for dot
  * remove stray output
  * Add header back in

  [ Varun Agrawal ]
  * minor fixes to Pose2 and Rot2
  * Similarity2 fixes
  * Similarity3 fixes
  * fix wrapper
  * fix tests
  * wrap Pose2Pairs
  * wrap equals for Sim2 and Sim3
  * Fix syntactic errors in test_Sim2.py
  * Remove SFINAE from KarcherMean so we can also use it for Rot2
  * Fix tests

  [ Frank Dellaert ]
  * wrap GaussianDensity::FromMeanAndStddev
  * Working with sigma in matrices
  * Use noiseModel for named constructors
  * Sampling from GaussianConditional
  * Sampling from GaussianBayesNet
  * wrap sampling methods
  * Add a static method to actually sample
  * Make all sampling methods take random number generator
  * Fix test that used FromMeandAndStddev
  * Comment out non-repeatable regressions
  * VectorValues html
  * likelihood method for GaussianConditionals

  [ Varun Agrawal ]
  * add Eigen alignment macro to frobenius factor classes

  [ Frank Dellaert ]
  * Make work with boost 1.74
  * fix TBB ordering issue
  * Fix tiny issues
  * Add boost version guard

  [ Mike Sheffler ]
  * EXPORT statements to help Windows build. In Constraint.h, there was a GTSAM_EXPORT that should have been GTSAM_UNSTABLE_EXPORT, and in DiscreteKey.h, there should be a GTSAM_EXPORT in front of an operator definition for a class that is being exported.
  * Per https://github.com/borglab/gtsam/blob/develop/Using-GTSAM-EXPORT.md , classes with no methods defined in a .cpp file shouldn't have the GTSAM_EXPORT or GTSAM_UNSTABLE_EXPORT modifier. This was causing problems with the building of gtsam_unstable on MSVC / Windows.

  [ Frank Dellaert ]
  * Fix check.geometry
  * fix check.sam
  * fix check.discrete
  * Fix check.slam
  * fixed check.navigation
  * fixed check.basis
  * Fix more stuff in check.slam
  * use anonymous namespace
  * Try if combined tests are faster
  * Try grouped tests - again
  * Fixed another serialization clash
  * Move Vector serialization to separate file
  * Move Matrix serialization to separate file and remove spurious headers
  * rename
  * rename again
  * add using...
  * Compilation issues with linux system
  * rename to avoid conflict with tests
  * Fix serialization class name
  * avoid more warnings on Linux
  * use anonymous namespace
  * Add headers in the place they are needed
  * Base wrapper needs Matrix serialization
  * Add missing header
  * Added missing header in header
  * Remove duplicate header
  * Use at least 2 cores

  [ Varun Agrawal ]
  * basis module tests pass
  * update METIS test for _WIN32
  * sfm tests pass
  * symbolic tests pass
  * navigation tests passing
  * fixed dllexport issues in nonlinear, only tests failing
  * fixed dllexport issues in slam, only tests failing
  * move Line3 transformTo definition to header to resolve ambiguity
  * fixed dllexport issues in geometry, only tests failing
  * Fix discrete module
  * documentation updates
  * suppress spurious warnings
  * build (almost) all GTSAM test targets in CI
  * formatting updates
  * comment out gtsam_unstable test target
  * Move transformTo declaration to the top to avoid ambiguous linkage

  [ Andre Nguyen ]
  * fix: typo

  [ Mike Sheffler ]
  * Assignment accidentally used in place of equality

  [ lcarlone ]
  * added unit test on params

  [ Frank Dellaert ]
  * Add missing header for timing target
  * removed obsolete header

  [ acxz ]
  * replace ifndefs with pragma once

  [ Mike Sheffler ]
  * * Repaired actual test (needs '49', not '54'?) and LONGS_EQUAL instead of EQUAL -- Please review

  [ Varun Agrawal ]
  * fix incorrect filename warning
  * properly set project version

  [ acxz ]
  * add missing header guards under gtsam/
  * add missing header guards under gtsam_unstable/
  * add newline at end of file
  * add missing header guards under timing/ and examples/
  * add newline at end of file
  * only metis.h is needed to include both system and local metis.h file
  * use internal metislib.h; extern C for system&local

  [ Akshay Krishnan ]
  * use rng in TA initialization
  * update comment in shonan
  * updating tolerance in tests

  [ Frank Dellaert ]
  * docs
  * Add test for ManifoldEvaluationFunctor
  * Move BasisFactors tests to correct place
  * Add EvaluationFactor test
  * Add test for ManifoldEvaluationFactor

  [ acxz ]
  * filename in repo is w10000 not w10000-odom

  [ Akshay Krishnan ]
  * change to pointer
  * lamda capture all variables
  * update pointer usage

  [ Gerry Chen ]
  * refactor python NonlinearOptimizerTest
  * add iteration hook to NonlinearOptimizerParams
  * add comment about matlab not having iteration hook

  [ Thomas Sayre-McCord ]
  * fix triangulatePoint3 for calibrations with distortion
  * add support for second version of triangulatePoint3

  [ Frank Dellaert ]
  * Fixed all lint errors, formatting
  * Now initializing randomly

  [ Varun Agrawal ]
  * documentation updates
  * printing updates
  * added test for ordering in Python
  * comment out failing python code since it is out of scope
  * update scoop installation for Windows CI

  [ Fan Jiang ]
  * Fix typo
  * Prototype a type-erased hybrid machinery
  * Add better mocking for actual elimination
  * Fix compilation error
  * Add shorthand for inserting raw JacobianFactor
  * Add full elimination
  * More mock-ups added
  * Added mixture factor functionality
  * Added more mockups and color output of the elimination process
  * add more comments

  [ Thomas Sayre-McCord ]
  * set new code to google style and fix doc

  [ Fan Jiang ]
  * even better printing and comments
  * Address comments
  * Missing pragma onces

  [ Varun Agrawal ]
  * add test for visitWith with pruned tree
  * fix visitWith operator() to be more functional
  * address review comments
  * wrap ParameterMatrix as argument for Values
  * New apply method which takes op with Assignment

  [ Frank Dellaert ]
  * Added python notebook
  * Fixed parsing error and cleaned up
  * Added reference

  [ Varun Agrawal ]
  * add test demonstrating apply does not enumerate all leaves
  * remove unnecessary using
  * check for mac silicon for march=native

  [ Frank Dellaert ]
  * Added spaces back
  * Updated everything up to and including custom factor, including more explanation about H

  [ Varun Agrawal ]
  * minor documentaion fixes
  * Squashed 'wrap/' changes from 56e7c0c81..24da9d1be
  * fix matlab wrapping for gtsam_unstable

  [ Fan Jiang ]
  * Now we have real multifrontal!

  [ lcarlone ]
  * edited

  [ Fan Jiang ]
  * Fully working Multifrontal
  * Add a test for EliminateSequential
  * Address comments
  * Remove warning
  * Address comments
  * Display debug messages only when DEBUG = true
  * Add doxygen for GMM
  * Address compilation error on GCC
  * Fix GCC error

  [ Varun Agrawal ]
  * print parents when printing GaussianConditional

  [ Frank Dellaert ]
  * Addressed comments

  [ Varun Agrawal ]
  * update printing
  * remove redundancy in enumerate
  * add new nrLeaves method for DecisionTree
  * update to use pip for installation and install to user directory by default
  * new method and wrapping for getNewFactorsIndices
  * wrap measured and add tests
  * update test for ISAM
  * Improve printing
  * update comment in test

  [ Akash Patel ]
  * fix typo

  [ Fan Jiang ]
  * Add Python bindings
  * Added more Python examples

  [ Frank Dellaert ]
  * transformAllFrom/To
  * name change - no "All" needed
  * Expose Align, and add matrix version

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 24da9d1be..1a7dc9722

  [ Frank Dellaert ]
  * Use matrix operations, silly me!
  * Matrix versions for Pose2 group action
  * Deprecated free align in favor of named constructors with (a,b) convention

  [ Fan Jiang ]
  * Added plotting for nested dissection

  [ Frank Dellaert ]
  * Bump version

  [ Varun Agrawal ]
  * New prune method for DecisionTreeFactor
  * doc fix
  * address review comments
  * undo default print change
  * fix assertions
  * record number of assignments for each leaf
  * refactor DecisionTree to make a distinction between leaves and assignments
  * convert DT_NO_PRUNING flag to GTSAM_DT_NO_PRUNING in case we wish to expose it via cmake
  * add new visitLeaf method that provides the leaf as the function argument
  * update prune to new max number of assignments scheme
  * update docs and test

  [ d-vo ]
  * InvDepthFactor3: Fix wrong derivative H3

  [ Fan Jiang ]
  * Working iSAM for Hybrid
  * Fix the race!

  [ yotams ]
  * added wrapper for ProjectionFactorRollingShutter

  [ Fan Jiang ]
  * Optimize locking

  [ yotams ]
  * added wrapper for ProjectionFactorRollingShutter
  * added test for the wrapper

  [ Varun Agrawal ]
  * increase precision of ADT printing

  [ Fan Jiang ]
  * FIX: Robust loss error calculation

  [ Dominik Van Opdenbosch ]
  * InvDepthFactor3: Add unit test for Jacobians

  [ Fan Jiang ]
  * Fix the test

  [ Frank Dellaert ]
  * Bump version

  [ Fan Jiang ]
  * Fix slow dynamic cast

  [ Varun Agrawal ]
  * update for better docstrings

  [ Fan Jiang ]
  * Update the other codepath to also use ptr cast

  [ Frank Dellaert ]
  * Notebook

  [ Fan Jiang ]
  * Address comments by Frank
  * Fix robust deserialization
  * Add camera Jacobian
  * Use implicit conversion
  * Address comments
  * Use templated Eigen::Ref wrapper
  * Added Jacobians for all calibrations
  * Use rations numbers in test
  * Add stereo jacobians
  * Add Cal3Unified unit test
  * Remove print

  [ Jose Luis Blanco Claraco ]
  * noise models: Add getters for all model parameters

  [ Gerry Chen ]
  * Update `logging_optimizer.gtsam_optimize` to use NonlinearOptimizerParams::iterationHook
  * Add comment to docstring of `gtsam_optimize`

  [ Fan Jiang ]
  * Fix compile

  [ Gerry Chen ]
  * Revert "Add comment to docstring of `gtsam_optimize`"
  * Partially Revert "Update `logging_optimizer.gtsam_optimize` to use NonlinearOptimizerParams::iterationHook"
  * Create convenience wrapper function in logging_optimizer
  * fix bug that python utils files don't regenerate upon edit
  * reset captured stdout buffer for each test
  * fix expected serialization string

  [ Jose Luis Blanco Claraco ]
  * document loss functions
  * fix derivative
  * Revert "fix derivative"

  [ senselessDev ]
  * update explanation of uncertainty ellipses, try to fix #1067

  [ Akshay Krishnan ]
  * add additional methods to TA + wrapper

  [ Varun Agrawal ]
  * fix type warnings
  * update IMU factor docs to clarify that the measurements are in sensor frame
  * capitalize static methods
  * GTSAM_EXPORT at the class level
  * remove Pose2/3 casts from Sim2/3
  * update assertions
  * typo fix
  * Rot2::ClosestTo with SVD
  * add Lie group operations
  * AdjointMap method
  * Sim3 cpp unit tests
  * identity needs to be lowercase and fix tests
  * use Jose's suggestion

  [ Fan Jiang ]
  * Add block Jacobi preconditioner wrap
  * Added PinholePose in wrap and FromPose3 in EssentialMatrix
  * Added wrapping for Shonan constructor
  * Wrap GeneralSFMFactor for PinholePose
  * added SfmTracks and SfmCameras so we can easily access them in Python
  * Also copy the preambles and specializations
  * Address comments
  * Correct the binding for BinaryMeasurement

  [ Varun Agrawal ]
  * remove key formatting from keys when defining vertices and edges to avoid syntax errors
  * add prior factor tests and remove TODO
  * formatting
  * update PDF doc
  * fix tests and remove additional keyformatter calls
  * fix python test

  [ Akshay Krishnan ]
  * change to input params, add docstring
  * wrapper changes

  [ Varun Agrawal ]
  * fix test

  [ Akshay Krishnan ]
  * move betweenTranslations outside params
  * ../gtsfm/sfm/sfm.i
  * change params to struct
  * rename getUniqueKey

  [ Fan Jiang ]
  * Finally debugged the root cause!
  * Add fallback entry for MATLAB

  [ Akshay Krishnan ]
  * move relativeTranslations to run()
  * wrapper updates
  * docstring updates

  [ Varun Agrawal ]
  * fix test
  * minor refactor to follow the math better

  [ Akshay Krishnan ]
  * move values from params to run, remove params struct
  * fixing merge conflict in wrapper

  [ Fan Jiang ]
  * Fix the enable_if_t absence

  [ Akshay Krishnan ]
  * update python test constructor

  [ Fan Jiang ]
  * Remove most debug messages

  [ Frank Dellaert ]
  * Added notebook with SenselessDev code.
  * Make status a public field
  * Wrap TriangulationResult
  * Be consistent in wrapping templated triangulation versions
  * Fix unrelated warning
  * Wrapped safe triangulation versions
  * Camera sets
  * Added safe triangulation tests
  * Fix pybind11 issue
  * Include all constructors, methods

  [ Varun Agrawal ]
  * remove user flag for pip install
  * include patch version for Python interpreter to help disambiguate

  [ Gerry Chen ]
  * Change `optimize_using` to simpler function call

  [ Frank Dellaert ]
  * Bump version

  [ Akshay Krishnan ]
  * intialize values that may have between factors

  [ Fan Jiang ]
  * Address Varun's comments
  * Fix compile error

  [ Varun Agrawal ]
  * use prior naming scheme for bias jacobians

  [ Fan Jiang ]
  * Don't crash anymore
  * Don't use Python dict method since it is not
  * Trying to make MSVC happy
  * Address PR comments

  [ Varun Agrawal ]
  * include missing headers for msvc and fix warning
  * include GaussianJunctionTree
  * run formatting and rename wrappedFactors to asGaussianFactorGraphTree
  * fix equality checks
  * use This for templated type in geometry.i

  [ lilong.huang ]
  * fix typo issue in comment

  [ Varun Agrawal ]
  * Hybrid and Gaussian Mixture conditional docs and some refactor
  * GaussianMixtureFactor docs
  * Hybrid factor docs and minor refactor
  * make functional
  * HybridDiscreteFactor docs and minor refactor
  * update tests
  * add demarkers
  * HybridFactorGraph docs and minor updates
  * docs update
  * remove debug statements
  * fix doxygen section
  * HybridISAM docs
  * remove debug statements and add docs
  * add doc strings to python unit test and add assertions
  * add docs for HybridFactor
  * break up EliminateHybrid into smaller functions
  * update the EliminateHybrid note to be more specific
  * rename HybridFactorGraph to GaussianHybridFactorGraph
  * add HybridNonlinearFactor and nonlinear HybridFactorGraph
  * improved equality checks
  * Add MixtureFactor for nonlinear factor types
  * convert to cpp
  * Base Hybrid Factor Graph
  * make GaussianMixtureFactor a subclass of HybridGaussianFactor
  * HybridFactorGraph fixes
  * Make MixtureFactor only work with NonlinearFactors and make some improvements
  * HybridNonlinearFactor linearize method
  * push_back for GaussianHybridFactor
  * clean up testHybridFactorGraph, need to add more tests
  * GaussianHybridFactorGraph inherits from HybridFactorGraph
  * Improvements to GaussianHybridFactorGraph, make MixtureFactor a subclass of HybridFactor
  * Add NonlinearHybridFactorGraph class
  * fix base class
  * linearize returns object instead of pointer
  * remove unneeded method
  * GaussianMixtureFactor inherits from HybridFactor
  * More tests working
  * Rename files so that everything is HybridX
  * update description of GaussianMixtureConditional
  * Add more information on conditionals requirement for GaussianMixture
  * rename GaussianMixtureConditional to GaussianMixture
  * Add GTSAM_EXPORT and Testable traits
  * fix python test
  * if checks for dynamic_cast
  * separate out summing of frontals into separate function
  * add comments
  * update GaussianMixture docstring
  * initial pruning method
  * record continuous keys separately
  * formatting and docs update
  * add pruning to HybridBayesNet
  * rename back to HybridJunctionTree
  * improvements made during the old hybrid scheme implementation
  * use KeyVector and iterator constructor
  * Add GaussianMixture tests
  * GaussianMixtureFactor tests
  * some formatting and improved printing
  * move += operator inside namespace
  * Add HybridFactorGraph base class and more methods for adding gaussian factors
  * refactor testGaussianHybridFactorGraph to include comments and valid tests
  * Improved hybrid bayes net and tests
  * fix printing
  * Add Switching class and make it linear
  * fixes
  * local include
  * make makeBinaryOrdering inline to prevent multiple definition error
  * makeSwitchingChain is also inline

  [ HViktorTsoi ]
  * Move Rot3::quaternion to the deprecated block
  * Replace the usage of Rot3::quaternion to Rot3::toQuaternion in 'timeShonanAveraging.cpp'
  * Remove 'Rot3::quaternion()' API from 'geometry.i'

  [ Varun Agrawal ]
  * add docstring for makeBinaryOrdering
  * address review comments
  * address review comments

  [ Amado Antonini ]
  * Expose GNC params to python

  [ Akshay Krishnan ]
  * initial LOST implementation tested
  * add unit test, update doc
  * update docstring
  * update doc in header

  [ vik748 ]
  * Address matplotlib deprecation warnings for fig.gca() and window.set_title().

  [ Varun Agrawal ]
  * add new lines

  [ Akshay Krishnan ]
  * make noise input, add LOST vs DLT unit test

  [ Varun Agrawal ]
  * add this-> to fix ROS issue

  [ Akshay Krishnan ]
  * experimenting with LS and TLS

  [ yetongumich ]
  * fix testNoiseModel

  [ lcarlone ]
  * addressed comments in PR
  * fixed compile issue

  [ Varun Agrawal ]
  * replace boost::function with std::function
  * import VectorSerialization to Point3 to allow serialization for downstream classes
  * update Lyx document based on Luca's review

  [ yotams ]
  * added jacobians for all pose3 methods in python wrappers

  [ Varun Agrawal ]
  * Squashed 'wrap/' changes from 1a7dc9722..ca357ccdd

  [ yotams ]
  * 1. changed interp name to slerp 2. added python tests for jacobians for some pose3 apis
  * bugfix

  [ Jose Luis Blanco-Claraco ]
  * Do not optimize native by default

  [ Varun Agrawal ]
  * Use system Eigen by default only if found
  * fix small issue
  * Capitalize Identity trait since it is static

  [ Amado Antonini ]
  * Revert changes to verbosity

  [ Varun Agrawal ]
  * wrap BearingRange classes and factors
  * add Python unit tests

  [ Amado Antonini ]
  * Expose remaining attributes, add tests
  * Adress review comments
  * Run yapf

  [ Akshay Krishnan ]
  * update triangulation LOST API
  * Example to run LOST and compare to DLT
  * unit tests pass
  * change global variable names in test
  * add author
  * update to camelcase names in test
  * more camelcase changes
  * more renames to camelcase
  * LOST in python wrapper

  [ Amado Antonini ]
  * Make vector<size_t> opaque
  * Revert pybind stl include

  [ senselessdev1 ]
  * Start GTSFM's DSF port to C++
  * Add Python unit test
  * clean up docstrings
  * Fix unwrapped SfmTrack2d, and instantiate generator before calling its method
  * fix all wrapper issues

  [ Scott ]
  * Clear ConcurrentMap before loading archive data

  [ senselessdev1 ]
  * Remove C++17 decompositions, and address comments
  * remove stray breakpoint

  [ Scott ]
  * Add unit test for ConcurrentMap serialization

  [ John Lambert ]
  * Update style to have bracket on same lines, and autoformat

  [ Varun Agrawal ]
  * wrap custom factor in a separate file
  * add gtsam namespace

  [ Gerry Chen ]
  * serialization debugging (from stash)

  [ Amado Antonini ]
  * Remove pybind/stl.h again

  [ Gerry Chen ]
  * update serialized string
  * bugfix on serialization
  * remove debug statements
  * turn off backwards compatibility test with quaternions or TBB since serialization structure is different

  [ Varun Agrawal ]
  * change python CI cores to 1

  [ Gerry Chen ]
  * Set more swap space on linux since gcc runs out of memory

  [ Varun Agrawal ]
  * remove pybind stl.h
  * minor fixes
  * update macos CI env
  * fix copying of test files in Cmake
  * Revert "change python CI cores to 1"

  [ agilemapper ]
  * replace addtogroup with ingroup for the SLAM group

  [ senselessdev1 ]
  * hasUniqueCameras to camel case
  * remove unnecessary extra typedef

  [ Varun Agrawal ]
  * use python 3.7
  * remove redundant KeyVector definition
  * use KeyVector for GNC inliers & outliers
  * rename to HybridNonlinearFactorGraph
  * add IsGaussian template check
  * renaming fixes
  * Use new GncParams::IndexVector
  * break up Python CI steps so reading logs is easier
  * remove derived push_back in HybridNonlinearFactorGraph and HybridFactorGraph
  * fix typo
  * update the directory list in cmake
  * upgrade the Doxyfile config file
  * remove invalid dirs tab
  * update instructions to generate docs
  * fix doxygen warnings due to groups and and incorrect filenames
  * fix latex symbol warnings
  * change from addtogroup to ingroup
  * add the various groups
  * better page arrangement to include GTSAM_UNSTABLE
  * update the groups
  * add base module
  * update basis module
  * update Discrete group
  * update linear and multifrontal groups
  * update SAM groups
  * use ingroup instead of addtogroup
  * add to hybrid group
  * update ISAM2 group
  * undo CI changes
  * revert checkout version
  * add nonlinear switching system tests

  [ Tobias Fischer ]
  * Fix exports on Windows
  * Link to interface library in case system metis is used
  * Delete FindBoost.cmake

  [ Varun Agrawal ]
  * get more nonlinear tests to work and make some updates
  * fix matlab compilation
  * print boost version
  * fix setter and getter for biasAccOmegaInit
  * get all but 2 tests passing
  * fix discrete only elimination (use EliminateForMPE)
  * all tests pass!!!
  * fix discrete conditional test
  * Wrap DiscreteLookupTable
  * Add Zenodo for generating citations
  * point Zenodo badge to Concept (aka aggregate) version
  * change discrete key variable from C to M
  * split HybridNonlinearFactorGraph to .h and .cpp
  * fix printing and key bug in MixtureFactor linearize
  * fix adding priors in Switching
  * HybridGaussianISAM unit tests
  * fix print tests
  * cleaner printing
  * got some more tests working
  * revert name change, save for another PR
  * use templetized constructor for MixtureFactor

  [ Nithya ]
  * Added references to README

  [ Philipp Glira ]
  * Update README.md

  [ Varun Agrawal ]
  * more tests running
  * one more test passing

  [ sjxue ]
  * HybridValues and optimize() method for hybrid gaussian bayes net
  * add some comments

  [ Varun Agrawal ]
  * Address review comments
  * add incremental pruning to HybridGaussianISAM

  [ sjxue ]
  * Address review comments

  [ Varun Agrawal ]
  * last test to get running

  [ sjxue ]
  * Address review comments
  * fix error in python unit test

  [ Varun Agrawal ]
  * check subset rather than equality for GaussianISAM pruning
  * handle HybridConditional and explicitly set Gaussian Factor Graphs to empty
  * remove custom orderings, let it happen automatically
  * add note about sumFrontals
  * cast to only HybridGaussianFactor
  * upgrade from ubuntu 18.04 to 20.04
  * add new line
  * name file correctly in doc string
  * fix docstring
  * add extra tests
  * fix filename in docstring
  * HybridBayesNet::optimize
  * HybridBayesTree::optimize

  [ Fan Jiang ]
  * Add wrapping for hybrid nonlinear

  [ Varun Agrawal ]
  * extra test for HybridBayesNet optimize
  * finish HybridBayesTree test
  * use Switching constructor arguments for noise covariances
  * remove HybridLookupDAG
  * refactor HybridValues
  * new HybridBayesNet optimize implementation
  * add HybridBayesTree optimize method
  * update wrapper for HybridValues
  * add discrete factors to HybridBayesTree test
  * fix issue with TBB
  * fix gbn optimize everywhere for HybridBayesTree
  * assert for discrete only conditional
  * helper to return HybridConditional as GaussianConditional
  * rename atGaussian to atMixture and add new atGaussian for continuous conditionals, fix choose method for all types
  * handle Gaussian conditionals in the BayesTree
  * fix doxygen
  * add helpers to get different types of keys from the hybrid graph
  * wrap BayesTree::optimize
  * DiscreteKeys::print method
  * rewrap KeyVector for Matlab wrapper
  * DiscreteKeys serialization
  * add serialization for HybridFactor and HybridConditional
  * Make HybridBayesNet testable and add serialization
  * Make HybridBayesTree testable and add serialization
  * add serialization test for GaussianBayesNet
  * move DiscreteKeys code to .cpp
  * move GaussianBayesNet serialization test to testSerializationLinear
  * add multifrontal test to reproduce issue
  * refactor HybridBayesTree::optimize
  * some name cleaning in the HybridJunctionTree
  * rename myJTNode to junctionTreeNode so we can better subclass ConstructorTraversalData
  * remove unused variable in testSimilarity2
  * remove unused blocks
  * remove nrContinuous since we don't need it
  * remove redunant statements
  * add todo
  * add code for simplified hybrid estimation
  * almost done with single legged robot
  * single leg robot test
  * add more tests to show scheme doesn't work
  * remove print statements
  * Add check for MixtureFactor to ensure the  continous keys are the same as in the factors
  * return shared pointer for HybridNonlinearFactorGraph::linearize
  * add push_back for containers
  * HybridNonlinearISAM class
  * add container SFINAE for hybrid nonlinear factor graph push_back
  * fix test name for HybridNonlinearISAM
  * prune hybrid gaussian ISAM more efficiently and without the need to specify the root
  * Add labelformatter to Assignment for convenience
  * move prune method to HybridBayesTree class
  * optional maxNrLeaves for HybridGaussianISAM
  * optional ordering argument for HybridNonlinearISAM::update
  * minor fix
  * Only eliminate variables that are in newFactors
  * add push_back to HybridBayesNet
  * move renamed allDiscreteKeys and allContinuousKeys to HybridFactorGraph
  * undo changes
  * rename testHybridIncremental to testHybridGaussianISAM
  * rename allDiscreteKeys and allContinuousKeys to discreteKeys and continuousKeys respectively

  [ GAECHTER TOYA Stefan ]
  * Check for native architecture and set GTSAM_COMPILE_OPTIONS_PUBLIC accordingly

  [ senselessdev1 ]
  * pass in IndexPair arguments
  * add to preamble/specialization
  * remove opaque on sfmtrack2d

  [ John Lambert ]
  * Add SfmTrack2dVector to ignore list

  [ senselessdev1 ]
  * wrap vector of NamedSfmMeasurement
  * add more methods for accessing members, getting size
  * expand tests

  [ Varun Agrawal ]
  * remove unnecessary comments
  * improved hybrid bayes net pruning
  * minor cleanup
  * rename test file to correct form
  * Add test to expose bug in elimination with gaussian conditionals
  * fix the bug
  * more docs for Switching example

  [ Sébastien Gonzalve ]
  * Use cannonical library name for eigen

  [ Akshay Krishnan ]
  * Update geometry.i
  * Update geometry.i

  [ senselessdev1 ]
  * add docimentation for Keypoints class

  [ Varun Agrawal ]
  * move GTDKeyFormatter to types.h

  [ Sébastien Gonzalve ]
  * Use Eigen Config file for cmake detection

  [ Varun Agrawal ]
  * fix tests
  * formatting
  * apply keyformatter to Gaussian iSAM in HybridNonlinearISAM
  * slight improvement to GaussianMixtureFactor print
  * PrunerFunc helper function
  * enumerate missing discrete keys so we can prune all gaussian mixtures
  * add PrunerFunc to GaussianMixture
  * clean up the prunerFunc
  * HybridBayesNet and HybridBayesTree both use similar pruning functions
  * minor fixes to unit test
  * add assertions to remove warning
  * remove print function

  [ senselessdev1 ]
  * rename KeypointsList -> KeypointsVector
  * add verbose flag for logging messages during DSF track generation
  * use gtsam.gtsfm namespace for new API
  * add namespace hack to prevent gtsam.gtsam.gtsfm

  [ Varun Agrawal ]
  * add curlyy brackets to for loop
  * remove custom keyformatter
  * remove added test file
  * remove leftover comment
  * update switching example to accept measurements in constructor
  * rename discreteFactor to decisionTree

  [ GAECHTER TOYA Stefan ]
  * Improve handling of GTSAM_BUILD_WITH_MARCH_NATIVE flag

  [ Varun Agrawal ]
  * expose DiscreteKeysAsSet as a function
  * new updateDiscreteConditionals method for after we prune
  * HybridSmoother based on BayesNet
  * unit test for end-2-end hybrid estimation

  [ Maurice Fallon ]
  * fix typo in g2o file format parsing

  [ Varun Agrawal ]
  * remove extraneous tictoc print
  * add assertions for HybridEstimation example
  * simplify conversion of root discrete conditional
  * Make Switching test fixture 0-indexed to match iMHS paper

  [ Frank Dellaert ]
  * Split SfmTrack into 2 classes
  * Use SfmMeasurement and SfmTrack
  * Refactor into smaller functions
  * Moved code to cpp file
  * removed NamedSfmMeasurementVector

  [ Matias Mattamala ]
  * Fix in writeG2o when writing Pose3 measurement

  [ Frank Dellaert ]
  * Addressed review comments - removed class in favor of free function
  * Rename of test
  * Vectorized interface

  [ Varun Agrawal ]
  * minor typo fixes
  * remove if guards and add timing counters
  * new WIP test to check the discrete probabilities after elimination
  * showing difference in computed probabilities
  * fix CMake so that Eigen discovery and linking is consistent
  * Add GetOrdering method that can be re-used

  [ Akshay Krishnan ]
  * fix wrapper argument
  * add gtsam:: prefix

  [ Varun Agrawal ]
  * Hybrid Mixture error calculation
  * add docstring to test and fix assert
  * Squashed 'wrap/' changes from ca357ccdd..b37a1fec6
  * Fix return type wrapping for Matlab wrapper
  * add matlab test for class property variables
  * Squashed 'wrap/' changes from b37a1fec6..b3faf3fcd
  * update namespace for templated class property
  * Squashed 'wrap/' changes from b3faf3fcd..ba3dcab16
  * Add GaussianMixtureFactor::error method and unit test
  * default string for AlgebraicDecisionTree::print
  * add unit tests for MixtureFactor
  * update MixtureFactor so that all tests pass
  * add newline
  * Increase the number of time steps for incremental test case
  * add specific assignment error for GaussianMixtureFactor
  * GaussianMixture error methods
  * error method for HybridBayesNet
  * add docstring for HybridBayesNet::error(VectorValues)
  * fix discrete keys
  * Allow setting custom leaf value for AlgebraicDecisionTree
  * add error and probPrime methods to HybridGaussianFactorGraph
  * add probPrime to HybridBayesNet
  * fix hybrid elimination
  * figured out how to get the correct continuous errors
  * allow optional discrete transition probability for Switching test fixture
  * set up unit test to verify that the probPrimeTree has the same values as individual factor graphs
  * add methods to perform correct elimination
  * update HybridSmoother to use the new method
  * allow examples to link to gtsam_unstable
  * better error messages from Pybind
  * use long sequence in HybridEstimation test
  * add docs
  * add optional ordering and fix bug
  * minor clean up and get tests to pass
  * update test in testHybridEstimation
  * separate HybridGaussianFactorGraph::error() using both continuous and discrete values
  * add HybridGaussianFactorGraph::probPrime method
  * overload multifrontal elimination
  * add copy constructor for HybridBayesTreeClique
  * fix HybridBayesTree::optimize to account for pruned nodes
  * fix creation of updatedBayesTree
  * fixup the final tests
  * update docstring for Ordering::+=
  * make continuousProbPrimes and continuousDeltas as templates

  [ Tae Young Kim ]
  * Remove unnecessary functions in ImuFactorsExample.cpp

  [ Varun Agrawal ]
  * Add unit test exposing GaussianBayesTree determinant bug
  * fix bug in GaussianBayesTree::logDeterminant
  * docstring updates
  * address review comments

  [ Bernd Pfrommer ]
  * add workflow to trigger ubuntu packaging

  [ Gerry Chen ]
  * address review comments

  [ Nikhil Khedekar ]
  * Exposed normalize for Point3_
  * Added test for normalize

  [ Miguel Vega ]
  * Update README.md

  [ John Lambert ]
  * Update prerelease version cmake

  [ Varun Agrawal ]
  * better printing
  * move multifrontal optimize test to testHybridBayesTree and update docstrings
  * moved sequential elimination code to HybridEliminationTree
  * add getters to HybridEliminationTree
  * override eliminate in HybridJunctionTree
  * split up the eliminate method to constituent parts
  * mark helper methods as protected and add docstrings
  * more unit tests
  * Add details about the role of the HybridEliminationTree in hybrid elimination

  [ Miguel Vega ]
  * Update README.md

  [ ulterzlw ]
  * Fixed Jacobian in python CustomFactorExample

  [ Varun Agrawal ]
  * remove unrequired code
  * update hybrid elimination and corresponding tests
  * remove commented out code

  [ Gerry Chen ]
  * fix boost 1.65 patch bug
  * Revert "fix namespace collision with symbol_shorthand::X in unit test"
  * Change `X<N>` to `ValueType<N>` and `VALUES` -> `ValueTypes`
  * address review comments
  * Check type of CONTAINER constructor tparam This is a byproduct of the overload resolution problem when N=1, then it can be hard to differentiate between: NoiseModelFactorN(noise, key) NoiseModelFactorN(noise, {key})

  [ Varun Agrawal ]
  * minor cleanup
  * rename all *Vals to *Values
  * Update docstrings
  * address review comments
  * cleaner way of assigning discrete values

  [ Gerry Chen ]
  * make SFINAE templates more readable
  * better docstrings w/ usage examples
  * Change backwards-compatibility defs to utilize new style
  * update and fix unit tests
  * replace all NoiseModelFactor1, 2, ... with NoiseModelFactorN
  * readability
  * Use new key version in Barometric
  * suppress warnings in backwards compatibility unit tests

  [ Varun Agrawal ]
  * GaussianConditional logDeterminant function to remove code duplication.
  * add optional model parameter to sample method
  * sampling test
  * clean up cmake and add comments
  * Add optional model parameter to sample methods
  * hybrid bayes net sample method
  * add unit test for sampling
  * Revert "Add optional model parameter to sample methods"
  * remove model
  * remove `factors_` from Bayes net implementation
  * if noise model not initialized in GaussianConditional, init it to Unit
  * address review comments
  * update test
  * use auto&& in for loops
  * mark parameters for sample as const
  * make GaussianBayesNet::sample functional
  * make sigmas initialization cleaner
  * fix wrapper warnings
  * Revert "add optional model parameter to sample method"
  * update sampling test to use new sample method

  [ Akshay Krishnan ]
  * remove * overator

  [ Varun Agrawal ]
  * fix some more deprecation warnings

  [ Akshay Krishnan ]
  * add rotate() test
  * add unrotate() test

  [ Varun Agrawal ]
  * address review comments
  * compute sampling ratio for one sample and then for multiple samples
  * add choose method to HybridBayesTree
  * minor refactoring
  * fix bug in prunerFunc due to missing keys in assignment
  * improved comments
  * cleanup and better assertions
  * refactor tests a bit
  * added comments and minor refactor

  [ Frank Dellaert ]
  * Implement printing rather than calling factor graph version
  * Small comments
  * Refactor elimination setup to not use C declaration style
  * Separated out NFG setup and added test.
  * Fix print test
  * Pass reference
  * HBN::evaluate
  * GBN::evaluate prototype code works
  * Added logDensity and evaluate to Gaussian conditional and Bayes net
  * Correct densities (error already includes 0.5!)
  * Test sampling using Monte Carlo integration
  * Evaluate for hybrid Bayes nets
  * Switch to dynamic pointer cast
  * Refactor with uniform dynamic pointer cast API
  * Relaxed test
  * Fix to const &
  * Test for GBN::sample
  * Convenience constructors
  * Add methods in HybridBayesNet
  * Cleanup
  * Add evaluate test

  [ Varun Agrawal ]
  * remove unnecessary preamble and specializations for hybrid wrapping
  * formatting and fixes to test
  * add mixture to bayesnet and fix double assert bug
  * fix wrap preamble
  * fix formatting and other issues
  * PreintegratedAhrsMeasurements wrapped constructors

  [ Frank Dellaert ]
  * Added zero parents FromMeanAndStddev
  * Renamed add to emplace, add is for shared pointers
  * Get rid of (redundant and undocumented) FromFactors named constructor.
  * Made method const
  * Fixed equals and print
  * proto code for likelihood
  * likelihood method (as well as continuousParents)

  [ Varun Agrawal ]
  * HybridValues: continuous then discrete

  [ Frank Dellaert ]
  * Remove FromConditionals
  * Added tests to convert Hybrid BN to corresponding "likelihood" FG
  * Add error and probPrime variants

  [ Varun Agrawal ]
  * fix wrapper

  [ Frank Dellaert ]
  * allow update
  * Show that ratio is different for different modes.
  * Add forwarding constructors and document better.
  * Comment out printing and asserts

  [ Varun Agrawal ]
  * minor fixes
  * fixes based on previous PR
  * improve tests
  * comment out problematic code until we figure it out
  * minor fixes
  * make GaussianMixtureFactor store the normalizing constant as well
  * update test

  [ Frank Dellaert ]
  * Change from pair to small struct
  * Switch to using HybridValues
  * Fixed tests
  * Fixed wrapper
  * factor_graph_from_bayes_net
  * Added importance sampling
  * normalization constant
  * Fixed likelihood
  * Fixed error calculation
  * Fix tests once more
  * Ratios now work out!
  * Make a virtual error method
  * Fix regression test
  * Check marginals in addition to ratios for non-uniform mode prior
  * Fix comments for inner.
  * Initializer list and insert/update chaining
  * Initializer list and insert/update
  * insert/update
  * Make sure boost:assign still works.
  * Use brace initializers for DiscreteValues
  * Fix insert
  * Use brace initializers for DiscreteValues in hybrid
  * Fix wrapper

  [ Varun Agrawal ]
  * use FactorAndConstant error()
  * make DecisionTree docstrings clearer
  * fix docstring
  * simplify the error addition
  * add logNormalizingConstant test for GaussianConditional and make some doc fixes

  [ Jeff Powers ]
  * Expose GaussianFactorGraph::optimizeDensely and VectorValues::vector(KeyVector) to python

  [ Varun Agrawal ]
  * update all tests and mark things that need to be addressed
  * GraphAndConstant struct for hybrid elimination

  [ Frank Dellaert ]
  * Switch to EliminateDiscrete for max-product
  * Test eliminate
  * HBN::evaluate
  * refactoring variables for clarity
  * Also print mean if no parents
  * Add static
  * Tiny Bayes net example
  * fix comment
  * continuousSubset
  * tiny FG
  * Made SumFrontals a method to test
  * Added factor and constant and removed factors method
  * refactored and documented SumFrontals
  * Test SumFrontals
  * Add Testable to GraphAndConstant
  * Fix compile issues after rebase
  * Fix SumFrontals test
  * Change to real test
  * Print estimated marginals and ratios!
  * Fix quality testing
  * Now test elimination in c++
  * attempt to fix elimination
  * Make testcase exactly 5.0 mean
  * Refactoring in elimination
  * Comment on constant
  * Added two-measurement example

  [ Varun Agrawal ]
  * minor readjustment
  * rename eliminate to eliminateFunc

  [ Frank Dellaert ]
  * Synced two examples
  * Added missing methods
  * Added error for all versions - should become logDiensity?

  [ Varun Agrawal ]
  * check for 0 sum
  * prune nonlinear by calling method rather than on the bayestree

  [ Frank Dellaert ]
  * Deterministic example, much more generic importance sampler
  * Fixed conversion arguments
  * rename
  * name change of Sum to GaussianFactorGraphTree and SumFrontals to assembleGraphTree
  * Right marginals for tiny1
  * Same correct error with factor_z.error()
  * Example with 2 measurements agrees with importance sampling
  * Add mean to test
  * f(x0, x1, m0; z0, z1) now has constant ratios !

  [ Varun Agrawal ]
  * disable test instead of commenting out
  * fix GaussianConditional print test
  * clean up HybridGaussianFactorGraph
  * move GraphAndConstant traits definition to HybridFactor
  * remove extra print statements
  * fix tests due to change to EliminateDiscrete
  * remove extra print
  * check for nullptr in HybridConditional::equals
  * serialize inner_, need to test
  * comment out failing tests, need to serialize DecisionTree
  * kill unnecessary method
  * make header functions as inline

  [ Frank Dellaert ]
  * Repro issue #1341

  [ Varun Agrawal ]
  * simplify HybridConditional equality check

  [ Frank Dellaert ]
  * Fix argument to const &
  * Fix count issue
  * Fix loop variable
  * Remove obsolete test
  * remove obsolete include

  [ Varun Agrawal ]
  * DecisionTree serialization
  * serialization support for DecisionTreeFactor
  * fix equality of HybridDiscreteFactor and HybridGaussianFactor
  * hybrid serialization tests
  * GaussianMixture serialization
  * fix minor bug in HybridConditional and test its serialization
  * serialize DiscreteConditional
  * serialization tests for HybridBayesNet and HybridBayesTree
  * move discrete serialization tests to common file to remove export key collision
  * enable previously failing test, now works!!
  * add check in GaussianMixtureFactor::likelihood
  * remove deferredFactors
  * implement dim() for MixtureFactor
  * simplify code
  * rename getAssignment to assignment, fix printing
  * clean up README

  [ Frank Dellaert ]
  * New test with two modes

  [ Gerry Chen ]
  * Move `X1-6` aliases into `NoiseModelFactorN` and un-deprecate

  [ Frank Dellaert ]
  * toFactorGraph method in HybridBayesNet

  [ Gerry Chen ]
  * revert confusing `->template key<N>()` notations revert to using shortcut form: `key1()`, `key2()`
  * Revert "revert confusing `->template key<N>()` notations"
  * Correctly revert confusing `->template key<N>()` notations revert to using shortcut form: `key1()`, `key2()`

  [ Frank Dellaert ]
  * Add forwarding template for mean-stddev variants
  * Test elimination of a switching network with one mode per measurement.
  * use sharedMeanAndStddev
  * Reverted variable name change to ease reviewing
  * Fix some comments
  * Use const &
  * Simplified API
  * Rvalues
  * Fix all tests
  * remove unnecessary cast
  * Added lvalue version back in
  * Fix python wrapper
  * Document methods, refactor pruning a tiny bit.

  [ Varun Agrawal ]
  * DefaultOrderingFunc in EliminationTraits
  * Make HybridOrdering a function and use it for Hybrid DefaultOrderingFunc
  * update tests
  * common return statements
  * Revert "common return statements"
  * specify ordering to match that of HybridGaussianISAM

  [ Frank Dellaert ]
  * Fix (very old) Factor documentation
  * Make HybridFactorGraph just a FactorGraph<Factor> with extra methods
  * Remove HybridNonlinearFactor wrapper class as no longer needed
  * Moved key methods to cpp file
  * Removed HybridDiscreteFactor wrapper
  * Made tests compile after purging HybridDiscreteFactor
  * Use template specialization
  * Fixed tests
  * Added handling of naked Gaussian factors added in python
  * Fix python test to not use add
  * Remove GaussianFactor wrapper (easy!)

  [ Varun Agrawal ]
  * remove extraneous file

  [ Frank Dellaert ]
  * Add all discrete keys
  * Removed emplace_hybrid, can be done with emplace_shared now...
  * Make base class constructors available (including initializer lists).
  * Removed boost headers in DecisionTree-inl.h that are no longer needed.
  * Inherit constructors for CameraSets to switch to initializer lists.
  * Got rid of boost::assign in many tests
  * Got rid of Boost cref_list_of
  * Removed unused headers
  * Convert to initializer lists
  * Rid gtsam/linear of boost::assign (a Herculean task made easier with Copilot)
  * Add initializer list constructors
  * Removed copy/pasted but unused boost::assign headers.
  * Using initializers for almost everything in gtsam now.
  * Heavy lift on removing boost::assign from symbolic tests.
  * Remove unused boost::assign headers
  * Use initializer lists in tests and gtsam_unstable
  * Fix issue with HybridOrdering
  * Moved ListOf helper and MakeKeys to common header.
  * Renamed MakeKeys to Keys and cleaned up tests.
  * Cleaned up etree tests
  * Fix compilation issue on Linux
  * An attempt to fix Windows issue.
  * Fix typo

  [ BrettRD ]
  * wraps more getters in Expressions
  * adds tests for OrientedPlane3 derivatives

  [ Frank Dellaert ]
  * Address review comments
  * Fix issues with gcc compiler.
  * Renamed ListOf to something more descriptive

  [ BrettRD ]
  * refers to tangent space in test

  [ Frank Dellaert ]
  * Add FactorGraph-inst.h

  [ BrettRD ]
  * numerically checks getter jacobians

  [ Frank Dellaert ]
  * Attempts at fixing CI gcc/windows

  [ Anthony Cowley ]
  * BatchFixedLagSmoother: add ability to limit warning debug prints

  [ Frank Dellaert ]
  * Fix gcc compilation errors by using correct allocator.
  * Define Errors as a typedef to FastList<Vector>.
  * Kill errors wrapper - internal class not used in any tests.
  * Replace blanket inclusion of constructors (giving trouble on Windows) with initializer-list constructor.
  * Simplify initializer list constructors.
  * Fix issue with initializer constructors
  * Forgot to add correct type in elimination tree (needed for compilation with tbb).
  * One last omission
  * Two more tbb compile issues
  * Remove const, use size_t everywhere.
  * Yet another issue with gcc-tbb
  * Another gcc issue, switch to FastList
  * Added nonlinear Values
  * Added better docs
  * Declared and defined error method in Factor, getting rid of logDensity, as error is now unambiguously defined as -logDensity in conditional factors.
  * Fixed tests to work with new definition of error.
  * small doc edits
  * Fixed discrete classes.
  * Easier scheme for error(HybridValues)
  * Moved factor graph error(HybridValues) to FactorGraph base class.
  * Fix dogleg unit test (gbn error != linearized error anymore)
  * Added logProbability/evaluate in conditionals/Bayes net
  * Implemented all Gaussian versions of logProbability
  * Symbolic logProbability just throws
  * Fix sign issue and added test
  * Fix linking error

  [ kartik arcot ]
  * replace list_of with initializer list

  [ Frank Dellaert ]
  * discrete now has all logProbability and evaluate versions needed.
  * Endowed hybrid with logProbability
  * Added missing methods
  * Wrapper and tests for logProbability
  * Don't use deprecated method.
  * Resolved review comments.
  * Return a set of DiscreteKey,  Fixes issue #1384

  [ Varun Agrawal ]
  * return DiscreteKeys as a vector instead of a set

  [ Frank Dellaert ]
  * move normalization constant to base class
  * Add check
  * Expose correct error versions
  * Expose correct error versions
  * Consistency test in testGaussianConditional
  * Made CheckInvariants a static method in Conditional.*
  * check invariants
  * Adapt to continuous densities
  * Checking mixture invariants, WIP
  * Resolve GaussianMixture error crisis
  * Expose all needed versions of evaluate, operator(), error
  * Test all HybridConditionals in all possible calling conventions.
  * Make sure all conditional methods can be called in wrappers and satisfy invariants there, as well.

  [ Varun Agrawal ]
  * STL-based efficient transformation
  * implement MixtureFactor::error
  * add formatter to GaussianConditional mean printing

  [ Frank Dellaert ]
  * normalizationConstants returns all constants as a DecisionTreeFactor
  * All tests still work with zero constant!
  * Removed FactorAndConstant, no longer needed
  * Add discrete contribution to logProbability
  * Expose toFactorGraph to wrapper
  * Simplify elimination
  * insert_or_assign
  * Some test refactoring
  * Improved docs

  [ Varun Agrawal ]
  * switch to boost::shared_ptr
  * switch from DiscreteKeys back to std::set<DiscreteKey>

  [ Frank Dellaert ]
  * Check for error>0 and proper normalization constant
  * Fix print
  * Compute log-normalization constant as the max of the individual normalization constants.
  * Refactored tests and removed incorrect (R not upper-triangular) test.
  * Implemented the "hidden constant" scheme.
  * Explicitly implement logNormalizationConstant
  * Fixed toFactorGraph and added test to verify
  * Fixed test to work with "hidden constant" scheme
  * Fix python tests (and expose HybridBayesNet.error)
  * Eradicated GraphAndConstant
  * Added DEBUG_MARGINALS flag
  * Added comment
  * Trap if conditional==null.
  * Fix logProbability tests
  * Ratio test succeeds on fg, but not on posterior yet,
  * Removed obsolete normalizationConstants method
  * Add math related to hybrid classes
  * Added partial elimination test
  * Added correction with the normalization constant in the second elimination path.

  [ Varun Agrawal ]
  * update function names and docs to be correct

  [ Frank Dellaert ]
  * Switch pruning test to probabilities.

  [ Varun Agrawal ]
  * add a TODO about reorder_relinearize

  [ Frank Dellaert ]
  * Deprecate `filter` in favor of `extract`, which copies to std::map without boost.
  * Removed filter from examples and timing scripts
  * Move some Eigen methods to cpp
  * Deprecated boost iterators in Values
  * Fixed some stragglers in timing
  * Fix some CI issues (running in Debug, with TBB)
  * Added a const_iterator back in
  * Added some more functions and fixed both flag paths.
  * Forgot [key, value] only works for c++17
  * Use boost::shared ptr

  [ chris ]
  * Fix (issue #1336) dangling pointer access violation.

  [ Frank Dellaert ]
  * Avoid warning
  * Fix version
  * Fix docs

  [ Varun Agrawal ]
  * update examples to use C++11
  * fix warnings
  * only print cmake compile options for current build version
  * remove commented Cmake commands

  [ Jose Luis Blanco Claraco ]
  * Update ROS package.xml format to v3 and update gtsam version

  [ Frank Dellaert ]
  * Add missing header to fix gtbook.
  * Switch to 4.2a9 version

  [ Varun Agrawal ]
  * Add better hybrid support
  * add ordering method for HybridSmoother

  [ Frank Dellaert ]
  * Improved documentation and tests
  * Better documentation and new test
  * wrapped List[float] constructor
  * Derive factors from gtsam::Factor
  * Test more things in BayesTree
  * wrap operator[] in DiscreteBayesTree
  * Wrapped elimination and junction trees
  * cartesianProduct
  * Wrap forgotten max
  * refactor into smaller tests
  * multifrontal lookup table tests
  * multifrontal MPE in python

  [ Martin Valgur ]
  * Fix an invalid include in DsfTrackGenerator.h

  [ Frank Dellaert ]
  * more discrete BT wrapper + test
  * Address review comments
  * Skip test that is problematic for gcc

  [ senselessdev1 ]
  * Cherrypick transitivity fix for DsfTrackGenerator

  [ Frank Dellaert ]
  * Fix 4.3 python style

 -- Bernd Pfrommer <email address hidden>  Mon, 11 Sep 2023 09:26:05 -0400

Available diffs

Builds

Built packages

Package files