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

#include </home/runner/work/Sleipnir/Sleipnir/include/sleipnir/autodiff/expression.hpp>

Public Types

using Scalar = Scalar_
 Scalar type alias.
 

Public Member Functions

constexpr Expression ()=default
 Constructs a constant expression with a value of zero.
 
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 std::string_view name () const =0
 
virtual Scalar grad_l (Scalar lhs, Scalar rhs) const
 
virtual Scalar grad_r (Scalar lhs, Scalar rhs) const
 
virtual ExpressionPtr< Scalargrad_expr_l (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) const
 
virtual ExpressionPtr< Scalargrad_expr_r (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) const
 

Public Attributes

Scalar val {0}
 The value of the expression node.
 
Scalar adjoint {0}
 The adjoint of the expression node, used during autodiff.
 
ExpressionPtr< Scalaradjoint_expr
 
std::array< ExpressionPtr< Scalar >, 2 > args {nullptr, nullptr}
 Expression arguments.
 
int32_t scratch = -1
 
uint32_t ref_count = 0
 Reference count for intrusive shared pointer.
 

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.

Constructor & Destructor Documentation

◆ Expression() [1/3]

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() [2/3]

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() [3/3]

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()

◆ grad_l()

◆ grad_r()

◆ 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.

◆ name()

◆ type()

template<typename Scalar_ >
virtual ExpressionType slp::detail::Expression< Scalar_ >::type ( ) const
pure virtual

◆ value()

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

Either nullary operator with no arguments, unary operator with one argument, or binary operator with two arguments. This operator is used to update the node's value.

Parameters
lhsLeft argument to binary operator.
rhsRight argument to binary operator.
Returns
The node's value.

Implemented in slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::HypotExpression< Scalar >, slp::detail::CbrtExpression< Scalar >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::IsNonnegativeExpression< Scalar >, slp::detail::IsPositiveExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::SignExpression< Scalar >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, slp::detail::TanhExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::ConstantExpression< Scalar >, and slp::detail::DecisionVariableExpression< Scalar >.

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.

◆ scratch

Scratch space for various graph algorithms.

In expression_graph.hpp's topological_sort(), scratch counts incoming edges for this node, offset by -1 so -1 means no edges.

In Hessian and Jacobian constructors, scratch represents this expression's column in a Jacobian, or -1 otherwise.

They share a default state of -1 to avoid extra assignments.


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