List of all members | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Member Functions
casadi::Constant< Value > Class Template Reference

A constant with all entries identical. More...

#include <constant_mx.hpp>

Detailed Description

template<typename Value>
class casadi::Constant< Value >

Definition at line 591 of file constant_mx.hpp.

Inheritance diagram for casadi::Constant< Value >:
Inheritance graph
[legend]
Collaboration diagram for casadi::Constant< Value >:
Collaboration graph
[legend]

Public Types

using weak_ref_type = WeakRefInternal
 

Public Member Functions

 Constant (const Sparsity &sp, Value v=Value())
 Constructor. More...
 
 Constant (DeserializingStream &s, const Value &v)
 Deserializing constructor. More...
 
 ~Constant () override
 Destructor. More...
 
std::string disp (const std::vector< std::string > &arg) const override
 Print expression. More...
 
int eval (const double **arg, double **res, casadi_int *iw, double *w) const override
 Evaluate the function numerically. More...
 
int eval_sx (const SXElem **arg, SXElem **res, casadi_int *iw, SXElem *w) const override
 Evaluate the function symbolically (SX) More...
 
void 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...
 
bool is_zero () const override
 Check if a particular integer value. More...
 
bool is_one () const override
 Check if identically one. More...
 
bool is_eye () const override
 Check if identity matrix. More...
 
bool is_value (double val) const override
 Check if a certain value. More...
 
double to_double () const override
 Get the value (only for scalar constant nodes) More...
 
Matrix< double > get_DM () const override
 Get the value (only for constant nodes) More...
 
MX get_project (const Sparsity &sp) const override
 Get densification. More...
 
MX get_nzref (const Sparsity &sp, const std::vector< casadi_int > &nz) const override
 Get the nonzeros of matrix. More...
 
MX get_nzassign (const MX &y, const std::vector< casadi_int > &nz) const override
 Assign the nonzeros of a matrix to another matrix. More...
 
MX get_transpose () const override
 Transpose. More...
 
MX get_unary (casadi_int op) const override
 Get a unary operation. More...
 
MX _get_binary (casadi_int op, const MX &y, bool ScX, bool ScY) const override
 Get a binary operation operation. More...
 
MX get_reshape (const Sparsity &sp) const override
 Reshape. More...
 
MX get_horzcat (const std::vector< MX > &x) const override
 Create a horizontal concatenation node. More...
 
MX get_vertcat (const std::vector< MX > &x) const override
 Create a vertical concatenation node (vectors only) More...
 
bool is_equal (const MXNode *node, casadi_int depth) const override
 Check if two nodes are equivalent up to a given depth. More...
 
void serialize_body (SerializingStream &s) const override
 Serialize an object without type information. More...
 
void serialize_type (SerializingStream &s) const override
 Serialize type information. More...
 
void eval_mx (const std::vector< MX > &arg, std::vector< MX > &res) const override
 Evaluate symbolically (MX) More...
 
void ad_forward (const std::vector< std::vector< MX > > &fseed, std::vector< std::vector< MX > > &fsens) const override
 Calculate forward mode directional derivatives. More...
 
void ad_reverse (const std::vector< std::vector< MX > > &aseed, std::vector< std::vector< MX > > &asens) const override
 Calculate reverse mode directional derivatives. More...
 
int sp_forward (const bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
 Propagate sparsity forward. More...
 
int sp_reverse (bvec_t **arg, bvec_t **res, casadi_int *iw, bvec_t *w) const override
 Propagate sparsity backwards. More...
 
casadi_int op () const override
 Get the operation. More...
 
MX get_dot (const MX &y) const override
 Matrix multiplication. More...
 
bool __nonzero__ () const override
 Return truth value of an MX. More...
 
bool is_valid_input () const override
 Check if valid function input. More...
 
casadi_int n_primitives () const override
 Get the number of symbolic primitives. More...
 
void primitives (std::vector< MX >::iterator &it) const override
 Get symbolic primitives. More...
 
template<typename T >
void split_primitives_gen (const T &x, typename std::vector< T >::iterator &it) const
 Split up an expression along primitives (template) More...
 
template<typename T >
join_primitives_gen (typename std::vector< T >::const_iterator &it) const
 Join an expression along symbolic primitives (template) More...
 
bool has_duplicates () const override
 Detect duplicate symbolic expressions. More...
 
void reset_input () const override
 Reset the marker for an input expression. More...
 
virtual bool is_minus_one () const
 Check if identically minus one. More...
 
virtual bool is_unary () const
 Check if unary operation. More...
 
virtual bool is_binary () const
 Check if binary operation. More...
 
void can_inline (std::map< const MXNode *, casadi_int > &nodeind) const
 Find out which nodes can be inlined. More...
 
std::string print_compact (std::map< const MXNode *, casadi_int > &nodeind, std::vector< std::string > &intermed) const
 Print compact. More...
 
void disp (std::ostream &stream, bool more) const override
 Print a description. More...
 
virtual void add_dependency (CodeGenerator &g) const
 Add a dependent function. More...
 
virtual bool has_refcount () const
 Is reference counting needed in codegen? More...
 
virtual void codegen_incref (CodeGenerator &g, std::set< void * > &added) const
 Codegen incref. More...
 
virtual void codegen_decref (CodeGenerator &g, std::set< void * > &added) const
 Codegen decref. More...
 
void generate_copy (CodeGenerator &g, const std::vector< casadi_int > &arg, const std::vector< casadi_int > &res, const std::vector< bool > &arg_is_ref, std::vector< bool > &res_is_ref, casadi_int i) const
 
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 const std::string & name () const
 Get the name. More...
 
std::string class_name () const override
 Get name of public class. More...
 
virtual bool is_output () const
 Check if evaluation output. More...
 
virtual bool has_output () const
 Check if a multiple output node. More...
 
virtual casadi_int which_output () const
 Get function output. More...
 
virtual const Functionwhich_function () const
 Get called function. More...
 
virtual Dict info () const
 
void serialize (SerializingStream &s) const
 Serialize an object. More...
 
bool sameOpAndDeps (const MXNode *node, casadi_int depth) const
 Checks if two nodes have the same operation and have. More...
 
const MXdep (casadi_int ind=0) const
 dependencies - functions that have to be evaluated before this one More...
 
casadi_int n_dep () const
 Number of dependencies. More...
 
virtual casadi_int nout () const
 Number of outputs. More...
 
virtual MX get_output (casadi_int oind) const
 Get an output. More...
 
const Sparsitysparsity () const
 Get the sparsity. More...
 
virtual const Sparsitysparsity (casadi_int oind) const
 Get the sparsity of output oind. More...
 
template<class T >
bool matches_sparsity (const std::vector< T > &arg) const
 
casadi_int numel () const
 Get shape. More...
 
casadi_int nnz (casadi_int i=0) const
 
casadi_int size1 () const
 
casadi_int size2 () const
 
std::pair< casadi_int, casadi_int > size () const
 
virtual casadi_int ind () const
 
virtual casadi_int segment () const
 
virtual casadi_int offset () const
 
void set_sparsity (const Sparsity &sparsity)
 Set the sparsity. More...
 
virtual size_t sz_arg () const
 Get required length of arg field. More...
 
virtual size_t sz_res () const
 Get required length of res field. More...
 
virtual size_t sz_iw () const
 Get required length of iw field. More...
 
virtual size_t sz_w () const
 Get required length of w field. More...
 
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 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 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 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_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_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 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...
 
MX get_binary (casadi_int op, const MX &y) const
 Get a binary operation operation. More...
 
virtual MX get_det () const
 Determinant. More...
 
virtual MX get_inv () const
 Inverse. 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...
 
void split_primitives (const MX &x, std::vector< MX >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
void split_primitives (const SX &x, std::vector< SX >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
void split_primitives (const DM &x, std::vector< DM >::iterator &it) const override
 Split up an expression along symbolic primitives. More...
 
MX join_primitives (std::vector< MX >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 
SX join_primitives (std::vector< SX >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 
DM join_primitives (std::vector< DM >::const_iterator &it) const override
 Join an expression along symbolic primitives. More...
 

Static Public Member Functions

static ConstantMXcreate (const Sparsity &sp, casadi_int val)
 
static ConstantMXcreate (const Sparsity &sp, int val)
 
static ConstantMXcreate (const Sparsity &sp, double val)
 
static ConstantMXcreate (const Matrix< double > &val)
 
static ConstantMXcreate (const Sparsity &sp, const std::string &fname)
 
static ConstantMXcreate (const Matrix< double > &val, const std::string &name)
 
static MXNodedeserialize (DeserializingStream &s)
 Deserialize with type disambiguation. 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

Value v_
 
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

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

◆ Constant() [1/2]

template<typename Value >
casadi::Constant< Value >::Constant ( const Sparsity sp,
Value  v = Value() 
)
inlineexplicit

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

Definition at line 597 of file constant_mx.hpp.

597 : ConstantMX(sp), v_(v) {}
ConstantMX(const Sparsity &sp)
Destructor.
Definition: constant_mx.cpp:34

◆ Constant() [2/2]

template<typename Value >
casadi::Constant< Value >::Constant ( DeserializingStream s,
const Value &  v 
)
explicit

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

Definition at line 705 of file constant_mx.hpp.

705  : ConstantMX(s), v_(v) {
706  }

◆ ~Constant()

template<typename Value >
casadi::Constant< Value >::~Constant ( )
inlineoverride

Definition at line 605 of file constant_mx.hpp.

605 {}

Member Function Documentation

◆ __nonzero__()

bool casadi::ConstantMX::__nonzero__ ( ) const
overridevirtualinherited

Reimplemented from casadi::MXNode.

Definition at line 146 of file constant_mx.cpp.

146  {
147  if (numel()!=1) casadi_error("Can only determine truth value of scalar MX.");
148  if (nnz()!=1) casadi_error("Can only determine truth value of dense scalar MX.");
149  return !is_zero();
150  }
virtual bool is_zero() const
Check if identically zero.
Definition: mx_node.hpp:71
casadi_int numel() const
Get shape.
Definition: mx_node.hpp:388
casadi_int nnz(casadi_int i=0) const
Definition: mx_node.hpp:389

References casadi::MXNode::is_zero(), casadi::MXNode::nnz(), and casadi::MXNode::numel().

◆ _get_binary()

template<typename Value >
MX casadi::Constant< Value >::_get_binary ( casadi_int  op,
const MX y,
bool  ScX,
bool  ScY 
) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 773 of file constant_mx.hpp.

773  {
774  casadi_assert_dev(sparsity()==y.sparsity() || ScX || ScY);
775 
776  if (ScX && !operation_checker<FX0Checker>(op)) {
777  double ret;
778  casadi_math<double>::fun(op, nnz()> 0 ? to_double(): 0.0, 0, ret);
779 
780  if (ret!=0) {
781  Sparsity f = Sparsity::dense(y.size1(), y.size2());
782  MX yy = project(y, f);
783  return MX(f, shared_from_this<MX>())->_get_binary(op, yy, false, false);
784  }
785  } else if (ScY && !operation_checker<F0XChecker>(op)) {
786  bool grow = true;
787  if (y->op()==OP_CONST && dynamic_cast<const ConstantDM*>(y.get())==nullptr) {
788  double ret;
789  casadi_math<double>::fun(op, 0, y.nnz()>0 ? y->to_double() : 0, ret);
790  grow = ret!=0;
791  }
792  if (grow) {
793  Sparsity f = Sparsity::dense(size1(), size2());
794  MX xx = project(shared_from_this<MX>(), f);
795  return xx->_get_binary(op, MX(f, y), false, false);
796  }
797  }
798 
799  switch (op) {
800  case OP_ADD:
801  if (v_.value==0) return ScY && !y->is_zero() ? repmat(y, size1(), size2()) : y;
802  break;
803  case OP_SUB:
804  if (v_.value==0) return ScY && !y->is_zero() ? repmat(-y, size1(), size2()) : -y;
805  break;
806  case OP_MUL:
807  if (v_.value==1) return y;
808  if (v_.value==-1) return -y;
809  if (v_.value==2) return y->get_unary(OP_TWICE);
810  break;
811  case OP_DIV:
812  if (v_.value==1) return y->get_unary(OP_INV);
813  if (v_.value==-1) return -y->get_unary(OP_INV);
814  break;
815  case OP_POW:
816  // Note: v_.value can still lead to one when a y entry is zero
817  if (v_.value==1) return MX::ones(y.sparsity());
818  if (v_.value==std::exp(1.0)) return y->get_unary(OP_EXP);
819  break;
820  default: break; //no rule
821  }
822 
823  // Constant folding
824  // NOTE: ugly, should use a function instead of a cast
825  if (y->op()==OP_CONST && dynamic_cast<const ConstantDM*>(y.get())==nullptr) {
826  double y_value = y.nnz()>0 ? y->to_double() : 0;
827  double ret;
828  casadi_math<double>::fun(op, nnz()> 0.0 ? to_double(): 0, y_value, ret);
829 
830  return MX(y.sparsity(), ret, false);
831  }
832 
833  // Fallback
834  return MXNode::_get_binary(op, y, ScX, ScY);
835  }
casadi_int op() const override
Get the operation.
double to_double() const override
Get the value (only for scalar constant nodes)
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.
friend class MX
Definition: mx_node.hpp:52
const Sparsity & sparsity() const
Get the sparsity.
Definition: mx_node.hpp:372
casadi_int size2() const
Definition: mx_node.hpp:391
casadi_int size1() const
Definition: mx_node.hpp:390
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 Sparsity dense(casadi_int nrow, casadi_int ncol=1)
Create a dense rectangular sparsity pattern *.
Definition: sparsity.cpp:1012
@ OP_INV
Definition: calculus.hpp:73
@ OP_EXP
Definition: calculus.hpp:66
@ 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_DIV
Definition: calculus.hpp:65
@ OP_MUL
Definition: calculus.hpp:65
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::Sparsity::dense(), casadi::casadi_math< T >::fun(), casadi::MX::get(), casadi::MXNode::get_unary(), casadi::MXNode::is_zero(), casadi::GenericMatrix< MatType >::nnz(), casadi::GenericMatrix< MX >::ones(), casadi::MXNode::op(), casadi::OP_ADD, casadi::OP_CONST, casadi::OP_DIV, casadi::OP_EXP, casadi::OP_INV, casadi::OP_MUL, casadi::OP_POW, casadi::OP_SUB, casadi::OP_TWICE, casadi::GenericMatrix< MatType >::size1(), casadi::GenericMatrix< MatType >::size2(), casadi::MX::sparsity(), and casadi::MXNode::to_double().

◆ ad_forward()

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

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

Reimplemented from casadi::MXNode.

Definition at line 107 of file constant_mx.cpp.

108  {
109  MX zero_sens(size1(), size2());
110  for (casadi_int d=0; d<fsens.size(); ++d) {
111  fsens[d][0] = zero_sens;
112  }
113  }

References casadi::MXNode::size1(), and casadi::MXNode::size2().

◆ ad_reverse()

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

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

Reimplemented from casadi::MXNode.

Definition at line 115 of file constant_mx.cpp.

116  {
117  }

◆ 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
virtual casadi_int op() const =0
Get the operation.
@ 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

◆ create() [1/6]

ConstantMX * casadi::ConstantMX::create ( const Matrix< double > &  val)
staticinherited

Definition at line 178 of file constant_mx.cpp.

178  {
179  if (val.nnz()==0) {
180  return create(val.sparsity(), 0);
181  } else if (val.is_scalar()) {
182  return create(val.sparsity(), val.scalar());
183  } else {
184  // Check if all values are the same
185  const std::vector<double> vdata = val.nonzeros();
186  double v = vdata[0];
187  for (auto&& i : vdata) {
188  if (i!=v) {
189  // Values not all the same
190  return new ConstantDM(val);
191  }
192  }
193 
194  // All values identical if reached this point
195  return create(val.sparsity(), v);
196  }
197  }
static ConstantMX * create(const Sparsity &sp, casadi_int val)
casadi_int nnz() const
Get the number of (structural) non-zero elements.
bool is_scalar(bool scalar_and_dense=false) const
Check if the matrix expression is scalar.
std::vector< Scalar > & nonzeros()
const Sparsity & sparsity() const
Const access the sparsity - reference to data member.
const Scalar scalar() const
Convert to scalar type.

References casadi::ConstantMX::create(), casadi::GenericMatrix< MatType >::is_scalar(), casadi::GenericMatrix< MatType >::nnz(), casadi::Matrix< Scalar >::nonzeros(), casadi::Matrix< Scalar >::scalar(), and casadi::Matrix< Scalar >::sparsity().

◆ create() [2/6]

ConstantMX * casadi::ConstantMX::create ( const Matrix< double > &  val,
const std::string &  name 
)
staticinherited

Definition at line 207 of file constant_mx.cpp.

207  {
208  return new ConstantPool(x, name);
209  }
virtual const std::string & name() const
Get the name.
Definition: mx_node.cpp:193

References casadi::MXNode::name().

◆ create() [3/6]

ConstantMX * casadi::ConstantMX::create ( const Sparsity sp,
casadi_int  val 
)
staticinherited

Definition at line 152 of file constant_mx.cpp.

152  {
153  if (sp.is_empty(true)) {
154  return ZeroByZero::getInstance();
155  } else {
156  switch (val) {
157  case 0: return new Constant<CompiletimeConst<0> >(sp);
158  case 1: return new Constant<CompiletimeConst<1> >(sp);
159  case -1: return new Constant<CompiletimeConst<(-1)> >(sp);
160  default: return new Constant<RuntimeConst<casadi_int> >(sp, val);
161  }
162  }
163  }
static ZeroByZero * getInstance()
Get a pointer to the singleton.

References casadi::ZeroByZero::getInstance(), and casadi::Sparsity::is_empty().

Referenced by casadi::ConstantMX::create(), casadi::MX::inf(), casadi::MX::MX(), and casadi::MX::nan().

◆ create() [4/6]

ConstantMX * casadi::ConstantMX::create ( const Sparsity sp,
const std::string &  fname 
)
staticinherited

Definition at line 199 of file constant_mx.cpp.

199  {
200  if (sp.nnz()==0) {
201  return create(sp, 0);
202  } else {
203  return new ConstantFile(sp, fname);
204  }
205  }

References casadi::ConstantMX::create(), and casadi::Sparsity::nnz().

◆ create() [5/6]

ConstantMX * casadi::ConstantMX::create ( const Sparsity sp,
double  val 
)
staticinherited

Definition at line 165 of file constant_mx.cpp.

165  {
166  if (sp.is_empty(true)) {
167  return ZeroByZero::getInstance();
168  } else {
169  casadi_int intval = static_cast<casadi_int>(val);
170  if (static_cast<double>(intval)-val==0) {
171  return create(sp, intval);
172  } else {
173  return new Constant<RuntimeConst<double> >(sp, val);
174  }
175  }
176  }

References casadi::ConstantMX::create(), casadi::ZeroByZero::getInstance(), and casadi::Sparsity::is_empty().

◆ create() [6/6]

static ConstantMX* casadi::ConstantMX::create ( const Sparsity sp,
int  val 
)
inlinestaticinherited

Definition at line 58 of file constant_mx.hpp.

58  {
59  return create(sp, static_cast<casadi_int>(val));
60  }

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

◆ deserialize()

MXNode * casadi::ConstantMX::deserialize ( DeserializingStream s)
staticinherited

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

Definition at line 323 of file constant_mx.cpp.

323  {
324  char t;
325  s.unpack("ConstantMX::type", t);
326  switch (t) {
327  case 'a': return new ConstantDM(s);
328  case 'f': return new ConstantFile(s);
329  case 'p': return new ConstantPool(s);
330  case 'z': return ZeroByZero::getInstance();
331  case 'D':
332  return new Constant<RuntimeConst<double> >(s, RuntimeConst<double>::deserialize(s));
333  case 'I':
334  return new Constant<RuntimeConst<casadi_int> >(s,
336  case '0':
337  return new Constant<CompiletimeConst<0> >(s, CompiletimeConst<0>::deserialize(s));
338  case '1':
339  return new Constant<CompiletimeConst<1> >(s, CompiletimeConst<1>::deserialize(s));
340  case 'm':
341  return new Constant<CompiletimeConst<(-1)> >(s, CompiletimeConst<(-1)>::deserialize(s));
342  default:
343  casadi_error("Error deserializing");
344  }
345  }
static MXNode * deserialize(DeserializingStream &s)
Deserialize with type disambiguation.
static CompiletimeConst deserialize(DeserializingStream &s)
static RuntimeConst deserialize(DeserializingStream &s)

References casadi::RuntimeConst< T >::deserialize(), casadi::CompiletimeConst< v >::deserialize(), casadi::ZeroByZero::getInstance(), and 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]

template<typename Value >
std::string casadi::Constant< Value >::disp ( const std::vector< std::string > &  arg) const
overridevirtual

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

Implements casadi::MXNode.

Definition at line 906 of file constant_mx.hpp.

906  {
907  std::stringstream ss;
908  if (sparsity().is_scalar()) {
909  // Print scalar
910  if (sparsity().nnz()==0) {
911  ss << "00";
912  } else {
913  ss << v_.value;
914  }
915  } else if (sparsity().is_empty()) {
916  // Print empty
917  sparsity().disp(ss);
918  } else {
919  // Print value
920  if (v_.value==0) {
921  ss << "zeros(";
922  } else if (v_.value==1) {
923  ss << "ones(";
924  } else if (v_.value!=v_.value) {
925  ss << "nan(";
926  } else if (v_.value==std::numeric_limits<double>::infinity()) {
927  ss << "inf(";
928  } else if (v_.value==-std::numeric_limits<double>::infinity()) {
929  ss << "-inf(";
930  } else {
931  ss << "all_" << v_.value << "(";
932  }
933 
934  // Print sparsity
935  sparsity().disp(ss);
936  ss << ")";
937  }
938  return ss.str();
939  }
void disp(std::ostream &stream, bool more=false) const
Print a description of the object.

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

template<typename Value >
int casadi::Constant< Value >::eval ( const double **  arg,
double **  res,
casadi_int *  iw,
double *  w 
) const
overridevirtual

Extra doc: https://github.com/casadi/casadi/wiki/L_10a Evaluate the function numerically

Implements casadi::ConstantMX.

Definition at line 838 of file constant_mx.hpp.

838  {
839  std::fill(res[0], res[0]+nnz(), to_double());
840  return 0;
841  }

◆ 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  }
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.
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::ConstantMX::eval_mx ( const std::vector< MX > &  arg,
std::vector< MX > &  res 
) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 103 of file constant_mx.cpp.

103  {
104  res[0] = shared_from_this<MX>();
105  }

◆ eval_sx()

template<typename Value >
int casadi::Constant< Value >::eval_sx ( const SXElem **  arg,
SXElem **  res,
casadi_int *  iw,
SXElem w 
) const
overridevirtual

Implements casadi::ConstantMX.

Definition at line 844 of file constant_mx.hpp.

845  {
846  std::fill(res[0], res[0]+nnz(), SXElem(v_.value));
847  return 0;
848  }

◆ generate()

template<typename Value >
void casadi::Constant< Value >::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_10b

Reimplemented from casadi::MXNode.

Definition at line 851 of file constant_mx.hpp.

855  {
856  if (nnz()==0) {
857  // Quick return
858  } else if (nnz()==1) {
859  g << g.workel(res[0]) << " = " << g.constant(to_double()) << ";\n";
860  } else {
861  if (to_double()==0) {
862  g << g.clear(g.work(res[0], nnz(), false), nnz()) << '\n';
863  } else {
864  g << g.fill(g.work(res[0], nnz(), false), nnz(), g.constant(to_double())) << '\n';
865  }
866  }
867  }

References casadi::CodeGenerator::clear(), casadi::CodeGenerator::constant(), casadi::CodeGenerator::fill(), casadi::CodeGenerator::work(), and casadi::CodeGenerator::workel().

◆ 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  }
static MX create(MXNode *node)
Create from node.
Definition: mx.cpp:67

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  }
std::pair< casadi_int, casadi_int > size() const
Definition: mx_node.hpp:392
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  }
virtual casadi_int offset() const
Definition: mx_node.cpp:218

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

template<typename Value >
Matrix<double> casadi::Constant< Value >::get_DM ( ) const
inlineoverridevirtual

Implements casadi::ConstantMX.

Definition at line 644 of file constant_mx.hpp.

644  {
645  return Matrix<double>(sparsity(), to_double(), false);
646  }
template class CASADI_EXPORT Matrix< double >

References casadi::Matrix< double >.

◆ get_dot()

MX casadi::ConstantMX::get_dot ( const MX y) const
overridevirtualinherited

Inner product

Reimplemented from casadi::MXNode.

Definition at line 238 of file constant_mx.cpp.

238  {
239  if (y.is_constant()) {
240  // Constant folding
241  DM xv = get_DM();
242  DM yv = y->get_DM();
243  return dot(xv, yv);
244  } else {
245  return MXNode::get_dot(y);
246  }
247  }
Matrix< double > get_DM() const override=0
Get the value (only for constant nodes)
virtual MX get_dot(const MX &y) const
Inner product.
Definition: mx_node.cpp:1046
T dot(const std::vector< T > &a, const std::vector< T > &b)
Matrix< double > DM
Definition: dm_fwd.hpp:33

References casadi::dot(), casadi::MXNode::get_DM(), casadi::ConstantMX::get_DM(), casadi::MXNode::get_dot(), and casadi::MX::is_constant().

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

template<typename Value >
MX casadi::Constant< Value >::get_horzcat ( const std::vector< MX > &  x) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 709 of file constant_mx.hpp.

709  {
710  // Check if all arguments have the same constant value
711  for (auto&& i : x) {
712  if (!i->is_value(to_double())) {
713  // Not all the same value, fall back to base class
714  return ConstantMX::get_horzcat(x);
715  }
716  }
717 
718  // Assemble the sparsity pattern
719  std::vector<Sparsity> sp;
720  for (auto&& i : x) sp.push_back(i.sparsity());
721  return MX(horzcat(sp), v_.value, false);
722  }
virtual MX get_horzcat(const std::vector< MX > &x) const
Create a horizontal concatenation node.
Definition: mx_node.cpp:1097

References casadi::MXNode::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)
static bool simplification_on_the_fly
Indicates whether simplifications should be made on the fly.
@ OP_HORZCAT
Definition: calculus.hpp:124

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

template<typename Value >
MX casadi::Constant< Value >::get_nzassign ( const MX y,
const std::vector< casadi_int > &  nz 
) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 884 of file constant_mx.hpp.

884  {
885  if (y.is_constant() && y->is_zero() && v_.value==0) {
886  return y;
887  }
888 
889  // Fall-back
890  return MXNode::get_nzassign(y, nz);
891  }
virtual MX get_nzassign(const MX &y, const std::vector< casadi_int > &nz) const
Assign the nonzeros of a matrix to another matrix.
Definition: mx_node.cpp:688

References casadi::MXNode::get_nzassign(), casadi::MX::is_constant(), and casadi::MXNode::is_zero().

◆ get_nzref()

template<typename Value >
MX casadi::Constant< Value >::get_nzref ( const Sparsity sp,
const std::vector< casadi_int > &  nz 
) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 870 of file constant_mx.hpp.

870  {
871  if (v_.value!=0) {
872  // Check if any "holes"
873  for (std::vector<casadi_int>::const_iterator k=nz.begin(); k!=nz.end(); ++k) {
874  if (*k<0) {
875  // Do not simplify
876  return MXNode::get_nzref(sp, nz);
877  }
878  }
879  }
880  return MX::create(new Constant<Value>(sp, v_));
881  }
virtual MX get_nzref(const Sparsity &sp, const std::vector< casadi_int > &nz) const
Get the nonzeros of matrix.
Definition: mx_node.cpp:657

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

