List of all members | Static Public Member Functions
casadi::casadi_math< T > Struct Template Reference

Easy access to all the functions for a particular type. More...

#include <calculus.hpp>

Detailed Description

template<typename T>
struct casadi::casadi_math< T >

Definition at line 1125 of file calculus.hpp.

Static Public Member Functions

static void fun (unsigned char op, const T &x, const T &y, T &f)
 Evaluate a built in function (scalar-scalar) More...
 
static void fun (unsigned char op, const T *x, const T *y, T *f, casadi_int n)
 Evaluate a built in function (vector-vector) More...
 
static void fun (unsigned char op, const T *x, const T &y, T *f, casadi_int n)
 Evaluate a built in function (vector-scalar) More...
 
static void fun (unsigned char op, const T &x, const T *y, T *f, casadi_int n)
 Evaluate a built in function (scalar-vector) More...
 
static void der (unsigned char op, const T &x, const T &y, const T &f, T *d)
 Evaluate a built in derivative function. More...
 
static void derF (unsigned char op, const T &x, const T &y, T &f, T *d)
 Evaluate the function and the derivative function. More...
 
static void fun_linear (unsigned char op, const T *x, const T *y, T *f)
 Evaluate function on a const/linear/nonlinear partition. More...
 
static bool is_binary (unsigned char op)
 Is binary operation? More...
 
static bool is_unary (unsigned char op)
 Is unary operation? More...
 
static casadi_int ndeps (unsigned char op)
 Number of dependencies. More...
 
static std::string print (unsigned char op, const std::string &x, const std::string &y)
 Print. More...
 
static std::string print (unsigned char op, const std::string &x)
 
static std::string name (unsigned char op)
 
static std::string pre (unsigned char op)
 
static std::string sep (unsigned char op)
 
static std::string post (unsigned char op)
 

Member Function Documentation

◆ der()

template<typename T >
void casadi::casadi_math< T >::der ( unsigned char  op,
const T &  x,
const T &  y,
const T &  f,
T *  d 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1ga

Definition at line 1375 of file calculus.hpp.

1375  {
1376  // NOTE: We define the implementation in a preprocessor macro to be able to force inlining,
1377  // and to allow extensions in the VM
1378 #define CASADI_MATH_DER_BUILTIN(X, Y, F, D) \
1379  case OP_ASSIGN: BinaryOperation<OP_ASSIGN>::der(X, Y, F, D); break; \
1380  case OP_ADD: BinaryOperation<OP_ADD>::der(X, Y, F, D); break; \
1381  case OP_SUB: BinaryOperation<OP_SUB>::der(X, Y, F, D); break; \
1382  case OP_MUL: BinaryOperation<OP_MUL>::der(X, Y, F, D); break; \
1383  case OP_DIV: BinaryOperation<OP_DIV>::der(X, Y, F, D); break; \
1384  case OP_NEG: BinaryOperation<OP_NEG>::der(X, Y, F, D); break; \
1385  case OP_EXP: BinaryOperation<OP_EXP>::der(X, Y, F, D); break; \
1386  case OP_LOG: BinaryOperation<OP_LOG>::der(X, Y, F, D); break; \
1387  case OP_POW: BinaryOperation<OP_POW>::der(X, Y, F, D); break; \
1388  case OP_CONSTPOW: BinaryOperation<OP_CONSTPOW>::der(X, Y, F, D); break; \
1389  case OP_SQRT: BinaryOperation<OP_SQRT>::der(X, Y, F, D); break; \
1390  case OP_SQ: BinaryOperation<OP_SQ>::der(X, Y, F, D); break; \
1391  case OP_TWICE: BinaryOperation<OP_TWICE>::der(X, Y, F, D); break; \
1392  case OP_SIN: BinaryOperation<OP_SIN>::der(X, Y, F, D); break; \
1393  case OP_COS: BinaryOperation<OP_COS>::der(X, Y, F, D); break; \
1394  case OP_TAN: BinaryOperation<OP_TAN>::der(X, Y, F, D); break; \
1395  case OP_ASIN: BinaryOperation<OP_ASIN>::der(X, Y, F, D); break; \
1396  case OP_ACOS: BinaryOperation<OP_ACOS>::der(X, Y, F, D); break; \
1397  case OP_ATAN: BinaryOperation<OP_ATAN>::der(X, Y, F, D); break; \
1398  case OP_LT: BinaryOperation<OP_LT>::der(X, Y, F, D); break; \
1399  case OP_LE: BinaryOperation<OP_LE>::der(X, Y, F, D); break; \
1400  case OP_EQ: BinaryOperation<OP_EQ>::der(X, Y, F, D); break; \
1401  case OP_NE: BinaryOperation<OP_NE>::der(X, Y, F, D); break; \
1402  case OP_NOT: BinaryOperation<OP_NOT>::der(X, Y, F, D); break; \
1403  case OP_AND: BinaryOperation<OP_AND>::der(X, Y, F, D); break; \
1404  case OP_OR: BinaryOperation<OP_OR>::der(X, Y, F, D); break; \
1405  case OP_IF_ELSE_ZERO: BinaryOperation<OP_IF_ELSE_ZERO>::der(X, Y, F, D); break; \
1406  case OP_FLOOR: BinaryOperation<OP_FLOOR>::der(X, Y, F, D); break; \
1407  case OP_CEIL: BinaryOperation<OP_CEIL>::der(X, Y, F, D); break; \
1408  case OP_FMOD: BinaryOperation<OP_FMOD>::der(X, Y, F, D); break; \
1409  case OP_REMAINDER: BinaryOperation<OP_REMAINDER>::der(X, Y, F, D); break; \
1410  case OP_FABS: BinaryOperation<OP_FABS>::der(X, Y, F, D); break; \
1411  case OP_SIGN: BinaryOperation<OP_SIGN>::der(X, Y, F, D); break; \
1412  case OP_COPYSIGN: BinaryOperation<OP_COPYSIGN>::der(X, Y, F, D); break; \
1413  case OP_ERF: BinaryOperation<OP_ERF>::der(X, Y, F, D); break; \
1414  case OP_FMIN: BinaryOperation<OP_FMIN>::der(X, Y, F, D); break; \
1415  case OP_FMAX: BinaryOperation<OP_FMAX>::der(X, Y, F, D); break; \
1416  case OP_INV: BinaryOperation<OP_INV>::der(X, Y, F, D); break; \
1417  case OP_SINH: BinaryOperation<OP_SINH>::der(X, Y, F, D); break; \
1418  case OP_COSH: BinaryOperation<OP_COSH>::der(X, Y, F, D); break; \
1419  case OP_TANH: BinaryOperation<OP_TANH>::der(X, Y, F, D); break; \
1420  case OP_ASINH: BinaryOperation<OP_ASINH>::der(X, Y, F, D); break; \
1421  case OP_ACOSH: BinaryOperation<OP_ACOSH>::der(X, Y, F, D); break; \
1422  case OP_ATANH: BinaryOperation<OP_ATANH>::der(X, Y, F, D); break; \
1423  case OP_ATAN2: BinaryOperation<OP_ATAN2>::der(X, Y, F, D); break; \
1424  case OP_ERFINV: BinaryOperation<OP_ERFINV>::der(X, Y, F, D); break; \
1425  case OP_LIFT: BinaryOperation<OP_LIFT>::der(X, Y, F, D); break; \
1426  case OP_PRINTME: BinaryOperation<OP_PRINTME>::der(X, Y, F, D); break; \
1427  case OP_LOG1P: BinaryOperation<OP_LOG1P>::der(X, Y, F, D); break; \
1428  case OP_EXPM1: BinaryOperation<OP_EXPM1>::der(X, Y, F, D); break; \
1429  case OP_HYPOT: BinaryOperation<OP_HYPOT>::der(X, Y, F, D); break;
1430  switch (op) {
1431  CASADI_MATH_DER_BUILTIN(x, y, f, d)
1432  }
1433  }

Referenced by casadi::BinaryMX< ScX, ScY >::ad_forward(), casadi::UnaryMX::ad_forward(), casadi::BinaryMX< ScX, ScY >::ad_reverse(), casadi::UnaryMX::ad_reverse(), and casadi::casadi_math< casadi_int >::der().

◆ derF()

template<typename T >
void casadi::casadi_math< T >::derF ( unsigned char  op,
const T &  x,
const T &  y,
T &  f,
T *  d 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1gb

Definition at line 1437 of file calculus.hpp.

1437  {
1438  // NOTE: We define the implementation in a preprocessor macro to be able to force inlining,
1439  // and to allow extensions in the VM
1440 #define CASADI_MATH_DERF_BUILTIN(X, Y, F, D) \
1441 case OP_ASSIGN: DerBinaryOperation<OP_ASSIGN>::derf(X, Y, F, D); break; \
1442 case OP_ADD: DerBinaryOperation<OP_ADD>::derf(X, Y, F, D); break; \
1443 case OP_SUB: DerBinaryOperation<OP_SUB>::derf(X, Y, F, D); break; \
1444 case OP_MUL: DerBinaryOperation<OP_MUL>::derf(X, Y, F, D); break; \
1445 case OP_DIV: DerBinaryOperation<OP_DIV>::derf(X, Y, F, D); break; \
1446 case OP_NEG: DerBinaryOperation<OP_NEG>::derf(X, Y, F, D); break; \
1447 case OP_EXP: DerBinaryOperation<OP_EXP>::derf(X, Y, F, D); break; \
1448 case OP_LOG: DerBinaryOperation<OP_LOG>::derf(X, Y, F, D); break; \
1449 case OP_POW: DerBinaryOperation<OP_POW>::derf(X, Y, F, D); break; \
1450 case OP_CONSTPOW: DerBinaryOperation<OP_CONSTPOW>::derf(X, Y, F, D); break; \
1451 case OP_SQRT: DerBinaryOperation<OP_SQRT>::derf(X, Y, F, D); break; \
1452 case OP_SQ: DerBinaryOperation<OP_SQ>::derf(X, Y, F, D); break; \
1453 case OP_TWICE: DerBinaryOperation<OP_TWICE>::derf(X, Y, F, D); break; \
1454 case OP_SIN: DerBinaryOperation<OP_SIN>::derf(X, Y, F, D); break; \
1455 case OP_COS: DerBinaryOperation<OP_COS>::derf(X, Y, F, D); break; \
1456 case OP_TAN: DerBinaryOperation<OP_TAN>::derf(X, Y, F, D); break; \
1457 case OP_ASIN: DerBinaryOperation<OP_ASIN>::derf(X, Y, F, D); break; \
1458 case OP_ACOS: DerBinaryOperation<OP_ACOS>::derf(X, Y, F, D); break; \
1459 case OP_ATAN: DerBinaryOperation<OP_ATAN>::derf(X, Y, F, D); break; \
1460 case OP_LT: DerBinaryOperation<OP_LT>::derf(X, Y, F, D); break; \
1461 case OP_LE: DerBinaryOperation<OP_LE>::derf(X, Y, F, D); break; \
1462 case OP_EQ: DerBinaryOperation<OP_EQ>::derf(X, Y, F, D); break; \
1463 case OP_NE: DerBinaryOperation<OP_NE>::derf(X, Y, F, D); break; \
1464 case OP_NOT: DerBinaryOperation<OP_NOT>::derf(X, Y, F, D); break; \
1465 case OP_AND: DerBinaryOperation<OP_AND>::derf(X, Y, F, D); break; \
1466 case OP_OR: DerBinaryOperation<OP_OR>::derf(X, Y, F, D); break; \
1467 case OP_IF_ELSE_ZERO: DerBinaryOperation<OP_IF_ELSE_ZERO>::derf(X, Y, F, D); break; \
1468 case OP_FLOOR: DerBinaryOperation<OP_FLOOR>::derf(X, Y, F, D); break; \
1469 case OP_CEIL: DerBinaryOperation<OP_CEIL>::derf(X, Y, F, D); break; \
1470 case OP_FMOD: DerBinaryOperation<OP_FMOD>::derf(X, Y, F, D); break; \
1471 case OP_REMAINDER: DerBinaryOperation<OP_REMAINDER>::derf(X, Y, F, D); break; \
1472 case OP_FABS: DerBinaryOperation<OP_FABS>::derf(X, Y, F, D); break; \
1473 case OP_SIGN: DerBinaryOperation<OP_SIGN>::derf(X, Y, F, D); break; \
1474 case OP_COPYSIGN: DerBinaryOperation<OP_COPYSIGN>::derf(X, Y, F, D); break; \
1475 case OP_ERF: DerBinaryOperation<OP_ERF>::derf(X, Y, F, D); break; \
1476 case OP_FMIN: DerBinaryOperation<OP_FMIN>::derf(X, Y, F, D); break; \
1477 case OP_FMAX: DerBinaryOperation<OP_FMAX>::derf(X, Y, F, D); break; \
1478 case OP_INV: DerBinaryOperation<OP_INV>::derf(X, Y, F, D); break; \
1479 case OP_SINH: DerBinaryOperation<OP_SINH>::derf(X, Y, F, D); break; \
1480 case OP_COSH: DerBinaryOperation<OP_COSH>::derf(X, Y, F, D); break; \
1481 case OP_TANH: DerBinaryOperation<OP_TANH>::derf(X, Y, F, D); break; \
1482 case OP_ASINH: DerBinaryOperation<OP_ASINH>::derf(X, Y, F, D); break; \
1483 case OP_ACOSH: DerBinaryOperation<OP_ACOSH>::derf(X, Y, F, D); break; \
1484 case OP_ATANH: DerBinaryOperation<OP_ATANH>::derf(X, Y, F, D); break; \
1485 case OP_ATAN2: DerBinaryOperation<OP_ATAN2>::derf(X, Y, F, D); break; \
1486 case OP_ERFINV: DerBinaryOperation<OP_ERFINV>::derf(X, Y, F, D); break; \
1487 case OP_LIFT: DerBinaryOperation<OP_LIFT>::derf(X, Y, F, D); break; \
1488 case OP_PRINTME: DerBinaryOperation<OP_PRINTME>::derf(X, Y, F, D); break; \
1489 case OP_LOG1P: DerBinaryOperation<OP_LOG1P>::derf(X, Y, F, D); break; \
1490 case OP_EXPM1: DerBinaryOperation<OP_EXPM1>::derf(X, Y, F, D); break; \
1491 case OP_HYPOT: DerBinaryOperation<OP_HYPOT>::derf(X, Y, F, D); break;
1492  switch (op) {
1493  CASADI_MATH_DERF_BUILTIN(x, y, f, d)
1494  }
1495  }

Referenced by casadi::casadi_math< casadi_int >::derF().

◆ fun() [1/4]

template<typename T >
void casadi::casadi_math< T >::fun ( unsigned char  op,
const T &  x,
const T &  y,
T &  f 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1g6

Definition at line 1289 of file calculus.hpp.

1289  {
1290  // NOTE: We define the implementation in a preprocessor macro to be able to force inlining,
1291  // and to allow extensions in the VM
1292 #define CASADI_MATH_FUN_BUILTIN_GEN(CNAME, X, Y, F, N) \
1293  case OP_ASSIGN: CNAME<OP_ASSIGN>::fcn(X, Y, F, N); break; \
1294  case OP_ADD: CNAME<OP_ADD>::fcn(X, Y, F, N); break; \
1295  case OP_SUB: CNAME<OP_SUB>::fcn(X, Y, F, N); break; \
1296  case OP_MUL: CNAME<OP_MUL>::fcn(X, Y, F, N); break; \
1297  case OP_DIV: CNAME<OP_DIV>::fcn(X, Y, F, N); break; \
1298  case OP_NEG: CNAME<OP_NEG>::fcn(X, Y, F, N); break; \
1299  case OP_EXP: CNAME<OP_EXP>::fcn(X, Y, F, N); break; \
1300  case OP_LOG: CNAME<OP_LOG>::fcn(X, Y, F, N); break; \
1301  case OP_POW: CNAME<OP_POW>::fcn(X, Y, F, N); break; \
1302  case OP_CONSTPOW: CNAME<OP_CONSTPOW>::fcn(X, Y, F, N); break; \
1303  case OP_SQRT: CNAME<OP_SQRT>::fcn(X, Y, F, N); break; \
1304  case OP_SQ: CNAME<OP_SQ>::fcn(X, Y, F, N); break; \
1305  case OP_TWICE: CNAME<OP_TWICE>::fcn(X, Y, F, N); break; \
1306  case OP_SIN: CNAME<OP_SIN>::fcn(X, Y, F, N); break; \
1307  case OP_COS: CNAME<OP_COS>::fcn(X, Y, F, N); break; \
1308  case OP_TAN: CNAME<OP_TAN>::fcn(X, Y, F, N); break; \
1309  case OP_ASIN: CNAME<OP_ASIN>::fcn(X, Y, F, N); break; \
1310  case OP_ACOS: CNAME<OP_ACOS>::fcn(X, Y, F, N); break; \
1311  case OP_ATAN: CNAME<OP_ATAN>::fcn(X, Y, F, N); break; \
1312  case OP_LT: CNAME<OP_LT>::fcn(X, Y, F, N); break; \
1313  case OP_LE: CNAME<OP_LE>::fcn(X, Y, F, N); break; \
1314  case OP_EQ: CNAME<OP_EQ>::fcn(X, Y, F, N); break; \
1315  case OP_NE: CNAME<OP_NE>::fcn(X, Y, F, N); break; \
1316  case OP_NOT: CNAME<OP_NOT>::fcn(X, Y, F, N); break; \
1317  case OP_AND: CNAME<OP_AND>::fcn(X, Y, F, N); break; \
1318  case OP_OR: CNAME<OP_OR>::fcn(X, Y, F, N); break; \
1319  case OP_IF_ELSE_ZERO: CNAME<OP_IF_ELSE_ZERO>::fcn(X, Y, F, N); break; \
1320  case OP_FLOOR: CNAME<OP_FLOOR>::fcn(X, Y, F, N); break; \
1321  case OP_CEIL: CNAME<OP_CEIL>::fcn(X, Y, F, N); break; \
1322  case OP_FMOD: CNAME<OP_FMOD>::fcn(X, Y, F, N); break; \
1323  case OP_REMAINDER: CNAME<OP_REMAINDER>::fcn(X, Y, F, N); break; \
1324  case OP_FABS: CNAME<OP_FABS>::fcn(X, Y, F, N); break; \
1325  case OP_SIGN: CNAME<OP_SIGN>::fcn(X, Y, F, N); break; \
1326  case OP_COPYSIGN: CNAME<OP_COPYSIGN>::fcn(X, Y, F, N); break; \
1327  case OP_ERF: CNAME<OP_ERF>::fcn(X, Y, F, N); break; \
1328  case OP_FMIN: CNAME<OP_FMIN>::fcn(X, Y, F, N); break; \
1329  case OP_FMAX: CNAME<OP_FMAX>::fcn(X, Y, F, N); break; \
1330  case OP_INV: CNAME<OP_INV>::fcn(X, Y, F, N); break; \
1331  case OP_SINH: CNAME<OP_SINH>::fcn(X, Y, F, N); break; \
1332  case OP_COSH: CNAME<OP_COSH>::fcn(X, Y, F, N); break; \
1333  case OP_TANH: CNAME<OP_TANH>::fcn(X, Y, F, N); break; \
1334  case OP_ASINH: CNAME<OP_ASINH>::fcn(X, Y, F, N); break; \
1335  case OP_ACOSH: CNAME<OP_ACOSH>::fcn(X, Y, F, N); break; \
1336  case OP_ATANH: CNAME<OP_ATANH>::fcn(X, Y, F, N); break; \
1337  case OP_ATAN2: CNAME<OP_ATAN2>::fcn(X, Y, F, N); break; \
1338  case OP_ERFINV: CNAME<OP_ERFINV>::fcn(X, Y, F, N); break; \
1339  case OP_LIFT: CNAME<OP_LIFT>::fcn(X, Y, F, N); break; \
1340  case OP_PRINTME: CNAME<OP_PRINTME>::fcn(X, Y, F, N); break; \
1341  case OP_LOG1P: CNAME<OP_LOG1P>::fcn(X, Y, F, N); break; \
1342  case OP_EXPM1: CNAME<OP_EXPM1>::fcn(X, Y, F, N); break; \
1343  case OP_HYPOT: CNAME<OP_HYPOT>::fcn(X, Y, F, N); break;
1344 
1345 #define CASADI_MATH_FUN_BUILTIN(X, Y, F) CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationSS, X, Y, F, 1)
1346 
1347  switch (op) {
1348  CASADI_MATH_FUN_BUILTIN(x, y, f)
1349  }
1350  }

Referenced by casadi::MXNode::_get_binary(), casadi::Constant< Value >::_get_binary(), casadi::UnarySX::create(), casadi::BinarySX::create(), casadi::UnaryMX::eval(), casadi::BinaryMX< ScX, ScY >::eval_gen(), casadi::BinaryMX< ScX, ScY >::eval_mx(), casadi::UnaryMX::eval_mx(), casadi::UnaryMX::eval_sx(), casadi::casadi_math< casadi_int >::fun(), and casadi::Constant< Value >::get_unary().

◆ fun() [2/4]

template<typename T >
void casadi::casadi_math< T >::fun ( unsigned char  op,
const T &  x,
const T *  y,
T *  f,
casadi_int  n 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1g9

Definition at line 1367 of file calculus.hpp.

1367  {
1368  switch (op) {
1369  CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationSV, x, y, f, n)
1370  }
1371  }

◆ fun() [3/4]

template<typename T >
void casadi::casadi_math< T >::fun ( unsigned char  op,
const T *  x,
const T &  y,
T *  f,
casadi_int  n 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1g8

Definition at line 1360 of file calculus.hpp.

1360  {
1361  switch (op) {
1362  CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationVS, x, y, f, n)
1363  }
1364  }

◆ fun() [4/4]

template<typename T >
void casadi::casadi_math< T >::fun ( unsigned char  op,
const T *  x,
const T *  y,
T *  f,
casadi_int  n 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1g7

Definition at line 1353 of file calculus.hpp.

1353  {
1354  switch (op) {
1355  CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationVV, x, y, f, n)
1356  }
1357  }

◆ fun_linear()

template<typename T >
void casadi::casadi_math< T >::fun_linear ( unsigned char  op,
const T *  x,
const T *  y,
T *  f 
)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_28f

Definition at line 1552 of file calculus.hpp.

1552  {
1553  if (op==OP_ADD || op==OP_SUB) {
1554  for (int i=0;i<3;++i) {
1555  f[i] = T::binary(op, x[i], y[i]);
1556  }
1557  } else if (op==OP_TWICE || op==OP_NEG) {
1558  for (int i=0;i<3;++i) {
1559  f[i] = T::unary(op, x[i]);
1560  }
1561  } else if (op==OP_MUL) {
1562  f[0] += x[0]*y[0];
1563  f[1] += x[0]*y[1];
1564  f[2] += x[0]*y[2];
1565  f[1] += x[1]*y[0];
1566  f[2] += x[1]*y[1];
1567  f[2] += x[1]*y[2];
1568  f[2] += x[2]*y[0];
1569  f[2] += x[2]*y[1];
1570  f[2] += x[2]*y[2];
1571  } else if (op==OP_DIV) {
1572  bool const_argy = y[1].is_zero() && y[2].is_zero();
1573  if (const_argy) {
1574  f[0] = x[0]/y[0];
1575  f[1] = x[1]/y[0];
1576  f[2] = x[2]/y[0];
1577  } else {
1578  f[2] = (x[0]+x[1]+x[2])/(y[0]+y[1]+y[2]);
1579  }
1580  } else if (casadi_math<T>::is_unary(op)) {
1581  bool const_arg = x[1].is_zero() && x[2].is_zero();
1582  if (const_arg) {
1583  f[0] = T::unary(op, x[0]);
1584  } else {
1585  f[2] = T::unary(op, x[0]+x[1]+x[2]);
1586  }
1587 
1588  } else if (casadi_math<T>::is_binary(op)) {
1589  bool const_argx = x[1].is_zero() && x[2].is_zero();
1590  bool const_argy = y[1].is_zero() && y[2].is_zero();
1591  if (const_argx && const_argy) {
1592  f[0] = T::binary(op, x[0], y[0]);
1593  } else {
1594  f[2] = T::binary(op, x[0]+x[1]+x[2], y[0]+y[1]+y[2]);
1595  }
1596  } else {
1597  casadi_error("Not implemented");
1598  }
1599  }
@ OP_TWICE
Definition: calculus.hpp:67
@ OP_SUB
Definition: calculus.hpp:65
@ OP_ADD
Definition: calculus.hpp:65
@ OP_DIV
Definition: calculus.hpp:65
@ OP_NEG
Definition: calculus.hpp:66
@ OP_MUL
Definition: calculus.hpp:65
static bool is_binary(unsigned char op)
Is binary operation?
Definition: calculus.hpp:1602
static bool is_unary(unsigned char op)
Is unary operation?
Definition: calculus.hpp:1613

References casadi::OP_ADD, casadi::OP_DIV, casadi::OP_MUL, casadi::OP_NEG, casadi::OP_SUB, and casadi::OP_TWICE.

Referenced by casadi::BinaryMX< ScX, ScY >::eval_linear(), and casadi::UnaryMX::eval_linear().

◆ is_binary()

template<typename T >
bool casadi::casadi_math< T >::is_binary ( unsigned char  op)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1gc

Definition at line 1602 of file calculus.hpp.

1602  {
1603  switch (op) {
1604  CASADI_MATH_BINARY_BUILTIN
1605  case OP_IF_ELSE_ZERO:
1606  return true;
1607  default:
1608  return false;
1609  }
1610  }
@ OP_IF_ELSE_ZERO
Definition: calculus.hpp:71

References casadi::OP_IF_ELSE_ZERO.

◆ is_unary()

template<typename T >
bool casadi::casadi_math< T >::is_unary ( unsigned char  op)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1gd

Definition at line 1613 of file calculus.hpp.

1613  {
1614  switch (op) {
1615  CASADI_MATH_UNARY_BUILTIN
1616  return true;
1617  default:
1618  return false;
1619  }
1620  }

◆ name()

template<typename T >
std::string casadi::casadi_math< T >::name ( unsigned char  op)
inlinestatic

Definition at line 1655 of file calculus.hpp.

1655  {
1656  switch (op) {
1657  case OP_ASSIGN: return "assign";
1658  case OP_ADD: return "add";
1659  case OP_SUB: return "sub";
1660  case OP_MUL: return "mul";
1661  case OP_DIV: return "div";
1662  case OP_NEG: return "neg";
1663  case OP_EXP: return "exp";
1664  case OP_LOG: return "log";
1665  case OP_CONSTPOW:
1666  case OP_POW: return "pow";
1667  case OP_SQRT: return "sqrt";
1668  case OP_SQ: return "sq";
1669  case OP_TWICE: return "twice";
1670  case OP_SIN: return "sin";
1671  case OP_COS: return "cos";
1672  case OP_TAN: return "tan";
1673  case OP_ASIN: return "asin";
1674  case OP_ACOS: return "acos";
1675  case OP_ATAN: return "atan";
1676  case OP_LT: return "lt";
1677  case OP_LE: return "le";
1678  case OP_EQ: return "eq";
1679  case OP_NE: return "ne";
1680  case OP_NOT: return "not";
1681  case OP_AND: return "and";
1682  case OP_OR: return "or";
1683  case OP_FLOOR: return "floor";
1684  case OP_CEIL: return "ceil";
1685  case OP_FMOD: return "fmod";
1686  case OP_REMAINDER: return "remainder";
1687  case OP_FABS: return "fabs";
1688  case OP_SIGN: return "sign";
1689  case OP_COPYSIGN: return "copysign";
1690  case OP_IF_ELSE_ZERO: return "if_else_zero";
1691  case OP_ERF: return "erf";
1692  case OP_FMIN: return "fmin";
1693  case OP_FMAX: return "fmax";
1694  case OP_INV: return "inv";
1695  case OP_SINH: return "sinh";
1696  case OP_COSH: return "cosh";
1697  case OP_TANH: return "tanh";
1698  case OP_ASINH: return "asinh";
1699  case OP_ACOSH: return "acosh";
1700  case OP_ATANH: return "atanh";
1701  case OP_ATAN2: return "atan2";
1702  case OP_CONST: return "const";
1703  case OP_INPUT: return "input";
1704  case OP_OUTPUT: return "output";
1705  case OP_PARAMETER: return "parameter";
1706  case OP_CALL: return "call";
1707  case OP_MTIMES: return "mtimes";
1708  case OP_SOLVE: return "solve";
1709  case OP_TRANSPOSE: return "transpose";
1710  case OP_DETERMINANT: return "determinant";
1711  case OP_INVERSE: return "inverse";
1712  case OP_DOT: return "dot";
1713  case OP_HORZCAT: return "horzcat";
1714  case OP_VERTCAT: return "vertcat";
1715  case OP_DIAGCAT: return "diagcat";
1716  case OP_HORZSPLIT: return "horzsplit";
1717  case OP_VERTSPLIT: return "vertsplit";
1718  case OP_DIAGSPLIT: return "diagsplit";
1719  case OP_RESHAPE: return "reshape";
1720  case OP_SPARSITY_CAST: return "sparsity_cast";
1721  case OP_SUBREF: return "subref";
1722  case OP_SUBASSIGN: return "subassign";
1723  case OP_GETNONZEROS: return "getnonzeros";
1724  case OP_GETNONZEROS_PARAM: return "getnonzeros_param";
1725  case OP_ADDNONZEROS: return "addnonzeros";
1726  case OP_ADDNONZEROS_PARAM: return "addnonzeros_param";
1727  case OP_SETNONZEROS: return "setnonzeros";
1728  case OP_SETNONZEROS_PARAM: return "setnonzeros_param";
1729  case OP_PROJECT: return "project";
1730  case OP_ASSERTION: return "assertion";
1731  case OP_NORM2: return "norm2";
1732  case OP_NORM1: return "norm1";
1733  case OP_NORMINF: return "norminf";
1734  case OP_NORMF: return "normf";
1735  case OP_ERFINV: return "erfinv";
1736  case OP_PRINTME: return "printme";
1737  case OP_LIFT: return "lift";
1738  case OP_EINSTEIN: return "einstein";
1739  case OP_BSPLINE: return "bspline";
1740  case OP_CONVEXIFY: return "convexify";
1741  case OP_LOG1P: return "log1p";
1742  case OP_EXPM1: return "expm1";
1743  case OP_HYPOT: return "hypot";
1744  case OP_LOGSUMEXP: return "logsumexp";
1745  }
1746  return "<invalid-op>";
1747  }
@ OP_DIAGCAT
Definition: calculus.hpp:130
@ OP_SIGN
Definition: calculus.hpp:71
@ OP_COS
Definition: calculus.hpp:68
@ OP_ERF
Definition: calculus.hpp:72
@ OP_NE
Definition: calculus.hpp:70
@ OP_HORZCAT
Definition: calculus.hpp:124
@ OP_FMAX
Definition: calculus.hpp:72
@ OP_SINH
Definition: calculus.hpp:74
@ OP_COSH
Definition: calculus.hpp:74
@ OP_VERTCAT
Definition: calculus.hpp:127
@ OP_SPARSITY_CAST
Definition: calculus.hpp:200
@ OP_ASINH
Definition: calculus.hpp:75
@ OP_ACOS
Definition: calculus.hpp:69
@ OP_ATAN2
Definition: calculus.hpp:76
@ OP_ADDNONZEROS_PARAM
Definition: calculus.hpp:160
@ OP_COPYSIGN
Definition: calculus.hpp:71
@ OP_AND
Definition: calculus.hpp:70
@ OP_BSPLINE
Definition: calculus.hpp:195
@ OP_ATAN
Definition: calculus.hpp:69
@ OP_SQRT
Definition: calculus.hpp:67
@ OP_REMAINDER
Definition: calculus.hpp:210
@ OP_DIAGSPLIT
Definition: calculus.hpp:139
@ OP_INV
Definition: calculus.hpp:73
@ OP_INVERSE
Definition: calculus.hpp:112
@ OP_EXP
Definition: calculus.hpp:66
@ OP_OUTPUT
Definition: calculus.hpp:82
@ OP_SETNONZEROS
Definition: calculus.hpp:163
@ OP_LOG1P
Definition: calculus.hpp:202
@ OP_SIN
Definition: calculus.hpp:68
@ OP_ASIN
Definition: calculus.hpp:69
@ OP_VERTSPLIT
Definition: calculus.hpp:136
@ OP_LT
Definition: calculus.hpp:70
@ OP_PRINTME
Definition: calculus.hpp:190
@ OP_ACOSH
Definition: calculus.hpp:75
@ OP_CEIL
Definition: calculus.hpp:71
@ OP_EQ
Definition: calculus.hpp:70
@ OP_CONST
Definition: calculus.hpp:79
@ OP_OR
Definition: calculus.hpp:70
@ OP_HYPOT
Definition: calculus.hpp:206
@ OP_EINSTEIN
Definition: calculus.hpp:193
@ OP_INPUT
Definition: calculus.hpp:82
@ OP_LIFT
Definition: calculus.hpp:191
@ OP_ATANH
Definition: calculus.hpp:75
@ OP_SUBREF
Definition: calculus.hpp:145
@ OP_DETERMINANT
Definition: calculus.hpp:109
@ OP_DOT
Definition: calculus.hpp:115
@ OP_FMIN
Definition: calculus.hpp:72
@ OP_POW
Definition: calculus.hpp:66
@ OP_PROJECT
Definition: calculus.hpp:169
@ OP_EXPM1
Definition: calculus.hpp:204
@ OP_ADDNONZEROS
Definition: calculus.hpp:157
@ OP_PARAMETER
Definition: calculus.hpp:85
@ OP_SETNONZEROS_PARAM
Definition: calculus.hpp:166
@ OP_FABS
Definition: calculus.hpp:71
@ OP_MTIMES
Definition: calculus.hpp:100
@ OP_CONVEXIFY
Definition: calculus.hpp:197
@ OP_LOG
Definition: calculus.hpp:66
@ OP_LOGSUMEXP
Definition: calculus.hpp:208
@ OP_TANH
Definition: calculus.hpp:74
@ OP_NORM1
Definition: calculus.hpp:178
@ OP_CALL
Definition: calculus.hpp:88
@ OP_ERFINV
Definition: calculus.hpp:189
@ OP_NORM2
Definition: calculus.hpp:178
@ OP_LE
Definition: calculus.hpp:70
@ OP_RESHAPE
Definition: calculus.hpp:142
@ OP_TRANSPOSE
Definition: calculus.hpp:106
@ OP_SOLVE
Definition: calculus.hpp:103
@ OP_FLOOR
Definition: calculus.hpp:71
@ OP_ASSERTION
Definition: calculus.hpp:172
@ OP_CONSTPOW
Definition: calculus.hpp:66
@ OP_NOT
Definition: calculus.hpp:70
@ OP_SUBASSIGN
Definition: calculus.hpp:148
@ OP_ASSIGN
Definition: calculus.hpp:62
@ OP_HORZSPLIT
Definition: calculus.hpp:133
@ OP_GETNONZEROS_PARAM
Definition: calculus.hpp:154
@ OP_SQ
Definition: calculus.hpp:67
@ OP_NORMF
Definition: calculus.hpp:178
@ OP_GETNONZEROS
Definition: calculus.hpp:151
@ OP_FMOD
Definition: calculus.hpp:71
@ OP_TAN
Definition: calculus.hpp:68
@ OP_NORMINF
Definition: calculus.hpp:178

References casadi::OP_ACOS, casadi::OP_ACOSH, casadi::OP_ADD, casadi::OP_ADDNONZEROS, casadi::OP_ADDNONZEROS_PARAM, casadi::OP_AND, casadi::OP_ASIN, casadi::OP_ASINH, casadi::OP_ASSERTION, casadi::OP_ASSIGN, casadi::OP_ATAN, casadi::OP_ATAN2, casadi::OP_ATANH, casadi::OP_BSPLINE, casadi::OP_CALL, casadi::OP_CEIL, casadi::OP_CONST, casadi::OP_CONSTPOW, casadi::OP_CONVEXIFY, casadi::OP_COPYSIGN, casadi::OP_COS, casadi::OP_COSH, casadi::OP_DETERMINANT, casadi::OP_DIAGCAT, casadi::OP_DIAGSPLIT, casadi::OP_DIV, casadi::OP_DOT, casadi::OP_EINSTEIN, casadi::OP_EQ, casadi::OP_ERF, casadi::OP_ERFINV, casadi::OP_EXP, casadi::OP_EXPM1, casadi::OP_FABS, casadi::OP_FLOOR, casadi::OP_FMAX, casadi::OP_FMIN, casadi::OP_FMOD, casadi::OP_GETNONZEROS, casadi::OP_GETNONZEROS_PARAM, casadi::OP_HORZCAT, casadi::OP_HORZSPLIT, casadi::OP_HYPOT, casadi::OP_IF_ELSE_ZERO, casadi::OP_INPUT, casadi::OP_INV, casadi::OP_INVERSE, casadi::OP_LE, casadi::OP_LIFT, casadi::OP_LOG, casadi::OP_LOG1P, casadi::OP_LOGSUMEXP, casadi::OP_LT, casadi::OP_MTIMES, casadi::OP_MUL, casadi::OP_NE, casadi::OP_NEG, casadi::OP_NORM1, casadi::OP_NORM2, casadi::OP_NORMF, casadi::OP_NORMINF, casadi::OP_NOT, casadi::OP_OR, casadi::OP_OUTPUT, casadi::OP_PARAMETER, casadi::OP_POW, casadi::OP_PRINTME, casadi::OP_PROJECT, casadi::OP_REMAINDER, casadi::OP_RESHAPE, casadi::OP_SETNONZEROS, casadi::OP_SETNONZEROS_PARAM, casadi::OP_SIGN, casadi::OP_SIN, casadi::OP_SINH, casadi::OP_SOLVE, casadi::OP_SPARSITY_CAST, casadi::OP_SQ, casadi::OP_SQRT, casadi::OP_SUB, casadi::OP_SUBASSIGN, casadi::OP_SUBREF, casadi::OP_TAN, casadi::OP_TANH, casadi::OP_TRANSPOSE, casadi::OP_TWICE, casadi::OP_VERTCAT, and casadi::OP_VERTSPLIT.

Referenced by casadi::casadi_math< casadi_int >::name().

◆ ndeps()

template<typename T >
casadi_int casadi::casadi_math< T >::ndeps ( unsigned char  op)
inlinestatic

Extra doc: https://github.com/casadi/casadi/wiki/L_1ge

Definition at line 1623 of file calculus.hpp.

1623  {
1624  switch (op) {
1625  case OP_CONST:
1626  case OP_PARAMETER:
1627  case OP_INPUT:
1628  return 0;
1629  CASADI_MATH_BINARY_BUILTIN
1630  case OP_IF_ELSE_ZERO:
1631  return 2;
1632  case OP_CALL:
1633  return -1;
1634  default:
1635  return 1;
1636  }
1637  }

References casadi::OP_CALL, casadi::OP_CONST, casadi::OP_IF_ELSE_ZERO, casadi::OP_INPUT, and casadi::OP_PARAMETER.

Referenced by casadi::SXFunction::codegen_body(), casadi::SXFunction::disp_more(), casadi::SXFunction::init(), and casadi::casadi_math< casadi_int >::ndeps().

◆ post()

template<typename T >
std::string casadi::casadi_math< T >::post ( unsigned char  op)
inlinestatic

Definition at line 1791 of file calculus.hpp.

1791  {
1792  switch (op) {
1793  case OP_ASSIGN: return "";
1794  case OP_IF_ELSE_ZERO: return ":0)";
1795  default: return ")";
1796  }
1797  }

References casadi::OP_ASSIGN, and casadi::OP_IF_ELSE_ZERO.

Referenced by casadi::casadi_math< casadi_int >::post().

◆ pre()

template<typename T >
std::string casadi::casadi_math< T >::pre ( unsigned char  op)
inlinestatic

Definition at line 1750 of file calculus.hpp.

1750  {
1751  switch (op) {
1752  case OP_ASSIGN: return "";
1753  case OP_ADD: return "(";
1754  case OP_SUB: return "(";
1755  case OP_MUL: return "(";
1756  case OP_DIV: return "(";
1757  case OP_NEG: return "(-";
1758  case OP_TWICE: return "(2.*";
1759  case OP_LT: return "(";
1760  case OP_LE: return "(";
1761  case OP_EQ: return "(";
1762  case OP_NE: return "(";
1763  case OP_NOT: return "(!";
1764  case OP_AND: return "(";
1765  case OP_OR: return "(";
1766  case OP_IF_ELSE_ZERO: return "(";
1767  case OP_INV: return "(1./";
1768  default: return name(op) + "(";
1769  }
1770  }
static std::string name(unsigned char op)
Definition: calculus.hpp:1655

References casadi::OP_ADD, casadi::OP_AND, casadi::OP_ASSIGN, casadi::OP_DIV, casadi::OP_EQ, casadi::OP_IF_ELSE_ZERO, casadi::OP_INV, casadi::OP_LE, casadi::OP_LT, casadi::OP_MUL, casadi::OP_NE, casadi::OP_NEG, casadi::OP_NOT, casadi::OP_OR, casadi::OP_SUB, and casadi::OP_TWICE.

Referenced by casadi::casadi_math< casadi_int >::pre().

◆ print() [1/2]

template<typename T >
std::string casadi::casadi_math< T >::print ( unsigned char  op,
const std::string &  x 
)
inlinestatic

Definition at line 1649 of file calculus.hpp.

1649  {
1650  casadi_assert_dev(ndeps(op)==1);
1651  return pre(op) + x + post(op);
1652  }
static std::string post(unsigned char op)
Definition: calculus.hpp:1791
static std::string pre(unsigned char op)
Definition: calculus.hpp:1750
static casadi_int ndeps(unsigned char op)
Number of dependencies.
Definition: calculus.hpp:1623

◆ print() [2/2]

template<typename T >
std::string casadi::casadi_math< T >::print ( unsigned char  op,
const std::string &  x,
const std::string &  y 
)
inlinestatic

◆ sep()

template<typename T >
std::string casadi::casadi_math< T >::sep ( unsigned char  op)
inlinestatic

Definition at line 1773 of file calculus.hpp.

1773  {
1774  switch (op) {
1775  case OP_ADD: return "+";
1776  case OP_SUB: return "-";
1777  case OP_MUL: return "*";
1778  case OP_DIV: return "/";
1779  case OP_LT: return "<";
1780  case OP_LE: return "<=";
1781  case OP_EQ: return "==";
1782  case OP_NE: return "!=";
1783  case OP_AND: return "&&";
1784  case OP_OR: return "||";
1785  case OP_IF_ELSE_ZERO: return "?";
1786  default: return ",";
1787  }
1788  }

References casadi::OP_ADD, casadi::OP_AND, casadi::OP_DIV, casadi::OP_EQ, casadi::OP_IF_ELSE_ZERO, casadi::OP_LE, casadi::OP_LT, casadi::OP_MUL, casadi::OP_NE, casadi::OP_OR, and casadi::OP_SUB.

Referenced by casadi::casadi_math< casadi_int >::sep().


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