WPILibC++ 2027.0.0-alpha-4
Loading...
Searching...
No Matches
slp::detail::Expression< Scalar_ > Struct Template Referenceabstract

An autodiff expression node. More...

#include </home/runner/work/allwpilib/allwpilib/wpimath/src/main/native/thirdparty/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)
 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< Scalargrad_expr_l (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const
 Returns ∂/∂l as an Expression.
virtual ExpressionPtr< Scalargrad_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< Scalaradjoint_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< Scalaroperator* (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 Expression-Expression multiplication operator.
ExpressionPtr< Scalaroperator/ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 Expression-Expression division operator.
ExpressionPtr< Scalaroperator+ (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 Expression-Expression addition operator.
ExpressionPtr< Scalaroperator+= (ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 Expression-Expression compound addition operator.
ExpressionPtr< Scalaroperator- (const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
 Expression-Expression subtraction operator.
ExpressionPtr< Scalaroperator- (const ExpressionPtr< Scalar > &lhs)
 Unary minus operator.
ExpressionPtr< Scalaroperator+ (const ExpressionPtr< Scalar > &lhs)
 Unary plus operator.

Detailed Description

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

An autodiff expression node.

Template Parameters
ScalarScalar type.

Member Typedef Documentation

◆ Scalar

template<typename Scalar_>
using slp::detail::Expression< Scalar_ >::Scalar = Scalar_

Scalar type alias.

Constructor & Destructor Documentation

◆ Expression() [1/4]

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

Constructs a constant expression with a value of zero.

◆ Expression() [2/4]

template<typename Scalar_>
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_>
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_>
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.

◆ ~Expression()

template<typename Scalar_>
virtual slp::detail::Expression< Scalar_ >::~Expression ( )
virtualdefault

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

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

◆ is_constant()

template<typename Scalar_>
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()

◆ value()

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

◆ 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

template<typename Scalar_>
Scalar slp::detail::Expression< Scalar_ >::adjoint {0}

The adjoint of the expression node, used during autodiff.

◆ adjoint_expr

template<typename Scalar_>
ExpressionPtr<Scalar> slp::detail::Expression< Scalar_ >::adjoint_expr

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

◆ args

template<typename Scalar_>
std::array<ExpressionPtr<Scalar>, 2> slp::detail::Expression< Scalar_ >::args {nullptr, nullptr}

Expression arguments.

◆ col

template<typename Scalar_>
int32_t slp::detail::Expression< Scalar_ >::col = -1

This expression's column in a Jacobian, or -1 otherwise.

◆ incoming_edges

template<typename Scalar_>
uint32_t slp::detail::Expression< Scalar_ >::incoming_edges = 0

Counts incoming edges for this node.

◆ ref_count

template<typename Scalar_>
uint32_t slp::detail::Expression< Scalar_ >::ref_count = 0

Reference count for intrusive shared pointer.

◆ val

template<typename Scalar_>
Scalar slp::detail::Expression< Scalar_ >::val {0}

The value of the expression node.


The documentation for this struct was generated from the following file:
  • /home/runner/work/allwpilib/allwpilib/wpimath/src/main/native/thirdparty/sleipnir/include/sleipnir/autodiff/expression.hpp