◆ get_output()

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

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

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

Definition at line 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()

template<typename Value >
MX casadi::Constant< Value >::get_project ( const Sparsity sp) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 894 of file constant_mx.hpp.

894  {
895  if (is_zero()) {
896  return MX::create(new Constant<Value>(sp, v_));
897  } else if (sp.is_dense()) {
898  return densify(get_DM());
899  } else {
900  return MXNode::get_project(sp);
901  }
902  }
Matrix< double > get_DM() const override
Get the value (only for constant nodes)
bool is_zero() const override
Check if a particular integer value.
virtual MX get_project(const Sparsity &sp) const
Create set sparse.
Definition: mx_node.cpp:756

References casadi::MX::create(), casadi::MXNode::get_project(), casadi::Sparsity::is_dense(), and casadi::is_zero().

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

template<typename Value >
MX casadi::Constant< Value >::get_reshape ( const Sparsity sp) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 741 of file constant_mx.hpp.

741  {
742  return MX::create(new Constant<Value>(sp, v_));
743  }

References casadi::MX::create().

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

template<typename Value >
MX casadi::Constant< Value >::get_transpose
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 746 of file constant_mx.hpp.

746  {
747  return MX::create(new Constant<Value>(sparsity().T(), v_));
748  }

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

◆ get_unary()

template<typename Value >
MX casadi::Constant< Value >::get_unary ( casadi_int  op) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 751 of file constant_mx.hpp.

751  {
752  // Constant folding
753  double ret(0);
754  casadi_math<double>::fun(op, to_double(), 0.0, ret);
755  if (operation_checker<F0XChecker>(op) || sparsity().is_dense()) {
756  return MX(sparsity(), ret);
757  } else {
758  if (v_.value==0) {
759  if (is_zero() && operation_checker<F0XChecker>(op)) {
760  return MX(sparsity(), ret, false);
761  } else {
762  return repmat(MX(ret), size1(), size2());
763  }
764  }
765  double ret2;
766  casadi_math<double>::fun(op, 0, 0.0, ret2);
767  return DM(sparsity(), ret, false)
768  + DM(sparsity().pattern_inverse(), ret2, false);
769  }
770  }

References casadi::casadi_math< T >::fun(), and casadi::is_zero().

◆ get_vertcat()

template<typename Value >
MX casadi::Constant< Value >::get_vertcat ( const std::vector< MX > &  x) const
overridevirtual

Reimplemented from casadi::MXNode.

Definition at line 725 of file constant_mx.hpp.

725  {
726  // Check if all arguments have the same constant value
727  for (auto&& i : x) {
728  if (!i->is_value(to_double())) {
729  // Not all the same value, fall back to base class
730  return ConstantMX::get_vertcat(x);
731  }
732  }
733 
734  // Assemble the sparsity pattern
735  std::vector<Sparsity> sp;
736  for (auto&& i : x) sp.push_back(i.sparsity());
737  return MX(vertcat(sp), v_.value, false);
738  }
virtual MX get_vertcat(const std::vector< MX > &x) const
Create a vertical concatenation node (vectors only)
Definition: mx_node.cpp:1123

References casadi::MXNode::get_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)
@ OP_VERTCAT
Definition: calculus.hpp:127

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::ConstantMX::has_duplicates ( ) const
inlineoverridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 172 of file constant_mx.hpp.

172 { return false;}

◆ 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

Reimplemented in casadi::IOInstruction.

Definition at line 210 of file mx_node.cpp.

210  {
211  casadi_error("'ind' not defined for class " + class_name());
212  }
std::string class_name() const override
Get name of public class.
Definition: mx_node.cpp:197

References casadi::MXNode::class_name().

Referenced by casadi::GetNonzerosSliceParam::eval(), casadi::GetNonzerosParamParam::eval(), casadi::ConstantDM::generate(), casadi::GetNonzerosVector::generate(), casadi::MXFunction::print(), casadi::MXNode::print_compact(), and casadi::Einstein::sp_reverse().

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

template<typename Value >
bool casadi::Constant< Value >::is_equal ( const MXNode node,
casadi_int  depth 
) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 942 of file constant_mx.hpp.

942  {
943  return node->is_value(to_double()) && sparsity()==node->sparsity();
944  }

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

◆ is_equal() [2/2]

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

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

Definition at line 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()

template<typename Value >
bool casadi::Constant< Value >::is_eye ( ) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 635 of file constant_mx.hpp.

