23 #include <gtsam/config.h> 24 #include <Eigen/Dense> 37 template<
int Rows,
int Cols>
44 typedef Eigen::Matrix<double, Rows, Cols>
Jacobian;
48 Eigen::Map<Jacobian> map_;
52 void usurp(
double* data) {
53 new (&map_) Eigen::Map<Jacobian>(data);
58 if (data) usurp(data);
61 template<
int M,
int N>
88 usurp(fixedPtr->data());
94 dynamic.resize(Rows, Cols);
95 usurp(dynamic.data());
102 dynamic->resize(Rows, Cols);
103 usurp(dynamic->data());
111 template<
class MATRIX>
114 if (dynamic_ref.rows() == Rows && dynamic_ref.cols() == Cols && !dynamic_ref.IsRowMajor) {
115 usurp(dynamic_ref.data());
117 throw std::invalid_argument(
118 std::string(
"OptionalJacobian called with wrong dimensions or " 121 "(" + std::to_string(Rows) +
", " + std::to_string(Cols) +
")");
134 optional->get().resize(Rows, Cols);
135 usurp(optional->get().data());
144 operator bool()
const {
145 return map_.data() !=
nullptr;
221 if (optional) pointer_ = &((*optional).get());
225 operator bool()
const {
226 return pointer_!=
nullptr;
239 template <
typename T>
struct traits;
246 template <
class T,
class A>
257 template<
class T,
class A>
OptionalJacobian(const std::optional< std::reference_wrapper< Eigen::MatrixXd >> optional)
Constructor compatible with old-style derivatives.
Definition: OptionalJacobian.h:131
: meta-function to generate Jacobian
Definition: OptionalJacobian.h:247
OptionalJacobian< Rows, N > cols(int startCol)
Definition: OptionalJacobian.h:172
OptionalJacobian(std::nullptr_t)
Definition: OptionalJacobian.h:74
Eigen::MatrixXd Jacobian
Jacobian size type.
Definition: OptionalJacobian.h:194
OptionalJacobian()
Default constructor.
Definition: OptionalJacobian.h:67
Definition: chartTesting.h:28
OptionalJacobian(Eigen::MatrixXd *dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition: OptionalJacobian.h:99
OptionalJacobian(std::nullopt_t)
Constructor with std::nullopt just makes empty.
Definition: OptionalJacobian.h:126
Definition: OptionalJacobian.h:38
OptionalJacobian(Jacobian &dynamic)
Construct from refrence to dynamic matrix.
Definition: OptionalJacobian.h:211
OptionalJacobian(std::nullopt_t)
Constructor with std::nullopt just makes empty.
Definition: OptionalJacobian.h:214
OptionalJacobian(Jacobian &fixed)
Constructor that will usurp data of a fixed-size matrix.
Definition: OptionalJacobian.h:79
Jacobian * operator->()
TODO: operator->()
Definition: OptionalJacobian.h:235
: meta-function to generate JacobianTA optional reference Used mainly by Expressions ...
Definition: OptionalJacobian.h:258
OptionalJacobian(Jacobian *pointer)
Construct from pointer to dynamic matrix.
Definition: OptionalJacobian.h:208
Eigen::Map< Jacobian > * operator->()
operator->()
Definition: OptionalJacobian.h:154
OptionalJacobian()
View on constructor argument, if given.
Definition: OptionalJacobian.h:203
OptionalJacobian(Eigen::MatrixXd &dynamic)
Constructor that will resize a dynamic matrix (unless already correct)
Definition: OptionalJacobian.h:92
OptionalJacobian(Jacobian *fixedPtr)
Constructor that will usurp data of a fixed-size matrix, pointer version.
Definition: OptionalJacobian.h:85
Eigen::Matrix< double, Rows, Cols > Jacobian
Definition: OptionalJacobian.h:44
OptionalJacobian(const std::optional< std::reference_wrapper< Eigen::MatrixXd >> optional)
Constructor for optional matrix reference.
Definition: OptionalJacobian.h:219
Jacobian & operator*()
De-reference, like boost optional.
Definition: OptionalJacobian.h:230
Eigen::Map< Jacobian > & operator*()
De-reference, like boost optional.
Definition: OptionalJacobian.h:149
OptionalJacobian(Eigen::Ref< MATRIX > dynamic_ref)
Constructor from an Eigen::Ref value. Will not usurp if dimension is wrong.
Definition: OptionalJacobian.h:112