6#include <casadi/casadi.hpp>
14template <>
struct NumTraits<casadi::MX> : GenericNumTraits<casadi::MX> {
25 static inline int digits10() {
return std::numeric_limits<double>::digits10; }
26 static inline int min_exponent() {
return std::numeric_limits<double>::min_exponent; }
27 static inline int max_exponent() {
return std::numeric_limits<double>::max_exponent; }
28 static inline casadi::MX
epsilon() {
return std::numeric_limits<double>::epsilon(); }
30 static inline casadi::MX
highest() {
return std::numeric_limits<double>::max(); }
31 static inline casadi::MX
lowest() {
return std::numeric_limits<double>::lowest(); }
42template <
typename Scalar>
43using JanusMatrix = Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>;
49template <
typename Scalar>
using JanusVector = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;
56template <
typename Scalar>
using Vec2 = Eigen::Matrix<Scalar, 2, 1>;
57template <
typename Scalar>
using Vec3 = Eigen::Matrix<Scalar, 3, 1>;
58template <
typename Scalar>
using Vec4 = Eigen::Matrix<Scalar, 4, 1>;
60template <
typename Scalar>
using Mat2 = Eigen::Matrix<Scalar, 2, 2>;
61template <
typename Scalar>
using Mat3 = Eigen::Matrix<Scalar, 3, 3>;
62template <
typename Scalar>
using Mat4 = Eigen::Matrix<Scalar, 4, 4>;
100 return casadi::MX::sym(name, rows, cols);
116 casadi::MX mx = casadi::MX::sym(name, size, 1);
118 for (
int i = 0; i < size; ++i) {
155inline std::pair<SymbolicVector, SymbolicScalar>
sym_vec_pair(
const std::string &name,
int size) {
156 casadi::MX mx = casadi::MX::sym(name, size, 1);
158 for (
int i = 0; i < size; ++i) {
174 casadi::MX m(v.size(), 1);
175 for (
int i = 0; i < v.size(); ++i) {
189template <
typename Derived> casadi::MX
to_mx(
const Eigen::MatrixBase<Derived> &e) {
191 return casadi::MX(e.rows(), e.cols());
194 casadi::MX m(e.rows(), e.cols());
196 for (Eigen::Index i = 0; i < e.rows(); ++i) {
197 for (Eigen::Index j = 0; j < e.cols(); ++j) {
198 if constexpr (std::is_same_v<typename Derived::Scalar, casadi::MX>) {
199 m(
static_cast<int>(i),
static_cast<int>(j)) = e(i, j);
201 m(
static_cast<int>(i),
static_cast<int>(j)) = casadi::MX(e(i, j));
213inline Eigen::Matrix<casadi::MX, Eigen::Dynamic, Eigen::Dynamic>
to_eigen(
const casadi::MX &m) {
214 Eigen::Matrix<casadi::MX, Eigen::Dynamic, Eigen::Dynamic> e(m.size1(), m.size2());
215 for (
int i = 0; i < m.size1(); ++i) {
216 for (
int j = 0; j < m.size2(); ++j) {
230 for (
int i = 0; i < m.size1(); ++i) {
263 template <
typename Derived>
SymbolicArg(
const Eigen::MatrixBase<Derived> &e) {
265 mx_ = casadi::MX(e.rows(), e.cols());
268 mx_ = casadi::MX(e.rows(), e.cols());
269 for (Eigen::Index i = 0; i < e.rows(); ++i) {
270 for (Eigen::Index j = 0; j < e.cols(); ++j) {
271 mx_(
static_cast<int>(i),
static_cast<int>(j)) = e(i, j);
SymbolicScalar get() const
Get underlying CasADi MX object.
Definition JanusTypes.hpp:286
SymbolicArg(const SymbolicScalar &s)
Construct from single symbolic scalar (MX).
Definition JanusTypes.hpp:256
SymbolicArg(const Eigen::MatrixBase< Derived > &e)
Construct from Eigen matrix of symbolic scalars.
Definition JanusTypes.hpp:263
Definition JanusTypes.hpp:9
Definition Diagnostics.hpp:19
Eigen::SparseMatrix< double > SparseMatrix
Sparse matrix types for efficient storage of large, sparse numeric data.
Definition JanusTypes.hpp:80
JanusVector< SymbolicScalar > SymbolicVector
Eigen vector of MX elements.
Definition JanusTypes.hpp:72
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic > JanusMatrix
Dynamic-size matrix for both numeric and symbolic backends.
Definition JanusTypes.hpp:43
Eigen::Matrix< Scalar, 2, 1 > Vec2
Fixed-size vectors and matrices for performance-critical code.
Definition JanusTypes.hpp:56
SymbolicVector sym_vec(const std::string &name, int size)
Create a symbolic vector preserving the CasADi primitive connection.
Definition JanusTypes.hpp:137
JanusMatrix< NumericScalar > NumericMatrix
Eigen::MatrixXd equivalent.
Definition JanusTypes.hpp:66
Eigen::Matrix< Scalar, 4, 4 > Mat4
Definition JanusTypes.hpp:62
Eigen::Triplet< double > SparseTriplet
(row, col, value) triplet
Definition JanusTypes.hpp:81
SymbolicVector as_vector(const casadi::MX &m)
Convert CasADi MX vector to SymbolicVector (Eigen container of MX).
Definition JanusTypes.hpp:228
JanusVector< NumericScalar > NumericVector
Eigen::VectorXd equivalent.
Definition JanusTypes.hpp:67
Eigen::Matrix< Scalar, 2, 2 > Mat2
Definition JanusTypes.hpp:60
Eigen::Matrix< Scalar, 4, 1 > Vec4
Definition JanusTypes.hpp:58
casadi::MX to_mx(const Eigen::MatrixBase< Derived > &e)
Convert Eigen matrix of MX (or numeric) to CasADi MX.
Definition JanusTypes.hpp:189
std::pair< SymbolicVector, SymbolicScalar > sym_vec_pair(const std::string &name, int size)
Create symbolic vector and return both SymbolicVector and underlying MX.
Definition JanusTypes.hpp:155
Eigen::Matrix< Scalar, 3, 3 > Mat3
Definition JanusTypes.hpp:61
JanusMatrix< SymbolicScalar > SymbolicMatrix
Eigen matrix of MX elements.
Definition JanusTypes.hpp:71
SymbolicScalar sym(const std::string &name)
Create a named symbolic scalar variable.
Definition JanusTypes.hpp:90
SymbolicVector to_eigen_vec(const casadi::MX &m)
Backwards compatibility alias for as_vector.
Definition JanusTypes.hpp:240
Eigen::Matrix< casadi::MX, Eigen::Dynamic, Eigen::Dynamic > to_eigen(const casadi::MX &m)
Convert CasADi MX to Eigen matrix of MX.
Definition JanusTypes.hpp:213
Eigen::Matrix< Scalar, 3, 1 > Vec3
Definition JanusTypes.hpp:57
SymbolicVector sym_vector(const std::string &name, int size)
Create a named symbolic vector (returns SymbolicVector).
Definition JanusTypes.hpp:115
double NumericScalar
Numeric scalar type.
Definition JanusTypes.hpp:65
Eigen::Matrix< Scalar, Eigen::Dynamic, 1 > JanusVector
Dynamic-size column vector for both numeric and symbolic backends.
Definition JanusTypes.hpp:49
casadi::MX SymbolicScalar
CasADi MX symbolic scalar.
Definition JanusTypes.hpp:70
SymbolicScalar as_mx(const SymbolicVector &v)
Get the underlying MX representation of a SymbolicVector.
Definition JanusTypes.hpp:173
static int digits10()
Definition JanusTypes.hpp:25
static int min_exponent()
Definition JanusTypes.hpp:26
static casadi::MX dummy_precision()
Definition JanusTypes.hpp:29
static casadi::MX highest()
Definition JanusTypes.hpp:30
static casadi::MX epsilon()
Definition JanusTypes.hpp:28
static int max_exponent()
Definition JanusTypes.hpp:27
@ RequireInitialization
Definition JanusTypes.hpp:19
@ IsSigned
Definition JanusTypes.hpp:18
@ IsInteger
Definition JanusTypes.hpp:17
@ AddCost
Definition JanusTypes.hpp:21
@ MulCost
Definition JanusTypes.hpp:22
@ ReadCost
Definition JanusTypes.hpp:20
@ IsComplex
Definition JanusTypes.hpp:16
static casadi::MX lowest()
Definition JanusTypes.hpp:31