List of all members | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions
casadi::Dump Class Reference

Dump. More...

#include <dump.hpp>

Detailed Description

Author
Joris Gillis
Date
2026

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

Definition at line 39 of file dump.hpp.

Inheritance diagram for casadi::Dump:
Inheritance graph
[legend]
Collaboration diagram for casadi::Dump:
Collaboration graph
[legend]

Public Types

using weak_ref_type = WeakRefInternal
 

Public Member Functions

 Dump (const MX &x, const std::string &base_filename, const std::string &dir, const std::string &format, bool verbose)
 Constructor. More...
 
 ~Dump () override
 Destructor. More...
 
void finalize ()
 Validate options (called from constructors) More...
 
void reset_dump_count ()
 Reset the dump counter. More...
 
void eval_mx (const std::vector< MX > &arg, std::vector< MX > &res, const std::vector< bool > &unique={}) const override
 Evaluate symbolically (MX) More...
 
int eval (const double **arg, double **res, casadi_int *iw, double *w) const override
 Evaluate the function numerically. More...
 
int eval_sx (const SXElem **arg, SXElem **res, casadi_int *iw, SXElem *w) const override
 Evaluate the function symbolically (SX) More...
 
void eval_linear (const std::vector< std::array< MX, 3 > > &arg, std::vector< std::array< MX, 3 > > &res) const override
 Evaluate the MX node on a const/linear/nonlinear partition. More...
 
