List of all members | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions
casadi::BSplineCommon Class Referenceabstract

BSpline Node. More...

#include <bspline.hpp>

Detailed Description

Author
Joris Gillis
Date
2017-2019

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

Definition at line 42 of file bspline.hpp.

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

Public Types

using weak_ref_type = WeakRefInternal
 

Public Member Functions

 BSplineCommon (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)
 Constructor. More...
 
 ~BSplineCommon () override
 Destructor. More...
 
virtual MX jac_cached () const =0
 
size_t sz_iw () const override
 Get required length of iw field. More...
 
size_t sz_w () const override
 Get required length of w field. More...
 
casadi_int op () const override
 Get the operation. 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...
 
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...
 
virtual std::string generate (CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< bool > &arg_is_ref) const =0
 Generate code for the operation. More...
 
template<class T >
MX jac (const MX &x, const T &coeffs) const
 
void serialize_body (SerializingStream &s) const override
 Serialize an object without type information. More...
 
virtual bool __nonzero__ () const
 Check the truth value of this node. More...
 
virtual bool is_zero () const
 Check if identically zero. More...
 
virtual bool is_one () const
 Check if identically one. More...
 
virtual bool is_minus_one () const
 Check if identically minus one. More...
 
virtual bool is_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...
 
virtual std::string disp (const std::vector< std::string > &arg) const =0
 Print expression. 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
 
virtual int eval (const double **arg, double **res, casadi_int *iw, double *w) const
 Evaluate numerically. More...
 
virtual int eval_sx (const SXElem **arg, SXElem **res, casadi_int *iw, SXElem *w) const
 Evaluate symbolically (SX) More...
 
virtual void eval_mx (const std::vector< MX > &arg, std::vector< MX > &res) const
 Evaluate symbolically (MX) More...
 
