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

Reshape an expression. More...

#include <reshape.hpp>

Detailed Description

Author
Joel Andersson
Date
2013

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

Definition at line 42 of file reshape.hpp.

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

Public Types

using weak_ref_type = WeakRefInternal
 

Public Member Functions

 Reshape (const MX &x, Sparsity sp)
 Constructor. More...
 
 ~Reshape () override
 Destructor. More...
 
template<typename T >
int eval_gen (const T **arg, T **res, casadi_int *iw, T *w) const
 Evaluate the function (template) 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_mx (const std::vector< MX > &arg, std::vector< MX > &res, const std::vector< bool > &unique={}) const override
 Evaluate symbolically (MX) 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...
 
void ad_forward (const std::vector< std::vector< MX > > &fseed, std::vector< std::vector< MX > > &fsens) const override
 Calculate forward mode directional derivatives. More...
 
void ad_reverse (const std::vector< std::vector< MX > > &aseed, std::vector< std::vector< MX > > &asens) const override
 Calculate reverse mode directional derivatives. 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...
 
std::string disp (const std::vector< std::string > &arg) const override
 Print expression. 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...
 
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...
 
MX get_reshape (const Sparsity &sp) const override
 Reshape. More...
 
bool is_equal (const MXNode *node, casadi_int depth) const override
 Check if two nodes are equivalent up to a given depth. More...
 
MX get_transpose () const override
 Transpose (if a dimension is one) More...
 
bool is_valid_input () const override
 Check if valid function input. More...
 
casadi_int n_primitives () const override
 Get the number of symbolic primitives. More...
 
void primitives (std::vector< MX >::iterator &it) const override
 Get symbolic primitives. More...
 
template<typename T >
void split_primitives_gen (const T &x, typename std::vector< T >::iterator &it) const
 Split up an expression along primitives (template) More...
 
template<typename T >
T join_primitives_gen (typename std::vector< T >::const_iterator &it) const
 Join an expression along symbolic primitives (template) More...
 
bool has_duplicates () const override
 Detect duplicate symbolic expressions. More...
 
void reset_input () const override
 Reset the marker for an input expression. 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 void add_dependency (CodeGenerator &g) const
 Add a dependent function. 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 const std::string & name () const
 Get the name. More...
 
std::string class_name () const override
 Get name of public class. 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 Function & which_function () const
 Get called function. More...
 
virtual Dict info () const
 
void serialize (SerializingStream &s) const
 Serialize an object. More...
 
virtual void serialize_body (SerializingStream &s) const
 Serialize an object without type information. More...
 
virtual void serialize_type (SerializingStream &s) const
 Serialize type information. More...
 
bool sameOpAndDeps (const MXNode *node, casadi_int depth) const
 Checks if two nodes have the same operation and have. More...
 
const MX & dep (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 Sparsity & sparsity () const
 Get the sparsity. More...
 
virtual const Sparsity & sparsity (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< MX > get_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< MX > get_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< MX > get_diagsplit (const std::vector< casadi_int > &offset1, const std::vector< casadi_int > &offset2) const
 Create a diagonal split node. 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...
 
void split_primitives (const MX &x, std::vector< MX >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
void split_primitives (const SX &x, std::vector< SX >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
void split_primitives (const DM &x, std::vector< DM >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
MX join_primitives (std::vector< MX >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 
SX join_primitives (std::vector< SX >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 
DM join_primitives (std::vector< DM >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 

Static Public Member Functions

static MXNode * deserialize (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< MX > dep_
 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

 Reshape (DeserializingStream &s)
 Deserializing constructor. More...
 
void initSingleton ()
 
void destroySingleton ()
 
B 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

◆ Reshape() [1/2]

casadi::Reshape::Reshape ( const MX &  x,
Sparsity  sp 
)

Definition at line 31 of file reshape.cpp.

31  {
32  casadi_assert_dev(x.nnz()==sp.nnz());
33  set_dep(x);
34  set_sparsity(sp);
35  }
void set_sparsity(const Sparsity &sparsity)
Set the sparsity.
Definition: mx_node.cpp:225
void set_dep(const MX &dep)
Set unary dependency.
Definition: mx_node.cpp:229

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

◆ ~Reshape()

casadi::Reshape::~Reshape ( )
inlineoverride

Definition at line 49 of file reshape.hpp.

49 {}

◆ Reshape() [2/2]

casadi::Reshape::Reshape ( DeserializingStream &  s)
inlineexplicitprotected

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

Definition at line 197 of file reshape.hpp.

197 : MXNode(s) {}
MXNode()
Constructor.
Definition: mx_node.cpp:79

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 205 of file mx_node.cpp.

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

◆ _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 853 of file mx_node.cpp.

854  {
855  casadi_assert_dev(sparsity()==y.sparsity() || scX || scY);
856 
858 
859  // If identically zero due to one argument being zero
860  if ((operation_checker<F0XChecker>(op) && nnz()==0) ||
861  (operation_checker<FX0Checker>(op) && y->nnz()==0)) {
862  return MX::zeros(Sparsity(size()));
863  }
864 
865  if ((operation_checker<F0XChecker>(op) && is_zero()) ||
866  (operation_checker<FX0Checker>(op) && y->is_zero())) {
867  return MX::zeros(sparsity());
868  }
869 
870  if (sparsity().is_scalar(true) && y.is_scalar(true)) {
871  bool hit;
872  MX ret = common_simp_binary(op, shared_from_this<MX>(), y, maxDepth(),
873  [](casadi_int op, const MX& a) { return a->get_unary(op);},
874  [](casadi_int op, const MX& a, const MX& b) {
875  return a->_get_binary(op, b, true, true);
876  },
877  unique_x,
878  unique_y,
879  hit);
880  if (hit) return ret;
881  }
882 
883  // Handle special operations (independent of type)
884  switch (op) {
885  case OP_ADD:
886  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_TWICE);
887  break;
888  case OP_SUB:
889  case OP_NE:
890  case OP_LT:
891  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::zeros(sparsity());
892  break;
893  case OP_DIV:
894  if (y->is_zero()) return MX::nan(sparsity());
895  // fall-through
896  case OP_EQ:
897  case OP_LE:
898  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::ones(sparsity());
899  break;
900  case OP_MUL:
901  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_SQ);
902  break;
903  default: break; // no rule
904  }
905 
906  // Handle special cases for the second argument
907  switch (y->op()) {
908  case OP_CONST:
909  // Make the constant the first argument, if possible
910  if (this->op()!=OP_CONST && operation_checker<CommChecker>(op)) {
911  return y->_get_binary(op, shared_from_this<MX>(), scY, scX);
912  } else {
913  switch (op) {
914  case OP_POW:
915  return _get_binary(OP_CONSTPOW, y, scX, scY);
916  case OP_CONSTPOW:
917  if (y->is_value(-1)) return get_unary(OP_INV);
918  else if (y->is_value(0)) return MX::ones(size());
919  else if (y->is_value(1)) return shared_from_this<MX>();
920  else if (y->is_value(2)) return get_unary(OP_SQ);
921  break;
922  case OP_ADD:
923  case OP_SUB:
924  if (y->is_zero())
925  return scX ? repmat(shared_from_this<MX>(), y.size()) : shared_from_this<MX>();
926  break;
927  case OP_MUL:
928  if (y->is_value(1)) return shared_from_this<MX>();
929  break;
930  case OP_DIV:
931  if (y->is_value(1)) return shared_from_this<MX>();
932  else if (y->is_value(0.5)) return get_unary(OP_TWICE);
933  break;
934  default: break; // no rule
935  }
936  }
937  break;
938  case OP_NEG:
939  if (op==OP_ADD) {
940  return _get_binary(OP_SUB, y->dep(), scX, scY);
941  } else if (op==OP_SUB) {
942  return _get_binary(OP_ADD, y->dep(), scX, scY);
943  } else if (op==OP_MUL) {
944  return -_get_binary(OP_MUL, y->dep(), scX, scY);
945  } else if (op==OP_DIV) {
946  return -_get_binary(OP_DIV, y->dep(), scX, scY);
947  }
948  break;
949  case OP_INV:
950  if (op==OP_MUL) {
951  return _get_binary(OP_DIV, y->dep(), scX, scY);
952  } else if (op==OP_DIV) {
953  return _get_binary(OP_MUL, y->dep(), scX, scY);
954  }
955  break;
956  default: break; // no rule
957  }
958 
959  }
960 
961  if (scX) {
962  // Check if it is ok to loop over nonzeros only
963  if (y.is_dense() || operation_checker<FX0Checker>(op) ||
964  (is_zero() && operation_checker<F00Checker>(op))) {
965  // Loop over nonzeros
966  return MX::create(new BinaryMX<true, false>(Operation(op), shared_from_this<MX>(), y));
967  } else {
968  // Put a densification node in between
969  return _get_binary(op, densify(y), true, false);
970  }
971  } else if (scY) {
972  // Check if it is ok to loop over nonzeros only
973  if (sparsity().is_dense() || operation_checker<F0XChecker>(op) ||
974  (y.is_zero() && operation_checker<F00Checker>(op)) ||
975  (y.is_constant() && static_cast<double>(y)>0 && (op==OP_CONSTPOW || op==OP_POW))) {
976  // Loop over nonzeros
977  return MX::create(new BinaryMX<false, true>(Operation(op), shared_from_this<MX>(), y));
978  } else {
979  // Put a densification node in between
980  return densify(shared_from_this<MX>())->_get_binary(op, y, false, true);
981  }
982  } else {
983  // Loop over nonzeros only
984  MX rr = MX::create(new BinaryMX<false, false>(Operation(op), shared_from_this<MX>(), y));
985 
986  // Handle structural zeros giving rise to nonzero result, e.g. cos(0) == 1
987  if (!rr.is_dense() && !operation_checker<F00Checker>(op)) {
988  // Get the value for the structural zeros
989  double fcn_0(0);
990  casadi_math<double>::fun(op, 0, 0, fcn_0);
991  rr = densify(rr, fcn_0);
992  }
993  return rr;
994  }
995  }
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:1318
virtual MX get_unary(casadi_int op, bool unique=false) const
Get a unary operation.
Definition: mx_node.cpp:782
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:853
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 constant with all nonzeros NaN.
Definition: mx.cpp:599
bool is_scalar(bool scalar_and_dense=false) const
Check whether the pattern is 1-by-1.
Definition: sparsity.cpp:271
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:1891
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:1313

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::Reshape::ad_forward ( const std::vector< std::vector< MX > > &  fseed,
std::vector< std::vector< MX > > &  fsens 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 81 of file reshape.cpp.

82  {
83  for (casadi_int d = 0; d<fsens.size(); ++d) {
84  fsens[d][0] = reshape(fseed[d][0], size());
85  }
86  }

References casadi::MXNode::size().

◆ ad_reverse()

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

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

Reimplemented from casadi::MXNode.

Definition at line 88 of file reshape.cpp.

89  {
90  for (casadi_int d=0; d<aseed.size(); ++d) {
91  asens[d][0] += reshape(aseed[d][0], dep().size());
92  }
93  }
const MX & dep(casadi_int ind=0) const
dependencies - functions that have to be evaluated before this one
Definition: mx_node.hpp:392

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

◆ add_dependency()

virtual void casadi::MXNode::add_dependency ( CodeGenerator &  g) const
inlinevirtualinherited

◆ 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 287 of file mx_node.cpp.

287  {
288  // Add or mark node in map
289  std::map<const MXNode*, casadi_int>::iterator it=nodeind.find(this);
290  if (it==nodeind.end()) {
291  // First time encountered, mark inlined
292  nodeind.insert(it, std::make_pair(this, 0));
293 
294  // Handle dependencies with recursion
295  for (casadi_int i=0; i<n_dep(); ++i) {
296  dep(i)->can_inline(nodeind);
297  }
298  } else if (it->second==0 && op()!=OP_PARAMETER) {
299  // Node encountered before, do not inline (except if symbolic primitive)
300  it->second = -1;
301  }
302  }
void can_inline(std::map< const MXNode *, casadi_int > &nodeind) const
Find out which nodes can be inlined.
Definition: mx_node.cpp:287
casadi_int n_dep() const
Number of dependencies.
Definition: mx_node.cpp:209
@ 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 255 of file mx_node.cpp.

255  {
256  for (const MX& e : dep_) {
257  if (e->has_output()) {
258  casadi_assert(is_output(),
259  "You cannot build an expression out of a MultipleOutput node. "
260  "You must select a concrete output by making a get_output() call.");
261  }
262  }
263  }
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 1303 of file mx_node.cpp.

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

Referenced by casadi::Multiplication::eval_activity(), casadi::Multiplication::sp_forward(), 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.

180  {
181  // Note: i != this because of something something multiple inheritance
182  return str( (casadi_int)(i)) + "/" + static_cast<const Internal*>(this)->class_name();
183  }
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:213

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(), ad_reverse(), casadi::SparsityCast::ad_reverse(), casadi::UnaryMX::ad_reverse(), casadi::MXNode::can_inline(), casadi::MX::dep(), 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(), casadi::Dump::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::HorzRepmat::get_nzref(), casadi::SparsityCast::get_nzref(), casadi::Project::get_project(), get_reshape(), casadi::SparsityCast::get_reshape(), casadi::SparsityCast::get_sparsity_cast(), get_transpose(), casadi::SparsityCast::get_transpose(), casadi::Vertsplit::get_vertcat(), casadi::MXNode::get_vertsplit(), casadi::Concat::has_duplicates(), has_duplicates(), casadi::SparsityCast::has_duplicates(), casadi::BinaryMX< ScX, ScY >::is_equal(), casadi::Concat::is_valid_input(), 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(), join_primitives_gen(), casadi::SparsityCast::join_primitives_gen(), casadi::Concat::n_primitives(), n_primitives(), casadi::SparsityCast::n_primitives(), casadi::Horzcat::off(), casadi::Vertcat::off(), casadi::Diagcat::off(), casadi::MX::operator-(), casadi::OutputNode::OutputNode(), casadi::Concat::primitives(), primitives(), casadi::SparsityCast::primitives(), casadi::MXFunction::print_arg(), casadi::MXNode::print_compact(), casadi::Concat::reset_input(), 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(), 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::Reshape::deserialize ( DeserializingStream &  s)
inlinestatic

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

Definition at line 192 of file reshape.hpp.

192 { return new Reshape(s); }
Reshape(const MX &x, Sparsity sp)
Constructor.
Definition: reshape.cpp:31

◆ 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::Reshape::disp ( const std::vector< std::string > &  arg) const
overridevirtual

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

Implements casadi::MXNode.

Definition at line 61 of file reshape.cpp.

61  {
62  // For vectors, reshape is also a transpose
63  if (dep().is_vector() && sparsity().is_vector()) {
64  // Print as transpose: X'
65  return arg.at(0) + "'";
66  } else {
67  // Print as reshape(X) or vec(X)
68  if (sparsity().is_column()) {
69  return "vec(" + arg.at(0) + ")";
70  } else {
71  return "reshape(" + arg.at(0) + ")";
72  }
73  }
74  }

References casadi::MXNode::dep(), and casadi::MXNode::sparsity().

◆ 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 270 of file mx_node.cpp.

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

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

◆ eval()

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

Reimplemented from casadi::MXNode.

Definition at line 37 of file reshape.cpp.

37  {
38  return eval_gen<double>(arg, res, iw, w);
39  }

◆ eval_activity()

int casadi::Reshape::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_2ib

Reimplemented from casadi::MXNode.

Definition at line 78 of file reshape.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: reshape.cpp:51

◆ eval_gen()

template<typename T >
int casadi::Reshape::eval_gen ( const T **  arg,
T **  res,
casadi_int *  iw,
T *  w 
) const

Definition at line 46 of file reshape.cpp.

46  {
47  if (arg[0]!=res[0]) std::copy(arg[0], arg[0]+nnz(), res[0]);
48  return 0;
49  }

References casadi::MXNode::nnz().

◆ eval_linear()

void casadi::Reshape::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_2ck

Reimplemented from casadi::MXNode.

Definition at line 70 of file reshape.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:371

◆ 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 371 of file mx_node.cpp.

372  {
373  // Treat each category separately
374  for (casadi_int i=0; i<3; ++i) {
375  // Read arguments for categiry i
376  std::vector<MX> eval_arg(n_dep());
377  for (casadi_int j=0; j<n_dep(); ++j) {
378  eval_arg[j] = arg[j][i];
379  }
380  std::vector<MX> eval_res(nout());
381  // Normal symbolic evaluation
382  eval_mx(eval_arg, eval_res);
383  // Assign results
384  for (casadi_int j=0; j<nout(); ++j) {
385  res[j][i] = eval_res[j];
386  }
387  }
388  }
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:351
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::Reshape::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_1dk

Reimplemented from casadi::MXNode.

Definition at line 76 of file reshape.cpp.

77  {
78  res[0] = reshape(arg[0], size());
79  }

References casadi::MXNode::size().

◆ eval_sx()

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

Reimplemented from casadi::MXNode.

Definition at line 41 of file reshape.cpp.

41  {
42  return eval_gen<SXElem>(arg, res, iw, w);
43  }

◆ generate()

void casadi::Reshape::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_1dq

Reimplemented from casadi::MXNode.

Definition at line 95 of file reshape.cpp.

99  {
100  generate_copy(g, arg, res, arg_is_ref, res_is_ref, 0);
101  }
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:461

References casadi::MXNode::generate_copy().

◆ 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 461 of file mx_node.cpp.

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

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

Referenced by casadi::Assertion::generate(), casadi::Dump::generate(), casadi::Monitor::generate(), 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 1011 of file mx_node.cpp.

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

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 609 of file mx_node.cpp.

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

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 798 of file mx_node.cpp.

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

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

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 1061 of file mx_node.cpp.

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

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 1081 of file mx_node.cpp.

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

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 1085 of file mx_node.cpp.

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

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 1166 of file mx_node.cpp.

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

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 1255 of file mx_node.cpp.

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

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 488 of file mx_node.cpp.

488  {
489  casadi_error("'get_DM' not defined for class " + class_name());
490  }
std::string class_name() const override
Get name of public class.
Definition: mx_node.cpp:200

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 1094 of file mx_node.cpp.

1094  {
1095  casadi_assert(
1096  size2()==y.size2() && size1()==y.size1(),
1097  "MXNode::dot: Dimension mismatch. dot requires its "
1098  "two arguments to have equal shapes, but got ("
1099  + str(size2()) + ", " + str(size1()) + ") and ("
1100  + str(y.size2()) + ", " + str(y.size1()) + ").");
1101  if (sparsity()==y.sparsity()) {
1102  if (sparsity().nnz()==0) {
1103  return 0;
1104  } else if (sparsity().is_scalar()) {
1105  return get_binary(OP_MUL, y);
1106  } else {
1107  if (shared_from_this<MX>().is_zero() || y.is_zero()) return 0;
1108  return MX::create(new Dot(shared_from_this<MX>(), y));
1109  }
1110  } else {
1111  // Project to pattern intersection
1112  Sparsity sp = sparsity().intersect(y.sparsity());
1113  MX xx = project(shared_from_this<MX>(), sp);
1114  MX yy = project(y, sp);
1115  return xx->get_dot(yy);
1116  }
1117  }
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:798
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 of the same shape (also the * operator)
Definition: sparsity.cpp:419

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 1023 of file mx_node.cpp.

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

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 586 of file mx_node.cpp.

590  {
591 
592  if (A.is_zero() || B.is_zero())
593  return shared_from_this<MX>();
594 
595  MX C = densify(shared_from_this<MX>());
596 
597  if (A.is_constant() && B.is_constant() && C.is_constant()) {
598  // Constant folding
599  DM Ac = A->get_DM();
600  DM Bc = B->get_DM();
601  DM Cc = C->get_DM();
602  return einstein(vec(densify(Ac)), vec(densify(Bc)), vec(densify(Cc)),
603  dim_a, dim_b, dim_c, a, b, c);
604  }
605 
606  return MX::create(new Einstein(C, densify(A), densify(B), dim_c, dim_a, dim_b, c, a, b));
607  }
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 1047 of file mx_node.cpp.

1047  {
1048  MX x = shared_from_this<MX>();
1049  casadi_assert(x.is_vector(), "Argument must be vector, got " + x.dim() + ".");
1050  if (x.is_column()) {
1051  return MX::create(new Find(shared_from_this<MX>()));
1052  } else {
1053  return find(x.T());
1054  }
1055  }
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 1145 of file mx_node.cpp.

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

1191  {
1192  if (is_zero()) {
1193  std::vector<MX> ret =
1194  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1195  for (casadi_int i=0;i<ret.size();++i) {
1196  ret[i]=MX::zeros(ret[i].sparsity());
1197  }
1198  return ret;
1199  }
1200  std::vector<MX> ret =
1201  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1202 
1204  // Simplify horzsplit(horzcat)
1205  if (op()==OP_HORZCAT) {
1206  casadi_int offset_deps = 0;
1207  casadi_int j = 0;
1208  for (casadi_int i=0;i<output_offset.size();++i) {
1209  while (offset_deps<output_offset[i]) { offset_deps+=dep(j).size2();++j; }
1210  if (j>=n_dep()) j = n_dep()-1;
1211  if (output_offset[i]==offset_deps &&
1212  (i+1<output_offset.size()?output_offset[i+1]:size2()) ==
1213  offset_deps +dep(j).size2()) {
1214  // Aligned with vertcat dependency
1215  ret[i] = dep(j);
1216  }
1217  }
1218  }
1219  }
1220  return ret;
1221  }
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 1089 of file mx_node.cpp.

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

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 1241 of file mx_node.cpp.

1241  {
1242  if (nnz() == 0 || b.nnz() == 0) {
1243  return MX::zeros(Sparsity::kron(sparsity(), b.sparsity()));
1244  }
1245  return Kron::create(shared_from_this<MX>(), b);
1246  }
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)
Accessed by SparsityInterface.
Definition: sparsity.cpp:1466

References casadi::Kron::create(), casadi::Sparsity::kron(), casadi::MXNode::nnz(), 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 1248 of file mx_node.cpp.

1248  {
1249  if (nnz() == 0 || x.nnz() == 0) {
1250  return MX::zeros(Sparsity::kron_contract(sparsity(), x.sparsity(), inner));
1251  }
1252  return KronContract::create(shared_from_this<MX>(), x, inner);
1253  }
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:1510

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 617 of file mx_node.cpp.

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

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 1057 of file mx_node.cpp.

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

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 567 of file mx_node.cpp.

567  {
568  if (sparsity().is_orthonormal() && y.is_column() && y.is_dense()
569  && y.sparsity()==z.sparsity() && z.is_zero()) {
570  std::vector<casadi_int> perm = sparsity().permutation_vector();
571  MX nz = sparsity_cast(shared_from_this<MX>(), Sparsity::dense(nnz()));
572  return (nz*y)(perm);
573  }
574  // Get reference to transposed first argument
575  MX x = shared_from_this<MX>();
576 
577  casadi_assert(y.size2()==z.size2(),
578  "Dimension error x.mac(z). Got y=" + str(y.size2()) + " and z=" + z.dim() + ".");
579  casadi_assert(x.size1()==z.size1(),
580  "Dimension error x.mac(z). Got x=" + x.dim() + " and z=" + z.dim() + ".");
581  casadi_assert(y.size1()==x.size2(),
582  "Dimension error x.mac(z). Got y=" + str(y.size1()) + " and x" + x.dim() + ".");
583  return Multiplication::create(z, x, y, blas);
584  }
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
Recover the permutation vector p from the pattern of a permutation matrix.
Definition: sparsity.cpp:1407
static Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern.
Definition: sparsity.cpp:1041
bool is_column() const
Check whether the pattern is a column vector, i.e. size2() == 1.
Definition: sparsity.cpp:287

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 1140 of file mx_node.cpp.

1140  {
1141  if (sparsity_.is_empty()) return MX();
1142  return MX::create(new MMax(shared_from_this<MX>()));
1143  }
Sparsity sparsity_
The sparsity pattern.
Definition: mx_node.hpp:829
bool is_empty(bool both=false) const
Check whether the pattern has a zero dimension.
Definition: sparsity.cpp:146

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 1135 of file mx_node.cpp.

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

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 1015 of file mx_node.cpp.

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

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 1131 of file mx_node.cpp.

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

References casadi::MX::create().

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

◆ get_norm_2()

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

Definition at line 1123 of file mx_node.cpp.

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

References casadi::MX::create().

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

◆ get_norm_fro()

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

Definition at line 1119 of file mx_node.cpp.

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

References casadi::MX::create().

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

◆ get_norm_inf()

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

Definition at line 1127 of file mx_node.cpp.

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

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 688 of file mx_node.cpp.

688  {
689  return GetNonzerosParam::create(shared_from_this<MX>(), inner, outer);
690  }
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 672 of file mx_node.cpp.

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

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 680 of file mx_node.cpp.

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

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 752 of file mx_node.cpp.

752  {
753  if (inner.is_empty() || outer.is_empty() || is_zero()) {
754  return y;
755  } else {
756  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), inner, outer);
757  }
758  }
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 736 of file mx_node.cpp.

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

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 728 of file mx_node.cpp.

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

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 744 of file mx_node.cpp.

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

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 724 of file mx_node.cpp.

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

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 716 of file mx_node.cpp.

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

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 712 of file mx_node.cpp.

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

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 720 of file mx_node.cpp.

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

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::HorzRepmat, casadi::Project, casadi::GetNonzeros, casadi::Constant< Value >, casadi::ZeroByZero, and casadi::Concat.

Definition at line 661 of file mx_node.cpp.

661  {
662  if (sparsity().is_dense() && is_range(nz, 0, nnz())) {
663  return sparsity_cast(shared_from_this<MX>(), sp);
664  }
665  return GetNonzeros::create(sp, shared_from_this<MX>(), nz);
666  }
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::HorzRepmat::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 445 of file mx_node.cpp.

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

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 760 of file mx_node.cpp.

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

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 613 of file mx_node.cpp.

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

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 1223 of file mx_node.cpp.

1223  {
1224  if (n==1) {
1225  return MX::create(new HorzRepmat(shared_from_this<MX>(), m));
1226  } else {
1227  // Fallback to generic_matrix impl
1228  return GenericMatrix<MX>::repmat(shared_from_this<MX>(), n, m);
1229  }
1230  }
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 1232 of file mx_node.cpp.

1232  {
1233  if (n==1) {
1234  return MX::create(new HorzRepsum(shared_from_this<MX>(), m));
1235  } else {
1236  // Fallback to generic_matrix impl
1237  return GenericMatrix<MX>::repsum(shared_from_this<MX>(), n, m);
1238  }
1239  }
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::Reshape::get_reshape ( const Sparsity &  sp) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 103 of file reshape.cpp.

103  {
104  return reshape(dep(0), sp);
105  }

References casadi::MXNode::dep().

◆ 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 653 of file mx_node.cpp.

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

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 629 of file mx_node.cpp.

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

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 645 of file mx_node.cpp.

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

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 621 of file mx_node.cpp.

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

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 637 of file mx_node.cpp.

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

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 513 of file mx_node.cpp.

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

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 778 of file mx_node.cpp.

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

References casadi::MX::create().

◆ get_subref()

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

Definition at line 774 of file mx_node.cpp.

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

References casadi::MX::create().

◆ get_transpose()

MX casadi::Reshape::get_transpose ( ) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 107 of file reshape.cpp.

107  {
108  // For vectors, reshape is also a transpose
109  if (dep().is_vector() && sparsity().is_vector()) {
110  return dep();
111  } else {
112  return MXNode::get_transpose();
113  }
114  }
virtual MX get_transpose() const
Transpose.
Definition: mx_node.cpp:492

References casadi::MXNode::dep(), casadi::MXNode::get_transpose(), and casadi::MXNode::sparsity().

◆ 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 782 of file mx_node.cpp.

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

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 1171 of file mx_node.cpp.

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

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

210  {
211  return static_cast<const Internal*>(this)->count;
212  }

◆ has_duplicates()

bool casadi::Reshape::has_duplicates ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 162 of file reshape.cpp.

162  {
163  return dep()->has_duplicates();
164  }
virtual bool has_duplicates() const
Detect duplicate symbolic expressions.
Definition: mx_node.cpp:148

References casadi::MXNode::dep(), and casadi::MXNode::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]

bool casadi::Reshape::is_equal ( const MXNode *  node,
casadi_int  depth 
) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 132 of file reshape.hpp.

133  { return sameOpAndDeps(node, depth) && sparsity()==node->sparsity();}
bool sameOpAndDeps(const MXNode *node, casadi_int depth) const
Checks if two nodes have the same operation and have.
Definition: mx_node.cpp:1001

References casadi::MXNode::sparsity().

◆ 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 1318 of file mx_node.cpp.

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

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

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

bool casadi::Reshape::is_valid_input ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 116 of file reshape.cpp.

116  {
117  return dep()->is_valid_input();
118  }
virtual bool is_valid_input() const
Check if valid function input.
Definition: mx_node.hpp:269

References casadi::MXNode::dep(), and casadi::MXNode::is_valid_input().

◆ 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::Reshape::join_primitives ( std::vector< DM >::const_iterator &  it) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 158 of file reshape.cpp.

158  {
159  return join_primitives_gen<DM>(it);
160  }

◆ join_primitives() [2/3]

MX casadi::Reshape::join_primitives ( std::vector< MX >::const_iterator &  it) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 150 of file reshape.cpp.

150  {
151  return join_primitives_gen<MX>(it);
152  }

Referenced by join_primitives_gen().

◆ join_primitives() [3/3]

SX casadi::Reshape::join_primitives ( std::vector< SX >::const_iterator &  it) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 154 of file reshape.cpp.

154  {
155  return join_primitives_gen<SX>(it);
156  }

◆ join_primitives_gen()

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

Definition at line 146 of file reshape.cpp.

146  {
147  return reshape(dep()->join_primitives(it), size());
148  }
MX join_primitives(std::vector< MX >::const_iterator &it) const override
Join an expression along symbolic primitives.
Definition: reshape.cpp:150

References casadi::MXNode::dep(), join_primitives(), 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 997 of file mx_node.cpp.

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

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 checked for simplifications.
Definition: mx.cpp:945

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::Reshape::n_inplace ( ) const
inlineoverridevirtual

Reimplemented from casadi::MXNode.

Definition at line 124 of file reshape.hpp.

124 { return 1;}

◆ n_primitives()

casadi_int casadi::Reshape::n_primitives ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 120 of file reshape.cpp.

120  {
121  return dep()->n_primitives();
122  }
virtual casadi_int n_primitives() const
Get the number of symbolic primitives.
Definition: mx_node.cpp:144

References casadi::MXNode::dep(), and casadi::MXNode::n_primitives().

◆ 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 196 of file mx_node.cpp.

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

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
Number of structural nonzeros.
Definition: sparsity.cpp:150

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(), casadi::Dump::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(), eval_gen(), casadi::SparsityCast::eval_gen(), casadi::HorzRepsum::eval_gen(), casadi::Assertion::eval_sx(), casadi::Determinant::eval_sx(), casadi::Dump::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(), casadi::Dump::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::HorzRepmat::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(), casadi::Dump::sp_forward(), casadi::GetNonzerosParam::sp_forward(), casadi::Monitor::sp_forward(), casadi::Multiplication::sp_forward(), casadi::Rank1::sp_forward(), casadi::HorzRepsum::sp_forward(), 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(), casadi::Dump::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(), 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
Total number of entries, structural zeros included, i.e. size1()*size2()
Definition: sparsity.cpp:132

Referenced by casadi::ConstantMX::__nonzero__(), and casadi::orient_vector().

◆ offset()

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

◆ op()

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

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

Implements casadi::MXNode.

Definition at line 121 of file reshape.hpp.

121 { return OP_RESHAPE;}
@ OP_RESHAPE
Definition: calculus.hpp:142

References casadi::OP_RESHAPE.

◆ primitives()

void casadi::Reshape::primitives ( std::vector< MX >::iterator &  it) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 124 of file reshape.cpp.

124  {
125  dep()->primitives(it);
126  }
virtual void primitives(std::vector< MX >::iterator &it) const
Get symbolic primitives.
Definition: mx_node.cpp:156

References casadi::MXNode::dep(), and casadi::MXNode::primitives().

◆ 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 304 of file mx_node.cpp.

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

void casadi::Reshape::reset_input ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 166 of file reshape.cpp.

166  {
167  dep()->reset_input();
168  }
virtual void reset_input() const
Reset the marker for an input expression.
Definition: mx_node.cpp:152

References casadi::MXNode::dep(), and casadi::MXNode::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 1001 of file mx_node.cpp.

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

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 217 of file mx_node.cpp.

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

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 526 of file mx_node.cpp.

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

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

◆ serialize_body()

void casadi::MXNode::serialize_body ( SerializingStream &  s) const
virtualinherited

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

Reimplemented in casadi::UnaryMX, casadi::SymbolicMX, casadi::Split, casadi::LinsolCall< Tr >, casadi::Solve< Tr >, casadi::SetNonzerosSliceParam< Add >, casadi::SetNonzerosParamSlice< Add >, casadi::SetNonzerosParamVector< Add >, casadi::SetNonzerosSlice2< Add >, casadi::SetNonzerosSlice< Add >, casadi::SetNonzerosVector< Add >, casadi::HorzRepsum, casadi::HorzRepmat, casadi::PseudoDenseMultiplication, casadi::Multiplication, casadi::OutputNode, casadi::Monitor, casadi::KronContract, casadi::IOInstruction, casadi::GetNonzerosParamSlice, casadi::GetNonzerosSliceParam, casadi::GetNonzerosParamVector, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Einstein, casadi::Dump, casadi::Determinant, casadi::Convexify, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, casadi::ConstantDM, casadi::Low, casadi::Call, casadi::BSpline, casadi::BSplineCommon, casadi::BinaryMX< ScX, ScY >, and casadi::Assertion.

Definition at line 531 of file mx_node.cpp.

531  {
532  s.pack("MXNode::deps", dep_);
533  s.pack("MXNode::sp", sparsity_);
534  }

References casadi::MXNode::dep_, casadi::SerializingStream::pack(), and casadi::MXNode::sparsity_.

Referenced by casadi::MXNode::serialize(), casadi::Assertion::serialize_body(), casadi::BinaryMX< ScX, ScY >::serialize_body(), casadi::BSplineCommon::serialize_body(), casadi::Call::serialize_body(), casadi::Low::serialize_body(), casadi::ConstantDM::serialize_body(), casadi::ConstantFile::serialize_body(), casadi::ConstantPool::serialize_body(), casadi::Constant< Value >::serialize_body(), casadi::Convexify::serialize_body(), casadi::Determinant::serialize_body(), casadi::Dump::serialize_body(), casadi::Einstein::serialize_body(), casadi::GetNonzerosVector::serialize_body(), casadi::GetNonzerosSlice::serialize_body(), casadi::GetNonzerosSlice2::serialize_body(), casadi::GetNonzerosParamVector::serialize_body(), casadi::GetNonzerosSliceParam::serialize_body(), casadi::GetNonzerosParamSlice::serialize_body(), casadi::IOInstruction::serialize_body(), casadi::KronContract::serialize_body(), casadi::Monitor::serialize_body(), casadi::OutputNode::serialize_body(), casadi::Multiplication::serialize_body(), casadi::HorzRepmat::serialize_body(), casadi::HorzRepsum::serialize_body(), casadi::SetNonzerosVector< Add >::serialize_body(), casadi::SetNonzerosSlice< Add >::serialize_body(), casadi::SetNonzerosSlice2< Add >::serialize_body(), casadi::SetNonzerosParamVector< Add >::serialize_body(), casadi::SetNonzerosParamSlice< Add >::serialize_body(), casadi::SetNonzerosSliceParam< Add >::serialize_body(), casadi::Solve< Tr >::serialize_body(), casadi::Split::serialize_body(), casadi::SymbolicMX::serialize_body(), and casadi::UnaryMX::serialize_body().

◆ 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 536 of file mx_node.cpp.

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

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 235 of file mx_node.cpp.

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

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 242 of file mx_node.cpp.

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

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 250 of file mx_node.cpp.

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

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

Definition at line 430 of file mx_node.hpp.

430 { return sparsity().size();}
std::pair< casadi_int, casadi_int > size() const
Shape as a pair (number of rows, number of columns)
Definition: sparsity.cpp:154

Referenced by casadi::MXNode::_get_binary(), ad_forward(), ad_reverse(), eval_mx(), casadi::MXNode::get_binary(), casadi::MXNode::join_primitives_gen(), join_primitives_gen(), and split_primitives_gen().

◆ size1()

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

◆ size2()

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

◆ sp_forward()

int casadi::Reshape::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_1dn

Reimplemented from casadi::MXNode.

Definition at line 51 of file reshape.cpp.

51  {
52  copy_fwd(arg[0], res[0], nnz());
53  return 0;
54  }
static void copy_fwd(const bvec_t *arg, bvec_t *res, casadi_int len)
Propagate sparsities forward through a copy operation.
Definition: mx_node.cpp:1303

References casadi::MXNode::copy_fwd(), and casadi::MXNode::nnz().

◆ sp_reverse()

int casadi::Reshape::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_1do

Reimplemented from casadi::MXNode.

Definition at line 56 of file reshape.cpp.

56  {
57  copy_rev(arg[0], res[0], nnz());
58  return 0;
59  }
static void copy_rev(bvec_t *arg, bvec_t *res, casadi_int len)
Propagate sparsities backwards through a copy operation.
Definition: mx_node.cpp:1309

References casadi::MXNode::copy_rev(), and 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(), disp(), casadi::SparsityCast::disp(), casadi::Dump::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(), casadi::Dump::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(), 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(), 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::MXNode::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 265 of file mx_node.cpp.

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

References casadi::MXNode::sparsity_.

◆ split_primitives() [1/3]

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

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

Reimplemented from casadi::MXNode.

Definition at line 141 of file reshape.cpp.

141  {
142  split_primitives_gen<DM>(x, it);
143  }

◆ split_primitives() [2/3]

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

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

Reimplemented from casadi::MXNode.

Definition at line 133 of file reshape.cpp.

133  {
134  split_primitives_gen<MX>(x, it);
135  }

◆ split_primitives() [3/3]

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

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

Reimplemented from casadi::MXNode.

Definition at line 137 of file reshape.cpp.

137  {
138  split_primitives_gen<SX>(x, it);
139  }

◆ split_primitives_gen()

template<typename T >
void casadi::Reshape::split_primitives_gen ( const T &  x,
typename std::vector< T >::iterator &  it 
) const

Definition at line 129 of file reshape.cpp.

129  {
130  dep()->split_primitives(reshape(x, dep().size()), it);
131  }
virtual void split_primitives(const MX &x, std::vector< MX >::iterator &it) const
Split up an expression along symbolic primitives.
Definition: mx_node.cpp:160

References casadi::MXNode::dep(), casadi::MXNode::size(), and casadi::MXNode::split_primitives().

◆ 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 480 of file mx_node.cpp.

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

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 484 of file mx_node.cpp.

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

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.

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

◆ 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 333 of file mx_node.cpp.

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

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 337 of file mx_node.cpp.

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

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: