![]() |
Sleipnir C++ API
|
#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) |
An autodiff expression node.
| Scalar | Scalar type. |
|
inlineexplicitconstexpr |
Constructs a nullary expression (an operator with no arguments).
| value | The expression value. |
|
inlinevirtual |
Accumulates the child adjoints as Scalars.
Reimplemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
inlinevirtual |
Accumulates the child adjoints as Expressions.
Reimplemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
inlineconstexpr |
Returns true if the expression is the given constant.
| constant | The constant. |
|
pure virtual |
Returns the name of this expression.
Implemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SignExpression< Scalar >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
pure virtual |
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Implemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SignExpression< Scalar >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
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.
Implemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SignExpression< Scalar >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
inlinevirtual |
Runs a function on each argument.
| func | The function to run. |
Reimplemented in slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::MultExpression< Scalar, T >, slp::detail::UnaryMinusExpression< Scalar, T >, slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::Hypot2Expression< Scalar >, slp::detail::Hypot3Expression< Scalar >, slp::detail::IfElseExpression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::MaxExpression< Scalar >, slp::detail::MinExpression< Scalar >, slp::detail::PowExpression< Scalar, T >, slp::detail::SignExpression< Scalar >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, and slp::detail::TanhExpression< Scalar >.
|
friend |
Expression-Expression multiplication operator.
| lhs | Operator left-hand side. |
| rhs | Operator right-hand side. |
|
friend |
Unary plus operator.
| lhs | Operand of unary plus. |
|
friend |
Expression-Expression addition operator.
| lhs | Operator left-hand side. |
| rhs | Operator right-hand side. |
|
friend |
Expression-Expression compound addition operator.
| lhs | Operator left-hand side. |
| rhs | Operator right-hand side. |
|
friend |
Unary minus operator.
| lhs | Operand of unary minus. |
|
friend |
Expression-Expression subtraction operator.
| lhs | Operator left-hand side. |
| rhs | Operator right-hand side. |
|
friend |
Expression-Expression division operator.
| lhs | Operator left-hand side. |
| rhs | Operator right-hand side. |
| ExpressionPtr<Scalar> slp::detail::Expression< Scalar_ >::adj_expr |
The adjoint of the expression node, used during gradient expression tree generation.
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.
| int32_t slp::detail::Expression< Scalar_ >::scratch = -1 |
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.