virtual void eval_linear (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_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 int sp_forward (const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const
 Propagate sparsity forward. More...
 
virtual int sp_reverse (bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const
 Propagate sparsity backwards. More...
 
virtual const std::string & name () const
 Get the name. More...
 
std::string class_name () const override
 Get name of public class. More...
 
virtual bool is_valid_input () const
 Check if valid function input. More...
 
virtual casadi_int n_primitives () const
 Get the number of symbolic primitives. More...
 
virtual void primitives (std::vector< MX >::iterator &it) const
 Get symbolic primitives. More...
 
template<typename T >
join_primitives_gen (typename std::vector< T >::const_iterator &it) const
 Join an expression along symbolic primitives (template) More...
 
virtual bool has_duplicates () const
 Detect duplicate symbolic expressions. More...
 
virtual void reset_input () const
 Reset the marker for an input expression. More...
 
virtual bool is_output () const
 Check if evaluation output. More...
 
virtual bool has_output () const
 Check if a multiple output node. More...
 
virtual casadi_int which_output () const
 Get function output. More...
 
virtual const Functionwhich_function () const
 Get called function. More...
 
virtual Dict info () const
 
void serialize (SerializingStream &s) const
 Serialize an object. More...
 
virtual void serialize_type (SerializingStream &s) const
 Serialize type information. More...
 
virtual bool is_equal (const MXNode *node, casadi_int depth) const
 
bool sameOpAndDeps (const MXNode *node, casadi_int depth) const
 Checks if two nodes have the same operation and have. More...
 
const MXdep (casadi_int ind=0) const
 dependencies - functions that have to be evaluated before this one More...
 
casadi_int n_dep () const
 Number of dependencies. More...
 
virtual casadi_int nout () const
 Number of outputs. More...
 
virtual MX get_output (casadi_int oind) const
 Get an output. More...
 
const Sparsitysparsity () const
 Get the sparsity. More...
 
virtual const Sparsitysparsity (casadi_int oind) const
 Get the sparsity of output oind. More...
 
template<class T >
bool matches_sparsity (const std::vector< T > &arg) const
 
casadi_int numel () const
 Get shape. More...
 
casadi_int nnz (casadi_int i=0) const
 
casadi_int size1 () const
 
casadi_int size2 () const
 
std::pair< casadi_int, casadi_int > size () const
 
virtual casadi_int ind () const
 
virtual casadi_int segment () const
 
virtual casadi_int offset () const
 
void set_sparsity (const Sparsity &sparsity)
 Set the sparsity. More...
 
virtual size_t sz_arg () const
 Get required length of arg field. More...
 
virtual size_t sz_res () const
 Get required length of res field. More...
 
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 DM get_DM () const
 Get the value (only for constant nodes) More...
 
virtual casadi_int n_inplace () const
 Can the operation be performed inplace (i.e. overwrite the result) More...
 
virtual Matrix< casadi_int > mapping () const
 Get an IM representation of a GetNonzeros or SetNonzeros node. More...
 
virtual MX get_horzcat (const std::vector< MX > &x) const
 Create a horizontal concatenation node. More...
 
virtual std::vector< MXget_horzsplit (const std::vector< casadi_int > &output_offset) const
 Create a horizontal split node. More...
 
virtual MX get_repmat (casadi_int m, casadi_int n) const
 Create a repeated matrix node. More...
 
virtual MX get_repsum (casadi_int m, casadi_int n) const
 Create a repeated sum node. More...
 
virtual MX get_vertcat (const std::vector< MX > &x) const
 Create a vertical concatenation node (vectors only) More...
 
virtual std::vector< MXget_vertsplit (const std::vector< casadi_int > &output_offset) const
 Create a vertical split node (vectors only) More...
 
virtual MX get_diagcat (const std::vector< MX > &x) const
 Create a diagonal concatenation node. More...
 
virtual std::vector< MXget_diagsplit (const std::vector< casadi_int > &offset1, const std::vector< casadi_int > &offset2) const
 Create a diagonal split node. More...
 
virtual MX get_transpose () const
 Transpose. More...
 
virtual MX get_reshape (const Sparsity &sp) const
 Reshape. More...
 
virtual MX get_sparsity_cast (const Sparsity &sp) const
 Sparsity cast. More...
 
virtual MX get_mac (const MX &y, const MX &z) const
 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) 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) const
 Create set sparse. More...
 
virtual MX get_unary (casadi_int op) const
 Get a unary operation. More...
 
MX get_binary (casadi_int op, const MX &y) const
 Get a binary operation operation. More...
 
virtual MX _get_binary (casadi_int op, const MX &y, bool scX, bool scY) const
 Get a binary operation operation (matrix-matrix) More...
 
virtual MX get_det () 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_find () const
 Find. More...
 
MX get_low (const MX &v, const Dict &options) const
 Find. More...
 
MX get_bspline (const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< double > &coeffs, const std::vector< casadi_int > &degree, casadi_int m, const std::vector< casadi_int > &lookup_mode) const
 BSpline. More...
 
MX get_bspline (const MX &coeffs, const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, casadi_int m, const std::vector< casadi_int > &lookup_mode) const
 BSpline. More...
 
MX get_convexify (const Dict &opts) const
 Convexify. More...
 
casadi_int getCount () const
 Get the reference count. More...
 
std::string debug_repr (const SharedObjectInternal *) const
 
GenericWeakRef< SharedObject, SharedObjectInternal > * weak ()
 Get a weak reference to the object. More...
 
virtual void split_primitives (const MX &x, std::vector< MX >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual void split_primitives (const SX &x, std::vector< SX >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual void split_primitives (const DM &x, std::vector< DM >::iterator &it) const
 Split up an expression along symbolic primitives. More...
 
virtual MX join_primitives (std::vector< MX >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 
virtual SX join_primitives (std::vector< SX >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 
virtual DM join_primitives (std::vector< DM >::const_iterator &it) const
 Join an expression along symbolic primitives. More...
 

Static Public Member Functions

static void prepare (casadi_int m, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, casadi_int &coeffs_size, std::vector< casadi_int > &coeffs_dims, std::vector< casadi_int > &strides)
 
static casadi_int get_coeff_size (casadi_int m, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree)
 
template<class M >
static M derivative_coeff (casadi_int i, const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, const std::vector< casadi_int > &coeffs_dims, const M &coeffs, std::vector< std::vector< double > > &new_knots, std::vector< casadi_int > &new_degree)
 
static size_t n_iw (const std::vector< casadi_int > &degree)
 Get required length of iw field. More...
 
static size_t n_w (const std::vector< casadi_int > &degree)
 Get required length of w field. More...
 
static MXNodedeserialize (DeserializingStream &s)
 Deserialize without type information. More...
 
static bool is_equal (const MXNode *x, const MXNode *y, casadi_int depth)
 Check if two nodes are equivalent up to a given depth. More...
 
static bool maxDepth ()
 Get equality checking depth. More...
 
static MX to_matrix (const MX &x, const Sparsity &sp)
 Convert scalar to matrix. More...
 
static void copy_fwd (const bvec_t *arg, bvec_t *res, casadi_int len)
 Propagate sparsities forward through a copy operation. More...
 
static void copy_rev (bvec_t *arg, bvec_t *res, casadi_int len)
 Propagate sparsities backwards through a copy operation. More...
 

Public Attributes

std::vector< double > knots_
 
std::vector< casadi_int > offset_
 
std::vector< casadi_int > degree_
 
casadi_int m_
 
std::vector< casadi_int > lookup_mode_
 
std::vector< casadi_int > strides_
 
std::vector< casadi_int > coeffs_dims_
 
casadi_int coeffs_size_
 
MX jac_cache_
 Jacobian. More...
 
casadi_int temp
 
std::vector< MXdep_
 dependencies - functions that have to be evaluated before this one More...
 
Sparsity sparsity_
 The sparsity pattern. More...
 

Static Public Attributes

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

Protected Member Functions

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

Member Typedef Documentation

◆ weak_ref_type

Definition at line 152 of file shared_object.hpp.

Constructor & Destructor Documentation

◆ BSplineCommon() [1/2]

casadi::BSplineCommon::BSplineCommon ( 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 
)

Definition at line 44 of file bspline.cpp.

48  :
49  knots_(knots), offset_(offset), degree_(degree),
50  m_(m), lookup_mode_(lookup_mode) {
52  }
std::vector< casadi_int > lookup_mode_
Definition: bspline.hpp:76
std::vector< double > knots_
Definition: bspline.hpp:72
std::vector< casadi_int > degree_
Definition: bspline.hpp:74
std::vector< casadi_int > offset_
Definition: bspline.hpp:73
casadi_int coeffs_size_
Definition: bspline.hpp:81
std::vector< casadi_int > coeffs_dims_
Definition: bspline.hpp:80
static void prepare(casadi_int m, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, casadi_int &coeffs_size, std::vector< casadi_int > &coeffs_dims, std::vector< casadi_int > &strides)
Definition: bspline.cpp:90
std::vector< casadi_int > strides_
Definition: bspline.hpp:79
virtual casadi_int offset() const
Definition: mx_node.cpp:218

References coeffs_dims_, coeffs_size_, degree_, m_, offset_, prepare(), and strides_.

◆ ~BSplineCommon()

casadi::BSplineCommon::~BSplineCommon ( )
inlineoverride

Definition at line 53 of file bspline.hpp.

53 {}

◆ BSplineCommon() [2/2]

casadi::BSplineCommon::BSplineCommon ( DeserializingStream s)
explicitprotected

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

Definition at line 131 of file bspline.cpp.

131  : MXNode(s) {
132  s.unpack("BSplineCommon::knots", knots_);
133  s.unpack("BSplineCommon::offset", offset_);
134  s.unpack("BSplineCommon::degree", degree_);
135  s.unpack("BSplineCommon::m", m_);
136  s.unpack("BSplineCommon::lookup_mode", lookup_mode_);
137  s.unpack("BSplineCommon::strides", strides_);
138  s.unpack("BSplineCommon::coeffs_dims", coeffs_dims_);
139  s.unpack("BSplineCommon::coeffs_size", coeffs_size_);
140  s.unpack("BSplineCommon::jac_cache_", jac_cache_);
141  }
MX jac_cache_
Jacobian.
Definition: bspline.hpp:89
MXNode()
Constructor.
Definition: mx_node.cpp:77

References coeffs_dims_, coeffs_size_, degree_, jac_cache_, knots_, lookup_mode_, m_, offset_, strides_, and casadi::DeserializingStream::unpack().

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

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

◆ _get_binary()

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

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

Definition at line 843 of file mx_node.cpp.

843  {
844  casadi_assert_dev(sparsity()==y.sparsity() || scX || scY);
845 
847 
848  // If identically zero due to one argument being zero
849  if ((operation_checker<F0XChecker>(op) && nnz()==0) ||
850  (operation_checker<FX0Checker>(op) && y->nnz()==0)) {
851  return MX::zeros(Sparsity(size()));
852  }
853 
854  if ((operation_checker<F0XChecker>(op) && is_zero()) ||
855  (operation_checker<FX0Checker>(op) && y->is_zero())) {
856  return MX::zeros(sparsity());
857  }
858 
859  // Handle special operations (independent of type)
860  switch (op) {
861  case OP_ADD:
862  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_TWICE);
863  break;
864  case OP_SUB:
865  case OP_NE:
866  case OP_LT:
867  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::zeros(sparsity());
868  break;
869  case OP_DIV:
870  if (y->is_zero()) return MX::nan(sparsity());
871  // fall-through
872  case OP_EQ:
873  case OP_LE:
874  if (MXNode::is_equal(y.get(), this, maxDepth())) return MX::ones(sparsity());
875  break;
876  case OP_MUL:
877  if (MXNode::is_equal(y.get(), this, maxDepth())) return get_unary(OP_SQ);
878  break;
879  default: break; // no rule
880  }
881 
882  // Handle special cases for the second argument
883  switch (y->op()) {
884  case OP_CONST:
885  // Make the constant the first argument, if possible
886  if (this->op()!=OP_CONST && operation_checker<CommChecker>(op)) {
887  return y->_get_binary(op, shared_from_this<MX>(), scY, scX);
888  } else {
889  switch (op) {
890  case OP_POW:
891  return _get_binary(OP_CONSTPOW, y, scX, scY);
892  case OP_CONSTPOW:
893  if (y->is_value(-1)) return get_unary(OP_INV);
894  else if (y->is_value(0)) return MX::ones(size());
895  else if (y->is_value(1)) return shared_from_this<MX>();
896  else if (y->is_value(2)) return get_unary(OP_SQ);
897  break;
898  case OP_ADD:
899  case OP_SUB:
900  if (y->is_zero())
901  return scX ? repmat(shared_from_this<MX>(), y.size()) : shared_from_this<MX>();
902  break;
903  case OP_MUL:
904  if (y->is_value(1)) return shared_from_this<MX>();
905  break;
906  case OP_DIV:
907  if (y->is_value(1)) return shared_from_this<MX>();
908  else if (y->is_value(0.5)) return get_unary(OP_TWICE);
909  break;
910  default: break; // no rule
911  }
912  }
913  break;
914  case OP_NEG:
915  if (op==OP_ADD) {
916  return _get_binary(OP_SUB, y->dep(), scX, scY);
917  } else if (op==OP_SUB) {
918  return _get_binary(OP_ADD, y->dep(), scX, scY);
919  } else if (op==OP_MUL) {
920  return -_get_binary(OP_MUL, y->dep(), scX, scY);
921  } else if (op==OP_DIV) {
922  return -_get_binary(OP_DIV, y->dep(), scX, scY);
923  }
924  break;
925  case OP_INV:
926  if (op==OP_MUL) {
927  return _get_binary(OP_DIV, y->dep(), scX, scY);
928  } else if (op==OP_DIV) {
929  return _get_binary(OP_MUL, y->dep(), scX, scY);
930  }
931  break;
932  default: break; // no rule
933  }
934 
935  }
936 
937  if (scX) {
938  // Check if it is ok to loop over nonzeros only
939  if (y.is_dense() || operation_checker<FX0Checker>(op) ||
940  (is_zero() && operation_checker<F00Checker>(op))) {
941  // Loop over nonzeros
942  return MX::create(new BinaryMX<true, false>(Operation(op), shared_from_this<MX>(), y));
943  } else {
944  // Put a densification node in between
945  return _get_binary(op, densify(y), true, false);
946  }
947  } else if (scY) {
948  // Check if it is ok to loop over nonzeros only
949  if (sparsity().is_dense() || operation_checker<F0XChecker>(op) ||
950  (y.is_zero() && operation_checker<F00Checker>(op)) ||
951  (y.is_constant() && static_cast<double>(y)>0 && (op==OP_CONSTPOW || op==OP_POW))) {
952  // Loop over nonzeros
953  return MX::create(new BinaryMX<false, true>(Operation(op), shared_from_this<MX>(), y));
954  } else {
955  // Put a densification node in between
956  return densify(shared_from_this<MX>())->_get_binary(op, y, false, true);
957  }
958  } else {
959  // Loop over nonzeros only
960  MX rr = MX::create(new BinaryMX<false, false>(Operation(op), shared_from_this<MX>(), y));
961 
962  // Handle structural zeros giving rise to nonzero result, e.g. cos(0) == 1
963  if (!rr.is_dense() && !operation_checker<F00Checker>(op)) {
964  // Get the value for the structural zeros
965  double fcn_0(0);
966  casadi_math<double>::fun(op, 0, 0, fcn_0);
967  rr = densify(rr, fcn_0);
968  }
969  return rr;
970  }
971  }
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:1256
friend class MX
Definition: mx_node.hpp:52
static bool maxDepth()
Get equality checking depth.
Definition: mx_node.hpp:342
std::pair< casadi_int, casadi_int > size() const
Definition: mx_node.hpp:392
virtual MX get_unary(casadi_int op) const
Get a unary operation.
Definition: mx_node.cpp:778
const Sparsity & sparsity() const
Get the sparsity.
Definition: mx_node.hpp:372
casadi_int nnz(casadi_int i=0) const
Definition: mx_node.hpp:389
virtual casadi_int op() const =0
Get the operation.
virtual MX _get_binary(casadi_int op, const MX &y, bool scX, bool scY) const
Get a binary operation operation (matrix-matrix)
Definition: mx_node.cpp:843
static MX create(MXNode *node)
Create from node.
Definition: mx.cpp:67
static MX nan(const Sparsity &sp)
create a matrix with all nan
Definition: mx.cpp:576
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:1289

References casadi::MXNode::_get_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::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::BSplineCommon::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_1yk

Reimplemented from casadi::MXNode.

Definition at line 378 of file bspline.cpp.

379  {
380  MX J = jac_cached();
381 
382  for (casadi_int d=0; d<fsens.size(); ++d) {
383  fsens[d][0] = mtimes(J, fseed[d][0]);
384  }
385  }
virtual MX jac_cached() const =0

References jac_cached().

◆ ad_reverse()

void casadi::BSplineCommon::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_1yl

Reimplemented from casadi::MXNode.

Definition at line 387 of file bspline.cpp.

388  {
389  MX JT = jac_cached().T();
390  for (casadi_int d=0; d<aseed.size(); ++d) {
391  asens[d][0] += mtimes(JT, aseed[d][0]);
392  }
393  }
MX T() const
Transpose the matrix.
Definition: mx.cpp:1029

References jac_cached(), and casadi::MX::T().

◆ add_dependency()

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

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

Reimplemented in casadi::ConstantPool, casadi::ConstantFile, and casadi::Call.

Definition at line 122 of file mx_node.hpp.

122 {}

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

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

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

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

Reimplemented in casadi::Call.

Definition at line 137 of file mx_node.hpp.

137 {}

◆ 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, and casadi::Call.

Definition at line 132 of file mx_node.hpp.

132 {}

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

1241  {
1242  if (arg!=res) {
1243  std::copy(arg, arg+len, res);
1244  }
1245  }

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

◆ copy_rev()

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

◆ debug_repr()

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

Definition at line 62 of file generic_shared_internal.hpp.

162  {
163  // Note: i != this because of something something multiple inheritance
164  return str( (casadi_int)(i)) + "/" + static_cast<const Internal*>(this)->class_name();
165  }
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 354 of file mx_node.hpp.

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

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::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::LogSumExp::ad_reverse(), casadi::MMin::ad_reverse(), casadi::MMax::ad_reverse(), casadi::Multiplication::ad_reverse(), casadi::NormF::ad_reverse(), casadi::Norm1::ad_reverse(), casadi::NormInf::ad_reverse(), casadi::Project::ad_reverse(), casadi::Rank1::ad_reverse(), casadi::Reshape::ad_reverse(), casadi::SparsityCast::ad_reverse(), casadi::UnaryMX::ad_reverse(), casadi::MXNode::can_inline(), casadi::MX::dep(), casadi::Reshape::disp(), casadi::Find::eval(), casadi::Low::eval(), casadi::GetNonzerosParamVector::eval(), casadi::GetNonzerosSliceParam::eval(), casadi::GetNonzerosParamSlice::eval(), casadi::GetNonzerosParamParam::eval(), casadi::MMin::eval(), casadi::MMax::eval(), casadi::Bilin::eval_gen(), casadi::Dot::eval_gen(), casadi::Einstein::eval_gen(), casadi::LogSumExp::eval_gen(), casadi::Multiplication::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::GetNonzeros::eval_mx(), casadi::GetNonzerosParamVector::eval_mx(), casadi::GetNonzerosSliceParam::eval_mx(), casadi::GetNonzerosParamSlice::eval_mx(), casadi::GetNonzerosParamParam::eval_mx(), 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::Dot::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::LogSumExp::generate(), casadi::MMin::generate(), casadi::MMax::generate(), casadi::Monitor::generate(), casadi::Multiplication::generate(), casadi::DenseMultiplication::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::SparsityCast::get_nzref(), casadi::Reshape::get_reshape(), casadi::SparsityCast::get_reshape(), casadi::SparsityCast::get_sparsity_cast(), casadi::Reshape::get_transpose(), casadi::SparsityCast::get_transpose(), casadi::UnaryMX::get_unary(), casadi::Vertsplit::get_vertcat(), casadi::MXNode::get_vertsplit(), casadi::Concat::has_duplicates(), casadi::Reshape::has_duplicates(), casadi::SparsityCast::has_duplicates(), casadi::BinaryMX< ScX, ScY >::is_equal(), casadi::Concat::is_valid_input(), casadi::Reshape::is_valid_input(), casadi::SparsityCast::is_valid_input(), casadi::BSpline::jac_cached(), casadi::BSplineParametric::jac_cached(), casadi::Horzcat::join_primitives_gen(), casadi::Vertcat::join_primitives_gen(), casadi::Diagcat::join_primitives_gen(), casadi::Reshape::join_primitives_gen(), casadi::SparsityCast::join_primitives_gen(), casadi::Concat::n_primitives(), casadi::Reshape::n_primitives(), casadi::SparsityCast::n_primitives(), casadi::Horzcat::off(), casadi::Vertcat::off(), casadi::Diagcat::off(), casadi::MX::operator-(), casadi::OutputNode::OutputNode(), casadi::Concat::primitives(), casadi::Reshape::primitives(), casadi::SparsityCast::primitives(), casadi::MXFunction::print_arg(), casadi::MXNode::print_compact(), casadi::Concat::reset_input(), casadi::Reshape::reset_input(), casadi::SparsityCast::reset_input(), casadi::MXNode::sameOpAndDeps(), casadi::MXNode::set_dep(), casadi::MXNode::sp_forward(), casadi::Bilin::sp_forward(), casadi::Concat::sp_forward(), casadi::Dot::sp_forward(), casadi::GetNonzerosParam::sp_forward(), casadi::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::Multiplication::sp_reverse(), casadi::Project::sp_reverse(), casadi::HorzRepmat::sp_reverse(), casadi::Transpose::sp_reverse(), casadi::DenseTranspose::sp_reverse(), casadi::Horzcat::split_primitives_gen(), casadi::Vertcat::split_primitives_gen(), casadi::Diagcat::split_primitives_gen(), casadi::Reshape::split_primitives_gen(), casadi::SparsityCast::split_primitives_gen(), casadi::GetNonzerosParamSlice::sz_iw(), and casadi::GetNonzerosParamParam::sz_iw().

◆ derivative_coeff()

template<class M >
M casadi::BSplineCommon::derivative_coeff ( casadi_int  i,
const std::vector< double > &  knots,
const std::vector< casadi_int > &  offset,
const std::vector< casadi_int > &  degree,
const std::vector< casadi_int > &  coeffs_dims,
const M &  coeffs,
std::vector< std::vector< double > > &  new_knots,
std::vector< casadi_int > &  new_degree 
)
static

Definition at line 36 of file bspline_impl.hpp.

42  {
43  casadi_int n_dims = degree.size();
44 
45  casadi_int n_knots = offset[i+1]-offset[i];
46  casadi_int n = n_knots-degree[i]-1;
47  DM K = std::vector<double>(get_ptr(knots)+offset[i], get_ptr(knots)+offset[i+1]);
48  DM delta_knots = K(range(1+degree[i], n_knots-1))
49  - K(range(1, n_knots-degree[i]-1));
50  Sparsity sp_diag = vertsplit(Sparsity::diag(n), {0, n-1, n})[0];
51  Sparsity sp_band = vertsplit(Sparsity::band(n, -1), {0, n-1, n})[0];
52  DM delta_knots_inv = 1/delta_knots;
53  DM T = DM(sp_diag, -delta_knots_inv) + DM(sp_band, delta_knots_inv);
54  T*= degree[i];
55 
56  std::vector<casadi_int> coeffs_dims_new = coeffs_dims;
57  coeffs_dims_new[i+1] = T.size1();
58 
59  // Apply transformation T on axis i
60 
61  // Bring axis i to the back
62  std::vector<casadi_int> order = range(n_dims+1);
63  std::swap(order.back(), order[i+1]);
64  std::vector<casadi_int> mapping = tensor_permute_mapping(coeffs_dims, order);
65  M coeff_matrix = coeffs.nz(mapping); // NOLINT(cppcoreguidelines-slicing)
66 
67  // Cast as matrix
68  coeff_matrix = reshape(coeff_matrix, -1, T.size2());
69 
70  // Apply the transformation matrix from the right
71  coeff_matrix = mtimes(coeff_matrix, T.T());
72 
73  // Bring axis i back to the original place
74  mapping = tensor_permute_mapping(permute(coeffs_dims_new, order), order);
75  coeff_matrix = coeff_matrix.nz(mapping); // NOLINT(cppcoreguidelines-slicing)
76 
77  new_knots.clear();
78  new_degree.clear();
79  for (casadi_int k=0;k<degree.size();++k) {
80  if (i==k) {
81  new_knots.push_back(
82  std::vector<double>(get_ptr(knots)+offset[k]+1, get_ptr(knots)+offset[k+1]-1));
83  new_degree.push_back(degree[k]-1);
84  } else {
85  new_knots.push_back(
86  std::vector<double>(get_ptr(knots)+offset[k], get_ptr(knots)+offset[k+1]));
87  new_degree.push_back(degree[k]);
88  }
89  }
90 
91  // Return the flat vector
92  return coeff_matrix;
93  }
virtual Matrix< casadi_int > mapping() const
Get an IM representation of a GetNonzeros or SetNonzeros node.
Definition: mx_node.cpp:973
static Sparsity diag(casadi_int nrow)
Create diagonal sparsity pattern *.
Definition: sparsity.hpp:190
static Sparsity band(casadi_int n, casadi_int p)
Create a single band in a square sparsity pattern.
Definition: sparsity.cpp:1070
std::vector< casadi_int > range(casadi_int start, casadi_int stop, casadi_int step, casadi_int len)
Range function.
std::vector< casadi_int > tensor_permute_mapping(const std::vector< casadi_int > &dims, const std::vector< casadi_int > &order)
Computes a mapping for a (dense) tensor permutation.
T * get_ptr(std::vector< T > &v)
Get a pointer to the data contained in the vector.
Matrix< double > DM
Definition: dm_fwd.hpp:33
std::vector< T > permute(const std::vector< T > &a, const std::vector< casadi_int > &order)
permute a list

References casadi::Sparsity::band(), casadi::Sparsity::diag(), casadi::get_ptr(), casadi::MXNode::mapping(), casadi::MXNode::offset(), casadi::permute(), casadi::range(), casadi::T, and casadi::tensor_permute_mapping().

Referenced by casadi::BlazingSplineFunction::get_jacobian(), and jac().

◆ deserialize()

MXNode * casadi::BSplineCommon::deserialize ( DeserializingStream s)
static

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

Definition at line 30 of file bspline.cpp.

30  {
31  char t;
32  s.unpack("BSpline::type", t);
33  switch (t) {
34  case 'n':
35  return new BSpline(s);
36  case 'p':
37  return new BSplineParametric(s);
38  default:
39  casadi_error("Unknown BSpline type");
40  }
41  }

References casadi::DeserializingStream::unpack().

◆ 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]

virtual std::string casadi::MXNode::disp ( const std::vector< std::string > &  arg) const
pure virtualinherited

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

Implemented in casadi::UnaryMX, casadi::Transpose, casadi::SymbolicMX, casadi::SubRef, casadi::SubAssign, casadi::Vertsplit, casadi::Diagsplit, casadi::Horzsplit, casadi::SparsityCast, 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::Reshape, casadi::HorzRepsum, casadi::HorzRepmat, casadi::Rank1, casadi::Project, casadi::NormInf, casadi::Norm1, casadi::Norm2, casadi::NormF, casadi::Multiplication, casadi::OutputNode, casadi::Monitor, casadi::MMax, casadi::MMin, casadi::LogSumExp, casadi::Output, casadi::Input, casadi::Inverse, casadi::GetNonzerosParamParam, casadi::GetNonzerosParamSlice, casadi::GetNonzerosSliceParam, casadi::GetNonzerosParamVector, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Einstein, casadi::Dot, casadi::Determinant, casadi::Convexify, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, casadi::ConstantDM, casadi::Diagcat, casadi::Vertcat, casadi::Horzcat, casadi::Low, casadi::Find, casadi::Call, casadi::BSplineParametric, casadi::BSpline, casadi::BinaryMX< ScX, ScY >, casadi::Bilin, and casadi::Assertion.

Referenced by casadi::MXFunction::print(), casadi::MXNode::print_compact(), and casadi::MX::print_operator().

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

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

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

◆ eval()

int casadi::MXNode::eval ( const double **  arg,
double **  res,
casadi_int *  iw,
double *  w 
) const
virtualinherited

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

Reimplemented in casadi::ConstantMX, casadi::UnaryMX, casadi::DenseTranspose, casadi::Transpose, casadi::SymbolicMX, casadi::SubRef, casadi::SubAssign, casadi::Split, casadi::SparsityCast, casadi::TrilSolveUnity< Tr >, casadi::TriuSolveUnity< Tr >, casadi::TrilSolve< Tr >, casadi::TriuSolve< Tr >, casadi::LinsolCall< Tr >, casadi::SetNonzerosParamParam< Add >, casadi::SetNonzerosSliceParam< Add >, casadi::SetNonzerosParamSlice< Add >, casadi::SetNonzerosParamVector< Add >, casadi::SetNonzerosSlice2< Add >, casadi::SetNonzerosSlice< Add >, casadi::SetNonzerosVector< Add >, casadi::Reshape, casadi::HorzRepsum, casadi::HorzRepmat, casadi::Rank1, casadi::Sparsify, casadi::Densify, casadi::Project, casadi::NormInf, casadi::Norm1, casadi::NormF, casadi::Multiplication, casadi::Monitor, casadi::MMax, casadi::MMin, casadi::LogSumExp, casadi::GetNonzerosParamParam, casadi::GetNonzerosParamSlice, casadi::GetNonzerosSliceParam, casadi::GetNonzerosParamVector, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Einstein, casadi::Dot, casadi::Convexify, casadi::Constant< Value >, casadi::ZeroByZero, casadi::ConstantPool, casadi::ConstantFile, casadi::ConstantDM, casadi::Concat, casadi::Low, casadi::Find, casadi::Call, casadi::BSplineParametric, casadi::BSpline, casadi::BinaryMX< ScX, ScY >, casadi::Bilin, and casadi::Assertion.

Definition at line 338 of file mx_node.cpp.

338  {
339  casadi_error("'eval' not defined for class " + class_name());
340  return 1;
341  }
std::string class_name() const override
Get name of public class.
Definition: mx_node.cpp:197

References casadi::MXNode::class_name().

◆ eval_linear()

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

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

Reimplemented in casadi::UnaryMX, casadi::Transpose, casadi::Split, casadi::SparsityCast, casadi::SetNonzeros< Add >, casadi::Reshape, casadi::HorzRepmat, casadi::Project, casadi::Multiplication, casadi::Monitor, casadi::GetNonzeros, casadi::Dot, casadi::Concat, and casadi::BinaryMX< ScX, ScY >.

Definition at line 352 of file mx_node.cpp.

353  {
354  std::vector<MX> arg_sum(arg.size());
355  for (casadi_int i=0; i<arg.size(); ++i) {
356  arg_sum[i] = arg[i][0] + arg[i][1] + arg[i][2];
357  }
358  std::vector<MX> res_nonlin(res.size());
359  eval_mx(arg_sum, res_nonlin);
360  for (casadi_int i=0; i<res.size(); ++i) {
361  res[i][0] = MX::zeros(sparsity());
362  res[i][1] = MX::zeros(sparsity());
363  res[i][2] = res_nonlin[i];
364  }
365  }
virtual void eval_mx(const std::vector< MX > &arg, std::vector< MX > &res) const
Evaluate symbolically (MX)
Definition: mx_node.cpp:348

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

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

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

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::MXNode::eval_mx ( const std::vector< MX > &  arg,
std::vector< MX > &  res 
) const
virtualinherited

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

Reimplemented in casadi::UnaryMX, casadi::Transpose, casadi::SymbolicMX, casadi::SubRef, casadi::SubAssign, casadi::Vertsplit, casadi::Diagsplit, casadi::Horzsplit, casadi::SparsityCast, 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::SetNonzeros< Add >, casadi::Reshape, casadi::HorzRepsum, casadi::HorzRepmat, casadi::Rank1, casadi::Project, casadi::NormInf, casadi::Norm1, casadi::Norm2, casadi::NormF, casadi::Multiplication, casadi::Monitor, casadi::MMax, casadi::MMin, casadi::LogSumExp, casadi::Inverse, casadi::GetNonzerosParamParam, casadi::GetNonzerosParamSlice, casadi::GetNonzerosSliceParam, casadi::GetNonzerosParamVector, casadi::GetNonzerosVector, casadi::GetNonzeros, casadi::Einstein, casadi::Dot, casadi::Determinant, casadi::Convexify, casadi::ConstantMX, casadi::Diagcat, casadi::Vertcat, casadi::Horzcat, casadi::Low, casadi::Find, casadi::Call, casadi::BSplineParametric, casadi::BSpline, casadi::BinaryMX< ScX, ScY >, casadi::Bilin, and casadi::Assertion.

Definition at line 348 of file mx_node.cpp.

348  {
349  casadi_error("'eval_mx' not defined for class " + class_name());
350  }

References casadi::MXNode::class_name().

Referenced by casadi::MXNode::eval_linear(), and casadi::MXNode::eval_linear_rearrange().

◆ eval_sx()

int casadi::MXNode::eval_sx ( const SXElem **  arg,
SXElem **  res,
casadi_int *  iw,
SXElem w 
) const
virtualinherited

◆ generate() [1/2]

virtual std::string casadi::BSplineCommon::generate ( CodeGenerator g,
const std::vector< casadi_int > &  arg,
const std::vector< bool > &  arg_is_ref 
) const
pure virtual

◆ generate() [2/2]

void casadi::BSplineCommon::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_1ym

Reimplemented from casadi::MXNode.

Definition at line 415 of file bspline.cpp.

419  {
420  casadi_int n_dims = offset_.size()-1;
421 
422  g.add_auxiliary(CodeGenerator::AUX_ND_BOOR_EVAL);
423  g.add_auxiliary(CodeGenerator::AUX_FILL);
424  g << g.clear(g.work(res[0], m_, false), m_) << "\n";
425 
426  // Input and output buffers
427  g << "CASADI_PREFIX(nd_boor_eval)(" << g.work(res[0], m_, false) << "," << n_dims << ","
428  << g.constant(knots_) << "," << g.constant(offset_) << "," << g.constant(degree_)
429  << "," << g.constant(strides_) << "," << generate(g, arg, arg_is_ref) << "," << m_ << ","
430  << g.work(arg[0], n_dims, arg_is_ref[0]) << "," << g.constant(lookup_mode_) << ", iw, w);\n";
431  }
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.
Definition: bspline.cpp:415

References casadi::CodeGenerator::add_auxiliary(), casadi::CodeGenerator::AUX_FILL, casadi::CodeGenerator::AUX_ND_BOOR_EVAL, casadi::CodeGenerator::clear(), casadi::CodeGenerator::constant(), degree_, knots_, lookup_mode_, m_, offset_, strides_, and casadi::CodeGenerator::work().

◆ generate_copy()

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

Definition at line 457 of file mx_node.cpp.

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

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

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

◆ get_assert()

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

Definition at line 987 of file mx_node.cpp.

987  {
988  return MX::create(new Assertion(shared_from_this<MX>(), y, fail_message));
989  }

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

605  {
606  return MX::create(new Bilin(shared_from_this<MX>(), x, y));
607  }

References casadi::MX::create().

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

◆ get_binary()

MX casadi::MXNode::get_binary ( casadi_int  op,
const MX y 
) const
inherited

Definition at line 788 of file mx_node.cpp.

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

1028  {
1029  MX x = shared_from_this<MX>();
1030  return MX::create(new BSplineParametric(x, coeffs, knots, offset, degree, m, lookup_mode));
1031  }

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

1018  {
1019  MX x = shared_from_this<MX>();
1020  return MX::create(new BSpline(x, knots, offset, coeffs, degree, m, lookup_mode));
1021  }

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

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

◆ get_coeff_size()

casadi_int casadi::BSplineCommon::get_coeff_size ( casadi_int  m,
const std::vector< casadi_int > &  offset,
const std::vector< casadi_int > &  degree 
)
static

Definition at line 83 of file bspline.cpp.

84  {
85  casadi_int ret = m;
86  for (casadi_int i=0;i<degree.size();++i) ret*= offset[i+1]-offset[i]-degree[i]-1;
87  return ret;
88  }

References casadi::MXNode::offset().

Referenced by prepare().

◆ get_convexify()

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

Definition at line 1033 of file mx_node.cpp.

1033  {
1034  return MX::create(new Convexify(shared_from_this<MX>(), opts));
1035  }

References casadi::MX::create().

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

◆ get_det()

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

Definition at line 1037 of file mx_node.cpp.

1037  {
1038  return MX::create(new Determinant(shared_from_this<MX>()));
1039  }

References casadi::MX::create().

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

◆ get_diagcat()

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

Reimplemented in casadi::Diagsplit.

Definition at line 1118 of file mx_node.cpp.

1118  {
1119  // Create a Horzcat node
1120  return MX::create(new Diagcat(x));
1121  }

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

1194  {
1195  if (is_zero()) {
1196  std::vector<MX> ret =
1197  MX::createMultipleOutput(new Diagsplit(shared_from_this<MX>(), offset1, offset2));
1198  for (casadi_int i=0;i<ret.size();++i) {
1199  ret[i]=MX::zeros(ret[i].sparsity());
1200  }
1201  return ret;
1202  }
1203  std::vector<MX> ret =
1204  MX::createMultipleOutput(new Diagsplit(shared_from_this<MX>(), offset1, offset2));
1205 
1206  return ret;
1207  }
static std::vector< MX > createMultipleOutput(MXNode *node)
Create from node (multiple-outputs)
Definition: mx.cpp:128

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

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

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

1046  {
1047  casadi_assert(
1048  size2()==y.size2() && size1()==y.size1(),
1049  "MXNode::dot: Dimension mismatch. dot requires its "
1050  "two arguments to have equal shapes, but got ("
1051  + str(size2()) + ", " + str(size1()) + ") and ("
1052  + str(y.size2()) + ", " + str(y.size1()) + ").");
1053  if (sparsity()==y.sparsity()) {
1054  if (sparsity().nnz()==0) {
1055  return 0;
1056  } else if (sparsity().is_scalar()) {
1057  return get_binary(OP_MUL, y);
1058  } else {
1059  if (shared_from_this<MX>().is_zero() || y.is_zero()) return 0;
1060  return MX::create(new Dot(shared_from_this<MX>(), y));
1061  }
1062  } else {
1063  // Project to pattern intersection
1064  Sparsity sp = sparsity().intersect(y.sparsity());
1065  MX xx = project(shared_from_this<MX>(), sp);
1066  MX yy = project(y, sp);
1067  return xx->get_dot(yy);
1068  }
1069  }
MX get_binary(casadi_int op, const MX &y) const
Get a binary operation operation.
Definition: mx_node.cpp:788
casadi_int size2() const
Definition: mx_node.hpp:391
casadi_int size1() const
Definition: mx_node.hpp:390
Sparsity intersect(const Sparsity &y, std::vector< unsigned char > &mapping) const
Intersection of two sparsity patterns.
Definition: sparsity.cpp:417

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

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

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

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

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

999  {
1000  MX x = shared_from_this<MX>();
1001  casadi_assert(x.is_vector(), "Argument must be vector, got " + x.dim() + ".");
1002  if (x.is_column()) {
1003  return MX::create(new Find(shared_from_this<MX>()));
1004  } else {
1005  return find(x.T());
1006  }
1007  }
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 1097 of file mx_node.cpp.

1097  {
1098  // Check if there is any existing horzcat operation
1099  for (auto i=x.begin(); i!=x.end(); ++i) {
1100  if (i->op()==OP_HORZCAT) {
1101  // Split up
1102  std::vector<MX> x_split(x.begin(), i);
1103  for (; i!=x.end(); ++i) {
1104  if (i->op()==OP_HORZCAT) {
1105  x_split.insert(x_split.end(), (*i)->dep_.begin(), (*i)->dep_.end());
1106  } else {
1107  x_split.push_back(*i);
1108  }
1109  }
1110  return horzcat(x_split);
1111  }
1112  }
1113 
1114  // Create a Horzcat node
1115  return MX::create(new Horzcat(x));
1116  }
@ 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 1143 of file mx_node.cpp.

1143  {
1144  if (is_zero()) {
1145  std::vector<MX> ret =
1146  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1147  for (casadi_int i=0;i<ret.size();++i) {
1148  ret[i]=MX::zeros(ret[i].sparsity());
1149  }
1150  return ret;
1151  }
1152  std::vector<MX> ret =
1153  MX::createMultipleOutput(new Horzsplit(shared_from_this<MX>(), output_offset));
1154 
1156  // Simplify horzsplit(horzcat)
1157  if (op()==OP_HORZCAT) {
1158  casadi_int offset_deps = 0;
1159  casadi_int j = 0;
1160  for (casadi_int i=0;i<output_offset.size();++i) {
1161  while (offset_deps<output_offset[i]) { offset_deps+=dep(j).size2();++j; }
1162  if (j>=n_dep()) j = n_dep()-1;
1163  if (output_offset[i]==offset_deps &&
1164  (i+1<output_offset.size()?output_offset[i+1]:size2()) ==
1165  offset_deps +dep(j).size2()) {
1166  // Aligned with vertcat dependency
1167  ret[i] = dep(j);
1168  }
1169  }
1170  }
1171  }
1172  return ret;
1173  }
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 1041 of file mx_node.cpp.

1041  {
1042  return MX::create(new Inverse(shared_from_this<MX>()));
1043  }

References casadi::MX::create().

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

◆ get_logsumexp()

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

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

Definition at line 613 of file mx_node.cpp.

613  {
614  return MX::create(new LogSumExp(shared_from_this<MX>()));
615  }

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

1009  {
1010  return MX::create(new Low(v, shared_from_this<MX>(), options));
1011  }

References casadi::MX::create().

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

◆ get_mac()

MX casadi::MXNode::get_mac ( const MX y,
const MX z 
) const
virtualinherited

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

Definition at line 559 of file mx_node.cpp.

559  {
560  if (sparsity().is_orthonormal() && y.is_column() && y.is_dense()
561  && y.sparsity()==z.sparsity() && z.is_zero()) {
562  std::vector<casadi_int> perm = sparsity().permutation_vector();
563  MX nz = sparsity_cast(shared_from_this<MX>(), Sparsity::dense(nnz()));
564  return (nz*y)(perm);
565  }
566  // Get reference to transposed first argument
567  MX x = shared_from_this<MX>();
568 
569  casadi_assert(y.size2()==z.size2(),
570  "Dimension error x.mac(z). Got y=" + str(y.size2()) + " and z=" + z.dim() + ".");
571  casadi_assert(x.size1()==z.size1(),
572  "Dimension error x.mac(z). Got x=" + x.dim() + " and z=" + z.dim() + ".");
573  casadi_assert(y.size1()==x.size2(),
574  "Dimension error x.mac(z). Got y=" + str(y.size1()) + " and x" + x.dim() + ".");
575  if (x.is_dense() && y.is_dense() && z.is_dense()) {
576  return MX::create(new DenseMultiplication(z, x, y));
577  } else {
578  return MX::create(new Multiplication(z, x, y));
579  }
580  }
const std::vector< casadi_int > permutation_vector(bool invert=false) const
Construct permutation vector from permutation matrix.
Definition: sparsity.cpp:1375
static Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern *.
Definition: sparsity.cpp:1012
bool is_column() const
Check if the pattern is a column vector (i.e. size2()==1)
Definition: sparsity.cpp:285

References casadi::MX::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 1092 of file mx_node.cpp.

1092  {
1093  if (sparsity_.is_empty()) return MX();
1094  return MX::create(new MMax(shared_from_this<MX>()));
1095  }
Sparsity sparsity_
The sparsity pattern.
Definition: mx_node.hpp:767
bool is_empty(bool both=false) const
Check if the sparsity is empty.
Definition: sparsity.cpp:144

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

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

◆ get_mmin()

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

Definition at line 1087 of file mx_node.cpp.

1087  {
1088  if (sparsity_.is_empty()) return MX();
1089  return MX::create(new MMin(shared_from_this<MX>()));
1090  }

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

991  {
992  if (nnz()==0) {
993  return shared_from_this<MX>();
994  } else {
995  return MX::create(new Monitor(shared_from_this<MX>(), comment));
996  }
997  }

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

1083  {
1084  return MX::create(new Norm1(shared_from_this<MX>()));
1085  }

References casadi::MX::create().

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

◆ get_norm_2()

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

Definition at line 1075 of file mx_node.cpp.

1075  {
1076  return MX::create(new Norm2(shared_from_this<MX>()));
1077  }

References casadi::MX::create().

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

◆ get_norm_fro()

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

Definition at line 1071 of file mx_node.cpp.

1071  {
1072  return MX::create(new NormF(shared_from_this<MX>()));
1073  }

References casadi::MX::create().

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

◆ get_norm_inf()

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

Definition at line 1079 of file mx_node.cpp.

1079  {
1080  return MX::create(new NormInf(shared_from_this<MX>()));
1081  }

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

684  {
685  return GetNonzerosParam::create(shared_from_this<MX>(), inner, outer);
686  }
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 668 of file mx_node.cpp.

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

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

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

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

748  {
749  if (inner.is_empty() || outer.is_empty() || is_zero()) {
750  return y;
751  } else {
752  return SetNonzerosParam<true>::create(y, shared_from_this<MX>(), inner, outer);
753  }
754  }
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 732 of file mx_node.cpp.

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

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

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

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

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

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

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

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

708  {
709  return SetNonzerosParam<false>::create(y, shared_from_this<MX>(), nz);
710  }

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 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() [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 
) 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::GetNonzeros, casadi::Constant< Value >, casadi::ZeroByZero, and casadi::Concat.

Definition at line 657 of file mx_node.cpp.

657  {
658  if (sparsity().is_dense() && is_range(nz, 0, nnz())) {
659  return sparsity_cast(shared_from_this<MX>(), sp);
660  }
661  return GetNonzeros::create(sp, shared_from_this<MX>(), nz);
662  }
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:91

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(), and casadi::MX::MX().

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

441  {
442  casadi_assert(oind==0, "Output index out of bounds");
443  return shared_from_this<MX>();
444  }

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

◆ get_project()

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

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

Definition at line 756 of file mx_node.cpp.

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

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

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

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

1175  {
1176  if (n==1) {
1177  return MX::create(new HorzRepmat(shared_from_this<MX>(), m));
1178  } else {
1179  // Fallback to generic_matrix impl
1180  return GenericMatrix<MX>::repmat(shared_from_this<MX>(), n, m);
1181  }
1182  }
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 1184 of file mx_node.cpp.

1184  {
1185  if (n==1) {
1186  return MX::create(new HorzRepsum(shared_from_this<MX>(), m));
1187  } else {
1188  // Fallback to generic_matrix impl
1189  return GenericMatrix<MX>::repsum(shared_from_this<MX>(), n, m);
1190  }
1191  }
static MatType repsum(const MatType &x, casadi_int n, casadi_int m=1)
Functions called by friend functions defined here.

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

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

◆ get_reshape()

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

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

Definition at line 496 of file mx_node.cpp.

496  {
497  casadi_assert_dev(sp.is_reshape(sparsity()));
498  if (sp==sparsity()) {
499  return shared_from_this<MX>();
500  } else {
501  return MX::create(new Reshape(shared_from_this<MX>(), sp));
502  }
503  }

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

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

◆ get_solve()

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

For system Ax = b:

A->get_solve(b)

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

Definition at line 649 of file mx_node.cpp.

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

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

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

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

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

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

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

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

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

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

505  {
506  casadi_assert_dev(sp.nnz()==nnz());
507  if (sp==sparsity()) {
508  return shared_from_this<MX>();
509  } else {
510  return MX::create(new SparsityCast(shared_from_this<MX>(), sp));
511  }
512  }

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

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

References casadi::MX::create().

◆ get_subref()

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

Definition at line 770 of file mx_node.cpp.

770  {
771  return MX::create(new SubRef(shared_from_this<MX>(), i, j));
772  }

References casadi::MX::create().

◆ get_transpose()

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

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

Definition at line 484 of file mx_node.cpp.

484  {
485  if (sparsity().is_scalar()) {
486  return shared_from_this<MX>();
487  } else if (sparsity().is_vector()) {
488  return get_reshape(sparsity().T());
489  } else if (sparsity().is_dense()) {
490  return MX::create(new DenseTranspose(shared_from_this<MX>()));
491  } else {
492  return MX::create(new Transpose(shared_from_this<MX>()));
493  }
494  }
virtual MX get_reshape(const Sparsity &sp) const
Reshape.
Definition: mx_node.cpp:496

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

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

◆ get_unary()

MX casadi::MXNode::get_unary ( casadi_int  op) const
virtualinherited

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

Definition at line 778 of file mx_node.cpp.

778  {
779  if (operation_checker<F0XChecker>(op) && is_zero()) {
780  // If identically zero
781  return MX::zeros(sparsity());
782  } else {
783  // Create a new node
784  return MX::create(new UnaryMX(Operation(op), shared_from_this<MX>()));
785  }
786  }

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

Referenced by casadi::MXNode::_get_binary(), casadi::Constant< Value >::_get_binary(), casadi::BinaryMX< ScX, ScY >::get_unary(), casadi::UnaryMX::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 1123 of file mx_node.cpp.

1123  {
1124  // Check if there is any existing vertcat operation
1125  for (auto i=x.begin(); i!=x.end(); ++i) {
1126  if (i->op()==OP_VERTCAT) {
1127  // Split up
1128  std::vector<MX> x_split(x.begin(), i);
1129  for (; i!=x.end(); ++i) {
1130  if (i->op()==OP_VERTCAT) {
1131  x_split.insert(x_split.end(), (*i)->dep_.begin(), (*i)->dep_.end());
1132  } else {
1133  x_split.push_back(*i);
1134  }
1135  }
1136  return vertcat(x_split);
1137  }
1138  }
1139 
1140  return MX::create(new Vertcat(x));
1141  }
@ 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 1209 of file mx_node.cpp.

1209  {
1210  if (is_zero()) {
1211  std::vector<MX> ret =
1212  MX::createMultipleOutput(new Vertsplit(shared_from_this<MX>(), output_offset));
1213  for (casadi_int i=0;i<ret.size();++i) {
1214  ret[i]=MX::zeros(ret[i].sparsity());
1215  }
1216  return ret;
1217  }
1218  std::vector<MX> ret =
1219  MX::createMultipleOutput(new Vertsplit(shared_from_this<MX>(), output_offset));
1220 
1222  // Simplify vertsplit(vertcat)
1223  if (op()==OP_VERTCAT) {
1224  casadi_int offset_deps = 0;
1225  casadi_int j = 0;
1226  for (casadi_int i=0;i<output_offset.size();++i) {
1227  while (offset_deps<output_offset[i]) { offset_deps+=dep(j).size1();++j; }
1228  if (j>=n_dep()) j = n_dep()-1;
1229  if (output_offset[i]==offset_deps &&
1230  (i+1<output_offset.size()?output_offset[i+1]:size1()) ==
1231  offset_deps +dep(j).size1()) {
1232  // Aligned with vertcat dependency
1233  ret[i] = dep(j);
1234  }
1235  }
1236  }
1237  }
1238  return ret;
1239  }
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.

186  {
187  return static_cast<const Internal*>(this)->count;
188  }

◆ has_duplicates()

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

Not thread-safe

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

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

Definition at line 146 of file mx_node.cpp.

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

References casadi::MXNode::class_name().

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

◆ has_output()

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

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

Reimplemented in casadi::MultipleOutput.

Definition at line 287 of file mx_node.hpp.

287 {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::Call.

Definition at line 127 of file mx_node.hpp.

127 { 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 101 of file mx_node.hpp.

101 { return false;}

◆ is_equal() [1/2]

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

◆ is_equal() [2/2]

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

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

Definition at line 1256 of file mx_node.cpp.

1256  {
1257  if (x==y) {
1258  return true;
1259  } else if (depth>0) {
1260  return x->is_equal(y, depth);
1261  } else {
1262  return false;
1263  }
1264  }

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 91 of file mx_node.hpp.

91 { 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::ConstantDM.

Definition at line 81 of file mx_node.hpp.

81 { return false;}

◆ is_one()

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

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

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

Definition at line 76 of file mx_node.hpp.

76 { return false;}

◆ is_output()

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

◆ is_unary()

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

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

Reimplemented in casadi::UnaryMX.

Definition at line 96 of file mx_node.hpp.

96 { return false;}

◆ is_valid_input()

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

◆ is_value()

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

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

Reimplemented in casadi::Constant< Value >.

Definition at line 86 of file mx_node.hpp.

86 { return false;}

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

◆ is_zero()

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

◆ jac()

template<class T >
MX casadi::BSplineCommon::jac ( const MX x,
const T &  coeffs 
) const

Definition at line 96 of file bspline_impl.hpp.

96  {
97  casadi_int n_dims = degree_.size();
98  std::vector<MX> parts;
99 
100  Dict opts;
101  std::vector<std::string> lookup_mode;
102  for (auto e : lookup_mode_) lookup_mode.push_back(Low::lookup_mode_from_enum(e));
103  opts["lookup_mode"] = lookup_mode;
104 
105  // Loop over dimensions
106  for (casadi_int k=0;k<n_dims;++k) {
107  std::vector< std::vector<double> > knots;
108  std::vector< casadi_int> degree;
109  T dC = derivative_coeff(k, knots_, offset_, degree_, coeffs_dims_, coeffs, knots, degree);
110  MX d = MX::bspline(x, dC, knots, degree, m_, opts);
111  parts.push_back(d);
112  }
113 
114  return horzcat(parts);
115  }
static M derivative_coeff(casadi_int i, const std::vector< double > &knots, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree, const std::vector< casadi_int > &coeffs_dims, const M &coeffs, std::vector< std::vector< double > > &new_knots, std::vector< casadi_int > &new_degree)
static std::string lookup_mode_from_enum(casadi_int lookup_mode)
Definition: casadi_low.cpp:48
static MX bspline(const MX &x, const DM &coeffs, const std::vector< std::vector< double > > &knots, const std::vector< casadi_int > &degree, casadi_int m, const Dict &opts=Dict())
Definition: mx.cpp:2116

References casadi::MX::bspline(), coeffs_dims_, degree_, derivative_coeff(), knots_, lookup_mode_, casadi::Low::lookup_mode_from_enum(), m_, offset_, and casadi::T.

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

◆ jac_cached()

virtual MX casadi::BSplineCommon::jac_cached ( ) const
pure virtual

Implemented in casadi::BSplineParametric, and casadi::BSpline.

Referenced by ad_forward(), and ad_reverse().

◆ join_primitives() [1/3]

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

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

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

Definition at line 185 of file mx_node.cpp.

185  {
186  return join_primitives_gen<DM>(it);
187  }

◆ join_primitives() [2/3]

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

◆ join_primitives() [3/3]

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

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

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

Definition at line 189 of file mx_node.cpp.

189  {
190  return join_primitives_gen<SX>(it);
191  }

◆ join_primitives_gen()

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

Definition at line 171 of file mx_node.cpp.

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

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

◆ mapping()

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

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

Definition at line 973 of file mx_node.cpp.

973  {
974  casadi_error("'mapping' not defined for class " + class_name());
975  }

References casadi::MXNode::class_name().

Referenced by derivative_coeff().

◆ matches_sparsity()

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

Definition at line 378 of file mx_node.hpp.

378  {
379  for (casadi_int i=0;i<dep_.size();++i) {
380  if (dep_[i].sparsity()!=arg[i].sparsity()) {
381  return false;
382  }
383  }
384  return true;
385  }

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 342 of file mx_node.hpp.

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

References casadi::MX::get_max_depth().

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

◆ n_dep()

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

◆ n_inplace()

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

◆ n_iw()

size_t casadi::BSplineCommon::n_iw ( const std::vector< casadi_int > &  degree)
static

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

Definition at line 62 of file bspline.cpp.

62  {
63  casadi_int n_dims = degree.size();
64  casadi_int sz = 0;
65  sz += n_dims+1; // boor_offset
66  sz += n_dims; // starts
67  sz += n_dims; // index
68  sz += n_dims+1; // coeff_offset
69  return sz;
70  }

Referenced by casadi::BSpline::dual(), and sz_iw().

◆ n_primitives()

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

◆ n_w()

size_t casadi::BSplineCommon::n_w ( const std::vector< casadi_int > &  degree)
static

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

Definition at line 72 of file bspline.cpp.

72  {
73  casadi_int n_dims = degree.size();
74  casadi_int sz = 0;
75  for (casadi_int k=0;k<n_dims-1;++k) {
76  sz += degree[k]+1; // boor
77  }
78  sz += 2*degree[n_dims-1]+1;
79  sz += n_dims+1;
80  return sz;
81  }

Referenced by casadi::BSpline::dual(), and sz_w().

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

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

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 389 of file mx_node.hpp.

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

Referenced by casadi::ConstantMX::__nonzero__(), casadi::MXNode::_get_binary(), casadi::ConstantFile::add_dependency(), casadi::ConstantFile::codegen_incref(), casadi::ConstantFile::ConstantFile(), casadi::BSpline::dual(), casadi::Assertion::eval(), casadi::Find::eval(), casadi::Low::eval(), 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::Dot::eval_gen(), casadi::Einstein::eval_gen(), casadi::LogSumExp::eval_gen(), casadi::Multiplication::eval_gen(), casadi::NormF::eval_gen(), casadi::Norm1::eval_gen(), casadi::NormInf::eval_gen(), casadi::Rank1::eval_gen(), casadi::HorzRepmat::eval_gen(), casadi::Reshape::eval_gen(), casadi::SparsityCast::eval_gen(), casadi::HorzRepsum::eval_gen(), casadi::Assertion::eval_sx(), casadi::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::Dot::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::LogSumExp::generate(), casadi::MMin::generate(), casadi::MMax::generate(), casadi::Monitor::generate(), casadi::Multiplication::generate(), casadi::DenseMultiplication::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_mac(), casadi::MXNode::get_monitor(), casadi::MXNode::get_nzref(), casadi::MXNode::get_sparsity_cast(), casadi::ConstantMX::is_valid_input(), casadi::ConstantMX::join_primitives(), casadi::ConstantMX::join_primitives_gen(), casadi::ConstantMX::n_primitives(), casadi::ConstantMX::primitives(), casadi::SetNonzerosVector< Add >::SetNonzerosVector(), casadi::Assertion::sp_forward(), casadi::Low::sp_forward(), casadi::ConstantMX::sp_forward(), casadi::GetNonzerosParam::sp_forward(), casadi::Monitor::sp_forward(), casadi::Multiplication::sp_forward(), casadi::Rank1::sp_forward(), casadi::HorzRepsum::sp_forward(), casadi::Reshape::sp_forward(), casadi::SparsityCast::sp_forward(), casadi::SymbolicMX::sp_forward(), casadi::Transpose::sp_forward(), casadi::UnaryMX::sp_forward(), casadi::Assertion::sp_reverse(), casadi::Low::sp_reverse(), casadi::ConstantMX::sp_reverse(), casadi::Einstein::sp_reverse(), casadi::GetNonzerosParam::sp_reverse(), casadi::Monitor::sp_reverse(), casadi::Multiplication::sp_reverse(), casadi::Project::sp_reverse(), casadi::Rank1::sp_reverse(), casadi::HorzRepmat::sp_reverse(), casadi::HorzRepsum::sp_reverse(), casadi::Reshape::sp_reverse(), casadi::SparsityCast::sp_reverse(), casadi::SymbolicMX::sp_reverse(), casadi::Transpose::sp_reverse(), casadi::UnaryMX::sp_reverse(), and casadi::ConstantMX::split_primitives_gen().

◆ nout()

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

◆ numel()

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

Definition at line 388 of file mx_node.hpp.

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

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

◆ offset()

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

Reimplemented in casadi::IOInstruction.

Definition at line 218 of file mx_node.cpp.

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

References casadi::MXNode::class_name().

Referenced by casadi::BSplineParametric::create(), casadi::BSpline::create(), derivative_coeff(), casadi::BSpline::dual(), casadi::MXNode::get_bspline(), get_coeff_size(), and prepare().

◆ op()

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

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

Implements casadi::MXNode.

Definition at line 121 of file bspline.hpp.

121 { return OP_BSPLINE;}
@ OP_BSPLINE
Definition: calculus.hpp:195

References casadi::OP_BSPLINE.

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

◆ prepare()

void casadi::BSplineCommon::prepare ( casadi_int  m,
const std::vector< casadi_int > &  offset,
const std::vector< casadi_int > &  degree,
casadi_int &  coeffs_size,
std::vector< casadi_int > &  coeffs_dims,
std::vector< casadi_int > &  strides 
)
static

Definition at line 90 of file bspline.cpp.

92  {
93 
94  casadi_int n_dims = degree.size();
95  coeffs_size = get_coeff_size(m, offset, degree);
96  coeffs_dims.resize(n_dims+1);
97  coeffs_dims[0] = m;
98  for (casadi_int i=0;i<n_dims;++i) coeffs_dims[i+1] = offset[i+1]-offset[i]-degree[i]-1;
99 
100  // Prepare strides
101  strides.resize(n_dims);
102  strides[0] = m;
103  for (casadi_int i=0;i<n_dims-1;++i) {
104  strides[i+1] = strides[i]*coeffs_dims[i+1];
105  }
106  }
static casadi_int get_coeff_size(casadi_int m, const std::vector< casadi_int > &offset, const std::vector< casadi_int > &degree)
Definition: bspline.cpp:83

References get_coeff_size(), and casadi::MXNode::offset().

Referenced by BSplineCommon(), and casadi::BSpline::dual().

◆ primitives()

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

◆ print_compact()

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

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

Definition at line 301 of file mx_node.cpp.

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

Not thread-safe

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

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

Definition at line 150 of file mx_node.cpp.

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

References casadi::MXNode::class_name().

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

◆ sameOpAndDeps()

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

equivalent dependencies up to a given depth

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

Definition at line 977 of file mx_node.cpp.

977  {
978  if (op()!=node->op() || n_dep()!=node->n_dep())
979  return false;
980  for (casadi_int i=0; i<n_dep(); ++i) {
981  if (!MX::is_equal(dep(i), node->dep(i), depth-1))
982  return false;
983  }
984  return true;
985  }

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

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

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

518  {
519  serialize_type(s);
520  serialize_body(s);
521  }
virtual void serialize_type(SerializingStream &s) const
Serialize type information.
Definition: mx_node.cpp:528
virtual void serialize_body(SerializingStream &s) const
Serialize an object without type information.
Definition: mx_node.cpp:523

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

◆ serialize_body()

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

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

Reimplemented from casadi::MXNode.

Reimplemented in casadi::BSpline.

Definition at line 118 of file bspline.cpp.

118  {
120  s.pack("BSplineCommon::knots", knots_);
121  s.pack("BSplineCommon::offset", offset_);
122  s.pack("BSplineCommon::degree", degree_);
123  s.pack("BSplineCommon::m", m_);
124  s.pack("BSplineCommon::lookup_mode", lookup_mode_);
125  s.pack("BSplineCommon::strides", strides_);
126  s.pack("BSplineCommon::coeffs_dims", coeffs_dims_);
127  s.pack("BSplineCommon::coeffs_size", coeffs_size_);
128  s.pack("BSplineCommon::jac_cache_", jac_cache_);
129  }

References coeffs_dims_, coeffs_size_, degree_, jac_cache_, knots_, lookup_mode_, m_, offset_, casadi::SerializingStream::pack(), casadi::MXNode::serialize_body(), and strides_.

Referenced by casadi::BSpline::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::DenseMultiplication, casadi::Multiplication, 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 528 of file mx_node.cpp.

528  {
529  s.pack("MXNode::op", static_cast<int>(op()));
530  }

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::Multiplication::serialize_type(), casadi::DenseMultiplication::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 232 of file mx_node.cpp.

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

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

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

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

247  {
248  dep_ = dep;
249  check_dep();
250  }

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

◆ set_sparsity()

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

◆ shared_from_this() [1/2]

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

Definition at line 83 of file generic_shared_internal.hpp.

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

◆ shared_from_this() [2/2]

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

Definition at line 92 of file generic_shared_internal.hpp.

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

◆ size()

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

◆ size1()

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

Definition at line 390 of file mx_node.hpp.

390 { return sparsity().size1(); }
casadi_int size1() const
Get the number of rows.
Definition: sparsity.cpp:124

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

◆ size2()

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

Definition at line 391 of file mx_node.hpp.

391 { return sparsity().size2(); }
casadi_int size2() const
Get the number of columns.
Definition: sparsity.cpp:128

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

◆ sp_forward()

int casadi::MXNode::sp_forward ( const bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
virtualinherited

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

Reimplemented in casadi::UnaryMX, casadi::DenseTranspose, casadi::Transpose, casadi::SymbolicMX, casadi::SubRef, casadi::SubAssign, casadi::Split, casadi::SparsityCast, casadi::Solve< Tr >, casadi::SetNonzerosParam< Add >, casadi::SetNonzerosSlice2< Add >, casadi::SetNonzerosSlice< Add >, casadi::SetNonzerosVector< Add >, casadi::Reshape, casadi::HorzRepsum, casadi::HorzRepmat, casadi::Rank1, casadi::Project, casadi::Multiplication, casadi::Monitor, casadi::GetNonzerosParam, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Einstein, casadi::Dot, casadi::ConstantMX, casadi::Concat, casadi::Low, casadi::Find, casadi::Call, casadi::BinaryMX< ScX, ScY >, casadi::Bilin, and casadi::Assertion.

Definition at line 396 of file mx_node.cpp.

396  {
397  // By default, everything depends on everything
398  bvec_t all_depend(0);
399 
400  // Get dependencies of all inputs
401  for (casadi_int k=0; k<n_dep(); ++k) {
402  const bvec_t* v = arg[k];
403  for (casadi_int i=0; i<dep(k).nnz(); ++i) {
404  all_depend |= v[i];
405  }
406  }
407 
408  // Propagate to all outputs
409  for (casadi_int k=0; k<nout(); ++k) {
410  bvec_t* v = res[k];
411  for (casadi_int i=0; i<sparsity(k).nnz(); ++i) {
412  v[i] = all_depend;
413  }
414  }
415  return 0;
416  }
casadi_int nnz() const
Get the number of (structural) non-zero elements.
unsigned long long bvec_t

References casadi::MXNode::dep(), casadi::MXNode::n_dep(), casadi::GenericMatrix< MatType >::nnz(), casadi::Sparsity::nnz(), casadi::MXNode::nout(), and casadi::MXNode::sparsity().

◆ sp_reverse()

int casadi::MXNode::sp_reverse ( bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
virtualinherited

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

Reimplemented in casadi::UnaryMX, casadi::DenseTranspose, casadi::Transpose, casadi::SymbolicMX, casadi::SubRef, casadi::SubAssign, casadi::Split, casadi::SparsityCast, casadi::Solve< Tr >, casadi::SetNonzerosParam< Add >, casadi::SetNonzerosSlice2< Add >, casadi::SetNonzerosSlice< Add >, casadi::SetNonzerosVector< Add >, casadi::Reshape, casadi::HorzRepsum, casadi::HorzRepmat, casadi::Rank1, casadi::Project, casadi::Multiplication, casadi::Monitor, casadi::GetNonzerosParam, casadi::GetNonzerosSlice2, casadi::GetNonzerosSlice, casadi::GetNonzerosVector, casadi::Einstein, casadi::Dot, casadi::ConstantMX, casadi::Concat, casadi::Low, casadi::Find, casadi::Call, casadi::BinaryMX< ScX, ScY >, casadi::Bilin, and casadi::Assertion.

Definition at line 418 of file mx_node.cpp.

418  {
419  // By default, everything depends on everything
420  bvec_t all_depend(0);
421 
422  // Get dependencies of all outputs
423  for (casadi_int k=0; k<nout(); ++k) {
424  bvec_t* v = res[k];
425  for (casadi_int i=0; i<sparsity(k).nnz(); ++i) {
426  all_depend |= v[i];
427  v[i] = 0;
428  }
429  }
430 
431  // Propagate to all inputs
432  for (casadi_int k=0; k<n_dep(); ++k) {
433  bvec_t* v = arg[k];
434  for (casadi_int i=0; i<dep(k).nnz(); ++i) {
435  v[i] |= all_depend;
436  }
437  }
438  return 0;
439  }

References casadi::MXNode::dep(), casadi::MXNode::n_dep(), casadi::GenericMatrix< MatType >::nnz(), casadi::Sparsity::nnz(), casadi::MXNode::nout(), and casadi::MXNode::sparsity().

◆ sparsity() [1/2]

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

Definition at line 372 of file mx_node.hpp.

372 { return sparsity_;}

Referenced by casadi::MXNode::_get_binary(), casadi::GetNonzeros::ad_forward(), casadi::GetNonzerosParamVector::ad_forward(), casadi::GetNonzerosSliceParam::ad_forward(), casadi::GetNonzerosParamSlice::ad_forward(), casadi::GetNonzerosParamParam::ad_forward(), casadi::LogSumExp::ad_forward(), casadi::Multiplication::ad_forward(), casadi::Project::ad_forward(), casadi::Rank1::ad_forward(), casadi::SparsityCast::ad_forward(), casadi::Bilin::ad_reverse(), casadi::GetNonzeros::ad_reverse(), casadi::GetNonzerosParamVector::ad_reverse(), casadi::GetNonzerosSliceParam::ad_reverse(), casadi::GetNonzerosParamSlice::ad_reverse(), casadi::GetNonzerosParamParam::ad_reverse(), casadi::Multiplication::ad_reverse(), casadi::Project::ad_reverse(), casadi::SparsityCast::ad_reverse(), casadi::Diagcat::Diagcat(), casadi::ConstantFile::disp(), casadi::ConstantPool::disp(), casadi::Project::disp(), casadi::Reshape::disp(), casadi::SparsityCast::disp(), casadi::Bilin::eval_gen(), casadi::Multiplication::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::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::Bilin::generate(), casadi::Find::generate(), casadi::Multiplication::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_mac(), casadi::MXNode::get_nzref(), casadi::Call::get_output(), casadi::MultipleOutput::get_output(), casadi::MXNode::get_project(), casadi::MXNode::get_reshape(), casadi::SparsityCast::get_reshape(), casadi::MXNode::get_sparsity_cast(), casadi::MXNode::get_transpose(), casadi::Reshape::get_transpose(), casadi::SparsityCast::get_transpose(), casadi::MXNode::get_unary(), casadi::MXNode::get_vertsplit(), casadi::Horzcat::Horzcat(), casadi::ConstantDM::is_equal(), casadi::Constant< Value >::is_equal(), casadi::GetNonzerosVector::is_equal(), casadi::GetNonzerosSlice::is_equal(), casadi::GetNonzerosSlice2::is_equal(), casadi::Reshape::is_equal(), casadi::SetNonzerosVector< Add >::is_equal(), casadi::SetNonzerosSlice< Add >::is_equal(), casadi::SetNonzerosSlice2< Add >::is_equal(), casadi::SparsityCast::is_equal(), casadi::ConstantMX::join_primitives_gen(), casadi::SparsityCast::join_primitives_gen(), casadi::GetNonzeros::mapping(), casadi::OutputNode::OutputNode(), casadi::MXFunction::print_res(), casadi::MXNode::set_sparsity(), casadi::MXNode::sp_forward(), casadi::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::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 262 of file mx_node.cpp.

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

References casadi::MXNode::sparsity_.

◆ split_primitives() [1/3]

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

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

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

Definition at line 166 of file mx_node.cpp.

166  {
167  *it++ = x;
168  }

◆ split_primitives() [2/3]

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

◆ split_primitives() [3/3]

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

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

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

Definition at line 162 of file mx_node.cpp.

162  {
163  *it++ = x;
164  }

◆ 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 409 of file mx_node.hpp.

409 { return n_dep();}

◆ sz_iw()

size_t casadi::BSplineCommon::sz_iw ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 54 of file bspline.cpp.

54  {
55  return n_iw(degree_);
56  }
static size_t n_iw(const std::vector< casadi_int > &degree)
Get required length of iw field.
Definition: bspline.cpp:62

References degree_, and n_iw().

◆ 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 414 of file mx_node.hpp.

414 { return nout();}

◆ sz_w()

size_t casadi::BSplineCommon::sz_w ( ) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 58 of file bspline.cpp.

58  {
59  return n_w(degree_);
60  }
static size_t n_w(const std::vector< casadi_int > &degree)
Get required length of w field.
Definition: bspline.cpp:72

References degree_, and n_w().

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

476  {
477  casadi_error("'to_double' not defined for class " + class_name());
478  }

References casadi::MXNode::class_name().

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

◆ to_matrix()

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

Definition at line 442 of file mx_node.hpp.

442  {
443  if (x.size()==sp.size()) {
444  return x;
445  } else {
446  return MX(sp, x);
447  }
448  }

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.

191  {
192  if (weak_ref_==nullptr) {
193  weak_ref_ = new GenericWeakRef<Shared, Internal>(static_cast<Internal*>(this));
194  }
195  return weak_ref_;
196  }

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

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

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

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

References casadi::MXNode::class_name().

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

Member Data Documentation

◆ coeffs_dims_

std::vector<casadi_int> casadi::BSplineCommon::coeffs_dims_

Definition at line 80 of file bspline.hpp.

Referenced by BSplineCommon(), jac(), and serialize_body().

◆ coeffs_size_

casadi_int casadi::BSplineCommon::coeffs_size_

Definition at line 81 of file bspline.hpp.

Referenced by BSplineCommon(), and serialize_body().

◆ degree_

std::vector<casadi_int> casadi::BSplineCommon::degree_

◆ dep_

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

◆ deserialize_map

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

Definition at line 779 of file mx_node.hpp.

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

◆ jac_cache_

MX casadi::BSplineCommon::jac_cache_
mutable

Derivatives are computed by transforming the coefficient matrix This is efficient

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

Definition at line 89 of file bspline.hpp.

Referenced by BSplineCommon(), casadi::BSpline::jac_cached(), casadi::BSplineParametric::jac_cached(), and serialize_body().

◆ knots_

std::vector<double> casadi::BSplineCommon::knots_

◆ lookup_mode_

std::vector<casadi_int> casadi::BSplineCommon::lookup_mode_

◆ m_

casadi_int casadi::BSplineCommon::m_

◆ offset_

std::vector<casadi_int> casadi::BSplineCommon::offset_

◆ sparsity_

Sparsity casadi::MXNode::sparsity_
inherited

◆ strides_

std::vector<casadi_int> casadi::BSplineCommon::strides_

◆ 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 757 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: