Sleipnir C++ API
Loading...
Searching...
No Matches
slp::detail::Expression< Scalar_ > Struct Template Referenceabstract

#include <sleipnir/autodiff/expression.hpp>

Public Types

using Scalar = Scalar_
 

Public Member Functions

constexpr Expression ()=default
 
constexpr Expression (Scalar value)
 
constexpr Expression (ExpressionPtr< Scalar > lhs)
 
constexpr Expression (ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
 
constexpr bool is_constant (Scalar constant) const
 
virtual Scalar value (Scalar lhs, Scalar rhs) const =0
 
virtual ExpressionType type () const =0
 
virtual Scalar grad_l (Scalar lhs, Scalar rhs, Scalar parent_adjoint) const
 
virtual Scalar grad_r (Scalar lhs, Scalar rhs, Scalar parent_adjoint) const
 
virtual ExpressionPtr< Scalargrad_expr_l (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const
 
virtual ExpressionPtr< Scalargrad_expr_r (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const
 

Public Attributes

Scalar val {0}
 The value of the expression node.
 
Scalar adjoint {0}
 The adjoint of the expression node, used during autodiff.
 
uint32_t incoming_edges = 0
 Counts incoming edges for this node.
 
int32_t col = -1
 This expression's column in a Jacobian, or -1 otherwise.
 
ExpressionPtr< Scalaradjoint_expr
 
uint32_t ref_count = 0
 Reference count for intrusive shared pointer.
 
std::array< ExpressionPtr< Scalar >, 2 > args {nullptr, nullptr}
 Expression arguments.
 

Friends

ExpressionPtr< Scalaroperator* (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalaroperator/ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalaroperator+ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalaroperator+= (ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalaroperator- (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalaroperator- (const ExpressionPtr< Scalar > &lhs)
 
ExpressionPtr< Scalaroperator+ (const ExpressionPtr< Scalar > &lhs)
 

Detailed Description

template<typename Scalar_>
struct slp::detail::Expression< Scalar_ >

An autodiff expression node.

Template Parameters
ScalarScalar type.

Member Typedef Documentation

◆ Scalar

Scalar type alias.

Constructor & Destructor Documentation

◆ Expression() [1/4]

template<typename Scalar_ >
constexpr slp::detail::Expression< Scalar_ >::Expression ( )
constexprdefault

Constructs a constant expression with a value of zero.

◆ Expression() [2/4]

template<typename Scalar_ >
constexpr slp::detail::Expression< Scalar_ >::Expression ( Scalar  value)
inlineexplicitconstexpr

Constructs a nullary expression (an operator with no arguments).

Parameters
valueThe expression value.

◆ Expression() [3/4]

template<typename Scalar_ >
constexpr slp::detail::Expression< Scalar_ >::Expression ( ExpressionPtr< Scalar lhs)
inlineexplicitconstexpr

Constructs an unary expression (an operator with one argument).

Parameters
lhsUnary operator's operand.

◆ Expression() [4/4]

template<typename Scalar_ >
constexpr slp::detail::Expression< Scalar_ >::Expression ( ExpressionPtr< Scalar lhs,
ExpressionPtr< Scalar rhs 
)
inlineconstexpr

Constructs a binary expression (an operator with two arguments).

Parameters
lhsBinary operator's left operand.
rhsBinary operator's right operand.

Member Function Documentation

◆ grad_expr_l()

◆ grad_expr_r()

template<typename Scalar_ >
virtual ExpressionPtr< Scalar > slp::detail::Expression< Scalar_ >::grad_expr_r ( const ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs,
const ExpressionPtr< Scalar > &  parent_adjoint 
) const
inlinevirtual

Returns ∂/∂r as an Expression.

Parameters
lhsLeft argument to binary operator.
rhsRight argument to binary operator.
parent_adjointAdjoint of parent expression.
Returns
∂/∂r as an Expression.

Reimplemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::PowExpression< Scalar, T >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::HypotExpression< Scalar >, and slp::detail::Atan2Expression< Scalar >.

◆ grad_l()

◆ grad_r()

template<typename Scalar_ >
virtual Scalar slp::detail::Expression< Scalar_ >::grad_r ( Scalar  lhs,
Scalar  rhs,
Scalar  parent_adjoint 
) const
inlinevirtual

Returns ∂/∂r as a Scalar.

Parameters
lhsLeft argument to binary operator.
rhsRight argument to binary operator.
parent_adjointAdjoint of parent expression.
Returns
∂/∂r as a Scalar.

Reimplemented in slp::detail::PowExpression< Scalar, T >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::HypotExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, and slp::detail::BinaryPlusExpression< Scalar, T >.

◆ is_constant()

template<typename Scalar_ >
constexpr bool slp::detail::Expression< Scalar_ >::is_constant ( Scalar  constant) const
inlineconstexpr

Returns true if the expression is the given constant.

Parameters
constantThe constant.
Returns
True if the expression is the given constant.

◆ type()

◆ value()

template<typename Scalar_ >
virtual Scalar slp::detail::Expression< Scalar_ >::value ( Scalar  lhs,
Scalar  rhs 
) const
pure virtual

Friends And Related Symbol Documentation

◆ operator*

template<typename Scalar_ >
ExpressionPtr< Scalar > operator* ( const ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs 
)
friend

Expression-Expression multiplication operator.

Parameters
lhsOperator left-hand side.
rhsOperator right-hand side.

◆ operator+ [1/2]

template<typename Scalar_ >
ExpressionPtr< Scalar > operator+ ( const ExpressionPtr< Scalar > &  lhs)
friend

Unary plus operator.

Parameters
lhsOperand of unary plus.

◆ operator+ [2/2]

template<typename Scalar_ >
ExpressionPtr< Scalar > operator+ ( const ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs 
)
friend

Expression-Expression addition operator.

Parameters
lhsOperator left-hand side.
rhsOperator right-hand side.

◆ operator+=

template<typename Scalar_ >
ExpressionPtr< Scalar > operator+= ( ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs 
)
friend

Expression-Expression compound addition operator.

Parameters
lhsOperator left-hand side.
rhsOperator right-hand side.

◆ operator- [1/2]

template<typename Scalar_ >
ExpressionPtr< Scalar > operator- ( const ExpressionPtr< Scalar > &  lhs)
friend

Unary minus operator.

Parameters
lhsOperand of unary minus.

◆ operator- [2/2]

template<typename Scalar_ >
ExpressionPtr< Scalar > operator- ( const ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs 
)
friend

Expression-Expression subtraction operator.

Parameters
lhsOperator left-hand side.
rhsOperator right-hand side.

◆ operator/

template<typename Scalar_ >
ExpressionPtr< Scalar > operator/ ( const ExpressionPtr< Scalar > &  lhs,
const ExpressionPtr< Scalar > &  rhs 
)
friend

Expression-Expression division operator.

Parameters
lhsOperator left-hand side.
rhsOperator right-hand side.

Member Data Documentation

◆ adjoint_expr

The adjoint of the expression node, used during gradient expression tree generation.


The documentation for this struct was generated from the following file: