26 #ifndef CASADI_ROOTFINDER_IMPL_HPP
27 #define CASADI_ROOTFINDER_IMPL_HPP
29 #include "rootfinder.hpp"
30 #include "oracle_function.hpp"
31 #include "plugin_interface.hpp"
71 size_t get_n_in()
override {
return oracle_.n_in();}
72 size_t get_n_out()
override {
return oracle_.n_out();}
80 Sparsity get_sparsity_out(casadi_int i)
override;
87 std::string get_name_in(casadi_int i)
override;
88 std::string get_name_out(casadi_int i)
override;
100 void init(
const Dict& opts)
override;
105 int init_mem(
void* mem)
const override;
110 void set_work(
void* mem,
const double**& arg,
double**& res,
111 casadi_int*& iw,
double*& w)
const override;
114 int eval(
const double** arg,
double** res, casadi_int* iw,
double* w,
void* mem)
const override;
117 virtual int solve(
void* mem)
const = 0;
120 Dict get_stats(
void* mem)
const override;
126 casadi_int* iw,
bvec_t* w,
void* mem)
const override;
131 int sp_reverse(
bvec_t** arg,
bvec_t** res, casadi_int* iw,
bvec_t* w,
void* mem)
const override;
149 Function get_forward(casadi_int nfwd,
const std::string& name,
150 const std::vector<std::string>& inames,
151 const std::vector<std::string>& onames,
152 const Dict& opts)
const override;
160 Function get_reverse(casadi_int nadj,
const std::string& name,
161 const std::vector<std::string>& inames,
162 const std::vector<std::string>& onames,
163 const Dict& opts)
const override;
169 virtual void ad_forward(
const std::vector<MX>& arg,
const std::vector<MX>& res,
170 const std::vector<std::vector<MX> >& fseed,
171 std::vector<std::vector<MX> >& fsens,
172 bool always_inline,
bool never_inline)
const;
177 virtual void ad_reverse(
const std::vector<MX>& arg,
const std::vector<MX>& res,
178 const std::vector<std::vector<MX> >& aseed,
179 std::vector<std::vector<MX> >& asens,
180 bool always_inline,
bool never_inline)
const;
204 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
205 static std::mutex mutex_solvers_;
215 template<
typename XType>
216 static Function create_oracle(
const std::map<std::string, XType>& d,
Helper class for Serialization.
Base class for functions that perform calculation with an oracle.
Interface for accessing input and output data structures.
Base class for FunctionInternal and LinsolInternal.
virtual int solve(void *mem) const =0
casadi_int n_
Number of equations.
bool has_sprev() const override
size_t get_n_out() override
Number of function inputs and outputs.
std::vector< casadi_int > u_c_
Constraints on decision variables.
bool has_forward(casadi_int nfwd) const override
Generate a function that calculates nfwd forward derivatives.
std::string serialize_base_function() const override
String used to identify the immediate FunctionInternal subclass.
bool has_spfwd() const override
static std::map< std::string, Plugin > solvers_
Collection of solvers.
const Options & get_options() const override
Options.
static std::string shortname()
Short name.
static const std::string infix_
Infix.
Sparsity get_sparsity_in(casadi_int i) override
Sparsities of function inputs and outputs.
casadi_int iin_
Indices of the input and output that correspond to the actual root-finding.
static const Options options_
Options.
Linsol linsol_
Linear solver.
bool has_reverse(casadi_int nadj) const override
Generate a function that calculates nadj adjoint derivatives.
bool uses_output() const override
Do the derivative functions need nondifferentiated outputs?
size_t get_n_in() override
Number of function inputs and outputs.
Helper class for Serialization.
unsigned long long bvec_t
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.
Options metadata for a class.
UnifiedReturnStatus unified_return_status