31template <
typename Scalar>
34template <
typename Scalar>
36template <
typename Scalar>
42template <
typename Scalar>
50template <
typename T,
typename... Args>
54 std::forward<Args>(args)...);
60template <
typename Scalar, ExpressionType T>
61struct BinaryMinusExpression;
63template <
typename Scalar, ExpressionType T>
64struct BinaryPlusExpression;
66template <
typename Scalar>
67struct ConstantExpression;
69template <
typename Scalar, ExpressionType T>
72template <
typename Scalar, ExpressionType T>
75template <
typename Scalar, ExpressionType T>
76struct UnaryMinusExpression;
82template <
typename Scalar>
88template <
typename Scalar_>
113 std::array<ExpressionPtr<Scalar>, 2>
args{
nullptr,
nullptr};
127 :
args{
std::move(lhs), nullptr} {}
155 if (lhs->is_constant(
Scalar(0))) {
158 }
else if (rhs->is_constant(
Scalar(0))) {
161 }
else if (lhs->is_constant(
Scalar(1))) {
163 }
else if (rhs->is_constant(
Scalar(1))) {
174 if (rhs->type() ==
LINEAR) {
181 }
else if (rhs->type() ==
CONSTANT) {
182 if (lhs->type() ==
LINEAR) {
189 }
else if (lhs->type() ==
LINEAR && rhs->type() ==
LINEAR) {
205 if (lhs->is_constant(
Scalar(0))) {
208 }
else if (rhs->is_constant(
Scalar(1))) {
219 if (lhs->type() ==
LINEAR) {
240 if (lhs ==
nullptr || lhs->is_constant(
Scalar(0))) {
242 }
else if (rhs ==
nullptr || rhs->is_constant(
Scalar(0))) {
251 auto type = std::max(lhs->type(), rhs->type());
270 return lhs = lhs + rhs;
282 if (lhs->is_constant(
Scalar(0))) {
283 if (rhs->is_constant(
Scalar(0))) {
289 }
else if (rhs->is_constant(
Scalar(0))) {
298 auto type = std::max(lhs->type(), rhs->type());
318 if (lhs->is_constant(
Scalar(0))) {
328 if (lhs->type() ==
LINEAR) {
352 [[maybe_unused]]
Scalar rhs)
const = 0;
363 virtual std::string_view
name()
const = 0;
372 [[maybe_unused]]
Scalar rhs,
373 [[maybe_unused]]
Scalar parent_adjoint)
const {
384 [[maybe_unused]]
Scalar rhs,
385 [[maybe_unused]]
Scalar parent_adjoint)
const {
416template <
typename Scalar>
421template <
typename Scalar>
423template <
typename Scalar>
425template <
typename Scalar>
427template <
typename Scalar>
429template <
typename Scalar>
436template <
typename Scalar, ExpressionType T>
450 std::string_view
name()
const override {
return "binary minus"; }
453 return parent_adjoint;
457 return -parent_adjoint;
463 return parent_adjoint;
469 return -parent_adjoint;
477template <
typename Scalar, ExpressionType T>
491 std::string_view
name()
const override {
return "binary plus"; }
494 return parent_adjoint;
498 return parent_adjoint;
504 return parent_adjoint;
510 return parent_adjoint;
517template <
typename Scalar>
532 std::string_view
name()
const override {
return "cbrt"; }
538 return parent_adjoint / (
Scalar(3) * c * c);
553template <
typename Scalar>
560 if (x->
val == Scalar(0)) {
563 }
else if (x->
val == Scalar(-1) || x->
val == Scalar(1)) {
576template <
typename Scalar>
588 std::string_view
name()
const override {
return "constant"; }
594template <
typename Scalar>
609 std::string_view
name()
const override {
return "decision variable"; }
616template <
typename Scalar, ExpressionType T>
629 std::string_view
name()
const override {
return "division"; }
632 return parent_adjoint / rhs;
636 return parent_adjoint * -lhs / (rhs * rhs);
642 return parent_adjoint / rhs;
648 return parent_adjoint * -lhs / (rhs * rhs);
656template <
typename Scalar, ExpressionType T>
669 std::string_view
name()
const override {
return "multiplication"; }
672 Scalar parent_adjoint)
const override {
673 return parent_adjoint * rhs;
677 Scalar parent_adjoint)
const override {
678 return parent_adjoint * lhs;
685 return parent_adjoint * rhs;
692 return parent_adjoint * lhs;
700template <
typename Scalar, ExpressionType T>
712 std::string_view
name()
const override {
return "unary minus"; }
715 return -parent_adjoint;
721 return -parent_adjoint;
729template <
typename Scalar>
738template <
typename Scalar>
745 stack.emplace_back(expr);
747 while (!stack.empty()) {
748 auto elem = stack.back();
753 if (--elem->ref_count == 0) {
754 if (elem->adjoint_expr !=
nullptr) {
755 stack.emplace_back(elem->adjoint_expr.get());
757 for (
auto&
arg : elem->args) {
758 if (
arg !=
nullptr) {
759 stack.emplace_back(
arg.get());
767 std::allocator_traits<
decltype(alloc)>::deallocate(
777template <
typename Scalar>
792 std::string_view
name()
const override {
return "abs"; }
796 return -parent_adjoint;
797 }
else if (x >
Scalar(0)) {
798 return parent_adjoint;
808 return -parent_adjoint;
809 }
else if (x->val >
Scalar(0)) {
810 return parent_adjoint;
821template <
typename Scalar>
843template <
typename Scalar>
858 std::string_view
name()
const override {
return "acos"; }
862 return -parent_adjoint /
sqrt(
Scalar(1) - x * x);
876template <
typename Scalar>
883 return constant_ptr(Scalar(std::numbers::pi) / Scalar(2));
897template <
typename Scalar>
912 std::string_view
name()
const override {
return "asin"; }
916 return parent_adjoint /
sqrt(
Scalar(1) - x * x);
930template <
typename Scalar>
952template <
typename Scalar>
967 std::string_view
name()
const override {
return "atan"; }
970 return parent_adjoint / (
Scalar(1) + x * x);
984template <
typename Scalar>
1006template <
typename Scalar>
1023 std::string_view
name()
const override {
return "atan2"; }
1026 return parent_adjoint * x / (y * y + x * x);
1030 return parent_adjoint * -y / (y * y + x * x);
1036 return parent_adjoint * x / (y * y + x * x);
1042 return parent_adjoint * -y / (y * y + x * x);
1051template <
typename Scalar>
1062 return constant_ptr(Scalar(std::numbers::pi) / Scalar(2));
1076template <
typename Scalar>
1091 std::string_view
name()
const override {
return "cos"; }
1095 return parent_adjoint * -
sin(x);
1101 return parent_adjoint * -
sin(x);
1109template <
typename Scalar>
1130template <
typename Scalar>
1145 std::string_view
name()
const override {
return "cosh"; }
1149 return parent_adjoint *
sinh(x);
1155 return parent_adjoint *
sinh(x);
1163template <
typename Scalar>
1184template <
typename Scalar>
1199 std::string_view
name()
const override {
return "erf"; }
1203 return parent_adjoint *
Scalar(2.0 * std::numbers::inv_sqrtpi) *
1210 return parent_adjoint *
1219template <
typename Scalar>
1241template <
typename Scalar>
1256 std::string_view
name()
const override {
return "exp"; }
1260 return parent_adjoint *
exp(x);
1266 return parent_adjoint *
exp(x);
1274template <
typename Scalar>
1292template <
typename Scalar>
1299template <
typename Scalar>
1316 std::string_view
name()
const override {
return "hypot"; }
1320 return parent_adjoint * x /
hypot(x, y);
1325 return parent_adjoint * y /
hypot(x, y);
1331 return parent_adjoint * x /
hypot(x, y);
1337 return parent_adjoint * y /
hypot(x, y);
1346template <
typename Scalar>
1370template <
typename Scalar>
1385 std::string_view
name()
const override {
return "log"; }
1388 return parent_adjoint / x;
1394 return parent_adjoint / x;
1402template <
typename Scalar>
1424template <
typename Scalar>
1439 std::string_view
name()
const override {
return "log10"; }
1442 return parent_adjoint / (
Scalar(std::numbers::ln10) * x);
1456template <
typename Scalar>
1480template <
typename Scalar>
1496 std::string_view
name()
const override {
return "max"; }
1500 return parent_adjoint;
1508 return parent_adjoint;
1517 if (a->val >= b->val) {
1518 return parent_adjoint;
1527 if (b->val > a->val) {
1528 return parent_adjoint;
1540template <
typename Scalar>
1559template <
typename Scalar>
1575 std::string_view
name()
const override {
return "min"; }
1579 return parent_adjoint;
1586 Scalar parent_adjoint)
const override {
1588 return parent_adjoint;
1597 if (a->val <= b->val) {
1598 return parent_adjoint;
1607 if (b->val < a->val) {
1608 return parent_adjoint;
1620template <
typename Scalar>
1634template <
typename Scalar>
1642template <
typename Scalar, ExpressionType T>
1653 return pow(base, power);
1658 std::string_view
name()
const override {
return "pow"; }
1661 Scalar parent_adjoint)
const override {
1663 return parent_adjoint *
pow(base, power -
Scalar(1)) * power;
1667 Scalar parent_adjoint)
const override {
1675 return parent_adjoint *
pow(base, power) *
log(base);
1689 if (base->val ==
Scalar(0)) {
1693 return parent_adjoint *
pow(base, power) *
log(base);
1703template <
typename Scalar>
1742template <
typename Scalar>
1753 }
else if (x ==
Scalar(0)) {
1762 std::string_view
name()
const override {
return "sign"; }
1769template <
typename Scalar>
1775 if (x->
val < Scalar(0)) {
1777 }
else if (x->
val == Scalar(0)) {
1791template <
typename Scalar>
1806 std::string_view
name()
const override {
return "sin"; }
1810 return parent_adjoint *
cos(x);
1816 return parent_adjoint *
cos(x);
1824template <
typename Scalar>
1846template <
typename Scalar>
1861 std::string_view
name()
const override {
return "sinh"; }
1865 return parent_adjoint *
cosh(x);
1871 return parent_adjoint *
cosh(x);
1879template <
typename Scalar>
1901template <
typename Scalar>
1916 std::string_view
name()
const override {
return "sqrt"; }
1920 return parent_adjoint / (
Scalar(2) *
sqrt(x));
1934template <
typename Scalar>
1941 if (x->
val == Scalar(0)) {
1944 }
else if (x->
val == Scalar(1)) {
1957template <
typename Scalar>
1972 std::string_view
name()
const override {
return "tan"; }
1978 return parent_adjoint / (c * c);
1985 return parent_adjoint / (c * c);
1993template <
typename Scalar>
2015template <
typename Scalar>
2030 std::string_view
name()
const override {
return "tanh"; }
2036 return parent_adjoint / (c * c);
2043 return parent_adjoint / (c * c);
2051template <
typename Scalar>
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Returns a named argument to be used in a formatting function.
Definition base.h:2846
sign
Definition base.h:689
A custom intrusive shared pointer implementation without thread synchronization overhead.
Definition intrusive_shared_ptr.hpp:27
wpi::util::SmallVector< T > small_vector
Definition small_vector.hpp:10
Definition expression_graph.hpp:11
ExpressionPtr< Scalar > cosh(const ExpressionPtr< Scalar > &x)
cosh() for Expressions.
Definition expression.hpp:1164
constexpr void inc_ref_count(Expression< Scalar > *expr)
Refcount increment for intrusive shared pointer.
Definition expression.hpp:730
ExpressionPtr< Scalar > cos(const ExpressionPtr< Scalar > &x)
cos() for Expressions.
Definition expression.hpp:1110
ExpressionPtr< Scalar > cbrt(const ExpressionPtr< Scalar > &x)
cbrt() for Expressions.
Definition expression.hpp:554
ExpressionPtr< Scalar > sin(const ExpressionPtr< Scalar > &x)
sin() for Expressions.
Definition expression.hpp:1825
ExpressionPtr< Scalar > hypot(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &y)
hypot() for Expressions.
Definition expression.hpp:1347
ExpressionPtr< Scalar > pow(const ExpressionPtr< Scalar > &base, const ExpressionPtr< Scalar > &power)
pow() for Expressions.
Definition expression.hpp:1704
ExpressionPtr< Scalar > sqrt(const ExpressionPtr< Scalar > &x)
sqrt() for Expressions.
Definition expression.hpp:1935
ExpressionPtr< Scalar > sinh(const ExpressionPtr< Scalar > &x)
sinh() for Expressions.
Definition expression.hpp:1880
ExpressionPtr< Scalar > min(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b)
min() for Expressions.
Definition expression.hpp:1621
ExpressionPtr< Scalar > erf(const ExpressionPtr< Scalar > &x)
erf() for Expressions.
Definition expression.hpp:1220
ExpressionPtr< Scalar > tan(const ExpressionPtr< Scalar > &x)
tan() for Expressions.
Definition expression.hpp:1994
ExpressionPtr< Scalar > constant_ptr(Scalar value)
Creates an intrusive shared pointer to a constant expression.
Definition expression.hpp:417
ExpressionPtr< Scalar > abs(const ExpressionPtr< Scalar > &x)
abs() for Expressions.
Definition expression.hpp:822
ExpressionPtr< Scalar > tanh(const ExpressionPtr< Scalar > &x)
tanh() for Expressions.
Definition expression.hpp:2052
constexpr bool USE_POOL_ALLOCATOR
Definition expression.hpp:28
ExpressionPtr< Scalar > exp(const ExpressionPtr< Scalar > &x)
exp() for Expressions.
Definition expression.hpp:1275
ExpressionPtr< Scalar > asin(const ExpressionPtr< Scalar > &x)
asin() for Expressions.
Definition expression.hpp:931
ExpressionPtr< Scalar > log(const ExpressionPtr< Scalar > &x)
log() for Expressions.
Definition expression.hpp:1403
void dec_ref_count(Expression< Scalar > *expr)
Refcount decrement for intrusive shared pointer.
Definition expression.hpp:739
ExpressionPtr< Scalar > acos(const ExpressionPtr< Scalar > &x)
acos() for Expressions.
Definition expression.hpp:877
ExpressionPtr< Scalar > max(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b)
max() for Expressions.
Definition expression.hpp:1541
ExpressionPtr< Scalar > atan(const ExpressionPtr< Scalar > &x)
atan() for Expressions.
Definition expression.hpp:985
IntrusiveSharedPtr< Expression< Scalar > > ExpressionPtr
Typedef for intrusive shared pointer to Expression.
Definition expression.hpp:43
ExpressionPtr< Scalar > atan2(const ExpressionPtr< Scalar > &y, const ExpressionPtr< Scalar > &x)
atan2() for Expressions.
Definition expression.hpp:1052
static ExpressionPtr< typename T::Scalar > make_expression_ptr(Args &&... args)
Creates an intrusive shared pointer to an expression from the global pool allocator.
Definition expression.hpp:51
ExpressionPtr< Scalar > log10(const ExpressionPtr< Scalar > &x)
log10() for Expressions.
Definition expression.hpp:1457
IntrusiveSharedPtr< T > make_intrusive_shared(Args &&... args)
Constructs an object of type T and wraps it in an intrusive shared pointer using args as the paramete...
Definition intrusive_shared_ptr.hpp:260
ExpressionType
Expression type.
Definition expression_type.hpp:16
@ CONSTANT
The expression is a constant.
Definition expression_type.hpp:20
@ QUADRATIC
The expression is composed of quadratic and lower-order operators.
Definition expression_type.hpp:24
@ LINEAR
The expression is composed of linear and lower-order operators.
Definition expression_type.hpp:22
@ NONLINEAR
The expression is composed of nonlinear and lower-order operators.
Definition expression_type.hpp:26
PoolAllocator< T > global_pool_allocator()
Returns an allocator for a global pool memory resource.
Definition pool.hpp:155
IntrusiveSharedPtr< T > allocate_intrusive_shared(Alloc alloc, Args &&... args)
Constructs an object of type T and wraps it in an intrusive shared pointer using alloc as the storage...
Definition intrusive_shared_ptr.hpp:274
Definition StringMap.hpp:773
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:792
constexpr AbsExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:782
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:790
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:794
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:804
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:785
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:865
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:851
constexpr AcosExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:848
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:856
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:860
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:858
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:914
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:905
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:912
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:919
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:910
constexpr AsinExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:902
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &y, const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1033
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1023
Scalar value(Scalar y, Scalar x) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1016
constexpr Atan2Expression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:1012
Scalar grad_r(Scalar y, Scalar x, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:1029
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &y, const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:1039
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1021
Scalar grad_l(Scalar y, Scalar x, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1025
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:967
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:973
constexpr AtanExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:957
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:960
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:969
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:965
constexpr BinaryMinusExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:442
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:460
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:466
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:450
Scalar grad_r(Scalar, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:456
Scalar value(Scalar lhs, Scalar rhs) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:446
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:448
Scalar grad_l(Scalar, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:452
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:501
Scalar value(Scalar lhs, Scalar rhs) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:487
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:507
constexpr BinaryPlusExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:483
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:489
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:491
Scalar grad_r(Scalar, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:497
Scalar grad_l(Scalar, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:493
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:532
constexpr CbrtExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:522
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:534
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:541
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:530
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:525
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:586
Scalar value(Scalar, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:584
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:588
constexpr ConstantExpression(Scalar value)
Constructs a nullary expression (an operator with no arguments).
Definition expression.hpp:581
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1084
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1089
constexpr CosExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1081
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1091
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1098
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1093
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1143
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1145
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1138
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1152
constexpr CoshExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1135
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1147
constexpr DecisionVariableExpression()=default
Constructs a decision variable expression with a value of zero.
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:609
Scalar value(Scalar, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:605
constexpr DecisionVariableExpression(Scalar value)
Constructs a nullary expression (an operator with no arguments).
Definition expression.hpp:602
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:607
constexpr DivExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:622
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:627
Scalar grad_r(Scalar lhs, Scalar rhs, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:635
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:645
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:629
Scalar grad_l(Scalar, Scalar rhs, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:631
Scalar value(Scalar lhs, Scalar rhs) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:625
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:639
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1199
constexpr ErfExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1189
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1201
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1192
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1207
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1197
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1258
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1256
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1254
constexpr ExpExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1246
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1263
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1249
An autodiff expression node.
Definition expression.hpp:89
Scalar val
The value of the expression node.
Definition expression.hpp:94
friend ExpressionPtr< Scalar > operator-(const ExpressionPtr< Scalar > &lhs)
Unary minus operator.
Definition expression.hpp:314
int32_t col
This expression's column in a Jacobian, or -1 otherwise.
Definition expression.hpp:103
virtual Scalar grad_r(Scalar lhs, Scalar rhs, Scalar parent_adjoint) const
Returns ∂/∂r as a Scalar.
Definition expression.hpp:383
std::array< ExpressionPtr< Scalar >, 2 > args
Expression arguments.
Definition expression.hpp:113
uint32_t ref_count
Reference count for intrusive shared pointer.
Definition expression.hpp:110
constexpr Expression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:126
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.
Definition expression.hpp:395
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.
Definition expression.hpp:408
Scalar adjoint
The adjoint of the expression node, used during autodiff.
Definition expression.hpp:97
friend ExpressionPtr< Scalar > operator+(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
Expression-Expression addition operator.
Definition expression.hpp:235
constexpr bool is_constant(Scalar constant) const
Returns true if the expression is the given constant.
Definition expression.hpp:142
constexpr Expression()=default
Constructs a constant expression with a value of zero.
constexpr Expression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:133
ExpressionPtr< Scalar > adjoint_expr
The adjoint of the expression node, used during gradient expression tree generation.
Definition expression.hpp:107
Scalar_ Scalar
Scalar type alias.
Definition expression.hpp:91
virtual ExpressionType type() const =0
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
friend ExpressionPtr< Scalar > operator/(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
Expression-Expression division operator.
Definition expression.hpp:200
uint32_t incoming_edges
Counts incoming edges for this node.
Definition expression.hpp:100
friend ExpressionPtr< Scalar > operator-(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
Expression-Expression subtraction operator.
Definition expression.hpp:277
friend ExpressionPtr< Scalar > operator*(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
Expression-Expression multiplication operator.
Definition expression.hpp:150
virtual ~Expression()=default
virtual Scalar value(Scalar lhs, Scalar rhs) const =0
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
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.
Definition expression.hpp:371
friend ExpressionPtr< Scalar > operator+=(ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs)
Expression-Expression compound addition operator.
Definition expression.hpp:268
constexpr Expression(Scalar value)
Constructs a nullary expression (an operator with no arguments).
Definition expression.hpp:121
friend ExpressionPtr< Scalar > operator+(const ExpressionPtr< Scalar > &lhs)
Unary plus operator.
Definition expression.hpp:340
constexpr HypotExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:1305
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &y, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:1334
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1314
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &y, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1328
Scalar grad_l(Scalar x, Scalar y, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1318
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1316
Scalar value(Scalar x, Scalar y) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1309
Scalar grad_r(Scalar x, Scalar y, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:1323
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1432
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1439
constexpr Log10Expression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1429
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1437
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1445
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1441
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1391
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1387
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1383
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1385
constexpr LogExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1375
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1378
Scalar grad_r(Scalar a, Scalar b, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:1506
Scalar grad_l(Scalar a, Scalar b, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1498
Scalar value(Scalar a, Scalar b) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1489
constexpr MaxExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:1486
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1514
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1494
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:1524
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1496
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1575
Scalar value(Scalar a, Scalar b) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1568
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1573
Scalar grad_r(Scalar a, Scalar b, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:1585
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:1604
constexpr MinExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:1565
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &a, const ExpressionPtr< Scalar > &b, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1594
Scalar grad_l(Scalar a, Scalar b, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1577
Scalar value(Scalar lhs, Scalar rhs) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:665
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:681
Scalar grad_l(Scalar lhs, Scalar rhs, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:671
constexpr MultExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:662
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:667
Scalar grad_r(Scalar lhs, Scalar rhs, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:676
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:669
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &lhs, const ExpressionPtr< Scalar > &rhs, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:688
Scalar value(Scalar base, Scalar power) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1651
Scalar grad_l(Scalar base, Scalar power, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1660
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1656
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &base, const ExpressionPtr< Scalar > &power, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1679
Scalar grad_r(Scalar base, Scalar power, Scalar parent_adjoint) const override
Returns ∂/∂r as a Scalar.
Definition expression.hpp:1666
ExpressionPtr< Scalar > grad_expr_r(const ExpressionPtr< Scalar > &base, const ExpressionPtr< Scalar > &power, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂r as an Expression.
Definition expression.hpp:1685
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1658
constexpr PowExpression(ExpressionPtr< Scalar > lhs, ExpressionPtr< Scalar > rhs)
Constructs a binary expression (an operator with two arguments).
Definition expression.hpp:1648
constexpr SignExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1747
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1750
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1760
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1762
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1808
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1813
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1799
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1806
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1804
constexpr SinExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1796
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1863
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1861
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1859
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1868
constexpr SinhExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1851
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1854
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1914
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1916
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1923
constexpr SqrtExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1906
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1918
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1909
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:1981
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:1972
constexpr TanExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:1962
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:1974
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:1970
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:1965
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:2028
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:2030
Scalar grad_l(Scalar x, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:2032
Scalar value(Scalar x, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:2023
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &x, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:2039
constexpr TanhExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:2020
constexpr UnaryMinusExpression(ExpressionPtr< Scalar > lhs)
Constructs an unary expression (an operator with one argument).
Definition expression.hpp:705
ExpressionPtr< Scalar > grad_expr_l(const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &, const ExpressionPtr< Scalar > &parent_adjoint) const override
Returns ∂/∂l as an Expression.
Definition expression.hpp:718
Scalar grad_l(Scalar, Scalar, Scalar parent_adjoint) const override
Returns ∂/∂l as a Scalar.
Definition expression.hpp:714
ExpressionType type() const override
Returns the type of this expression (constant, linear, quadratic, or nonlinear).
Definition expression.hpp:710
Scalar value(Scalar lhs, Scalar) const override
Either nullary operator with no arguments, unary operator with one argument, or binary operator with ...
Definition expression.hpp:708
std::string_view name() const override
Returns the name of this expression.
Definition expression.hpp:712