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 bool is_constant (Scalar constant) const
 
virtual void visit_args (function_ref< void(Expression< Scalar > *arg)> func) const
 
virtual Scalar value () const =0
 
virtual ExpressionType type () const =0
 
virtual std::string_view name () const =0
 
virtual void accumulate_adjoints () const
 Accumulates the child adjoints as Scalars.
 
virtual void accumulate_adjoints_expr () const
 Accumulates the child adjoints as Expressions.
 

Public Attributes

Scalar val {0}
 The value of the expression node.
 
Scalar adj {0}
 The adjoint of the expression node, used during autodiff.
 
ExpressionPtr< Scalar > adj_expr
 
bool is_leaf = false
 
int32_t scratch = -1
 
uint32_t ref_count = 0
 Reference count for intrusive shared pointer.
 

Friends

ExpressionPtr< Scalar > operator* (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalar > operator/ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalar > operator+ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalar > operator+= (ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalar > operator- (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 
ExpressionPtr< Scalar > operator- (const ExpressionPtr< Scalar > &lhs)
 
ExpressionPtr< Scalar > operator+ (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()

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.

Member Function Documentation

◆ accumulate_adjoints()

◆ accumulate_adjoints_expr()

◆ 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 ( ) const
pure virtual

◆ visit_args()

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

◆ adj_expr

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

◆ is_leaf

True if the expression is a leaf node (a nullary expression).

Graph traversals check this to avoid virtual calls on leaves. The check also feeds the branch predictor history that helps it predict the virtual call targets of non-leaf nodes.

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