21#include <gtsam/config.h>
26#ifndef OPTIONALJACOBIAN_NOBOOST
27#include <boost/optional.hpp>
40template<
int Rows,
int Cols>
47 typedef Eigen::Matrix<double, Rows, Cols>
Jacobian;
51 Eigen::Map<Jacobian> map_;
55 void usurp(
double* data) {
56 new (&map_) Eigen::Map<Jacobian>(data);
61 if (data) usurp(data);
64 template<
int M,
int N>
65 friend class OptionalJacobian;
84 usurp(fixedPtr->data());
90 dynamic.resize(Rows, Cols);
91 usurp(dynamic.data());
97 dynamic->resize(Rows, Cols);
98 usurp(dynamic->data());
105 template<
class MATRIX>
108 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols && !dynamic_ref.IsRowMajor) {
109 usurp(dynamic_ref.data());
111 throw std::invalid_argument(
112 std::string(
"OptionalJacobian called with wrong dimensions or "
115 "(" + std::to_string(Rows) +
", " + std::to_string(Cols) +
")");
119#ifndef OPTIONALJACOBIAN_NOBOOST
130 optional->resize(Rows, Cols);
131 usurp(optional->data());
143 operator bool()
const {
144 return map_.data() !=
nullptr;
212#ifndef OPTIONALJACOBIAN_NOBOOST
222 if (optional) pointer_ = &(*optional);
228 operator bool()
const {
229 return pointer_!=
nullptr;
242template <
typename T>
struct traits;
249template <
class T,
class A>
260template<
class T,
class A>
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition: concepts.h:30
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition: OptionalJacobian.h:41
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition: OptionalJacobian.h:127
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition: OptionalJacobian.h:122
OptionalJacobian(Eigen::MatrixXd &dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition: OptionalJacobian.h:88
Eigen::Map< Jacobian > & operator*()
De-reference, like boost optional.
Definition: OptionalJacobian.h:148
OptionalJacobian()
Default constructor acts like boost::none.
Definition: OptionalJacobian.h:70
OptionalJacobian(Jacobian &fixed)
Constructor that will usurp data of a fixed-size matrix.
Definition: OptionalJacobian.h:75
OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)
Constructor from an Eigen::Ref value.
Definition: OptionalJacobian.h:106
OptionalJacobian(Eigen::MatrixXd *dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition: OptionalJacobian.h:95
Eigen::Map< Jacobian > * operator->()
operator->()
Definition: OptionalJacobian.h:153
Eigen::Matrix< double, Rows, Cols > Jacobian
Jacobian size type TODO(frank): how to enforce RowMajor? Or better, make it work with any storage ord...
Definition: OptionalJacobian.h:47
OptionalJacobian(Jacobian *fixedPtr)
Constructor that will usurp data of a fixed-size matrix, pointer version.
Definition: OptionalJacobian.h:81
OptionalJacobian< Rows, N > cols(int startCol)
Access M*N sub-block if we are allocated, otherwise none TODO(frank): this could work as is below if ...
Definition: OptionalJacobian.h:171
OptionalJacobian()
View on constructor argument, if given.
Definition: OptionalJacobian.h:202
OptionalJacobian(const boost::optional< Eigen::MatrixXd & > optional)
Constructor compatible with old-style derivatives.
Definition: OptionalJacobian.h:220
Eigen::MatrixXd Jacobian
Jacobian size type.
Definition: OptionalJacobian.h:193
Jacobian & operator*()
De-reference, like boost optional.
Definition: OptionalJacobian.h:233
OptionalJacobian(boost::none_t)
Constructor with boost::none just makes empty.
Definition: OptionalJacobian.h:215
OptionalJacobian(Jacobian *pointer)
Construct from pointer to dynamic matrix.
Definition: OptionalJacobian.h:207
OptionalJacobian(Jacobian &dynamic)
Construct from refrence to dynamic matrix.
Definition: OptionalJacobian.h:210
Jacobian * operator->()
TODO: operator->()
Definition: OptionalJacobian.h:238
: meta-function to generate Jacobian
Definition: OptionalJacobian.h:250
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition: OptionalJacobian.h:261