int eval_activity (const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
 Propagate signal activity forward (bit set = active) More...
 
int sp_forward (const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
 Propagate sparsity forward. More...
 
int sp_reverse (bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
 Propagate sparsity backwards. More...
 
void add_dependency (CodeGenerator &g) const override
 Add dependencies for code generation. More...
 
void generate (CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< casadi_int > &res, const std::vector< bool > &arg_is_ref, std::vector< bool > &res_is_ref) const override
 Generate code for the operation. More...
 
std::string disp (const std::vector< std::string > &arg) const override
 Print expression. More...
 
casadi_int op () const override
 Get the operation. More...
 
casadi_int n_inplace () const override
 Can the operation be performed inplace (i.e. overwrite the result) More...
 
void serialize_body (SerializingStream &s) const override
 Serialize an object without type information. More...
 
virtual bool __nonzero__ () const
 Check the truth value of this node. More...
 
virtual bool is_zero () const
 Check if identically zero. More...
 
virtual bool is_one () const
 Check if identically one. More...
 
virtual bool is_minus_one () const
 Check if identically minus one. More...
 
virtual bool is_half () const
 Check if identically 0.5. More...
 
virtual bool is_inf () const
 Check if identically inf. More...
 
virtual bool is_minus_inf () const
 Check if identically -inf. More...
 
virtual bool is_integer () const
 Check if integer. More...
 
virtual bool is_nonnegative () const
 Check if not negative. More...
 
virtual bool is_value (double val) const
 Check if a certain value. More...
 
virtual bool is_eye () const
 Check if identity matrix. More...
 
virtual bool is_unary () const
 Check if unary operation. More...
 
virtual bool is_binary () const
 Check if binary operation. More...
 
void can_inline (std::map< const MXNode *, casadi_int > &nodeind) const
 Find out which nodes can be inlined. More...
 
std::string print_compact (std::map< const MXNode *, casadi_int > &nodeind, std::vector< std::string > &intermed) const
 Print compact. More...
 
void disp (std::ostream &stream, bool more) const override
 Print a description. More...
 
virtual bool has_refcount () const
 Is reference counting needed in codegen? More...
 
virtual void codegen_incref (CodeGenerator &g, std::set< void * > &added) const
 Codegen incref. More...
 
virtual void codegen_decref (CodeGenerator &g, std::set< void * > &added) const
 Codegen decref. More...
 
void generate_copy (CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< casadi_int > &res, const std::vector< bool > &arg_is_ref, std::vector< bool > &res_is_ref, casadi_int i) const
 
void eval_linear_unary (const std::vector< std::array< MX, 3 > > &arg, std::vector< std::array< MX, 3 > > &res) const
 Evaluate the MX node on a const/linear/nonlinear partition. More...
 
void eval_linear_rearrange (const std::vector< std::array< MX, 3 > > &arg, std::vector< std::array< MX, 3 > > &res) const
 Evaluate the MX node on a const/linear/nonlinear partition. More...
 
virtual void ad_forward (const std::vector< std::vector< MX > > &fseed, std::vector< std::vector< MX > > &fsens) const
 Calculate forward mode directional derivatives. More...
 
virtual void ad_reverse (const std::vector< std::vector< MX > > &aseed, std::vector< std::vector< MX > > &asens) const
 Calculate reverse mode directional derivatives. More...
 
virtual const std::string & name () const
 Get the name. More...
 
std::string class_name () const override
 Get name of public class. More...
 
virtual bool is_valid_input () const
 Check if valid function input. More...
 
virtual casadi_int n_primitives () const
 Get the number of symbolic primitives. More...
 
virtual void primitives (std::vector< MX >::iterator &it) const
 Get symbolic primitives. More...
 
template<typename T >
join_primitives_gen (typename std::vector< T >::const_iterator &it) const
 Join an expression along symbolic primitives (template) More...
 
virtual bool has_duplicates () const
 Detect duplicate symbolic expressions. More...
 
virtual void reset_input () const
 Reset the marker for an input expression. More...
 
virtual bool is_output () const
 Check if evaluation output. More...
 
virtual bool has_output () const
 Check if a multiple output node. More...
 
virtual casadi_int which_output () const
 Get function output. More...
 
virtual const Functionwhich_function () const
 Get called function. More...
 
virtual Dict info () const
 
void serialize (SerializingStream &s) const
 Serialize an object. More...
 
virtual void serialize_type (SerializingStream &s) const
 Serialize type information. More...
 
virtual bool is_equal (const MXNode *node, casadi_int depth) const
 
bool sameOpAndDeps (const MXNode *node, casadi_int depth) const
 Checks if two nodes have the same operation and have. More...
 
const MXdep (casadi_int ind=0) const
 dependencies - functions that have to be evaluated before this one More...
 
casadi_int n_dep () const
 Number of dependencies. More...
 
virtual casadi_int nout () const
 Number of outputs. More...
 
virtual MX get_output (casadi_int oind) const
 Get an output. More...
 
const Sparsitysparsity () const
 Get the sparsity. More...
 
virtual const Sparsitysparsity (casadi_int oind) const
 Get the sparsity of output oind. More...
 
template<class T >
bool matches_sparsity (const std::vector< T > &arg) const
 
casadi_int numel () const
 Get shape. More...
 
casadi_int nnz (casadi_int i=0) const
 
casadi_int size1 () const
 
casadi_int size2 () const
 
std::pair< casadi_int, casadi_int > size () const
 
virtual casadi_int ind () const
 
virtual casadi_int segment () const
 
virtual casadi_int offset () const
 
void set_sparsity (const Sparsity &sparsity)
 Set the sparsity. More...
 
virtual size_t sz_arg () const
 Get required length of arg field. More...
 
virtual size_t sz_res () const
 Get required length of res field. More...
 
virtual size_t sz_iw () const
 Get required length of iw field. More...
 
virtual size_t sz_w () const
 Get required length of w field. More...
 
virtual size_t codegen_sz_w () const
 Length of w the node's GENERATED code needs (may exceed sz_w) More...
 
void set_dep (const MX &dep)
 Set unary dependency. More...
 
void set_dep (const MX &dep1, const MX &dep2)
 Set binary dependencies. More...
 
void set_dep (const MX &dep1, const MX &dep2, const MX &dep3)
 Set ternary dependencies. More...
 
void set_dep (const std::vector< MX > &dep)
 Set multiple dependencies. More...
 
void check_dep () const
 Check validatity of dependencies. More...
 
virtual double to_double () const
 Get the value (only for scalar constant nodes) More...
 
virtual casadi_int to_int () const
 Get the value (only for scalar constant nodes) More...
 
virtual DM get_DM () const
 Get the value (only for constant nodes) More...
 
virtual Matrix< casadi_int > mapping () const
 Get an IM representation of a GetNonzeros or SetNonzeros node. More...
 
virtual MX get_horzcat (const std::vector< MX > &x) const
 Create a horizontal concatenation node. More...
 
virtual std::vector< MXget_horzsplit (const std::vector< casadi_int > &output_offset) const
 Create a horizontal split node. More...
 
virtual MX get_repmat (casadi_int m, casadi_int n) const
 Create a repeated matrix node. More...
 
virtual MX get_repsum (casadi_int m, casadi_int n) const
 Create a repeated sum node. More...
 
virtual MX get_kron (const MX &b) const
 Create a Kronecker-product node. More...
 
virtual MX get_kron_contract (const MX &x, bool inner) const
 Create a Kronecker-contraction node. More...
 
virtual MX get_vertcat (const std::vector< MX > &x) const
 Create a vertical concatenation node (vectors only) More...
 
virtual std::vector< MXget_vertsplit (const std::vector< casadi_int > &output_offset) const
 Create a vertical split node (vectors only) More...
 
virtual MX get_diagcat (const std::vector< MX > &x) const
 Create a diagonal concatenation node. More...
 
virtual std::vector< MXget_diagsplit (const std::vector< casadi_int > &offset1, const std::vector< casadi_int > &offset2) const
 Create a diagonal split node. More...
 
virtual MX get_transpose () const
 Transpose. More...
 
virtual MX get_reshape (const Sparsity &sp) const
 Reshape. More...
 
virtual MX get_sparsity_cast (const Sparsity &sp) const
 Sparsity cast. More...
 
virtual MX get_mac (const MX &y, const MX &z, const std::string &blas="reference") const
 Matrix multiplication and addition. More...
 
virtual MX get_einstein (const MX &A, const MX &B, const std::vector< casadi_int > &dim_c, const std::vector< casadi_int > &dim_a, const std::vector< casadi_int > &dim_b, const std::vector< casadi_int > &c, const std::vector< casadi_int > &a, const std::vector< casadi_int > &b) const
 Einstein product and addition. More...
 
virtual MX get_bilin (const MX &x, const MX &y) const
 Bilinear form. More...
 
virtual MX get_rank1 (const MX &alpha, const MX &x, const MX &y) const
 Bilinear form. More...
 
virtual MX get_logsumexp () const
 Logsumexp. More...
 
virtual MX get_solve (const MX &r, bool tr, const Linsol &linear_solver) const
 Solve a system of linear equations. More...
 
virtual MX get_solve_triu (const MX &r, bool tr) const
 Solve a system of linear equations, upper triangular A. More...
 
virtual MX get_solve_tril (const MX &r, bool tr) const
 Solve a system of linear equations, lower triangular A. More...
 
virtual MX get_solve_triu_unity (const MX &r, bool tr) const
 Solve a system of linear equations, upper triangular A, unity diagonal. More...
 
virtual MX get_solve_tril_unity (const MX &r, bool tr) const
 Solve a system of linear equations, lower triangular A, unity diagnal. More...
 
virtual MX get_nzref (const Sparsity &sp, const std::vector< casadi_int > &nz, bool unique=false) const
 Get the nonzeros of matrix. More...
 
virtual MX get_nz_ref (const MX &nz) const
 Get the nonzeros of matrix, parametrically. More...
 
virtual MX get_nz_ref (const MX &inner, const Slice &outer) const
 Get the nonzeros of matrix, parametrically. More...
 
virtual MX get_nz_ref (const Slice &inner, const MX &outer) const
 Get the nonzeros of matrix, parametrically. More...
 
virtual MX get_nz_ref (const MX &inner, const MX &outer) const
 Get the nonzeros of matrix, parametrically. More...
 
virtual MX get_nzassign (const MX &y, const std::vector< casadi_int > &nz) const
 Assign the nonzeros of a matrix to another matrix. More...
 
virtual MX get_nzassign (const MX &y, const MX &nz) const
 Assign the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzassign (const MX &y, const MX &inner, const Slice &outer) const
 Assign the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzassign (const MX &y, const Slice &inner, const MX &outer) const
 Assign the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzassign (const MX &y, const MX &inner, const MX &outer) const
 Assign the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzadd (const MX &y, const std::vector< casadi_int > &nz) const
 Add the nonzeros of a matrix to another matrix. More...
 
virtual MX get_nzadd (const MX &y, const MX &nz) const
 Add the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzadd (const MX &y, const MX &inner, const Slice &outer) const
 Add the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzadd (const MX &y, const Slice &inner, const MX &outer) const
 Add the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_nzadd (const MX &y, const MX &inner, const MX &outer) const
 Add the nonzeros of a matrix to another matrix, parametrically. More...
 
virtual MX get_subref (const Slice &i, const Slice &j) const
 Get submatrix reference. More...
 
virtual MX get_subassign (const MX &y, const Slice &i, const Slice &j) const
 Get submatrix assignment. More...
 
virtual MX get_project (const Sparsity &sp, bool unique=false) const
 Create set sparse. More...
 
virtual MX get_unary (casadi_int op, bool unique=false) const
 Get a unary operation. More...
 
MX get_binary (casadi_int op, const MX &y, bool unique_x=false, bool unique_y=false) const
 Get a binary operation operation. More...
 
virtual MX _get_binary (casadi_int op, const MX &y, bool scX, bool scY, bool unique_x=false, bool unique_y=false) const
 Get a binary operation operation (matrix-matrix) More...
 
virtual MX get_det (const Linsol &linear_solver) const
 Determinant. More...
 
virtual MX get_inv () const
 Inverse. More...
 
virtual MX get_dot (const MX &y) const
 Inner product. More...
 
virtual MX get_norm_fro () const
 Frobenius norm. More...
 
virtual MX get_norm_2 () const
 Spectral norm. More...
 
virtual MX get_norm_inf () const
 Infinity norm. More...
 
virtual MX get_norm_1 () const
 1-norm More...
 
virtual MX get_mmin () const
 Min. More...
 
virtual MX get_mmax () const
 Max. More...
 
MX get_assert (const MX &y, const std::string &fail_message) const
 Assertion. More...
 
MX get_monitor (const std::string &comment) const
 Monitor. More...
 
MX get_dump (const std::string &base_filename, const Dict &opts) const
 Dump. More...
 
MX get_find () const
 Find. More...
 
MX get_low (const MX &v, const Dict &options) const
 Find. More...
 
MX get_bspline (const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< double > &coeffs, const std::vector< casadi_int > &degree, casadi_int m, const std::vector< casadi_int > &lookup_mode) const
 BSpline. More...
 
MX get_bspline (const MX &coeffs, const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, casadi_int m, const std::vector< casadi_int > &lookup_mode) const
 BSpline. More...
 
MX get_convexify (const Dict &opts) const
 Convexify. More...
 
casadi_int getCount () const
 Get the reference count. More...
 
std::string debug_repr (const SharedObjectInternal *) const
 
GenericWeakRef< SharedObject, SharedObjectInternal > * weak ()
 Get a weak reference to the object. More...
 
virtual void split_primitives (const MX &x, std::vector< MX >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual void split_primitives (const SX &x, std::vector< SX >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual void split_primitives (const DM &x, std::vector< DM >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual MX join_primitives (std::vector< MX >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 
virtual SX join_primitives (std::vector< SX >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 
virtual DM join_primitives (std::vector< DM >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 

Static Public Member Functions

static MXNodedeserialize (DeserializingStream &s)
 Deserialize without type information. More...
 
static bool is_equal (const MXNode *x, const MXNode *y, casadi_int depth)
 Check if two nodes are equivalent up to a given depth. More...
 
static bool maxDepth ()
 Get equality checking depth. More...
 
static MX to_matrix (const MX &x, const Sparsity &sp)
 Convert scalar to matrix. More...
 
static void copy_fwd (const bvec_t *arg, bvec_t *res, casadi_int len)
 Propagate sparsities forward through a copy operation. More...
 
static void copy_rev (bvec_t *arg, bvec_t *res, casadi_int len)
 Propagate sparsities backwards through a copy operation. More...
 

Public Attributes

casadi_int temp
 
std::vector< MXdep_
 dependencies - functions that have to be evaluated before this one More...
 
Sparsity sparsity_
 The sparsity pattern. More...
 

Static Public Attributes

static std::map< casadi_int, MXNode *(*)(DeserializingStream &)> deserialize_map
 

Protected Member Functions

 Dump (DeserializingStream &s)
 Deserializing constructor. More...
 
void initSingleton ()
 
void destroySingleton ()
 
shared_from_this ()
 Get a shared object from the current internal object. More...
 
const B shared_from_this () const
 Get a shared object from the current internal object. More...
 

Member Typedef Documentation

◆ weak_ref_type

Definition at line 152 of file shared_object.hpp.

Constructor & Destructor Documentation

◆ Dump() [1/2]

casadi::Dump::Dump ( const MX x,
const std::string &  base_filename,
const std::string &  dir,
const std::string &  format,
bool  verbose 
)

Definition at line 37 of file dump.cpp.

39  : base_filename_(base_filename), dir_(dir), format_(format), verbose_(verbose) {
40  casadi_assert_dev(x.nnz()>0);
41  set_dep(x);
42  set_sparsity(x.sparsity());
43  finalize();
44  }
void finalize()
Validate options (called from constructors)
Definition: dump.cpp:54
void set_sparsity(const Sparsity &sparsity)
Set the sparsity.
Definition: mx_node.cpp:224
void set_dep(const MX &dep)
Set unary dependency.
Definition: mx_node.cpp:228

References finalize(), casadi::GenericMatrix< MatType >::nnz(), casadi::MXNode::set_dep(), casadi::MXNode::set_sparsity(), and casadi::MX::sparsity().

◆ ~Dump()

casadi::Dump::~Dump ( )
inlineoverride

Definition at line 47 of file dump.hpp.

47 {}

◆ Dump() [2/2]

casadi::Dump::Dump ( DeserializingStream s)
explicitprotected

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

Definition at line 163 of file dump.cpp.

163  : MXNode(s) {
164  s.version("Dump", 1);
165  s.unpack("Dump::base_filename", base_filename_);
166  s.unpack("Dump::dir", dir_);
167  s.unpack("Dump::format", format_);
168  s.unpack("Dump::verbose", verbose_);
169  finalize();
170  }
MXNode()
Constructor.
Definition: mx_node.cpp:79

References finalize(), casadi::DeserializingStream::unpack(), and casadi::DeserializingStream::version().

Member Function Documentation

◆ __nonzero__()

bool casadi::MXNode::__nonzero__ ( ) const
virtualinherited

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

Reimplemented in casadi::ConstantMX.

Definition at line 204 of file mx_node.cpp.

204  {
205  casadi_error("Can only determine truth value of a numeric MX.");
206  }

◆ _get_binary()

MX casadi::MXNode::_get_binary ( casadi_int  op,
const MX y,
bool  scX,
bool  scY,
bool  unique_x = false,
bool  unique_y = false 
) const
virtualinherited

Reimplemented in casadi::UnaryMX, casadi::Constant< Value >, casadi::ZeroByZero, and casadi::BinaryMX< ScX, ScY >.

Definition at line 852 of file mx_node.cpp.

853  {
854  casadi_assert_dev(sparsity()==y.sparsity() || scX || scY);
855 
857 
858  // If identically zero due to one argument being zero
859  if ((operation_checker<F0XChecker>(op) && nnz()==0) ||
860  (operation_checker<FX0Checker>(op) && y->nnz()==0)) {
861  return MX::zeros(Sparsity(size()));
862  }
863 
864  if ((operation_checker<F0XChecker>(op) && is_zero()) ||
865  (operation_checker<FX0Checker>(op) && y->is_zero())) {
866  return MX::zeros(sparsity());
867  }
868 
869  if (sparsity().is_scalar(true) && y.is_scalar(true)) {
870  bool hit;
871  MX ret = common_simp_binary(op, shared_from_this<MX>(), y, maxDepth(),
872  [](casadi_int op, const MX& a) { return a->get_unary(op);},
873  [](casadi_int op, const MX& a, const MX& b) {
874  return a->_get_binary(op, b, true, true);
875  },
876  unique_x,
877  unique_y,
878  hit);
879  if (hit) return ret;
880  }
881 
882  // Handle special operations (independent of type)
883  switch (op) {
884  case OP_ADD:
885  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_TWICE);
886  break;
887  case OP_SUB:
888  case OP_NE:
889  case OP_LT:
890  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::zeros(sparsity());
891  break;
892  case OP_DIV:
893  if (y->is_zero()) return MX::nan(sparsity());
894  // fall-through
895  case OP_EQ:
896  case OP_LE:
897  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::ones(sparsity());
898  break;
899  case OP_MUL:
900  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_SQ);
901  break;
902  default: break; // no rule
903  }
904 
905  // Handle special cases for the second argument
906  switch (y->op()) {
907  case OP_CONST:
908  // Make the constant the first argument, if possible
909  if (this->op()!=OP_CONST && operation_checker<CommChecker>(op)) {
910  return y->_get_binary(op, shared_from_this<MX>(), scY, scX);
911  } else {
912  switch (op) {
913  case OP_POW:
914  return _get_binary(OP_CONSTPOW, y, scX, scY);
915  case OP_CONSTPOW:
916  if (y->is_value(-1)) return get_unary(OP_INV);
917  else if (y->is_value(0)) return MX::ones(size());
918  else if (y->is_value(1)) return shared_from_this<MX>();
919  else if (y->is_value(2)) return get_unary(OP_SQ);
920  break;
921  case OP_ADD:
922  case OP_SUB:
923  if (y->is_zero())
924  return scX ? repmat(shared_from_this<MX>(), y.size()) : shared_from_this<MX>();
925  break;
926  case OP_MUL:
927  if (y->is_value(1)) return shared_from_this<MX>();
928  break;
929  case OP_DIV:
930  if (y->is_value(1)) return shared_from_this<MX>();
931  else if (y->is_value(0.5)) return get_unary(OP_TWICE);
932  break;
933  default: break; // no rule
934  }
935  }
936  break;
937  case OP_NEG:
938  if (op==OP_ADD) {
939  return _get_binary(OP_SUB, y->dep(), scX, scY);
940  } else if (op==OP_SUB) {
941  return _get_binary(OP_ADD, y->dep(), scX, scY);
942  } else if (op==OP_MUL) {
943  return -_get_binary(OP_MUL, y->dep(), scX, scY);
944  } else if (op==OP_DIV) {
945  return -_get_binary(OP_DIV, y->dep(), scX, scY);
946  }
947  break;
948  case OP_INV:
949  if (op==OP_MUL) {
950  return _get_binary(OP_DIV, y->dep(), scX, scY);
951  } else if (op==OP_DIV) {
952  return _get_binary(OP_MUL, y->dep(), scX, scY);
953  }
954  break;
955  default: break; // no rule
956  }
957 
958  }
959 
960  if (scX) {
961  // Check if it is ok to loop over nonzeros only
962  if (y.is_dense() || operation_checker<FX0Checker>(op) ||
963  (is_zero() && operation_checker<F00Checker>(op))) {
964  // Loop over nonzeros
965  return MX::create(new BinaryMX<true, false>(Operation(op), shared_from_this<MX>(), y));
966  } else {
967  // Put a densification node in between
968  return _get_binary(op, densify(y), true, false);
969  }
970  } else if (scY) {
971  // Check if it is ok to loop over nonzeros only
972  if (sparsity().is_dense() || operation_checker<F0XChecker>(op) ||
973  (y.is_zero() && operation_checker<F00Checker>(op)) ||
974  (y.is_constant() && static_cast<double>(y)>0 && (op==OP_CONSTPOW || op==OP_POW))) {
975  // Loop over nonzeros
976  return MX::create(new BinaryMX<false, true>(Operation(op), shared_from_this<MX>(), y));
977  } else {
978  // Put a densification node in between
979  return densify(shared_from_this<MX>())->_get_binary(op, y, false, true);
980  }
981  } else {
982  // Loop over nonzeros only
983  MX rr = MX::create(new BinaryMX<false, false>(Operation(op), shared_from_this<MX>(), y));
984 
985  // Handle structural zeros giving rise to nonzero result, e.g. cos(0) == 1
986  if (!rr.is_dense() && !operation_checker<F00Checker>(op)) {
987  // Get the value for the structural zeros
988  double fcn_0(0);
989  casadi_math<double>::fun(op, 0, 0, fcn_0);
990  rr = densify(rr, fcn_0);
991  }
992  return rr;
993  }
994  }
static MX ones(casadi_int nrow=1, casadi_int ncol=1)
Create a dense matrix or a matrix with specified sparsity with all entries one.
static MX zeros(casadi_int nrow=1, casadi_int ncol=1)
Create a dense matrix or a matrix with specified sparsity with all entries zero.
B shared_from_this()
Get a shared object from the current internal object.
static bool simplification_on_the_fly
Indicates whether simplifications should be made on the fly.
virtual bool is_zero() const
Check if identically zero.
Definition: mx_node.hpp:71
static bool is_equal(const MXNode *x, const MXNode *y, casadi_int depth)
Check if two nodes are equivalent up to a given depth.
Definition: mx_node.cpp:1317
virtual MX get_unary(casadi_int op, bool unique=false) const
Get a unary operation.
Definition: mx_node.cpp:781
friend class MX
Definition: mx_node.hpp:52
static bool maxDepth()
Get equality checking depth.
Definition: mx_node.hpp:380
std::pair< casadi_int, casadi_int > size() const
Definition: mx_node.hpp:430
virtual MX _get_binary(casadi_int op, const MX &y, bool scX, bool scY, bool unique_x=false, bool unique_y=false) const
Get a binary operation operation (matrix-matrix)
Definition: mx_node.cpp:852
const Sparsity & sparsity() const
Get the sparsity.
Definition: mx_node.hpp:410
casadi_int nnz(casadi_int i=0) const
Definition: mx_node.hpp:427
virtual casadi_int op() const =0
Get the operation.
static MX create(MXNode *node)
Create from node.
Definition: mx.cpp:69
static MX nan(const Sparsity &sp)
create a matrix with all nan
Definition: mx.cpp:596
bool is_scalar(bool scalar_and_dense=false) const
Is scalar?
Definition: sparsity.cpp:269
T common_simp_binary(casadi_int op, const T &x, const T &y, casadi_int depth, SU &&gen_unary, SB &&gen_binary, bool unique_x, bool unique_y, bool &hit)
Definition: calculus.hpp:1871
Operation
Enum for quick access to any node.
Definition: calculus.hpp:60
@ OP_NE
Definition: calculus.hpp:70
@ OP_INV
Definition: calculus.hpp:73
@ OP_LT
Definition: calculus.hpp:70
@ OP_EQ
Definition: calculus.hpp:70
@ OP_CONST
Definition: calculus.hpp:79
@ OP_TWICE
Definition: calculus.hpp:67
@ OP_SUB
Definition: calculus.hpp:65
@ OP_POW
Definition: calculus.hpp:66
@ OP_ADD
Definition: calculus.hpp:65
@ OP_LE
Definition: calculus.hpp:70
@ OP_DIV
Definition: calculus.hpp:65
@ OP_NEG
Definition: calculus.hpp:66
@ OP_CONSTPOW
Definition: calculus.hpp:66
@ OP_MUL
Definition: calculus.hpp:65
@ OP_SQ
Definition: calculus.hpp:67
static void fun(unsigned char op, const T &x, const T &y, T &f)
Evaluate a built in function (scalar-scalar)
Definition: calculus.hpp:1299

References casadi::MXNode::_get_binary(), casadi::common_simp_binary(), casadi::MX::create(), casadi::MXNode::dep(), casadi::casadi_math< T >::fun(), casadi::MX::get(), casadi::MXNode::get_unary(), casadi::MX::is_constant(), casadi::GenericMatrix< MatType >::is_dense(), casadi::MXNode::is_equal(), casadi::GenericMatrix< MatType >::is_scalar(), casadi::MXNode::is_value(), casadi::MX::is_zero(), casadi::MXNode::is_zero(), casadi::MXNode::maxDepth(), casadi::MX::nan(), casadi::MXNode::nnz(), casadi::GenericMatrix< MX >::ones(), casadi::MXNode::op(), casadi::OP_ADD, casadi::OP_CONST, casadi::OP_CONSTPOW, casadi::OP_DIV, casadi::OP_EQ, casadi::OP_INV, casadi::OP_LE, casadi::OP_LT, casadi::OP_MUL, casadi::OP_NE, casadi::OP_NEG, casadi::OP_POW, casadi::OP_SQ, casadi::OP_SUB, casadi::OP_TWICE, casadi::GlobalOptions::simplification_on_the_fly, casadi::GenericMatrix< MatType >::size(), casadi::MXNode::size(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MXNode::_get_binary(), casadi::BinaryMX< ScX, ScY >::_get_binary(), casadi::Constant< Value >::_get_binary(), casadi::UnaryMX::_get_binary(), casadi::MXNode::get_binary(), and casadi::MX::lift().

◆ ad_forward()

void casadi::MXNode::ad_forward ( const std::vector< std::vector< MX > > &  fseed,
std::vector< std::vector< MX > > &  fsens 
) const
virtualinherited

◆ ad_reverse()

void casadi::MXNode::ad_reverse ( const std::vector< std::vector< MX > > &  aseed,
std::vector< std::vector< MX > > &  asens 
) const
virtualinherited

◆ add_dependency()

void casadi::Dump::add_dependency ( CodeGenerator g) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 117 of file dump.cpp.

117  {
118  ensure_directory_exists(g.dump_dir_prefix + dir_ + g.dump_dir_suffix);
119  }
void ensure_directory_exists(const std::string &dir)
Definition: dump.cpp:46

References casadi::CodeGenerator::dump_dir_prefix, casadi::CodeGenerator::dump_dir_suffix, and casadi::ensure_directory_exists().

◆ can_inline()

void casadi::MXNode::can_inline ( std::map< const MXNode *, casadi_int > &  nodeind) const
inherited

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

Definition at line 286 of file mx_node.cpp.

286  {
287  // Add or mark node in map
288  std::map<const MXNode*, casadi_int>::iterator it=nodeind.find(this);
289  if (it==nodeind.end()) {
290  // First time encountered, mark inlined
291  nodeind.insert(it, std::make_pair(this, 0));
292 
293  // Handle dependencies with recursion
294  for (casadi_int i=0; i<n_dep(); ++i) {
295  dep(i)->can_inline(nodeind);
296  }
297  } else if (it->second==0 && op()!=OP_PARAMETER) {
298  // Node encountered before, do not inline (except if symbolic primitive)
299  it->second = -1;
300  }
301  }
void can_inline(std::map< const MXNode *, casadi_int > &nodeind) const
Find out which nodes can be inlined.
Definition: mx_node.cpp:286
const MX & dep(casadi_int ind=0) const
dependencies - functions that have to be evaluated before this one
Definition: mx_node.hpp:392
casadi_int n_dep() const
Number of dependencies.
Definition: mx_node.cpp:208
@ OP_PARAMETER
Definition: calculus.hpp:85

References casadi::MXNode::can_inline(), casadi::MXNode::dep(), casadi::MXNode::n_dep(), casadi::MXNode::op(), and casadi::OP_PARAMETER.

Referenced by casadi::MXNode::can_inline(), and casadi::MXNode::disp().

◆ check_dep()

void casadi::MXNode::check_dep ( ) const
inherited

Definition at line 254 of file mx_node.cpp.

254  {
255  for (const MX& e : dep_) {
256  if (e->has_output()) {
257  casadi_assert(is_output(),
258  "You cannot build an expression out of a MultipleOutput node. "
259  "You must select a concrete output by making a get_output() call.");
260  }
261  }
262  }
std::vector< MX > dep_
dependencies - functions that have to be evaluated before this one
Definition: mx_node.hpp:824
virtual bool is_output() const
Check if evaluation output.
Definition: mx_node.hpp:320

References casadi::MXNode::dep_, and casadi::MXNode::is_output().

Referenced by casadi::MXNode::set_dep().

◆ class_name()

std::string casadi::MXNode::class_name ( ) const
overridevirtualinherited

◆ codegen_decref()

virtual void casadi::MXNode::codegen_decref ( CodeGenerator g,
std::set< void * > &  added 
) const
inlinevirtualinherited

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

Definition at line 162 of file mx_node.hpp.

162 {}

◆ codegen_incref()

virtual void casadi::MXNode::codegen_incref ( CodeGenerator g,
std::set< void * > &  added 
) const
inlinevirtualinherited

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

Reimplemented in casadi::ConstantFile.

Definition at line 157 of file mx_node.hpp.

157 {}

◆ codegen_sz_w()

virtual size_t casadi::MXNode::codegen_sz_w ( ) const
inlinevirtualinherited

For nodes whose VM eval and codegen have different scratch needs, e.g. a determinant/solve whose eval uses Linsol memory but whose generated C carves the factorization buffers from w.

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

Reimplemented in casadi::LinsolCall< Tr >, and casadi::Determinant.

Definition at line 471 of file mx_node.hpp.

471 { return sz_w();}
virtual size_t sz_w() const
Get required length of w field.
Definition: mx_node.hpp:462

◆ copy_fwd()

void casadi::MXNode::copy_fwd ( const bvec_t arg,
bvec_t res,
casadi_int  len 
)
staticinherited

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

Definition at line 1302 of file mx_node.cpp.

1302  {
1303  if (arg!=res) {
1304  std::copy(arg, arg+len, res);
1305  }
1306  }

Referenced by casadi::Multiplication::eval_activity(), casadi::Multiplication::sp_forward(), casadi::Reshape::sp_forward(), casadi::SparsityCast::sp_forward(), and casadi::UnaryMX::sp_forward().

◆ copy_rev()

void casadi::MXNode::copy_rev ( bvec_t arg,
bvec_t res,
casadi_int  len 
)
staticinherited

◆ debug_repr()

std::string casadi::GenericSharedInternal< SharedObject , SharedObjectInternal >::debug_repr ( const Internal *  i) const
inherited

Definition at line 62 of file generic_shared_internal.hpp.

175  {
176  // Note: i != this because of something something multiple inheritance
177  return str( (casadi_int)(i)) + "/" + static_cast<const Internal*>(this)->class_name();
178  }
std::string str(const T &v)
String representation, any type.

◆ dep()

const MX& casadi::MXNode::dep ( casadi_int  ind = 0) const
inlineinherited

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

Definition at line 392 of file mx_node.hpp.

392 { return dep_.at(ind);}
virtual casadi_int ind() const
Definition: mx_node.cpp:212

Referenced by casadi::MXNode::_get_binary(), casadi::UnaryMX::_get_binary(), casadi::Bilin::ad_forward(), casadi::Call::ad_forward(), casadi::Determinant::ad_forward(), casadi::Dot::ad_forward(), casadi::Einstein::ad_forward(), casadi::GetNonzeros::ad_forward(), casadi::GetNonzerosParamVector::ad_forward(), casadi::GetNonzerosSliceParam::ad_forward(), casadi::GetNonzerosParamSlice::ad_forward(), casadi::GetNonzerosParamParam::ad_forward(), casadi::Kron::ad_forward(), casadi::KronContract::ad_forward(), casadi::LogSumExp::ad_forward(), casadi::MMin::ad_forward(), casadi::MMax::ad_forward(), casadi::Multiplication::ad_forward(), casadi::NormF::ad_forward(), casadi::Norm1::ad_forward(), casadi::NormInf::ad_forward(), casadi::Project::ad_forward(), casadi::Rank1::ad_forward(), casadi::SparsityCast::ad_forward(), casadi::UnaryMX::ad_forward(), casadi::Bilin::ad_reverse(), casadi::Call::ad_reverse(), casadi::Determinant::ad_reverse(), casadi::Dot::ad_reverse(), casadi::Einstein::ad_reverse(), casadi::GetNonzeros::ad_reverse(), casadi::GetNonzerosParamVector::ad_reverse(), casadi::GetNonzerosSliceParam::ad_reverse(), casadi::GetNonzerosParamSlice::ad_reverse(), casadi::GetNonzerosParamParam::ad_reverse(), casadi::Kron::ad_reverse(), casadi::KronContract::ad_reverse(), casadi::LogSumExp::ad_reverse(), casadi::MMin::ad_reverse(), casadi::MMax::ad_reverse(), casadi::Multiplication::ad_reverse(), casadi::NormF::ad_reverse(), casadi::Norm1::ad_reverse(), casadi::NormInf::ad_reverse(), casadi::Project::ad_reverse(), casadi::Rank1::ad_reverse(), casadi::Reshape::ad_reverse(), casadi::SparsityCast::ad_reverse(), casadi::UnaryMX::ad_reverse(), casadi::MXNode::can_inline(), casadi::MX::dep(), casadi::Reshape::disp(), casadi::Find::eval(), casadi::Low::eval(), casadi::GetNonzerosParamVector::eval(), casadi::GetNonzerosSliceParam::eval(), casadi::GetNonzerosParamSlice::eval(), casadi::GetNonzerosParamParam::eval(), casadi::MMin::eval(), casadi::MMax::eval(), casadi::Multiplication::eval_activity(), casadi::Bilin::eval_gen(), casadi::Dot::eval_gen(), casadi::Einstein::eval_gen(), casadi::LogSumExp::eval_gen(), casadi::NormF::eval_gen(), casadi::Norm1::eval_gen(), casadi::NormInf::eval_gen(), casadi::Project::eval_gen(), casadi::Densify::eval_gen(), casadi::Rank1::eval_gen(), casadi::HorzRepmat::eval_gen(), casadi::Concat::eval_gen(), casadi::Transpose::eval_gen(), casadi::DenseTranspose::eval_gen(), casadi::Kron::eval_kernel(), casadi::DenseKron::eval_kernel(), casadi::DenseSparseKron::eval_kernel(), casadi::SparseDenseKron::eval_kernel(), casadi::KronContract::eval_kernel(), casadi::Multiplication::eval_kernel(), casadi::DenseKronContract::eval_kernel(), casadi::DenseSparseKronContract::eval_kernel(), casadi::SparseDenseKronContract::eval_kernel(), casadi::DenseMultiplication::eval_kernel(), casadi::DenseSparseMultiplication::eval_kernel(), casadi::GetNonzeros::eval_mx(), casadi::GetNonzerosParamVector::eval_mx(), casadi::GetNonzerosSliceParam::eval_mx(), casadi::GetNonzerosParamSlice::eval_mx(), casadi::GetNonzerosParamParam::eval_mx(), casadi::SparsityCast::eval_mx(), casadi::Determinant::eval_sx(), casadi::MMin::eval_sx(), casadi::MMax::eval_sx(), casadi::BSplineParametric::generate(), casadi::Bilin::generate(), casadi::Find::generate(), casadi::Low::generate(), casadi::Concat::generate(), casadi::Convexify::generate(), casadi::Determinant::generate(), casadi::Dot::generate(), generate(), casadi::Einstein::generate(), casadi::GetNonzerosVector::generate(), casadi::GetNonzerosSlice::generate(), casadi::GetNonzerosSlice2::generate(), casadi::GetNonzerosParamVector::generate(), casadi::GetNonzerosSliceParam::generate(), casadi::GetNonzerosParamSlice::generate(), casadi::GetNonzerosParamParam::generate(), casadi::Output::generate(), casadi::Kron::generate(), casadi::DenseKron::generate(), casadi::DenseSparseKron::generate(), casadi::SparseDenseKron::generate(), casadi::KronContract::generate(), casadi::DenseKronContract::generate(), casadi::DenseSparseKronContract::generate(), casadi::SparseDenseKronContract::generate(), casadi::LogSumExp::generate(), casadi::MMin::generate(), casadi::MMax::generate(), casadi::Monitor::generate(), casadi::Multiplication::generate(), casadi::DenseMultiplication::generate(), casadi::DenseSparseMultiplication::generate(), casadi::PseudoDenseMultiplication::generate(), casadi::NormF::generate(), casadi::Norm1::generate(), casadi::NormInf::generate(), casadi::Project::generate(), casadi::Densify::generate(), casadi::Sparsify::generate(), casadi::Rank1::generate(), casadi::HorzRepmat::generate(), casadi::HorzRepsum::generate(), casadi::Split::generate(), casadi::Transpose::generate(), casadi::DenseTranspose::generate(), casadi::MXNode::get_binary(), casadi::Diagsplit::get_diagcat(), casadi::Horzsplit::get_horzcat(), casadi::MXNode::get_horzsplit(), casadi::Concat::get_nzref(), casadi::GetNonzeros::get_nzref(), casadi::Project::get_nzref(), casadi::SparsityCast::get_nzref(), casadi::Project::get_project(), casadi::Reshape::get_reshape(), casadi::SparsityCast::get_reshape(), casadi::SparsityCast::get_sparsity_cast(), casadi::Reshape::get_transpose(), casadi::SparsityCast::get_transpose(), casadi::Vertsplit::get_vertcat(), casadi::MXNode::get_vertsplit(), casadi::Concat::has_duplicates(), casadi::Reshape::has_duplicates(), casadi::SparsityCast::has_duplicates(), casadi::BinaryMX< ScX, ScY >::is_equal(), casadi::Concat::is_valid_input(), casadi::Reshape::is_valid_input(), casadi::SparsityCast::is_valid_input(), casadi::BSpline::jac_cached(), casadi::BSplineParametric::jac_cached(), casadi::Horzcat::join_primitives_gen(), casadi::Vertcat::join_primitives_gen(), casadi::Diagcat::join_primitives_gen(), casadi::Reshape::join_primitives_gen(), casadi::SparsityCast::join_primitives_gen(), casadi::Concat::n_primitives(), casadi::Reshape::n_primitives(), casadi::SparsityCast::n_primitives(), casadi::Horzcat::off(), casadi::Vertcat::off(), casadi::Diagcat::off(), casadi::MX::operator-(), casadi::OutputNode::OutputNode(), casadi::Concat::primitives(), casadi::Reshape::primitives(), casadi::SparsityCast::primitives(), casadi::MXFunction::print_arg(), casadi::MXNode::print_compact(), casadi::Concat::reset_input(), casadi::Reshape::reset_input(), casadi::SparsityCast::reset_input(), casadi::MXNode::sameOpAndDeps(), casadi::MXNode::set_dep(), casadi::MXNode::sp_forward(), casadi::Bilin::sp_forward(), casadi::Concat::sp_forward(), casadi::Dot::sp_forward(), casadi::GetNonzerosParam::sp_forward(), casadi::Kron::sp_forward(), casadi::KronContract::sp_forward(), casadi::Multiplication::sp_forward(), casadi::Project::sp_forward(), casadi::Rank1::sp_forward(), casadi::Transpose::sp_forward(), casadi::DenseTranspose::sp_forward(), casadi::MXNode::sp_reverse(), casadi::Bilin::sp_reverse(), casadi::Concat::sp_reverse(), casadi::Dot::sp_reverse(), casadi::GetNonzerosParam::sp_reverse(), casadi::Kron::sp_reverse(), casadi::KronContract::sp_reverse(), casadi::Multiplication::sp_reverse(), casadi::Project::sp_reverse(), casadi::HorzRepmat::sp_reverse(), casadi::Transpose::sp_reverse(), casadi::DenseTranspose::sp_reverse(), casadi::Horzcat::split_primitives_gen(), casadi::Vertcat::split_primitives_gen(), casadi::Diagcat::split_primitives_gen(), casadi::Reshape::split_primitives_gen(), casadi::SparsityCast::split_primitives_gen(), casadi::GetNonzerosParamSlice::sz_iw(), casadi::GetNonzerosParamParam::sz_iw(), and casadi::KronContract::sz_w().

◆ deserialize()

static MXNode* casadi::Dump::deserialize ( DeserializingStream s)
inlinestatic

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

Definition at line 127 of file dump.hpp.

127 { return new Dump(s); }
Dump(const MX &x, const std::string &base_filename, const std::string &dir, const std::string &format, bool verbose)
Constructor.
Definition: dump.cpp:37

◆ destroySingleton()

void casadi::GenericSharedInternal< SharedObject , SharedObjectInternal >::destroySingleton ( )
inlineprotectedinherited

Called in the destructor of singletons

Definition at line 77 of file generic_shared_internal.hpp.

77  {
78  static_cast<Internal*>(this)->count--;
79  }

◆ disp() [1/2]

std::string casadi::Dump::disp ( const std::vector< std::string > &  arg) const
overridevirtual

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

Implements casadi::MXNode.

Definition at line 58 of file dump.cpp.

58  {
59  return "dump(" + arg.at(0) + ", " + base_filename_ + ")";
60  }

◆ disp() [2/2]

void casadi::MXNode::disp ( std::ostream &  stream,
bool  more 
) const
overridevirtualinherited

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

Implements casadi::SharedObjectInternal.

Definition at line 269 of file mx_node.cpp.

269  {
270  // Find out which noded can be inlined
271  std::map<const MXNode*, casadi_int> nodeind;
272  can_inline(nodeind);
273 
274  // Print expression
275  std::vector<std::string> intermed;
276  std::string s = print_compact(nodeind, intermed);
277 
278  // Print intermediate expressions
279  for (casadi_int i=0; i<intermed.size(); ++i)
280  stream << "@" << (i+1) << "=" << intermed[i] << ", ";
281 
282  // Print this
283  stream << s;
284  }
std::string print_compact(std::map< const MXNode *, casadi_int > &nodeind, std::vector< std::string > &intermed) const
Print compact.
Definition: mx_node.cpp:303

References casadi::MXNode::can_inline(), and casadi::MXNode::print_compact().

◆ eval()

int casadi::Dump::eval ( const double **  arg,
double **  res,
casadi_int *  iw,
double *  w 
) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 78 of file dump.cpp.

78  {
79  // Build filename with counter
80  std::stringstream ss;
81  ss << std::setfill('0') << std::setw(6) << dump_count_++;
82  std::string format = format_.empty() ? "mtx" : format_;
83  std::string filename = base_filename_ + "." + ss.str() + "." + format;
84  if (!dir_.empty()) filename = dir_ + filesep() + filename;
85  // Dump to file
86  if (verbose_) {
87  uout() << "dump -> " << filename << std::endl;
88  }
89  DM::to_file(filename, sparsity(), arg[0], format);
90  // Perform operation
91  if (arg[0]!=res[0]) {
92  std::copy(arg[0], arg[0]+nnz(), res[0]);
93  }
94  return 0;
95  }
void to_file(const std::string &filename, const std::string &format="") const
std::string filesep()
Definition: casadi_os.cpp:71
std::ostream & uout()
std::string filename(const std::string &path)
Definition: ghc.cpp:55

References casadi::filename(), casadi::filesep(), casadi::MXNode::nnz(), casadi::MXNode::sparsity(), casadi::Matrix< double >::to_file(), and casadi::uout().

◆ eval_activity()

int casadi::Dump::eval_activity ( const bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 78 of file dump.hpp.

78  {
79  return sp_forward(arg, res, iw, w);
80  }
int sp_forward(const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
Propagate sparsity forward.
Definition: dump.cpp:97

◆ eval_linear()

void casadi::Dump::eval_linear ( const std::vector< std::array< MX, 3 > > &  arg,
std::vector< std::array< MX, 3 > > &  res 
) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 70 of file dump.hpp.

71  {
72  eval_linear_rearrange(arg, res);
73  }
void eval_linear_rearrange(const std::vector< std::array< MX, 3 > > &arg, std::vector< std::array< MX, 3 > > &res) const
Evaluate the MX node on a const/linear/nonlinear partition.
Definition: mx_node.cpp:370

◆ eval_linear_rearrange()

void casadi::MXNode::eval_linear_rearrange ( const std::vector< std::array< MX, 3 > > &  arg,
std::vector< std::array< MX, 3 > > &  res 
) const
inherited

Default implementation for operations that do not modify numerical values, but only rearrange them.

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

Definition at line 370 of file mx_node.cpp.

371  {
372  // Treat each category separately
373  for (casadi_int i=0; i<3; ++i) {
374  // Read arguments for categiry i
375  std::vector<MX> eval_arg(n_dep());
376  for (casadi_int j=0; j<n_dep(); ++j) {
377  eval_arg[j] = arg[j][i];
378  }
379  std::vector<MX> eval_res(nout());
380  // Normal symbolic evaluation
381  eval_mx(eval_arg, eval_res);
382  // Assign results
383  for (casadi_int j=0; j<nout(); ++j) {
384  res[j][i] = eval_res[j];
385  }
386  }
387  }
virtual void eval_mx(const std::vector< MX > &arg, std::vector< MX > &res, const std::vector< bool > &unique={}) const
Evaluate symbolically (MX)
Definition: mx_node.cpp:350
virtual casadi_int nout() const
Number of outputs.
Definition: mx_node.hpp:402

References casadi::MXNode::eval_mx(), casadi::MXNode::n_dep(), and casadi::MXNode::nout().

Referenced by casadi::GetNonzeros::eval_linear().

◆ eval_linear_unary()

void casadi::MXNode::eval_linear_unary ( const std::vector< std::array< MX, 3 > > &  arg,
std::vector< std::array< MX, 3 > > &  res 
) const
inherited

◆ eval_mx()

void casadi::Dump::eval_mx ( const std::vector< MX > &  arg,
std::vector< MX > &  res,
const std::vector< bool > &  unique = {} 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 62 of file dump.cpp.

63  {
64  Dict opts;
65  if (!dir_.empty()) opts["dir"] = dir_;
66  if (!format_.empty()) opts["format"] = format_;
67  if (verbose_) opts["verbose"] = true;
68  res[0] = arg[0].dump(base_filename_, opts);
69  }
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.

◆ eval_sx()

int casadi::Dump::eval_sx ( const SXElem **  arg,
SXElem **  res,
casadi_int *  iw,
SXElem w 
) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 71 of file dump.cpp.

71  {
72  if (arg[0]!=res[0]) {
73  std::copy(arg[0], arg[0]+nnz(), res[0]);
74  }
75  return 0;
76  }

References casadi::MXNode::nnz().

◆ finalize()

void casadi::Dump::finalize ( )

Definition at line 54 of file dump.cpp.

54  {
56  }

References casadi::ensure_directory_exists().

Referenced by Dump().

◆ generate()

void casadi::Dump::generate ( CodeGenerator g,
const std::vector< casadi_int > &  arg,
const std::vector< casadi_int > &  res,
const std::vector< bool > &  arg_is_ref,
std::vector< bool > &  res_is_ref 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 121 of file dump.cpp.

125  {
126  std::string format = format_.empty() ? "mtx" : format_;
127  std::string effective_dir = g.dump_dir_prefix + dir_ + g.dump_dir_suffix;
128  std::string prefix;
129  if (!effective_dir.empty()) prefix = effective_dir + "/";
130  // prefix + base_filename + "." + 6 digits + "." + format + null
131  casadi_int buf_size = prefix.size() + base_filename_.size()
132  + 1 + 6 + 1 + format.size() + 1;
133  std::string a = g.work(arg[0], dep(0).nnz(), arg_is_ref[0]);
134  // Block scope for dump variables
135  g << "{\n";
136  g << "static int dump_id = 0;\n";
137  g << "char dump_fname[" << buf_size << "];\n";
138  g << "FILE* dump_file;\n";
139  g << "snprintf(dump_fname, " << buf_size << ", \"" << prefix << base_filename_
140  << ".%06d." << format << "\", dump_id++);\n";
141  if (verbose_) {
142  g << g.printf("dump -> %s\\n", "dump_fname") << "\n";
143  }
144  g << "dump_file = fopen(dump_fname, \"w\");\n";
145  g << "if (dump_file) {\n";
146  g << g.to_file("dump_file", dep(0).sparsity(), a) << ";\n";
147  g << "fclose(dump_file);\n";
148  g << "}\n";
149  g << "}\n";
150  // Copy
151  generate_copy(g, arg, res, arg_is_ref, res_is_ref, 0);
152  }
void generate_copy(CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< casadi_int > &res, const std::vector< bool > &arg_is_ref, std::vector< bool > &res_is_ref, casadi_int i) const
Definition: mx_node.cpp:460

References casadi::MXNode::dep(), casadi::CodeGenerator::dump_dir_prefix, casadi::CodeGenerator::dump_dir_suffix, casadi::MXNode::generate_copy(), casadi::MXNode::nnz(), casadi::CodeGenerator::printf(), casadi::MXNode::sparsity(), casadi::CodeGenerator::to_file(), and casadi::CodeGenerator::work().

◆ generate_copy()

void casadi::MXNode::generate_copy ( CodeGenerator g,
const std::vector< casadi_int > &  arg,
const std::vector< casadi_int > &  res,
const std::vector< bool > &  arg_is_ref,
std::vector< bool > &  res_is_ref,
casadi_int  i 
) const
inherited

Definition at line 460 of file mx_node.cpp.

465  {
466  res_is_ref[i] = arg_is_ref[i];
467  if (arg[i]==res[i]) return;
468  if (nnz()==1) {
469  g << g.workel(res[i]) << " = " << g.workel(arg[i]) << ";\n";
470  } else if (arg_is_ref[i]) {
471  g << g.work(res[i], nnz(), true) << " = " << g.work(arg[i], nnz(), true) << ";\n";
472  } else {
473  g << g.copy(g.work(arg[i], nnz(), false), nnz(), g.work(res[i], nnz(), false)) << "\n";
474  }
475  }

References casadi::CodeGenerator::copy(), casadi::MXNode::nnz(), casadi::CodeGenerator::work(), and casadi::CodeGenerator::workel().

Referenced by casadi::Assertion::generate(), generate(), casadi::Monitor::generate(), casadi::Reshape::generate(), and casadi::SparsityCast::generate().

◆ get_assert()

MX casadi::MXNode::get_assert ( const MX y,
const std::string &  fail_message 
) const
inherited

Definition at line 1010 of file mx_node.cpp.

1010  {
1011  return MX::create(new Assertion(shared_from_this<MX>(), y, fail_message));
1012  }

References casadi::MX::create().

◆ get_bilin()

MX casadi::MXNode::get_bilin ( const MX x,
const MX y 
) const
virtualinherited

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

Definition at line 608 of file mx_node.cpp.

608  {
609  return MX::create(new Bilin(shared_from_this<MX>(), x, y));
610  }

References casadi::MX::create().

Referenced by casadi::MX::_bilin().

◆ get_binary()

MX casadi::MXNode::get_binary ( casadi_int  op,
const MX y,
bool  unique_x = false,
bool  unique_y = false 
) const
inherited

Definition at line 797 of file mx_node.cpp.

797  {
798  // If-else-zero nodes are always simplified at top level to avoid NaN propagation
799  if (y.op() == OP_IF_ELSE_ZERO) {
800  if (op == OP_MUL) {
801  // (Rule 1.) x * if_else_zero(c, y), simplified to if_else_zero(c, x * y)
802  // Background: x is often a partial derivative and may evaluate to INF or NAN.
803  // The simplification ensures that the zero seed corresponding to an inactive branch does
804  // not give rise to any NaN contribution to the derivative due to NaN * 0 == NaN.
805  return if_else_zero(y.dep(0), shared_from_this<MX>() * y.dep(1));
806  } else if (op == OP_ADD && this->op() == OP_IF_ELSE_ZERO && MX::is_equal(dep(0), y.dep(0))) {
807  // (Rule 2.) if_else_zero(c, x) + if_else_zero(c, y) is simplified to if_else_zero(c, x + y)
808  // Background: During the backward propagation, seeds are added together. Without this rule,
809  // the addition node can prevent rule (1.) from working in subsequent steps.
810  return if_else_zero(y.dep(0), dep(1) + y.dep(1));
811  }
812  } else if (this->op() == OP_IF_ELSE_ZERO && op == OP_MUL) {
813  // Same as Rule 1. above, but with factors swapped. For symmetry.
814  return if_else_zero(dep(0), dep(1) * y);
815  }
816  // Create binary node
817  if (sparsity().is_scalar(false)) {
818  if (nnz()==0) {
819  if (operation_checker<F0XChecker>(op)) return MX::zeros(Sparsity(y.size()));
820  return to_matrix(MX(0)->_get_binary(op, y, true, false, unique_x, unique_y), y.sparsity());
821  } else {
822  return to_matrix(_get_binary(op, y, true, false, unique_x, unique_y), y.sparsity());
823  }
824  } else if (y.is_scalar()) {
825  if (y.nnz()==0) {
826  if (operation_checker<FX0Checker>(op)) return MX::zeros(Sparsity(size()));
827  return to_matrix(_get_binary(op, MX(0), false, true, unique_x, unique_y), sparsity());
828  } else {
829  return to_matrix(_get_binary(op, y, false, true, unique_x, unique_y), sparsity());
830  }
831  } else {
832  casadi_assert(sparsity().size() == y.sparsity().size(), "Dimension mismatch.");
833  if (sparsity()==y.sparsity()) {
834  // Matching sparsities
835  return _get_binary(op, y, false, false, unique_x, unique_y);
836  } else {
837  // Get the sparsity pattern of the result
838  // (ignoring structural zeros giving rise to nonzero result)
839  const Sparsity& x_sp = sparsity();
840  const Sparsity& y_sp = y.sparsity();
841  Sparsity r_sp = x_sp.combine(y_sp, operation_checker<F0XChecker>(op),
842  operation_checker<FX0Checker>(op));
843 
844  // Project the arguments to this sparsity
845  MX xx = project(shared_from_this<MX>(), r_sp);
846  MX yy = project(y, r_sp);
847  return xx->_get_binary(op, yy, false, false, unique_x, unique_y);
848  }
849  }
850  }
static MX to_matrix(const MX &x, const Sparsity &sp)
Convert scalar to matrix.
Definition: mx_node.hpp:489
const Sparsity & sparsity() const
Get the sparsity pattern.
Definition: mx.cpp:612
static bool is_equal(const MX &x, const MX &y, casadi_int depth=0)
Definition: mx.cpp:867
MX dep(casadi_int ch=0) const
Get the nth dependency as MX.
Definition: mx.cpp:783
double if_else_zero(double x, double y)
Conditional assignment.
Definition: calculus.hpp:295
@ OP_IF_ELSE_ZERO
Definition: calculus.hpp:71

References casadi::MXNode::_get_binary(), casadi::Sparsity::combine(), casadi::MX::dep(), casadi::MXNode::dep(), casadi::if_else_zero(), casadi::MX::is_equal(), casadi::GenericMatrix< MatType >::is_scalar(), casadi::MXNode::MX, casadi::GenericMatrix< MatType >::nnz(), casadi::MXNode::nnz(), casadi::MX::op(), casadi::MXNode::op(), casadi::OP_ADD, casadi::OP_IF_ELSE_ZERO, casadi::OP_MUL, casadi::GenericMatrix< MatType >::size(), casadi::MXNode::size(), casadi::Sparsity::size(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), casadi::MXNode::to_matrix(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::binary(), and casadi::MXNode::get_dot().

◆ get_bspline() [1/2]

MX casadi::MXNode::get_bspline ( const MX coeffs,
const std::vector< double > &  knots,
const std::vector< casadi_int > &  offset,
const std::vector< casadi_int > &  degree,
casadi_int  m,
const std::vector< casadi_int > &  lookup_mode 
) const
inherited

Definition at line 1070 of file mx_node.cpp.

1075  {
1076  MX x = shared_from_this<MX>();
1077  return MX::create(new BSplineParametric(x, coeffs, knots, offset, degree, m, lookup_mode));
1078  }
virtual casadi_int offset() const
Definition: mx_node.cpp:220

References casadi::MX::create(), and casadi::MXNode::offset().

◆ get_bspline() [2/2]

MX casadi::MXNode::get_bspline ( const std::vector< double > &  knots,
const std::vector< casadi_int > &  offset,
const std::vector< double > &  coeffs,
const std::vector< casadi_int > &  degree,
casadi_int  m,
const std::vector< casadi_int > &  lookup_mode 
) const
inherited

Definition at line 1060 of file mx_node.cpp.

1065  {
1066  MX x = shared_from_this<MX>();
1067  return MX::create(new BSpline(x, knots, offset, coeffs, degree, m, lookup_mode));
1068  }

References casadi::MX::create(), and casadi::MXNode::offset().

Referenced by casadi::BSplineParametric::create(), and casadi::BSpline::create().

◆ get_convexify()

MX casadi::MXNode::get_convexify ( const Dict opts) const
inherited

Definition at line 1080 of file mx_node.cpp.

1080  {
1081  return MX::create(new Convexify(shared_from_this<MX>(), opts));
1082  }

References casadi::MX::create().

Referenced by casadi::MX::convexify().

◆ get_det()

MX casadi::MXNode::get_det ( const Linsol linear_solver) const
virtualinherited

Definition at line 1084 of file mx_node.cpp.

1084  {
1085  return MX::create(new Determinant(shared_from_this<MX>(), linear_solver));
1086  }

References casadi::MX::create().

Referenced by casadi::Linsol::det().

◆ get_diagcat()

MX casadi::MXNode::get_diagcat ( const std::vector< MX > &  x) const
virtualinherited

Reimplemented in casadi::Diagsplit.

Definition at line 1165 of file mx_node.cpp.

1165  {
1166  // Create a Horzcat node
1167  return MX::create(new Diagcat(x));
1168  }

References casadi::MX::create().

Referenced by casadi::Diagsplit::get_diagcat().

◆ get_diagsplit()

std::vector< MX > casadi::MXNode::get_diagsplit ( const std::vector< casadi_int > &  offset1,
const std::vector< casadi_int > &  offset2 
) const
virtualinherited

Definition at line 1254 of file mx_node.cpp.

1255  {
1256  if (is_zero()) {
1257  std::vector<MX> ret =
1258  MX::createMultipleOutput(new Diagsplit(shared_from_this<MX>(), offset1, offset2));
1259  for (casadi_int i=0;i<ret.size();++i) {
1260  ret[i]=MX::zeros(ret[i].sparsity());
1261  }
1262  return ret;
1263  }
1264  std::vector<MX> ret =
1265  MX::createMultipleOutput(new Diagsplit(shared_from_this<MX>(), offset1, offset2));
1266 
1267  return ret;
1268  }
static std::vector< MX > createMultipleOutput(MXNode *node)
Create from node (multiple-outputs)
Definition: mx.cpp:130

References casadi::MX::createMultipleOutput(), casadi::MXNode::is_zero(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::diagsplit().

◆ get_DM()

DM casadi::MXNode::get_DM ( ) const
virtualinherited

Reimplemented in casadi::ConstantMX, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, and casadi::ConstantDM.

Definition at line 487 of file mx_node.cpp.

487  {
488  casadi_error("'get_DM' not defined for class " + class_name());
489  }

References casadi::MXNode::class_name().

Referenced by casadi::ConstantMX::get_dot(), and casadi::MXNode::get_einstein().

◆ get_dot()

MX casadi::MXNode::get_dot ( const MX y) const
virtualinherited

Reimplemented in casadi::ConstantMX.

Definition at line 1093 of file mx_node.cpp.

1093  {
1094  casadi_assert(
1095  size2()==y.size2() && size1()==y.size1(),
1096  "MXNode::dot: Dimension mismatch. dot requires its "
1097  "two arguments to have equal shapes, but got ("
1098  + str(size2()) + ", " + str(size1()) + ") and ("
1099  + str(y.size2()) + ", " + str(y.size1()) + ").");
1100  if (sparsity()==y.sparsity()) {
1101  if (sparsity().nnz()==0) {
1102  return 0;
1103  } else if (sparsity().is_scalar()) {
1104  return get_binary(OP_MUL, y);
1105  } else {
1106  if (shared_from_this<MX>().is_zero() || y.is_zero()) return 0;
1107  return MX::create(new Dot(shared_from_this<MX>(), y));
1108  }
1109  } else {
1110  // Project to pattern intersection
1111  Sparsity sp = sparsity().intersect(y.sparsity());
1112  MX xx = project(shared_from_this<MX>(), sp);
1113  MX yy = project(y, sp);
1114  return xx->get_dot(yy);
1115  }
1116  }
casadi_int size2() const
Definition: mx_node.hpp:429
MX get_binary(casadi_int op, const MX &y, bool unique_x=false, bool unique_y=false) const
Get a binary operation operation.
Definition: mx_node.cpp:797
casadi_int size1() const
Definition: mx_node.hpp:428
Sparsity intersect(const Sparsity &y, std::vector< unsigned char > &mapping) const
Intersection of two sparsity patterns.
Definition: sparsity.cpp:417

References casadi::MX::create(), casadi::MXNode::get_binary(), casadi::MXNode::get_dot(), casadi::Sparsity::intersect(), casadi::MX::is_zero(), casadi::MXNode::is_zero(), casadi::MXNode::nnz(), casadi::OP_MUL, casadi::GenericMatrix< MatType >::size1(), casadi::MXNode::size1(), casadi::GenericMatrix< MatType >::size2(), casadi::MXNode::size2(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), and casadi::str().

Referenced by casadi::Dot::ad_forward(), casadi::NormF::ad_forward(), casadi::Norm1::ad_forward(), casadi::MX::dot(), casadi::MXNode::get_dot(), and casadi::ConstantMX::get_dot().

◆ get_dump()

MX casadi::MXNode::get_dump ( const std::string &  base_filename,
const Dict opts 
) const
inherited

Definition at line 1022 of file mx_node.cpp.

1022  {
1023  if (nnz()==0) {
1024  return shared_from_this<MX>();
1025  } else {
1026  std::string dir = ".";
1027  std::string format = "mtx";
1028  bool verbose = false;
1029  for (auto&& op : opts) {
1030  if (op.first=="dir") {
1031  dir = op.second.to_string();
1032  } else if (op.first=="format") {
1033  format = op.second.to_string();
1034  } else if (op.first=="verbose") {
1035  verbose = op.second.to_bool();
1036  } else {
1037  casadi_error("Unknown option '" + op.first + "' for dump. "
1038  "Allowed options: 'dir', 'format', 'verbose'.");
1039  }
1040  }
1041  return MX::create(new Dump(shared_from_this<MX>(), base_filename,
1042  dir, format, verbose));
1043  }
1044  }

References casadi::MX::create(), casadi::MXNode::nnz(), and casadi::MXNode::op().

Referenced by casadi::MX::dump().

◆ get_einstein()

MX casadi::MXNode::get_einstein ( const MX A,
const MX B,
const std::vector< casadi_int > &  dim_c,
const std::vector< casadi_int > &  dim_a,
const std::vector< casadi_int > &  dim_b,
const std::vector< casadi_int > &  c,
const std::vector< casadi_int > &  a,
const std::vector< casadi_int > &  b 
) const
virtualinherited

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

Definition at line 585 of file mx_node.cpp.

589  {
590 
591  if (A.is_zero() || B.is_zero())
592  return shared_from_this<MX>();
593 
594  MX C = densify(shared_from_this<MX>());
595 
596  if (A.is_constant() && B.is_constant() && C.is_constant()) {
597  // Constant folding
598  DM Ac = A->get_DM();
599  DM Bc = B->get_DM();
600  DM Cc = C->get_DM();
601  return einstein(vec(densify(Ac)), vec(densify(Bc)), vec(densify(Cc)),
602  dim_a, dim_b, dim_c, a, b, c);
603  }
604 
605  return MX::create(new Einstein(C, densify(A), densify(B), dim_c, dim_a, dim_b, c, a, b));
606  }
Matrix< double > DM
Definition: dm_fwd.hpp:33

References casadi::C, casadi::MX::create(), casadi::MXNode::get_DM(), casadi::MX::is_constant(), and casadi::MX::is_zero().

Referenced by casadi::MX::einstein().

◆ get_find()

MX casadi::MXNode::get_find ( ) const
inherited

Definition at line 1046 of file mx_node.cpp.

1046  {
1047  MX x = shared_from_this<MX>();
1048  casadi_assert(x.is_vector(), "Argument must be vector, got " + x.dim() + ".");
1049  if (x.is_column()) {
1050  return MX::create(new Find(shared_from_this<MX>()));
1051  } else {
1052  return find(x.T());
1053  }
1054  }
std::vector< casadi_int > find(const std::vector< T > &v)
find nonzeros

References casadi::MX::create(), casadi::GenericMatrix< MatType >::dim(), casadi::find(), casadi::GenericMatrix< MatType >::is_column(), casadi::GenericMatrix< MatType >::is_vector(), and casadi::MX::T().

Referenced by casadi::MX::find().

◆ get_horzcat()

MX casadi::MXNode::get_horzcat ( const std::vector< MX > &  x) const
virtualinherited

Reimplemented in casadi::Horzsplit, casadi::OutputNode, and casadi::Constant< Value >.

Definition at line 1144 of file mx_node.cpp.

1144  {
1145  // Check if there is any existing horzcat operation
1146  for (auto i=x.begin(); i!=x.end(); ++i) {
1147  if (i->op()==OP_HORZCAT) {
1148  // Split up
1149  std::vector<MX> x_split(x.begin(), i);
1150  for (; i!=x.end(); ++i) {
1151  if (i->op()==OP_HORZCAT) {
1152  x_split.insert(x_split.end(), (*i)->dep_.begin(), (*i)->dep_.end());
1153  } else {
1154  x_split.push_back(*i);
1155  }
1156  }
1157  return horzcat(x_split);
1158  }
1159  }
1160 
1161  // Create a Horzcat node
1162  return MX::create(new Horzcat(x));
1163  }
@ OP_HORZCAT
Definition: calculus.hpp:124

References casadi::MX::create(), and casadi::OP_HORZCAT.

Referenced by casadi::Constant< Value >::get_horzcat(), casadi::OutputNode::get_horzcat(), and casadi::Horzsplit::get_horzcat().

◆ get_horzsplit()

std::vector< MX > casadi::MXNode::get_horzsplit ( const std::vector< casadi_int > &  output_offset) const
virtualinherited

Definition at line 1190 of file mx_node.cpp.

1190  {
1191  if (is_zero()) {
1192  std::vector<MX> ret =
1193  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1194  for (casadi_int i=0;i<ret.size();++i) {
1195  ret[i]=MX::zeros(ret[i].sparsity());
1196  }
1197  return ret;
1198  }
1199  std::vector<MX> ret =
1200  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1201 
1203  // Simplify horzsplit(horzcat)
1204  if (op()==OP_HORZCAT) {
1205  casadi_int offset_deps = 0;
1206  casadi_int j = 0;
1207  for (casadi_int i=0;i<output_offset.size();++i) {
1208  while (offset_deps<output_offset[i]) { offset_deps+=dep(j).size2();++j; }
1209  if (j>=n_dep()) j = n_dep()-1;
1210  if (output_offset[i]==offset_deps &&
1211  (i+1<output_offset.size()?output_offset[i+1]:size2()) ==
1212  offset_deps +dep(j).size2()) {
1213  // Aligned with vertcat dependency
1214  ret[i] = dep(j);
1215  }
1216  }
1217  }
1218  }
1219  return ret;
1220  }
casadi_int size2() const
Get the second dimension (i.e. number of columns)

References casadi::MX::createMultipleOutput(), casadi::MXNode::dep(), casadi::MXNode::is_zero(), casadi::MXNode::n_dep(), casadi::MXNode::op(), casadi::OP_HORZCAT, casadi::GlobalOptions::simplification_on_the_fly, casadi::GenericMatrix< MatType >::size2(), casadi::MXNode::size2(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::horzsplit().

◆ get_inv()

MX casadi::MXNode::get_inv ( ) const
virtualinherited

Definition at line 1088 of file mx_node.cpp.

1088  {
1089  return MX::create(new Inverse(shared_from_this<MX>()));
1090  }

References casadi::MX::create().

Referenced by casadi::MX::inv_node().

◆ get_kron()

MX casadi::MXNode::get_kron ( const MX b) const
virtualinherited

Definition at line 1240 of file mx_node.cpp.

1240  {
1241  if (nnz() == 0 || b.nnz() == 0) {
1242  return MX::zeros(Sparsity::kron(sparsity(), b.sparsity()));
1243  }
1244  return Kron::create(shared_from_this<MX>(), b);
1245  }
static MX create(const MX &a, const MX &b)
Factory: dispatch to the most specific subclass for the given operands.
Definition: kron.cpp:85
static Sparsity kron(const Sparsity &a, const Sparsity &b)
Enlarge matrix.
Definition: sparsity.cpp:1450

References casadi::Kron::create(), casadi::Sparsity::kron(), casadi::GenericMatrix< MatType >::nnz(), casadi::MXNode::nnz(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::kron().

◆ get_kron_contract()

MX casadi::MXNode::get_kron_contract ( const MX x,
bool  inner 
) const
virtualinherited

Definition at line 1247 of file mx_node.cpp.

1247  {
1248  if (nnz() == 0 || x.nnz() == 0) {
1249  return MX::zeros(Sparsity::kron_contract(sparsity(), x.sparsity(), inner));
1250  }
1251  return KronContract::create(shared_from_this<MX>(), x, inner);
1252  }
static MX create(const MX &m, const MX &x, bool inner)
Factory: dispatch to the most specific subclass for the given operands.
Definition: kron.cpp:286
static Sparsity kron_contract(const Sparsity &sp_m, const Sparsity &sp_x, bool inner)
Output sparsity of casadi::KronContract.
Definition: sparsity.cpp:1494

References casadi::KronContract::create(), casadi::Sparsity::kron_contract(), casadi::GenericMatrix< MatType >::nnz(), casadi::MXNode::nnz(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::kron_contract().

◆ get_logsumexp()

MX casadi::MXNode::get_logsumexp ( ) const
virtualinherited

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

Definition at line 616 of file mx_node.cpp.

616  {
617  return MX::create(new LogSumExp(shared_from_this<MX>()));
618  }

References casadi::MX::create().

Referenced by casadi::MX::_logsumexp().

◆ get_low()

MX casadi::MXNode::get_low ( const MX v,
const Dict options 
) const
inherited

Definition at line 1056 of file mx_node.cpp.

1056  {
1057  return MX::create(new Low(v, shared_from_this<MX>(), options));
1058  }

References casadi::MX::create().

Referenced by casadi::MX::low().

◆ get_mac()

MX casadi::MXNode::get_mac ( const MX y,
const MX z,
const std::string &  blas = "reference" 
) const
virtualinherited

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

Definition at line 566 of file mx_node.cpp.

566  {
567  if (sparsity().is_orthonormal() && y.is_column() && y.is_dense()
568  && y.sparsity()==z.sparsity() && z.is_zero()) {
569  std::vector<casadi_int> perm = sparsity().permutation_vector();
570  MX nz = sparsity_cast(shared_from_this<MX>(), Sparsity::dense(nnz()));
571  return (nz*y)(perm);
572  }
573  // Get reference to transposed first argument
574  MX x = shared_from_this<MX>();
575 
576  casadi_assert(y.size2()==z.size2(),
577  "Dimension error x.mac(z). Got y=" + str(y.size2()) + " and z=" + z.dim() + ".");
578  casadi_assert(x.size1()==z.size1(),
579  "Dimension error x.mac(z). Got x=" + x.dim() + " and z=" + z.dim() + ".");
580  casadi_assert(y.size1()==x.size2(),
581  "Dimension error x.mac(z). Got y=" + str(y.size1()) + " and x" + x.dim() + ".");
582  return Multiplication::create(z, x, y, blas);
583  }
static MX create(const MX &z, const MX &x, const MX &y, const std::string &blas="reference")
Factory: dispatch to the most specific subclass for the given operands.
const std::vector< casadi_int > permutation_vector(bool invert=false) const
Construct permutation vector from permutation matrix.
Definition: sparsity.cpp:1391
static Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern *.
Definition: sparsity.cpp:1028
bool is_column() const
Check if the pattern is a column vector (i.e. size2()==1)
Definition: sparsity.cpp:285

References casadi::Multiplication::create(), casadi::Sparsity::dense(), casadi::GenericMatrix< MatType >::dim(), casadi::GenericMatrix< MatType >::is_column(), casadi::GenericMatrix< MatType >::is_dense(), casadi::MX::is_zero(), casadi::MXNode::nnz(), casadi::Sparsity::permutation_vector(), casadi::GenericMatrix< MatType >::size1(), casadi::GenericMatrix< MatType >::size2(), casadi::MX::sparsity(), casadi::MXNode::sparsity(), and casadi::str().

Referenced by casadi::MX::mac().

◆ get_mmax()

MX casadi::MXNode::get_mmax ( ) const
virtualinherited

Definition at line 1139 of file mx_node.cpp.

1139  {
1140  if (sparsity_.is_empty()) return MX();
1141  return MX::create(new MMax(shared_from_this<MX>()));
1142  }
Sparsity sparsity_
The sparsity pattern.
Definition: mx_node.hpp:829
bool is_empty(bool both=false) const
Check if the sparsity is empty.
Definition: sparsity.cpp:144

References casadi::MX::create(), casadi::Sparsity::is_empty(), casadi::MXNode::MX, and casadi::MXNode::sparsity_.

Referenced by casadi::MX::mmax().

◆ get_mmin()

MX casadi::MXNode::get_mmin ( ) const
virtualinherited

Definition at line 1134 of file mx_node.cpp.

1134  {
1135  if (sparsity_.is_empty()) return MX();
1136  return MX::create(new MMin(shared_from_this<MX>()));
1137  }

References casadi::MX::create(), casadi::Sparsity::is_empty(), casadi::MXNode::MX, and casadi::MXNode::sparsity_.

Referenced by casadi::MX::mmin().

◆ get_monitor()

MX casadi::MXNode::get_monitor ( const std::string &  comment) const
inherited

Definition at line 1014 of file mx_node.cpp.

1014  {
1015  if (nnz()==0) {
1016  return shared_from_this<MX>();
1017  } else {
1018  return MX::create(new Monitor(shared_from_this<MX>(), comment));
1019  }
1020  }

References casadi::MX::create(), and casadi::MXNode::nnz().

Referenced by casadi::MX::monitor().

◆ get_norm_1()

MX casadi::MXNode::get_norm_1 ( ) const
virtualinherited

Definition at line 1130 of file mx_node.cpp.

1130  {
1131  return MX::create(new Norm1(shared_from_this<MX>()));
1132  }

References casadi::MX::create().

Referenced by casadi::MX::norm_1().

◆ get_norm_2()

MX casadi::MXNode::get_norm_2 ( ) const
virtualinherited

Definition at line 1122 of file mx_node.cpp.

1122  {
1123  return MX::create(new Norm2(shared_from_this<MX>()));
1124  }

References casadi::MX::create().

Referenced by casadi::MX::norm_2().

◆ get_norm_fro()

MX casadi::MXNode::get_norm_fro ( ) const
virtualinherited

Definition at line 1118 of file mx_node.cpp.

1118  {
1119  return MX::create(new NormF(shared_from_this<MX>()));
1120  }

References casadi::MX::create().

Referenced by casadi::MX::norm_fro().

◆ get_norm_inf()

MX casadi::MXNode::get_norm_inf ( ) const
virtualinherited

Definition at line 1126 of file mx_node.cpp.

1126  {
1127  return MX::create(new NormInf(shared_from_this<MX>()));
1128  }

References casadi::MX::create().

Referenced by casadi::MX::norm_inf().

◆ get_nz_ref() [1/4]

MX casadi::MXNode::get_nz_ref ( const MX inner,
const MX outer 
) const
virtualinherited

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

Definition at line 687 of file mx_node.cpp.

687  {
688  return GetNonzerosParam::create(shared_from_this<MX>(), inner, outer);
689  }
static MX create(const MX &x, const MX &nz)

References casadi::GetNonzerosParam::create().

◆ get_nz_ref() [2/4]

MX casadi::MXNode::get_nz_ref ( const MX inner,
const Slice outer 
) const
virtualinherited

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

Definition at line 671 of file mx_node.cpp.

671  {
672  if (outer.all()==std::vector<casadi_int>{0}) {
673  return get_nz_ref(inner);
674  } else {
675  return GetNonzerosParam::create(shared_from_this<MX>(), inner, outer);
676  }
677  }
virtual MX get_nz_ref(const MX &nz) const
Get the nonzeros of matrix, parametrically.
Definition: mx_node.cpp:667

References casadi::Slice::all(), casadi::GetNonzerosParam::create(), and casadi::MXNode::get_nz_ref().

◆ get_nz_ref() [3/4]

MX casadi::MXNode::get_nz_ref ( const MX nz) const
virtualinherited

◆ get_nz_ref() [4/4]

MX casadi::MXNode::get_nz_ref ( const Slice inner,
const MX outer 
) const
virtualinherited

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

Definition at line 679 of file mx_node.cpp.

679  {
680  if (inner.all()==std::vector<casadi_int>{0}) {
681  return get_nz_ref(outer);
682  } else {
683  return GetNonzerosParam::create(shared_from_this<MX>(), inner, outer);
684  }
685  }

References casadi::Slice::all(), casadi::GetNonzerosParam::create(), and casadi::MXNode::get_nz_ref().

◆ get_nzadd() [1/5]

MX casadi::MXNode::get_nzadd ( const MX y,
const MX inner,
const MX outer 
) const
virtualinherited

a->get_nzadd(b,nz) returns b with b[nz]+=a

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

Definition at line 751 of file mx_node.cpp.

751  {
752  if (inner.is_empty() || outer.is_empty() || is_zero()) {
753  return y;
754  } else {
755  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), inner, outer);
756  }
757  }
static MX create(const MX &y, const MX &x, const MX &nz)
Create functions.

References casadi::SetNonzerosParam< Add >::create(), casadi::GenericMatrix< MatType >::is_empty(), and casadi::MXNode::is_zero().

◆ get_nzadd() [2/5]

MX casadi::MXNode::get_nzadd ( const MX y,
const MX inner,
const Slice outer 
) const
virtualinherited

a->get_nzadd(b,nz) returns b with b[nz]+=a

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

Definition at line 735 of file mx_node.cpp.

735  {
736  if (inner.is_empty() || outer.is_empty() || is_zero()) {
737  return y;
738  } else {
739  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), inner, outer);
740  }
741  }

References casadi::SetNonzerosParam< Add >::create(), casadi::Slice::is_empty(), casadi::GenericMatrix< MatType >::is_empty(), and casadi::MXNode::is_zero().

◆ get_nzadd() [3/5]

MX casadi::MXNode::get_nzadd ( const MX y,
const MX nz 
) const
virtualinherited

a->get_nzadd(b,nz) returns b with b[nz]+=a

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

Definition at line 727 of file mx_node.cpp.

727  {
728  if (nz.is_empty() || is_zero()) {
729  return y;
730  } else {
731  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), nz);
732  }
733  }

References casadi::SetNonzerosParam< Add >::create(), casadi::GenericMatrix< MatType >::is_empty(), and casadi::MXNode::is_zero().

◆ get_nzadd() [4/5]

MX casadi::MXNode::get_nzadd ( const MX y,
const Slice inner,
const MX outer 
) const
virtualinherited

a->get_nzadd(b,nz) returns b with b[nz]+=a

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

Definition at line 743 of file mx_node.cpp.

743  {
744  if (outer.is_empty() || outer.is_empty() || is_zero()) {
745  return y;
746  } else {
747  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), inner, outer);
748  }
749  }

References casadi::SetNonzerosParam< Add >::create(), casadi::GenericMatrix< MatType >::is_empty(), and casadi::MXNode::is_zero().

◆ get_nzadd() [5/5]

MX casadi::MXNode::get_nzadd ( const MX y,
const std::vector< casadi_int > &  nz 
) const
virtualinherited

◆ get_nzassign() [1/5]

MX casadi::MXNode::get_nzassign ( const MX y,
const MX inner,
const MX outer 
) const
virtualinherited

a->get_nzassign(b,nz) returns b with b[nz]=a

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

Definition at line 723 of file mx_node.cpp.

723  {
724  return SetNonzerosParam<false>::create(y, shared_from_this<MX>(), inner, outer);
725  }

References casadi::SetNonzerosParam< Add >::create().

◆ get_nzassign() [2/5]

MX casadi::MXNode::get_nzassign ( const MX y,
const MX inner,
const Slice outer 
) const
virtualinherited

a->get_nzassign(b,nz) returns b with b[nz]=a

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

Definition at line 715 of file mx_node.cpp.

715  {
716  return SetNonzerosParam<false>::create(y, shared_from_this<MX>(), inner, outer);
717  }

References casadi::SetNonzerosParam< Add >::create().

◆ get_nzassign() [3/5]

MX casadi::MXNode::get_nzassign ( const MX y,
const MX nz 
) const
virtualinherited

a->get_nzassign(b,nz) returns b with b[nz]=a

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

Definition at line 711 of file mx_node.cpp.

711  {
712  return SetNonzerosParam<false>::create(y, shared_from_this<MX>(), nz);
713  }

References casadi::SetNonzerosParam< Add >::create().

◆ get_nzassign() [4/5]

MX casadi::MXNode::get_nzassign ( const MX y,
const Slice inner,
const MX outer 
) const
virtualinherited

a->get_nzassign(b,nz) returns b with b[nz]=a

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

Definition at line 719 of file mx_node.cpp.

719  {
720  return SetNonzerosParam<false>::create(y, shared_from_this<MX>(), inner, outer);
721  }

References casadi::SetNonzerosParam< Add >::create().

◆ get_nzassign() [5/5]

MX casadi::MXNode::get_nzassign ( const MX y,
const std::vector< casadi_int > &  nz 
) const
virtualinherited

◆ get_nzref()

MX casadi::MXNode::get_nzref ( const Sparsity sp,
const std::vector< casadi_int > &  nz,
bool  unique = false 
) const
virtualinherited

a->get_nzref(sp,nz)

returns Matrix(sp,a[nz])

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

Reimplemented in casadi::SparsityCast, casadi::Project, casadi::GetNonzeros, casadi::Constant< Value >, casadi::ZeroByZero, and casadi::Concat.

Definition at line 660 of file mx_node.cpp.

660  {
661  if (sparsity().is_dense() && is_range(nz, 0, nnz())) {
662  return sparsity_cast(shared_from_this<MX>(), sp);
663  }
664  return GetNonzeros::create(sp, shared_from_this<MX>(), nz);
665  }
static MX create(const Sparsity &sp, const MX &x, const std::vector< casadi_int > &nz)
Definition: getnonzeros.cpp:32
bool is_range(const std::vector< casadi_int > &v, casadi_int start, casadi_int stop, casadi_int step)
Check if a vector matches a range.
Definition: casadi_misc.cpp:95

References casadi::GetNonzeros::create(), casadi::is_range(), casadi::MXNode::nnz(), and casadi::MXNode::sparsity().

Referenced by casadi::GetNonzeros::ad_forward(), casadi::MX::diag(), casadi::MX::enlarge(), casadi::MX::erase(), casadi::MX::get(), casadi::MX::get_nz(), casadi::Concat::get_nzref(), casadi::Constant< Value >::get_nzref(), casadi::GetNonzeros::get_nzref(), casadi::Project::get_nzref(), casadi::MX::MX(), and casadi::MX::nzref().

◆ get_output()

MX casadi::MXNode::get_output ( casadi_int  oind) const
virtualinherited

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

Reimplemented in casadi::MultipleOutput, and casadi::Call.

Definition at line 444 of file mx_node.cpp.

444  {
445  casadi_assert(oind==0, "Output index out of bounds");
446  return shared_from_this<MX>();
447  }

Referenced by casadi::MX::get_output(), and casadi::MX::graph_substitute().

◆ get_project()

MX casadi::MXNode::get_project ( const Sparsity sp,
bool  unique = false 
) const
virtualinherited

Reimplemented in casadi::Project, casadi::Constant< Value >, and casadi::ZeroByZero.

Definition at line 759 of file mx_node.cpp.

759  {
760  if (sp==sparsity()) {
761  return shared_from_this<MX>();
762  } else if (sp.nnz()==0) {
763  return MX::zeros(sp);
764  } else if (sp.is_dense()) {
765  return MX::create(new Densify(shared_from_this<MX>(), sp));
766  } else if (sparsity().is_dense()) {
767  return MX::create(new Sparsify(shared_from_this<MX>(), sp));
768  } else {
769  return MX::create(new Project(shared_from_this<MX>(), sp));
770  }
771  }

References casadi::MX::create(), casadi::Sparsity::is_dense(), casadi::Sparsity::nnz(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::SetNonzeros< Add >::ad_forward(), casadi::GetNonzeros::ad_reverse(), casadi::Constant< Value >::get_project(), casadi::Project::get_project(), and casadi::MX::project().

◆ get_rank1()

MX casadi::MXNode::get_rank1 ( const MX alpha,
const MX x,
const MX y 
) const
virtualinherited

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

Definition at line 612 of file mx_node.cpp.

612  {
613  return MX::create(new Rank1(shared_from_this<MX>(), alpha, x, y));
614  }

References casadi::MX::create().

Referenced by casadi::MX::_rank1().

◆ get_repmat()

MX casadi::MXNode::get_repmat ( casadi_int  m,
casadi_int  n 
) const
virtualinherited

Definition at line 1222 of file mx_node.cpp.

1222  {
1223  if (n==1) {
1224  return MX::create(new HorzRepmat(shared_from_this<MX>(), m));
1225  } else {
1226  // Fallback to generic_matrix impl
1227  return GenericMatrix<MX>::repmat(shared_from_this<MX>(), n, m);
1228  }
1229  }
static MatType repmat(const MatType &x, casadi_int n, casadi_int m=1)

References casadi::MX::create(), and casadi::SparsityInterface< MatType >::repmat().

Referenced by casadi::MX::repmat().

◆ get_repsum()

MX casadi::MXNode::get_repsum ( casadi_int  m,
casadi_int  n 
) const
virtualinherited

Definition at line 1231 of file mx_node.cpp.

1231  {
1232  if (n==1) {
1233  return MX::create(new HorzRepsum(shared_from_this<MX>(), m));
1234  } else {
1235  // Fallback to generic_matrix impl
1236  return GenericMatrix<MX>::repsum(shared_from_this<MX>(), n, m);
1237  }
1238  }
static MatType repsum(const MatType &x, casadi_int n, casadi_int m=1)
Functions called by friend functions defined here.

References casadi::MX::create(), and casadi::GenericMatrix< MatType >::repsum().

Referenced by casadi::MX::repsum().

◆ get_reshape()

MX casadi::MXNode::get_reshape ( const Sparsity sp) const
virtualinherited

Reimplemented in casadi::SparsityCast, casadi::Reshape, casadi::Constant< Value >, and casadi::ZeroByZero.

Definition at line 503 of file mx_node.cpp.

503  {
504  casadi_assert_dev(sp.is_reshape(sparsity()));
505  if (sp==sparsity()) {
506  return shared_from_this<MX>();
507  } else {
508  return MX::create(new Reshape(shared_from_this<MX>(), sp));
509  }
510  }

References casadi::MX::create(), casadi::Sparsity::is_reshape(), and casadi::MXNode::sparsity().

Referenced by casadi::SparsityCast::get_reshape(), casadi::MXNode::get_transpose(), and casadi::MX::reshape().

◆ get_solve()

MX casadi::MXNode::get_solve ( const MX r,
bool  tr,
const Linsol linear_solver 
) const
virtualinherited

For system Ax = b:

A->get_solve(b)

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

Definition at line 652 of file mx_node.cpp.

652  {
653  if (tr) {
654  return MX::create(new LinsolCall<true>(densify(r), shared_from_this<MX>(), linear_solver));
655  } else {
656  return MX::create(new LinsolCall<false>(densify(r), shared_from_this<MX>(), linear_solver));
657  }
658  }

References casadi::MX::create().

Referenced by casadi::Rootfinder::ad_forward(), casadi::Rootfinder::ad_reverse(), and casadi::Linsol::solve().

◆ get_solve_tril()

MX casadi::MXNode::get_solve_tril ( const MX r,
bool  tr 
) const
virtualinherited

For system Ax = b:

A->get_solve_tril(b)

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

Reimplemented in casadi::Transpose, and casadi::BinaryMX< ScX, ScY >.

Definition at line 628 of file mx_node.cpp.

628  {
629  if (tr) {
630  return MX::create(new TrilSolve<true>(densify(r), shared_from_this<MX>()));
631  } else {
632  return MX::create(new TrilSolve<false>(densify(r), shared_from_this<MX>()));
633  }
634  }

References casadi::MX::create().

Referenced by casadi::BinaryMX< ScX, ScY >::get_solve_tril(), casadi::Transpose::get_solve_triu(), casadi::MX::solve(), and casadi::TrilSolve< Tr >::solve().

◆ get_solve_tril_unity()

MX casadi::MXNode::get_solve_tril_unity ( const MX r,
bool  tr 
) const
virtualinherited

For system Ax = b:

A->get_solve_tril(b)

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

Reimplemented in casadi::Transpose.

Definition at line 644 of file mx_node.cpp.

644  {
645  if (tr) {
646  return MX::create(new TrilSolveUnity<true>(densify(r), shared_from_this<MX>()));
647  } else {
648  return MX::create(new TrilSolveUnity<false>(densify(r), shared_from_this<MX>()));
649  }
650  }

References casadi::MX::create().

Referenced by casadi::BinaryMX< ScX, ScY >::get_solve_tril(), casadi::Transpose::get_solve_triu_unity(), and casadi::TrilSolveUnity< Tr >::solve().

◆ get_solve_triu()

MX casadi::MXNode::get_solve_triu ( const MX r,
bool  tr 
) const
virtualinherited

For system Ax = b:

A->get_solve_triu(b)

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

Reimplemented in casadi::Transpose, and casadi::BinaryMX< ScX, ScY >.

Definition at line 620 of file mx_node.cpp.

620  {
621  if (tr) {
622  return MX::create(new TriuSolve<true>(densify(r), shared_from_this<MX>()));
623  } else {
624  return MX::create(new TriuSolve<false>(densify(r), shared_from_this<MX>()));
625  }
626  }

References casadi::MX::create().

Referenced by casadi::Transpose::get_solve_tril(), casadi::BinaryMX< ScX, ScY >::get_solve_triu(), casadi::MX::solve(), and casadi::TriuSolve< Tr >::solve().

◆ get_solve_triu_unity()

MX casadi::MXNode::get_solve_triu_unity ( const MX r,
bool  tr 
) const
virtualinherited

For system Ax = b:

A->get_solve_triu(b)

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

Reimplemented in casadi::Transpose.

Definition at line 636 of file mx_node.cpp.

636  {
637  if (tr) {
638  return MX::create(new TriuSolveUnity<true>(densify(r), shared_from_this<MX>()));
639  } else {
640  return MX::create(new TriuSolveUnity<false>(densify(r), shared_from_this<MX>()));
641  }
642  }

References casadi::MX::create().

Referenced by casadi::Transpose::get_solve_tril_unity(), casadi::BinaryMX< ScX, ScY >::get_solve_triu(), and casadi::TriuSolveUnity< Tr >::solve().

◆ get_sparsity_cast()

MX casadi::MXNode::get_sparsity_cast ( const Sparsity sp) const
virtualinherited

Reimplemented in casadi::SparsityCast.

Definition at line 512 of file mx_node.cpp.

512  {
513  casadi_assert_dev(sp.nnz()==nnz());
514  if (sp==sparsity()) {
515  return shared_from_this<MX>();
516  } else {
517  return MX::create(new SparsityCast(shared_from_this<MX>(), sp));
518  }
519  }

References casadi::MX::create(), casadi::Sparsity::nnz(), casadi::MXNode::nnz(), and casadi::MXNode::sparsity().

Referenced by casadi::SparsityCast::get_transpose(), and casadi::MX::sparsity_cast().

◆ get_subassign()

MX casadi::MXNode::get_subassign ( const MX y,
const Slice i,
const Slice j 
) const
virtualinherited

Definition at line 777 of file mx_node.cpp.

777  {
778  return MX::create(new SubAssign(shared_from_this<MX>(), y, i, j));
779  }

References casadi::MX::create().

◆ get_subref()

MX casadi::MXNode::get_subref ( const Slice i,
const Slice j 
) const
virtualinherited

Definition at line 773 of file mx_node.cpp.

773  {
774  return MX::create(new SubRef(shared_from_this<MX>(), i, j));
775  }

References casadi::MX::create().

◆ get_transpose()

MX casadi::MXNode::get_transpose ( ) const
virtualinherited

Reimplemented in casadi::Transpose, casadi::SparsityCast, casadi::Reshape, casadi::Constant< Value >, and casadi::ZeroByZero.

Definition at line 491 of file mx_node.cpp.

491  {
492  if (sparsity().is_scalar()) {
493  return shared_from_this<MX>();
494  } else if (sparsity().is_vector()) {
495  return get_reshape(sparsity().T());
496  } else if (sparsity().is_dense()) {
497  return MX::create(new DenseTranspose(shared_from_this<MX>()));
498  } else {
499  return MX::create(new Transpose(shared_from_this<MX>()));
500  }
501  }
virtual MX get_reshape(const Sparsity &sp) const
Reshape.
Definition: mx_node.cpp:503

References casadi::MX::create(), casadi::MXNode::get_reshape(), casadi::MXNode::sparsity(), and casadi::T.

Referenced by casadi::Reshape::get_transpose(), casadi::SparsityCast::get_transpose(), and casadi::MX::T().

◆ get_unary()

MX casadi::MXNode::get_unary ( casadi_int  op,
bool  unique = false 
) const
virtualinherited

Reimplemented in casadi::Constant< Value >, and casadi::ZeroByZero.

Definition at line 781 of file mx_node.cpp.

781  {
782  if (operation_checker<F0XChecker>(op) && is_zero()) {
783  // If identically zero
784  return MX::zeros(sparsity());
785  } else {
786  bool hit;
787  MX ret = common_simp_unary(op, shared_from_this<MX>(), maxDepth(),
788  [](casadi_int op, const MX& a) { return a->get_unary(op);},
789  unique,
790  hit);
791  if (hit) return ret;
792  // Create a new node
793  return MX::create(new UnaryMX(Operation(op), shared_from_this<MX>()));
794  }
795  }
T common_simp_unary(casadi_int op, const T &x, casadi_int depth, SU &&gen_unary, bool unique, bool &hit)
Definition: calculus.hpp:1813

References casadi::common_simp_unary(), casadi::MX::create(), casadi::MXNode::get_unary(), casadi::MXNode::is_zero(), casadi::MXNode::maxDepth(), casadi::MXNode::op(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MXNode::_get_binary(), casadi::Constant< Value >::_get_binary(), casadi::MXNode::get_unary(), casadi::MX::operator-(), and casadi::MX::unary().

◆ get_vertcat()

MX casadi::MXNode::get_vertcat ( const std::vector< MX > &  x) const
virtualinherited

Reimplemented in casadi::Vertsplit, casadi::OutputNode, and casadi::Constant< Value >.

Definition at line 1170 of file mx_node.cpp.

1170  {
1171  // Check if there is any existing vertcat operation
1172  for (auto i=x.begin(); i!=x.end(); ++i) {
1173  if (i->op()==OP_VERTCAT) {
1174  // Split up
1175  std::vector<MX> x_split(x.begin(), i);
1176  for (; i!=x.end(); ++i) {
1177  if (i->op()==OP_VERTCAT) {
1178  x_split.insert(x_split.end(), (*i)->dep_.begin(), (*i)->dep_.end());
1179  } else {
1180  x_split.push_back(*i);
1181  }
1182  }
1183  return vertcat(x_split);
1184  }
1185  }
1186 
1187  return MX::create(new Vertcat(x));
1188  }
@ OP_VERTCAT
Definition: calculus.hpp:127

References casadi::MX::create(), and casadi::OP_VERTCAT.

Referenced by casadi::Constant< Value >::get_vertcat(), casadi::OutputNode::get_vertcat(), casadi::Vertsplit::get_vertcat(), and casadi::MX::vertcat().

◆ get_vertsplit()

std::vector< MX > casadi::MXNode::get_vertsplit ( const std::vector< casadi_int > &  output_offset) const
virtualinherited

Definition at line 1270 of file mx_node.cpp.

1270  {
1271  if (is_zero()) {
1272  std::vector<MX> ret =
1273  MX::createMultipleOutput(new Vertsplit(shared_from_this<MX>(), output_offset));
1274  for (casadi_int i=0;i<ret.size();++i) {
1275  ret[i]=MX::zeros(ret[i].sparsity());
1276  }
1277  return ret;
1278  }
1279  std::vector<MX> ret =
1280  MX::createMultipleOutput(new Vertsplit(shared_from_this<MX>(), output_offset));
1281 
1283  // Simplify vertsplit(vertcat)
1284  if (op()==OP_VERTCAT) {
1285  casadi_int offset_deps = 0;
1286  casadi_int j = 0;
1287  for (casadi_int i=0;i<output_offset.size();++i) {
1288  while (offset_deps<output_offset[i]) { offset_deps+=dep(j).size1();++j; }
1289  if (j>=n_dep()) j = n_dep()-1;
1290  if (output_offset[i]==offset_deps &&
1291  (i+1<output_offset.size()?output_offset[i+1]:size1()) ==
1292  offset_deps +dep(j).size1()) {
1293  // Aligned with vertcat dependency
1294  ret[i] = dep(j);
1295  }
1296  }
1297  }
1298  }
1299  return ret;
1300  }
casadi_int size1() const
Get the first dimension (i.e. number of rows)

References casadi::MX::createMultipleOutput(), casadi::MXNode::dep(), casadi::MXNode::is_zero(), casadi::MXNode::n_dep(), casadi::MXNode::op(), casadi::OP_VERTCAT, casadi::GlobalOptions::simplification_on_the_fly, casadi::GenericMatrix< MatType >::size1(), casadi::MXNode::size1(), casadi::MXNode::sparsity(), and casadi::GenericMatrix< MX >::zeros().

Referenced by casadi::MX::vertsplit().

◆ getCount()

Definition at line 60 of file generic_shared_internal.hpp.

205  {
206  return static_cast<const Internal*>(this)->count;
207  }

◆ has_duplicates()

bool casadi::MXNode::has_duplicates ( ) const
virtualinherited

Not thread-safe

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

Reimplemented in casadi::SymbolicMX, casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, and casadi::Concat.

Definition at line 148 of file mx_node.cpp.

148  {
149  casadi_error("'has_duplicates' not defined for class " + class_name());
150  }

References casadi::MXNode::class_name().

Referenced by casadi::Concat::has_duplicates(), casadi::Reshape::has_duplicates(), and casadi::SparsityCast::has_duplicates().

◆ has_output()

virtual bool casadi::MXNode::has_output ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::MultipleOutput.

Definition at line 325 of file mx_node.hpp.

325 {return false;}

Referenced by casadi::MX::graph_substitute().

◆ has_refcount()

virtual bool casadi::MXNode::has_refcount ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::ConstantFile.

Definition at line 152 of file mx_node.hpp.

152 { return false;}

◆ ind()

casadi_int casadi::MXNode::ind ( ) const
virtualinherited

◆ info()

Dict casadi::MXNode::info ( ) const
virtualinherited

◆ initSingleton()

void casadi::GenericSharedInternal< SharedObject , SharedObjectInternal >::initSingleton ( )
inlineprotectedinherited

Called in the constructor of singletons to avoid that the counter reaches zero

Definition at line 71 of file generic_shared_internal.hpp.

71  {
72  casadi_assert_dev(static_cast<Internal*>(this)->count==0);
73  static_cast<Internal*>(this)->count++;
74  }

◆ is_binary()

virtual bool casadi::MXNode::is_binary ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::BinaryMX< ScX, ScY >.

Definition at line 126 of file mx_node.hpp.

126 { return false;}

◆ is_equal() [1/2]

virtual bool casadi::MXNode::is_equal ( const MXNode node,
casadi_int  depth 
) const
inlinevirtualinherited

◆ is_equal() [2/2]

bool casadi::MXNode::is_equal ( const MXNode x,
const MXNode y,
casadi_int  depth 
)
staticinherited

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

Definition at line 1317 of file mx_node.cpp.

1317  {
1318  if (x==y) {
1319  return true;
1320  } else if (depth>0) {
1321  return x->is_equal(y, depth);
1322  } else {
1323  return false;
1324  }
1325  }

References casadi::MXNode::is_equal().

Referenced by casadi::MXNode::_get_binary(), casadi::MX::is_equal(), and casadi::MXNode::is_equal().

◆ is_eye()

virtual bool casadi::MXNode::is_eye ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 116 of file mx_node.hpp.

116 { return false;}

◆ is_half()

virtual bool casadi::MXNode::is_half ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 86 of file mx_node.hpp.

86 { return false;}

◆ is_inf()

virtual bool casadi::MXNode::is_inf ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 91 of file mx_node.hpp.

91 { return false;}

◆ is_integer()

virtual bool casadi::MXNode::is_integer ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 101 of file mx_node.hpp.

101 { return false;}

◆ is_minus_inf()

virtual bool casadi::MXNode::is_minus_inf ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 96 of file mx_node.hpp.

96 { return false;}

◆ is_minus_one()

virtual bool casadi::MXNode::is_minus_one ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 81 of file mx_node.hpp.

81 { return false;}

◆ is_nonnegative()

virtual bool casadi::MXNode::is_nonnegative ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::UnaryMX, casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 106 of file mx_node.hpp.

106 { return false;}

◆ is_one()

virtual bool casadi::MXNode::is_one ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 76 of file mx_node.hpp.

76 { return false;}

◆ is_output()

virtual bool casadi::MXNode::is_output ( ) const
inlinevirtualinherited

◆ is_unary()

virtual bool casadi::MXNode::is_unary ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::UnaryMX.

Definition at line 121 of file mx_node.hpp.

121 { return false;}

◆ is_valid_input()

virtual bool casadi::MXNode::is_valid_input ( ) const
inlinevirtualinherited

◆ is_value()

virtual bool casadi::MXNode::is_value ( double  val) const
inlinevirtualinherited

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

Reimplemented in casadi::Constant< Value >, and casadi::ConstantDM.

Definition at line 111 of file mx_node.hpp.

111 { return false;}

Referenced by casadi::MXNode::_get_binary(), and casadi::Constant< Value >::is_equal().

◆ is_zero()

virtual bool casadi::MXNode::is_zero ( ) const
inlinevirtualinherited

◆ join_primitives() [1/3]

DM casadi::MXNode::join_primitives ( std::vector< DM >::const_iterator &  it) const
virtualinherited

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

Reimplemented in casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, casadi::Diagcat, casadi::Vertcat, and casadi::Horzcat.

Definition at line 187 of file mx_node.cpp.

187  {
188  return join_primitives_gen<DM>(it);
189  }

◆ join_primitives() [2/3]

MX casadi::MXNode::join_primitives ( std::vector< MX >::const_iterator &  it) const
virtualinherited

◆ join_primitives() [3/3]

SX casadi::MXNode::join_primitives ( std::vector< SX >::const_iterator &  it) const
virtualinherited

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

Reimplemented in casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, casadi::Diagcat, casadi::Vertcat, and casadi::Horzcat.

Definition at line 191 of file mx_node.cpp.

191  {
192  return join_primitives_gen<SX>(it);
193  }

◆ join_primitives_gen()

template<typename T >
T casadi::MXNode::join_primitives_gen ( typename std::vector< T >::const_iterator &  it) const
inherited

Definition at line 173 of file mx_node.cpp.

173  {
174  T ret = *it++;
175  if (ret.size()==size()) {
176  return ret;
177  } else {
178  casadi_assert_dev(ret.is_empty(true));
179  return T(size());
180  }
181  }

References casadi::MXNode::size(), and casadi::T.

◆ mapping()

Matrix< casadi_int > casadi::MXNode::mapping ( ) const
virtualinherited

Reimplemented in casadi::SetNonzeros< Add >, and casadi::GetNonzeros.

Definition at line 996 of file mx_node.cpp.

996  {
997  casadi_error("'mapping' not defined for class " + class_name());
998  }

References casadi::MXNode::class_name().

Referenced by casadi::Project::get_nzref().

◆ matches_sparsity()

template<class T >
bool casadi::MXNode::matches_sparsity ( const std::vector< T > &  arg) const
inlineinherited

Definition at line 416 of file mx_node.hpp.

416  {
417  for (casadi_int i=0;i<dep_.size();++i) {
418  if (dep_[i].sparsity()!=arg[i].sparsity()) {
419  return false;
420  }
421  }
422  return true;
423  }

Referenced by casadi::GetNonzerosVector::eval_mx(), casadi::SetNonzerosVector< Add >::eval_mx(), casadi::SetNonzerosSlice< Add >::eval_mx(), and casadi::SetNonzerosSlice2< Add >::eval_mx().

◆ maxDepth()

static bool casadi::MXNode::maxDepth ( )
inlinestaticinherited

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

Definition at line 380 of file mx_node.hpp.

380 { return MX::get_max_depth();}
static casadi_int get_max_depth()
Get the depth to which equalities are being checked for simplifications.
Definition: mx.cpp:942

References casadi::MX::get_max_depth().

Referenced by casadi::MXNode::_get_binary(), casadi::UnaryMX::_get_binary(), and casadi::MXNode::get_unary().

◆ n_dep()

casadi_int casadi::MXNode::n_dep ( ) const
inherited

◆ n_inplace()

casadi_int casadi::Dump::n_inplace ( ) const
inlineoverridevirtual

Reimplemented from casadi::MXNode.

Definition at line 117 of file dump.hpp.

117 { return 1;}

◆ n_primitives()

casadi_int casadi::MXNode::n_primitives ( ) const
virtualinherited

◆ name()

const std::string & casadi::MXNode::name ( ) const
virtualinherited

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

Reimplemented in casadi::SymbolicMX, and casadi::ZeroByZero.

Definition at line 195 of file mx_node.cpp.

195  {
196  casadi_error("'name' not defined for class " + class_name());
197  }

References casadi::MXNode::class_name().

Referenced by casadi::ConstantMX::create().

◆ nnz()

casadi_int casadi::MXNode::nnz ( casadi_int  i = 0) const
inlineinherited

Definition at line 427 of file mx_node.hpp.

427 { return sparsity(i).nnz(); }
casadi_int nnz() const
Get the number of (structural) non-zeros.
Definition: sparsity.cpp:148

Referenced by casadi::ConstantMX::__nonzero__(), casadi::MXNode::_get_binary(), casadi::ConstantFile::add_dependency(), casadi::ConstantFile::codegen_incref(), casadi::ConstantFile::ConstantFile(), casadi::BSpline::dual(), casadi::Assertion::eval(), casadi::Find::eval(), casadi::Low::eval(), eval(), casadi::GetNonzerosParamVector::eval(), casadi::GetNonzerosSliceParam::eval(), casadi::GetNonzerosParamSlice::eval(), casadi::GetNonzerosParamParam::eval(), casadi::MMin::eval(), casadi::MMax::eval(), casadi::Monitor::eval(), casadi::UnaryMX::eval(), casadi::ConstantMX::eval_activity(), casadi::Multiplication::eval_activity(), casadi::Dot::eval_gen(), casadi::Einstein::eval_gen(), casadi::LogSumExp::eval_gen(), casadi::NormF::eval_gen(), casadi::Norm1::eval_gen(), casadi::NormInf::eval_gen(), casadi::Rank1::eval_gen(), casadi::HorzRepmat::eval_gen(), casadi::Reshape::eval_gen(), casadi::SparsityCast::eval_gen(), casadi::HorzRepsum::eval_gen(), casadi::Assertion::eval_sx(), casadi::Determinant::eval_sx(), eval_sx(), casadi::MMin::eval_sx(), casadi::MMax::eval_sx(), casadi::Monitor::eval_sx(), casadi::UnaryMX::eval_sx(), casadi::BSplineParametric::generate(), casadi::Bilin::generate(), casadi::Find::generate(), casadi::Concat::generate(), casadi::ConstantDM::generate(), casadi::ConstantFile::generate(), casadi::ConstantPool::generate(), casadi::Convexify::generate(), casadi::Determinant::generate(), casadi::Dot::generate(), generate(), casadi::Einstein::generate(), casadi::GetNonzerosVector::generate(), casadi::GetNonzerosSlice::generate(), casadi::GetNonzerosSlice2::generate(), casadi::GetNonzerosParamVector::generate(), casadi::GetNonzerosSliceParam::generate(), casadi::GetNonzerosParamSlice::generate(), casadi::GetNonzerosParamParam::generate(), casadi::Input::generate(), casadi::Output::generate(), casadi::Kron::generate(), casadi::DenseKron::generate(), casadi::DenseSparseKron::generate(), casadi::SparseDenseKron::generate(), casadi::KronContract::generate(), casadi::DenseKronContract::generate(), casadi::DenseSparseKronContract::generate(), casadi::SparseDenseKronContract::generate(), casadi::LogSumExp::generate(), casadi::MMin::generate(), casadi::MMax::generate(), casadi::Monitor::generate(), casadi::Multiplication::generate(), casadi::DenseMultiplication::generate(), casadi::DenseSparseMultiplication::generate(), casadi::PseudoDenseMultiplication::generate(), casadi::NormF::generate(), casadi::Norm1::generate(), casadi::NormInf::generate(), casadi::Project::generate(), casadi::Densify::generate(), casadi::Sparsify::generate(), casadi::Rank1::generate(), casadi::HorzRepmat::generate(), casadi::HorzRepsum::generate(), casadi::Split::generate(), casadi::Transpose::generate(), casadi::DenseTranspose::generate(), casadi::UnaryMX::generate(), casadi::MXNode::generate_copy(), casadi::MXNode::get_binary(), casadi::MXNode::get_dot(), casadi::MXNode::get_dump(), casadi::MXNode::get_kron(), casadi::MXNode::get_kron_contract(), casadi::MXNode::get_mac(), casadi::MXNode::get_monitor(), casadi::MXNode::get_nzref(), casadi::MXNode::get_sparsity_cast(), casadi::ConstantMX::is_valid_input(), casadi::ConstantMX::join_primitives(), casadi::ConstantMX::join_primitives_gen(), casadi::ConstantMX::n_primitives(), casadi::ConstantMX::primitives(), casadi::SetNonzerosVector< Add >::SetNonzerosVector(), casadi::Assertion::sp_forward(), casadi::Low::sp_forward(), casadi::ConstantMX::sp_forward(), sp_forward(), casadi::GetNonzerosParam::sp_forward(), casadi::Monitor::sp_forward(), casadi::Multiplication::sp_forward(), casadi::Rank1::sp_forward(), casadi::HorzRepsum::sp_forward(), casadi::Reshape::sp_forward(), casadi::SparsityCast::sp_forward(), casadi::SymbolicMX::sp_forward(), casadi::Transpose::sp_forward(), casadi::UnaryMX::sp_forward(), casadi::Assertion::sp_reverse(), casadi::Low::sp_reverse(), casadi::ConstantMX::sp_reverse(), sp_reverse(), casadi::Einstein::sp_reverse(), casadi::GetNonzerosParam::sp_reverse(), casadi::Monitor::sp_reverse(), casadi::Multiplication::sp_reverse(), casadi::Project::sp_reverse(), casadi::Rank1::sp_reverse(), casadi::HorzRepmat::sp_reverse(), casadi::HorzRepsum::sp_reverse(), casadi::Reshape::sp_reverse(), casadi::SparsityCast::sp_reverse(), casadi::SymbolicMX::sp_reverse(), casadi::Transpose::sp_reverse(), casadi::UnaryMX::sp_reverse(), and casadi::ConstantMX::split_primitives_gen().

◆ nout()

virtual casadi_int casadi::MXNode::nout ( ) const
inlinevirtualinherited

◆ numel()

casadi_int casadi::MXNode::numel ( ) const
inlineinherited

Definition at line 426 of file mx_node.hpp.

426 { return sparsity().numel(); }
casadi_int numel() const
The total number of elements, including structural zeros, i.e. size2()*size1()
Definition: sparsity.cpp:132

Referenced by casadi::ConstantMX::__nonzero__().

◆ offset()

casadi_int casadi::MXNode::offset ( ) const
virtualinherited

◆ op()

casadi_int casadi::Dump::op ( ) const
inlineoverridevirtual

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

Implements casadi::MXNode.

Definition at line 114 of file dump.hpp.

114 { return OP_DUMP;}
@ OP_DUMP
Definition: calculus.hpp:212

References casadi::OP_DUMP.

◆ primitives()

void casadi::MXNode::primitives ( std::vector< MX >::iterator &  it) const
virtualinherited

◆ print_compact()

std::string casadi::MXNode::print_compact ( std::map< const MXNode *, casadi_int > &  nodeind,
std::vector< std::string > &  intermed 
) const
inherited

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

Definition at line 303 of file mx_node.cpp.

304  {
305  // Get reference to node index
306  casadi_int& ind = nodeind[this];
307 
308  // If positive, already in intermediate expressions
309  if (ind>0) return "@" + str(ind);
310 
311  // Get expressions for dependencies
312  std::vector<std::string> arg(n_dep());
313  for (casadi_int i=0; i<arg.size(); ++i) {
314  arg[i] = dep(i)->print_compact(nodeind, intermed);
315  }
316 
317  // Get expression for this
318  std::string s = disp(arg);
319 
320  // Decide what to do with the expression
321  if (ind==0) {
322  // Inline expression
323  return s;
324  } else {
325  // Add to list of intermediate expressions and return reference
326  intermed.push_back(s);
327  ind = intermed.size(); // For subsequent references
328  return "@" + str(ind);
329  }
330  }
virtual std::string disp(const std::vector< std::string > &arg) const =0
Print expression.

References casadi::MXNode::dep(), casadi::MXNode::disp(), casadi::MXNode::ind(), casadi::MXNode::n_dep(), casadi::MXNode::print_compact(), and casadi::str().

Referenced by casadi::MXNode::disp(), and casadi::MXNode::print_compact().

◆ reset_dump_count()

void casadi::Dump::reset_dump_count ( )

Definition at line 33 of file dump.cpp.

33  {
34  dump_count_ = 0;
35  }

◆ reset_input()

void casadi::MXNode::reset_input ( ) const
virtualinherited

Not thread-safe

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

Reimplemented in casadi::SymbolicMX, casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, and casadi::Concat.

Definition at line 152 of file mx_node.cpp.

152  {
153  casadi_error("'reset_input' not defined for class " + class_name());
154  }

References casadi::MXNode::class_name().

Referenced by casadi::Concat::reset_input(), casadi::Reshape::reset_input(), and casadi::SparsityCast::reset_input().

◆ sameOpAndDeps()

bool casadi::MXNode::sameOpAndDeps ( const MXNode node,
casadi_int  depth 
) const
inherited

equivalent dependencies up to a given depth

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

Definition at line 1000 of file mx_node.cpp.

1000  {
1001  if (op()!=node->op() || n_dep()!=node->n_dep())
1002  return false;
1003  for (casadi_int i=0; i<n_dep(); ++i) {
1004  if (!MX::is_equal(dep(i), node->dep(i), depth-1))
1005  return false;
1006  }
1007  return true;
1008  }

References casadi::MXNode::dep(), casadi::MX::is_equal(), casadi::MXNode::n_dep(), and casadi::MXNode::op().

Referenced by casadi::GetNonzerosVector::is_equal(), casadi::GetNonzerosSlice::is_equal(), and casadi::GetNonzerosSlice2::is_equal().

◆ segment()

casadi_int casadi::MXNode::segment ( ) const
virtualinherited

Reimplemented in casadi::IOInstruction.

Definition at line 216 of file mx_node.cpp.

216  {
217  casadi_error("'segment' not defined for class " + class_name());
218  }

References casadi::MXNode::class_name().

Referenced by casadi::MXFunction::print().

◆ serialize()

void casadi::MXNode::serialize ( SerializingStream s) const
inherited

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

Definition at line 525 of file mx_node.cpp.

525  {
526  serialize_type(s);
527  serialize_body(s);
528  }
virtual void serialize_type(SerializingStream &s) const
Serialize type information.
Definition: mx_node.cpp:535
virtual void serialize_body(SerializingStream &s) const
Serialize an object without type information.
Definition: mx_node.cpp:530

References casadi::MXNode::serialize_body(), and casadi::MXNode::serialize_type().

◆ serialize_body()

void casadi::Dump::serialize_body ( SerializingStream s) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 154 of file dump.cpp.

154  {
156  s.version("Dump", 1);
157  s.pack("Dump::base_filename", base_filename_);
158  s.pack("Dump::dir", dir_);
159  s.pack("Dump::format", format_);
160  s.pack("Dump::verbose", verbose_);
161  }

References casadi::SerializingStream::pack(), casadi::MXNode::serialize_body(), and casadi::SerializingStream::version().

◆ serialize_type()

void casadi::MXNode::serialize_type ( SerializingStream s) const
virtualinherited

Information needed to unambiguously find the (lowest level sub)class, such that its deserializing constructor can be called.

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

Reimplemented in casadi::DenseTranspose, casadi::Transpose, casadi::LinsolCall< Tr >, casadi::Solve< Tr >, casadi::SetNonzerosParamParam< Add >, casadi::SetNonzerosSliceParam< Add >, casadi::SetNonzerosParamSlice< Add >, casadi::SetNonzerosParamVector< Add >, casadi::SetNonzerosSlice2< Add >, casadi::SetNonzerosSlice< Add >, casadi::SetNonzerosVector< Add >, casadi::Sparsify, casadi::Densify, casadi::Project, casadi::PseudoDenseMultiplication, casadi::DenseSparseMultiplication, casadi::DenseMultiplication, casadi::Multiplication, casadi::SparseDenseKronContract, casadi::DenseSparseKronContract, casadi::DenseKronContract, casadi::KronContract, casadi::SparseDenseKron, casadi::DenseSparseKron, casadi::DenseKron, casadi::Kron, casadi::GetNonzerosParamParam, casadi::GetNonzerosParamSlice, casadi::GetNonzerosSliceParam, casadi::GetNonzerosParamVector, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, casadi::ConstantDM, casadi::BSplineParametric, casadi::BSpline, and casadi::BinaryMX< ScX, ScY >.

Definition at line 535 of file mx_node.cpp.

535  {
536  s.pack("MXNode::op", static_cast<int>(op()));
537  }

References casadi::MXNode::op(), and casadi::SerializingStream::pack().

Referenced by casadi::MXNode::serialize(), casadi::BinaryMX< ScX, ScY >::serialize_type(), casadi::BSpline::serialize_type(), casadi::BSplineParametric::serialize_type(), casadi::ConstantDM::serialize_type(), casadi::ConstantFile::serialize_type(), casadi::ConstantPool::serialize_type(), casadi::ZeroByZero::serialize_type(), casadi::Constant< Value >::serialize_type(), casadi::GetNonzerosVector::serialize_type(), casadi::GetNonzerosSlice::serialize_type(), casadi::GetNonzerosSlice2::serialize_type(), casadi::GetNonzerosParamVector::serialize_type(), casadi::GetNonzerosSliceParam::serialize_type(), casadi::GetNonzerosParamSlice::serialize_type(), casadi::GetNonzerosParamParam::serialize_type(), casadi::Kron::serialize_type(), casadi::DenseKron::serialize_type(), casadi::DenseSparseKron::serialize_type(), casadi::SparseDenseKron::serialize_type(), casadi::KronContract::serialize_type(), casadi::DenseKronContract::serialize_type(), casadi::DenseSparseKronContract::serialize_type(), casadi::SparseDenseKronContract::serialize_type(), casadi::Multiplication::serialize_type(), casadi::DenseMultiplication::serialize_type(), casadi::DenseSparseMultiplication::serialize_type(), casadi::PseudoDenseMultiplication::serialize_type(), casadi::Project::serialize_type(), casadi::Densify::serialize_type(), casadi::Sparsify::serialize_type(), casadi::SetNonzerosVector< Add >::serialize_type(), casadi::SetNonzerosSlice< Add >::serialize_type(), casadi::SetNonzerosSlice2< Add >::serialize_type(), casadi::SetNonzerosParamVector< Add >::serialize_type(), casadi::SetNonzerosParamSlice< Add >::serialize_type(), casadi::SetNonzerosSliceParam< Add >::serialize_type(), casadi::SetNonzerosParamParam< Add >::serialize_type(), casadi::Solve< Tr >::serialize_type(), casadi::Transpose::serialize_type(), and casadi::DenseTranspose::serialize_type().

◆ set_dep() [1/4]

void casadi::MXNode::set_dep ( const MX dep)
inherited

◆ set_dep() [2/4]

void casadi::MXNode::set_dep ( const MX dep1,
const MX dep2 
)
inherited

Definition at line 234 of file mx_node.cpp.

234  {
235  dep_.resize(2);
236  dep_[0] = dep1;
237  dep_[1] = dep2;
238  check_dep();
239  }

References casadi::MXNode::check_dep(), and casadi::MXNode::dep_.

◆ set_dep() [3/4]

void casadi::MXNode::set_dep ( const MX dep1,
const MX dep2,
const MX dep3 
)
inherited

Definition at line 241 of file mx_node.cpp.

241  {
242  dep_.resize(3);
243  dep_[0] = dep1;
244  dep_[1] = dep2;
245  dep_[2] = dep3;
246  check_dep();
247  }

References casadi::MXNode::check_dep(), and casadi::MXNode::dep_.

◆ set_dep() [4/4]

void casadi::MXNode::set_dep ( const std::vector< MX > &  dep)
inherited

Definition at line 249 of file mx_node.cpp.

249  {
250  dep_ = dep;
251  check_dep();
252  }

References casadi::MXNode::check_dep(), casadi::MXNode::dep(), and casadi::MXNode::dep_.

◆ set_sparsity()

void casadi::MXNode::set_sparsity ( const Sparsity sparsity)
inherited

◆ shared_from_this() [1/2]

B casadi::GenericSharedInternal< SharedObject , SharedObjectInternal >::shared_from_this ( )
inlineprotectedinherited

Definition at line 83 of file generic_shared_internal.hpp.

83  {
84  casadi_assert_dev(B::test_cast(static_cast<Internal*>(this)));
85  B ret;
86  ret.own(static_cast<Internal*>(this));
87  return ret;
88  }

◆ shared_from_this() [2/2]

const B casadi::GenericSharedInternal< SharedObject , SharedObjectInternal >::shared_from_this ( ) const
inlineprotectedinherited

Definition at line 92 of file generic_shared_internal.hpp.

92  {
93  casadi_assert_dev(B::test_cast(static_cast<const Internal*>(this)));
94  B ret;
95  ret.own(const_cast<Internal*>(static_cast<const Internal*>(this)));
96  return ret;
97  }

◆ size()

std::pair<casadi_int, casadi_int> casadi::MXNode::size ( ) const
inlineinherited

◆ size1()

casadi_int casadi::MXNode::size1 ( ) const
inlineinherited

◆ size2()

casadi_int casadi::MXNode::size2 ( ) const
inlineinherited

◆ sp_forward()

int casadi::Dump::sp_forward ( const bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 97 of file dump.cpp.

97  {
98  if (arg[0]!=res[0]) {
99  std::copy(arg[0], arg[0]+nnz(), res[0]);
100  }
101  return 0;
102  }

References casadi::MXNode::nnz().

◆ sp_reverse()

int casadi::Dump::sp_reverse ( bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 104 of file dump.cpp.

104  {
105  bvec_t *a = arg[0];
106  bvec_t *r = res[0];
107  casadi_int n = nnz();
108  if (a != r) {
109  for (casadi_int i=0; i<n; ++i) {
110  *a++ |= *r;
111  *r++ = 0;
112  }
113  }
114  return 0;
115  }
unsigned long long bvec_t

References casadi::MXNode::nnz().

◆ sparsity() [1/2]

const Sparsity& casadi::MXNode::sparsity ( ) const
inlineinherited

Definition at line 410 of file mx_node.hpp.

410 { return sparsity_;}

Referenced by casadi::MXNode::_get_binary(), casadi::GetNonzeros::ad_forward(), casadi::GetNonzerosParamVector::ad_forward(), casadi::GetNonzerosSliceParam::ad_forward(), casadi::GetNonzerosParamSlice::ad_forward(), casadi::GetNonzerosParamParam::ad_forward(), casadi::LogSumExp::ad_forward(), casadi::Multiplication::ad_forward(), casadi::Project::ad_forward(), casadi::Rank1::ad_forward(), casadi::SparsityCast::ad_forward(), casadi::Bilin::ad_reverse(), casadi::GetNonzeros::ad_reverse(), casadi::GetNonzerosParamVector::ad_reverse(), casadi::GetNonzerosSliceParam::ad_reverse(), casadi::GetNonzerosParamSlice::ad_reverse(), casadi::GetNonzerosParamParam::ad_reverse(), casadi::Multiplication::ad_reverse(), casadi::Project::ad_reverse(), casadi::SparsityCast::ad_reverse(), casadi::Diagcat::Diagcat(), casadi::ConstantFile::disp(), casadi::ConstantPool::disp(), casadi::Project::disp(), casadi::Reshape::disp(), casadi::SparsityCast::disp(), eval(), casadi::Monitor::eval(), casadi::Multiplication::eval_activity(), casadi::Bilin::eval_gen(), casadi::Project::eval_gen(), casadi::Densify::eval_gen(), casadi::Sparsify::eval_gen(), casadi::Rank1::eval_gen(), casadi::HorzRepsum::eval_gen(), casadi::Transpose::eval_gen(), casadi::Kron::eval_kernel(), casadi::DenseSparseKron::eval_kernel(), casadi::SparseDenseKron::eval_kernel(), casadi::KronContract::eval_kernel(), casadi::Multiplication::eval_kernel(), casadi::DenseKronContract::eval_kernel(), casadi::DenseSparseKronContract::eval_kernel(), casadi::SparseDenseKronContract::eval_kernel(), casadi::DenseSparseMultiplication::eval_kernel(), casadi::MXNode::eval_linear(), casadi::GetNonzeros::eval_mx(), casadi::GetNonzerosVector::eval_mx(), casadi::GetNonzerosParamVector::eval_mx(), casadi::GetNonzerosSliceParam::eval_mx(), casadi::GetNonzerosParamSlice::eval_mx(), casadi::GetNonzerosParamParam::eval_mx(), casadi::Project::eval_mx(), casadi::SparsityCast::eval_mx(), casadi::Determinant::eval_sx(), casadi::Bilin::generate(), casadi::Find::generate(), generate(), casadi::Kron::generate(), casadi::DenseSparseKron::generate(), casadi::SparseDenseKron::generate(), casadi::KronContract::generate(), casadi::DenseKronContract::generate(), casadi::DenseSparseKronContract::generate(), casadi::SparseDenseKronContract::generate(), casadi::Monitor::generate(), casadi::Multiplication::generate(), casadi::DenseSparseMultiplication::generate(), casadi::Project::generate(), casadi::Densify::generate(), casadi::Sparsify::generate(), casadi::Rank1::generate(), casadi::HorzRepmat::generate(), casadi::HorzRepsum::generate(), casadi::Transpose::generate(), casadi::UnaryMX::generate(), casadi::MXNode::get_binary(), casadi::MXNode::get_diagsplit(), casadi::MXNode::get_dot(), casadi::Horzsplit::get_horzcat(), casadi::MXNode::get_horzsplit(), casadi::MXNode::get_kron(), casadi::MXNode::get_kron_contract(), casadi::MXNode::get_mac(), casadi::MXNode::get_nzref(), casadi::Project::get_nzref(), casadi::Call::get_output(), casadi::MultipleOutput::get_output(), casadi::MXNode::get_project(), casadi::Project::get_project(), casadi::MXNode::get_reshape(), casadi::SparsityCast::get_reshape(), casadi::MXNode::get_sparsity_cast(), casadi::MXNode::get_transpose(), casadi::Reshape::get_transpose(), casadi::SparsityCast::get_transpose(), casadi::MXNode::get_unary(), casadi::MXNode::get_vertsplit(), casadi::Horzcat::Horzcat(), casadi::ConstantDM::is_equal(), casadi::Constant< Value >::is_equal(), casadi::GetNonzerosVector::is_equal(), casadi::GetNonzerosSlice::is_equal(), casadi::GetNonzerosSlice2::is_equal(), casadi::Reshape::is_equal(), casadi::SetNonzerosVector< Add >::is_equal(), casadi::SetNonzerosSlice< Add >::is_equal(), casadi::SetNonzerosSlice2< Add >::is_equal(), casadi::SparsityCast::is_equal(), casadi::ConstantMX::join_primitives_gen(), casadi::SparsityCast::join_primitives_gen(), casadi::GetNonzeros::mapping(), casadi::OutputNode::OutputNode(), casadi::MXFunction::print_res(), casadi::MXNode::set_sparsity(), casadi::MXNode::sp_forward(), casadi::Kron::sp_forward(), casadi::KronContract::sp_forward(), casadi::Multiplication::sp_forward(), casadi::Project::sp_forward(), casadi::Rank1::sp_forward(), casadi::HorzRepsum::sp_forward(), casadi::Split::sp_forward(), casadi::Transpose::sp_forward(), casadi::MXNode::sp_reverse(), casadi::Kron::sp_reverse(), casadi::KronContract::sp_reverse(), casadi::Multiplication::sp_reverse(), casadi::Project::sp_reverse(), casadi::Rank1::sp_reverse(), casadi::HorzRepmat::sp_reverse(), casadi::HorzRepsum::sp_reverse(), casadi::Split::sp_reverse(), casadi::Transpose::sp_reverse(), casadi::SparsityCast::split_primitives_gen(), casadi::UnaryMX::UnaryMX(), and casadi::Vertcat::Vertcat().

◆ sparsity() [2/2]

const Sparsity & casadi::MXNode::sparsity ( casadi_int  oind) const
virtualinherited

Reimplemented in casadi::MultipleOutput, casadi::Split, and casadi::Call.

Definition at line 264 of file mx_node.cpp.

264  {
265  casadi_assert(oind==0, "Index out of bounds");
266  return sparsity_;
267  }

References casadi::MXNode::sparsity_.

◆ split_primitives() [1/3]

void casadi::MXNode::split_primitives ( const DM x,
std::vector< DM >::iterator &  it 
) const
virtualinherited

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

Reimplemented in casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, casadi::Diagcat, casadi::Vertcat, and casadi::Horzcat.

Definition at line 168 of file mx_node.cpp.

168  {
169  *it++ = x;
170  }

◆ split_primitives() [2/3]

void casadi::MXNode::split_primitives ( const MX x,
std::vector< MX >::iterator &  it 
) const
virtualinherited

◆ split_primitives() [3/3]

void casadi::MXNode::split_primitives ( const SX x,
std::vector< SX >::iterator &  it 
) const
virtualinherited

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

Reimplemented in casadi::SparsityCast, casadi::Reshape, casadi::ConstantMX, casadi::Diagcat, casadi::Vertcat, and casadi::Horzcat.

Definition at line 164 of file mx_node.cpp.

164  {
165  *it++ = x;
166  }

◆ sz_arg()

virtual size_t casadi::MXNode::sz_arg ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Call.

Definition at line 447 of file mx_node.hpp.

447 { return n_dep();}

◆ sz_iw()

virtual size_t casadi::MXNode::sz_iw ( ) const
inlinevirtualinherited

◆ sz_res()

virtual size_t casadi::MXNode::sz_res ( ) const
inlinevirtualinherited

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

Reimplemented in casadi::Call.

Definition at line 452 of file mx_node.hpp.

452 { return nout();}

◆ sz_w()

virtual size_t casadi::MXNode::sz_w ( ) const
inlinevirtualinherited

◆ to_double()

double casadi::MXNode::to_double ( ) const
virtualinherited

Reimplemented in casadi::ConstantMX, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, and casadi::ConstantDM.

Definition at line 479 of file mx_node.cpp.

479  {
480  casadi_error("'to_double' not defined for class " + class_name());
481  }

References casadi::MXNode::class_name().

Referenced by casadi::Constant< Value >::_get_binary(), and casadi::MX::operator double().

◆ to_int()

casadi_int casadi::MXNode::to_int ( ) const
virtualinherited

Reimplemented in casadi::ConstantMX, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, and casadi::ConstantDM.

Definition at line 483 of file mx_node.cpp.

483  {
484  casadi_error("'to_int' not defined for class " + class_name());
485  }

References casadi::MXNode::class_name().

◆ to_matrix()

static MX casadi::MXNode::to_matrix ( const MX x,
const Sparsity sp 
)
inlinestaticinherited

Definition at line 489 of file mx_node.hpp.

489  {
490  if (x.size()==sp.size()) {
491  return x;
492  } else {
493  return MX(sp, x);
494  }
495  }

References casadi::GenericMatrix< MatType >::size(), and casadi::Sparsity::size().

Referenced by casadi::MXNode::get_binary().

◆ weak()

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

Definition at line 67 of file generic_shared_internal.hpp.

210  {
211 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
212  auto* w = weak_ref_.load(std::memory_order_acquire);
213  if (!w) {
214  auto* nw = new GenericWeakRef<Shared, Internal>(static_cast<Internal*>(this));
215  GenericWeakRef<Shared, Internal>* expected = nullptr;
216  if (weak_ref_.compare_exchange_strong(
217  expected, nw, std::memory_order_release, std::memory_order_acquire)) {
218  w = nw;
219  } else {
220  delete nw; // lost the race; another thread published first
221  w = expected;
222  }
223  }
224  return w;
225 #else
226  if (weak_ref_==nullptr) {
227  weak_ref_ = new GenericWeakRef<Shared, Internal>(static_cast<Internal*>(this));
228  }
229  return weak_ref_;
230 #endif // CASADI_WITH_THREADSAFE_SYMBOLICS
231  }

◆ which_function()

const Function & casadi::MXNode::which_function ( ) const
virtualinherited

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

Reimplemented in casadi::Call.

Definition at line 332 of file mx_node.cpp.

332  {
333  casadi_error("'which_function' not defined for class " + class_name());
334  }

References casadi::MXNode::class_name().

◆ which_output()

casadi_int casadi::MXNode::which_output ( ) const
virtualinherited

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

Reimplemented in casadi::OutputNode, and casadi::Call.

Definition at line 336 of file mx_node.cpp.

336  {
337  casadi_error("'which_output' not defined for class " + class_name());
338  }

References casadi::MXNode::class_name().

Referenced by casadi::Diagsplit::get_diagcat(), casadi::Horzsplit::get_horzcat(), and casadi::Vertsplit::get_vertcat().

Member Data Documentation

◆ dep_

std::vector<MX> casadi::MXNode::dep_
inherited

◆ deserialize_map

std::map< casadi_int, MXNode *(*)(DeserializingStream &)> casadi::MXNode::deserialize_map
staticinherited

Definition at line 841 of file mx_node.hpp.

Referenced by casadi::MXNode::deserialize().

◆ sparsity_

Sparsity casadi::MXNode::sparsity_
inherited

◆ temp

casadi_int casadi::MXNode::temp
mutableinherited

Temporary variables to be used in user algorithms like sorting, the user is responsible of making sure that use is thread-safe The variable is initialized to zero

Definition at line 819 of file mx_node.hpp.

Referenced by casadi::SymbolicMX::has_duplicates(), casadi::MXNode::MXNode(), and casadi::SymbolicMX::reset_input().


The documentation for this class was generated from the following files: