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)
 
SLEIPNIR_FORCE_INLINE 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
 
int32_t scratch = -1
 
uint32_t ref_count: 31 = 0
 Reference count for intrusive shared pointer.
 
uint32_t is_leaf: 1 = 0
 

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

template<typename Scalar_ >
virtual void slp::detail::Expression< Scalar_ >::accumulate_adjoints ( ) const
inlinevirtual

Accumulates the child adjoints as Scalars.

Reimplemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, and slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >.

◆ accumulate_adjoints_expr()

template<typename Scalar_ >
virtual void slp::detail::Expression< Scalar_ >::accumulate_adjoints_expr ( ) const
inlinevirtual

Accumulates the child adjoints as Expressions.

Reimplemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, and slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >.

◆ is_constant()

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

template<typename Scalar_ >
virtual std::string_view slp::detail::Expression< Scalar_ >::name ( ) const
pure virtual

Returns the name of this expression.

Returns
The name of this expression.

Implemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >, slp::detail::ConstantExpression< Scalar >, and slp::detail::DecisionVariableExpression< Scalar >.

◆ type()

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

Returns the type of this expression (constant, linear, quadratic, or nonlinear).

Returns
The type of this expression.

Implemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >, slp::detail::ConstantExpression< Scalar >, and slp::detail::DecisionVariableExpression< Scalar >.

◆ value()

template<typename Scalar_ >
virtual Scalar slp::detail::Expression< Scalar_ >::value ( ) 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.

Returns
The node's value.

Implemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >, slp::detail::ConstantExpression< Scalar >, and slp::detail::DecisionVariableExpression< Scalar >.

◆ visit_args()

template<typename Scalar_ >
virtual void slp::detail::Expression< Scalar_ >::visit_args ( function_ref< void(Expression< Scalar > *arg)>  func) const
inlinevirtual

Runs a function on each argument.

Parameters
funcThe function to run.

Reimplemented in slp::detail::NonLeafExpression< Derived, Scalar, NumArgs, Type >, slp::detail::NonLeafExpression< AbsExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AcosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< AsinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Atan2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< AtanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< BinaryMinusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< BinaryPlusExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< CbrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CosExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< CoshExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< DivExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< ErfExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< ExpExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< Hypot2Expression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< Hypot3Expression< Scalar >, Scalar, 3 >, slp::detail::NonLeafExpression< IfElseExpression< Scalar >, Scalar, 4 >, slp::detail::NonLeafExpression< Log10Expression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< LogExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< MaxExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MinExpression< Scalar >, Scalar, 2 >, slp::detail::NonLeafExpression< MultExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< PowExpression< Scalar, T >, Scalar, 2, T >, slp::detail::NonLeafExpression< SignExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SinhExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< SqrtExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanExpression< Scalar >, Scalar, 1 >, slp::detail::NonLeafExpression< TanhExpression< Scalar >, Scalar, 1 >, and slp::detail::NonLeafExpression< UnaryMinusExpression< Scalar, T >, Scalar, 1, T >.

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

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

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

◆ is_leaf

template<typename Scalar_ >
uint32_t slp::detail::Expression< Scalar_ >::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

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


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