635 { return v_.value==1 && sparsity().is_diag();}
bool is_diag() const
Is diagonal?
Definition: sparsity.cpp:277

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

template<typename Value >
bool casadi::Constant< Value >::is_one ( ) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 634 of file constant_mx.hpp.

634 { return v_.value==1;}

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

bool casadi::ConstantMX::is_valid_input ( ) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Reimplemented in casadi::ZeroByZero.

Definition at line 41 of file constant_mx.cpp.

41  {
42  return nnz()==0;
43  }

References casadi::MXNode::nnz().

◆ is_value()

template<typename Value >
bool casadi::Constant< Value >::is_value ( double  val) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 636 of file constant_mx.hpp.

636 { return v_.value==val;}

◆ is_zero()

template<typename Value >
bool casadi::Constant< Value >::is_zero ( ) const
inlineoverridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 633 of file constant_mx.hpp.

633 { return v_.value==0;}

◆ join_primitives() [1/3]

DM casadi::ConstantMX::join_primitives ( std::vector< DM >::const_iterator &  it) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 99 of file constant_mx.cpp.

99  {
100  return join_primitives_gen<DM>(it);
101  }

◆ join_primitives() [2/3]

MX casadi::ConstantMX::join_primitives ( std::vector< MX >::const_iterator &  it) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 87 of file constant_mx.cpp.

87  {
88  if (nnz()==0) {
89  return shared_from_this<MX>();
90  } else {
91  return MXNode::join_primitives(it);
92  }
93  }
virtual MX join_primitives(std::vector< MX >::const_iterator &it) const
Join an expression along symbolic primitives.
Definition: mx_node.cpp:181

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

◆ join_primitives() [3/3]

