![]() |
WPILibC++ 2027.0.0-alpha-4
|
An autodiff expression node. More...
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) |
| Constructs a nullary expression (an operator with no arguments). | |
| constexpr | Expression (ExpressionPtr< Scalar > lhs) |
| Constructs an unary expression (an operator with one argument). | |
| constexpr | Expression (ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs) |
| Constructs a binary expression (an operator with two arguments). | |
| virtual | ~Expression ()=default |
| constexpr bool | is_constant (Scalar constant) const |
| Returns true if the expression is the given constant. | |
| virtual Scalar | value (Scalar lhs, Scalar rhs) const =0 |
| Either nullary operator with no arguments, unary operator with one argument, or binary operator with two arguments. | |
| virtual ExpressionType | type () const =0 |
| Returns the type of this expression (constant, linear, quadratic, or nonlinear). | |
| virtual std::string_view | name () const =0 |
| Returns the name of this expression. | |
| virtual Scalar | grad_l (Scalar lhs, Scalar rhs, Scalar parent_adjoint) const |
| Returns ∂/∂l as a Scalar. | |
| virtual Scalar | grad_r (Scalar lhs, Scalar rhs, Scalar parent_adjoint) const |
| Returns ∂/∂r as a Scalar. | |
| virtual ExpressionPtr< Scalar > | grad_expr_l (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const |
| Returns ∂/∂l as an Expression. | |
| virtual ExpressionPtr< Scalar > | grad_expr_r (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const |
| Returns ∂/∂r as an Expression. | |
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< Scalar > | adjoint_expr |
| The adjoint of the expression node, used during gradient expression tree generation. | |
| uint32_t | ref_count = 0 |
| Reference count for intrusive shared pointer. | |
| std::array< ExpressionPtr< Scalar >, 2 > | args {nullptr, nullptr} |
| Expression arguments. | |
Friends | |
| ExpressionPtr< Scalar > | operator* (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) |
| Expression-Expression multiplication operator. | |
| ExpressionPtr< Scalar > | operator/ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) |
| Expression-Expression division operator. | |
| ExpressionPtr< Scalar > | operator+ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) |
| Expression-Expression addition operator. | |
| ExpressionPtr< Scalar > | operator+= (ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) |
| Expression-Expression compound addition operator. | |
| ExpressionPtr< Scalar > | operator- (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs) |
| Expression-Expression subtraction operator. | |
| ExpressionPtr< Scalar > | operator- (const ExpressionPtr< Scalar > &lhs) |
| Unary minus operator. | |
| ExpressionPtr< Scalar > | operator+ (const ExpressionPtr< Scalar > &lhs) |
| Unary plus operator. | |
An autodiff expression node.
| using slp::detail::Expression< Scalar_ >::Scalar = Scalar_ |
Scalar type alias.
|
constexprdefault |
Constructs a constant expression with a value of zero.
|
inlineexplicitconstexpr |
Constructs a nullary expression (an operator with no arguments).
| value | The expression value. |
|
inlineexplicitconstexpr |
Constructs an unary expression (an operator with one argument).
| lhs | Unary operator's operand. |
|
inlineconstexpr |
Constructs a binary expression (an operator with two arguments).
| lhs | Binary operator's left operand. |
| rhs | Binary operator's right operand. |
|
virtualdefault |
|
inlinevirtual |
Returns ∂/∂l as an Expression.
| lhs | Left argument to binary operator. |
| rhs | Right argument to binary operator. |
| parent_adjoint | Adjoint of parent expression. |
Reimplemented in slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::HypotExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, slp::detail::PowExpression< Scalar, T >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, slp::detail::TanhExpression< Scalar >, and slp::detail::UnaryMinusExpression< Scalar, T >.
|
inlinevirtual |
Returns ∂/∂r as an Expression.
| lhs | Left argument to binary operator. |
| rhs | Right argument to binary operator. |
| parent_adjoint | Adjoint of parent expression. |
Reimplemented in slp::detail::Atan2Expression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::DivExpression< Scalar, T >, slp::detail::HypotExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, and slp::detail::PowExpression< Scalar, T >.
|
inlinevirtual |
Returns ∂/∂l as a Scalar.
| lhs | Left argument to binary operator. |
| rhs | Right argument to binary operator. |
| parent_adjoint | Adjoint of parent expression. |
Reimplemented in slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::HypotExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, slp::detail::PowExpression< Scalar, T >, slp::detail::SinExpression< Scalar >, slp::detail::SinhExpression< Scalar >, slp::detail::SqrtExpression< Scalar >, slp::detail::TanExpression< Scalar >, slp::detail::TanhExpression< Scalar >, and slp::detail::UnaryMinusExpression< Scalar, T >.
|
inlinevirtual |
Returns ∂/∂r as a Scalar.
| lhs | Left argument to binary operator. |
| rhs | Right argument to binary operator. |
| parent_adjoint | Adjoint of parent expression. |
Reimplemented in slp::detail::Atan2Expression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::DivExpression< Scalar, T >, slp::detail::HypotExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, and slp::detail::PowExpression< Scalar, T >.
|
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::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::HypotExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, 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 >, slp::detail::TanhExpression< Scalar >, and slp::detail::UnaryMinusExpression< Scalar, T >.
|
pure virtual |
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Implemented in slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::HypotExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, 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 >, slp::detail::TanhExpression< Scalar >, and slp::detail::UnaryMinusExpression< Scalar, T >.
|
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.
| lhs | Left argument to binary operator. |
| rhs | Right argument to binary operator. |
Implemented in slp::detail::AbsExpression< Scalar >, slp::detail::AcosExpression< Scalar >, slp::detail::AsinExpression< Scalar >, slp::detail::Atan2Expression< Scalar >, slp::detail::AtanExpression< Scalar >, slp::detail::BinaryMinusExpression< Scalar, T >, slp::detail::BinaryPlusExpression< Scalar, T >, slp::detail::CbrtExpression< Scalar >, slp::detail::ConstantExpression< Scalar >, slp::detail::CosExpression< Scalar >, slp::detail::CoshExpression< Scalar >, slp::detail::DecisionVariableExpression< Scalar >, slp::detail::DivExpression< Scalar, T >, slp::detail::ErfExpression< Scalar >, slp::detail::ExpExpression< Scalar >, slp::detail::HypotExpression< Scalar >, slp::detail::Log10Expression< Scalar >, slp::detail::LogExpression< Scalar >, slp::detail::MultExpression< Scalar, T >, 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 >, slp::detail::TanhExpression< Scalar >, and slp::detail::UnaryMinusExpression< Scalar, T >.
|
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. |
| Scalar slp::detail::Expression< Scalar_ >::adjoint {0} |
The adjoint of the expression node, used during autodiff.
| ExpressionPtr<Scalar> slp::detail::Expression< Scalar_ >::adjoint_expr |
The adjoint of the expression node, used during gradient expression tree generation.
| std::array<ExpressionPtr<Scalar>, 2> slp::detail::Expression< Scalar_ >::args {nullptr, nullptr} |
Expression arguments.
| int32_t slp::detail::Expression< Scalar_ >::col = -1 |
This expression's column in a Jacobian, or -1 otherwise.
| uint32_t slp::detail::Expression< Scalar_ >::incoming_edges = 0 |
Counts incoming edges for this node.
| uint32_t slp::detail::Expression< Scalar_ >::ref_count = 0 |
Reference count for intrusive shared pointer.
| Scalar slp::detail::Expression< Scalar_ >::val {0} |
The value of the expression node.