22#include <gtsam/nonlinear/internal/JacobianMap.h>
25#include <gtsam/base/VectorSpace.h>
27#include <boost/make_shared.hpp>
31class ExpressionFactorShallowTest;
37template<
typename T>
class ExpressionFactor;
58 boost::shared_ptr<internal::ExpressionNode<T> > root_;
71 typedef std::function<
72 T(
const A1&,
typename MakeOptionalJacobian<T, A1>::type)> type;
75 template<
class A1,
class A2>
77 typedef std::function<
78 T(
const A1&,
const A2&,
typename MakeOptionalJacobian<T, A1>::type,
79 typename MakeOptionalJacobian<T, A2>::type)> type;
82 template<
class A1,
class A2,
class A3>
84 typedef std::function<
85 T(
const A1&,
const A2&,
const A3&,
86 typename MakeOptionalJacobian<T, A1>::type,
87 typename MakeOptionalJacobian<T, A2>::type,
88 typename MakeOptionalJacobian<T, A3>::type)> type;
105 Expression(
typename UnaryFunction<A>::type function,
109 template<
typename A1,
typename A2>
110 Expression(
typename BinaryFunction<A1, A2>::type function,
114 template<
typename A1,
typename A2,
typename A3>
115 Expression(
typename TernaryFunction<A1, A2, A3>::type function,
125 template<
typename A1,
typename A2>
132 template<
typename A1,
typename A2,
typename A3>
134 T (A1::*method)(const A2&, const A3&,
145 std::set<Key>
keys()
const;
148 void dims(std::map<Key, int>& map)
const;
151 void print(
const std::string& s)
const;
158 T
value(
const Values& values, boost::optional<std::vector<Matrix>&> H =
166 virtual boost::shared_ptr<Expression>
clone()
const {
167 return boost::make_shared<Expression>(*
this);
171 const boost::shared_ptr<internal::ExpressionNode<T> >&
root()
const;
194 void* traceStorage)
const;
198 internal::JacobianMap& jacobians)
const;
205 friend class ::ExpressionFactorShallowTest;
240template <
typename T,
typename A>
242 const std::function<T(A)>& f,
const Expression<A>& expression,
246 [=](
const A& value,
typename MakeOptionalJacobian<T, A>::type H) {
280 return e1 + (-1.0) * e2;
289Expression<T>
operator*(
const Expression<T>& e1,
const Expression<T>& e2);
297std::vector<Expression<T> >
createUnknowns(
size_t n,
char c,
size_t start = 0);
Special class for optional Jacobian arguments.
Internals for Expression.h, not for general consumption.
std::vector< T, typename internal::FastDefaultVectorAllocator< T >::type > FastVector
FastVector is a type alias to a std::vector with a custom memory allocator.
Definition FastVector.h:34
Global functions in a separate testing namespace.
Definition chartTesting.h:28
FastVector< Key > KeyVector
Define collection type once and for all - also used in wrappers.
Definition Key.h:86
Key symbol(unsigned char c, std::uint64_t j)
Create a symbol key from a character and index, i.e.
Definition Symbol.h:135
std::vector< Expression< T > > createUnknowns(size_t n, char c, size_t start)
Construct an array of leaves.
Definition Expression-inl.h:284
Errors operator+(const Errors &a, const Errors &b)
Addition.
Definition Errors.cpp:60
Point2 operator*(double s, const Point2 &p)
multiply with scalar
Definition Point2.h:47
Expression< T > linearExpression(const std::function< T(A)> &f, const Expression< A > &expression, const Eigen::Matrix< double, traits< T >::dimension, traits< A >::dimension > &dTdA)
Create an expression out of a linear function f:T->A with (constant) Jacobian dTdA TODO(frank): creat...
Definition Expression.h:241
std::uint64_t Key
Integer nonlinear key type.
Definition types.h:100
Errors operator-(const Errors &a, const Errors &b)
Subtraction.
Definition Errors.cpp:75
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition concepts.h:30
: meta-function to generate JacobianTA optional reference Used mainly by Expressions
Definition OptionalJacobian.h:261
Vector Space concept.
Definition VectorSpace.h:470
Character and index key used to refer to variables.
Definition Symbol.h:35
Factor that supports arbitrary expressions via AD.
Definition ExpressionFactor.h:44
Definition Expression.h:40
Definition Expression.h:41
Expression class that supports automatic differentiation.
Definition Expression.h:48
const boost::shared_ptr< internal::ExpressionNode< T > > & root() const
Return root.
Definition Expression-inl.h:162
Expression< T > type
Define type so we can apply it as a meta-function.
Definition Expression.h:53
Expression()
Default constructor, for serialization.
Definition Expression.h:182
virtual ~Expression()
Destructor.
Definition Expression.h:141
virtual boost::shared_ptr< Expression > clone() const
Definition Expression.h:166
Expression(const boost::shared_ptr< internal::ExpressionNode< T > > &root)
Construct with a custom root.
Definition Expression.h:61
std::set< Key > keys() const
Return keys that play in this expression.
Definition Expression-inl.h:132
std::pair< KeyVector, FastVector< int > > KeysAndDims
Keys and dimensions in same order.
Definition Expression.h:185
void dims(std::map< Key, int > &map) const
Return dimensions for each argument, as a map.
Definition Expression-inl.h:137
void print(const std::string &s) const
Print.
Definition Expression-inl.h:142
T valueAndJacobianMap(const Values &values, internal::JacobianMap &jacobians) const
brief Return value and derivatives, reverse AD version
Definition Expression-inl.h:205
T valueAndDerivatives(const Values &values, const KeyVector &keys, const FastVector< int > &dims, std::vector< Matrix > &H) const
private version that takes keys and dimensions, returns derivatives
Definition Expression-inl.h:174
T value(const Values &values, boost::optional< std::vector< Matrix > & > H=boost::none) const
Return value and optional derivatives, reverse AD version Notes: this is not terribly efficient,...
Definition Expression-inl.h:147
Expression< T > & operator+=(const Expression< T > &e)
Add another expression to this expression.
Definition Expression-inl.h:302
size_t traceSize() const
Return size needed for memory buffer in traceExecution.
Definition Expression-inl.h:167
T traceExecution(const Values &values, internal::ExecutionTrace< T > &trace, void *traceStorage) const
trace execution, very unsafe
Definition Expression-inl.h:198
Definition Expression.h:70
Definition Expression.h:76
Definition Expression.h:83
A ScalarMultiplyExpression is a specialization of Expression that multiplies with a scalar It optimiz...
Definition Expression.h:213
A BinarySumExpression is a specialization of Expression that adds two expressions together It optimiz...
Definition Expression.h:226
A non-templated config holding any types of Manifold-group elements.
Definition Values.h:65
In nonlinear factors, the error function returns the negative log-likelihood as a non-linear function...