SX casadi::ConstantMX::join_primitives ( std::vector< SX >::const_iterator &  it) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 95 of file constant_mx.cpp.

95  {
96  return join_primitives_gen<SX>(it);
97  }

◆ join_primitives_gen()

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

Definition at line 79 of file constant_mx.cpp.

79  {
80  if (nnz()==0) {
81  return T(sparsity());
82  } else {
83  return MXNode::join_primitives(it);
84  }
85  }

References casadi::MXNode::join_primitives(), casadi::MXNode::nnz(), casadi::MXNode::sparsity(), 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 casadi::BSplineCommon::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_primitives()

casadi_int casadi::ConstantMX::n_primitives ( ) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 45 of file constant_mx.cpp.

45  {
46  if (nnz()==0) {
47  return 0;
48  } else {
49  return MXNode::n_primitives();
50  }
51  }
virtual casadi_int n_primitives() const
Get the number of symbolic primitives.
Definition: mx_node.cpp:142

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

◆ 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

◆ op()

casadi_int casadi::ConstantMX::op ( ) const
inlineoverridevirtualinherited

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

Implements casadi::MXNode.

Definition at line 111 of file constant_mx.hpp.

111 { return OP_CONST;}

References casadi::OP_CONST.

◆ primitives()

void casadi::ConstantMX::primitives ( std::vector< MX >::iterator &  it) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 53 of file constant_mx.cpp.

53  {
54  if (nnz()!=0) {
56  }
57  }
virtual void primitives(std::vector< MX >::iterator &it) const
Get symbolic primitives.
Definition: mx_node.cpp:154

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

◆ print_compact()

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

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

Definition at line 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::ConstantMX::reset_input ( ) const
inlineoverridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 177 of file constant_mx.hpp.

177 {}

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

template<typename Value >
void casadi::Constant< Value >::serialize_body ( SerializingStream s) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 700 of file constant_mx.hpp.

700  {
702  }

References casadi::MXNode::serialize_body().

◆ serialize_type()

template<typename Value >
void casadi::Constant< Value >::serialize_type ( SerializingStream s) const
overridevirtual

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

Reimplemented from casadi::MXNode.

Definition at line 693 of file constant_mx.hpp.

693  {
695  s.pack("ConstantMX::type", Value::type_char());
696  v_.serialize_type(s);
697  }

References casadi::SerializingStream::pack(), and casadi::MXNode::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::ConstantMX::sp_forward ( const bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 119 of file constant_mx.cpp.

119  {
120  std::fill_n(res[0], nnz(), 0);
121  return 0;
122  }

References casadi::MXNode::nnz().

◆ sp_reverse()

int casadi::ConstantMX::sp_reverse ( bvec_t **  arg,
bvec_t **  res,
casadi_int *  iw,
bvec_t w 
) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 124 of file constant_mx.cpp.

124  {
125  std::fill_n(res[0], nnz(), 0);
126  return 0;
127  }

References casadi::MXNode::nnz().

◆ 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::ConstantMX::split_primitives ( const DM x,
std::vector< DM >::iterator &  it 
) const
overridevirtualinherited

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

Reimplemented from casadi::MXNode.

Definition at line 74 of file constant_mx.cpp.

74  {
75  split_primitives_gen<DM>(x, it);
76  }

◆ split_primitives() [2/3]

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

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

Reimplemented from casadi::MXNode.

Definition at line 66 of file constant_mx.cpp.

66  {
67  split_primitives_gen<MX>(x, it);
68  }

◆ split_primitives() [3/3]

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

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

Reimplemented from casadi::MXNode.

Definition at line 70 of file constant_mx.cpp.

70  {
71  split_primitives_gen<SX>(x, it);
72  }

◆ split_primitives_gen()

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

Definition at line 60 of file constant_mx.cpp.

60  {
61  if (nnz()!=0) {
63  }
64  }
virtual void split_primitives(const MX &x, std::vector< MX >::iterator &it) const
Split up an expression along symbolic primitives.
Definition: mx_node.cpp:158

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

◆ sz_arg()

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

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

Reimplemented in casadi::Call.

Definition at line 409 of file mx_node.hpp.

409 { return n_dep();}

◆ sz_iw()

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

◆ sz_res()

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

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

Reimplemented in casadi::Call.

Definition at line 414 of file mx_node.hpp.

414 { return nout();}

◆ sz_w()

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

◆ to_double()

template<typename Value >
double casadi::Constant< Value >::to_double ( ) const
inlineoverridevirtual

Implements casadi::ConstantMX.

Definition at line 639 of file constant_mx.hpp.

639  {
640  return static_cast<double>(v_.value);
641  }

◆ 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

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

◆ sparsity_

Sparsity casadi::MXNode::sparsity_
inherited

◆ temp

casadi_int casadi::MXNode::temp
mutableinherited

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

Definition at line 757 of file mx_node.hpp.

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

◆ v_

template<typename Value >
Value casadi::Constant< Value >::v_

Definition at line 689 of file constant_mx.hpp.


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