graph_model_internal.hpp
1 /*
2  * This file is part of CasADi.
3  *
4  * CasADi -- A symbolic framework for dynamic optimization.
5  * Copyright (C) 2010-2023 Joel Andersson, Joris Gillis, Moritz Diehl,
6  * KU Leuven. All rights reserved.
7  * Copyright (C) 2011-2014 Greg Horn
8  *
9  * CasADi is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 3 of the License, or (at your option) any later version.
13  *
14  * CasADi is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with CasADi; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  *
23  */
24 
25 
26 #ifndef CASADI_GRAPH_MODEL_INTERNAL_HPP
27 #define CASADI_GRAPH_MODEL_INTERNAL_HPP
28 
29 #include "graph_model_impl.hpp"
30 #include "function_internal.hpp"
31 #include "plugin_interface.hpp"
32 
34 
35 namespace casadi {
36 
37  class GraphBuilderInternal;
38 
47  class CASADI_EXPORT GraphModelInternal
48  : public SharedObjectInternal,
49  public PluginInterface<GraphModelInternal> {
50  public:
51  explicit GraphModelInternal(const std::vector<uint8_t>& model_data);
52  ~GraphModelInternal() override;
53 
54  std::string class_name() const override { return "GraphModelInternal"; }
55  void disp(std::ostream& stream, bool more) const override;
56 
58  typedef GraphModelInternal* (*Creator)(const std::vector<uint8_t>& model_data);
59 
61  struct Exposed { };
62 
64 
67  static const Options options_;
68  virtual const Options& get_options() const { return options_; }
70 
72  void construct(const Dict& opts);
73 
77  virtual void init(const Dict& opts);
78 
80  virtual void fill_metadata(GraphBuilderInternal& gb) const = 0;
81 
83  virtual Function import_symbolic(const GraphBuilderInternal& gb,
84  const std::string& name) = 0;
85 
87  virtual std::vector<uint8_t> export_symbolic(const Function& f, const Dict& opts) = 0;
88 
90  const std::vector<uint8_t>& model_data() const { return model_data_; }
91 
93  const char* plugin_name() const override = 0;
94 
96  static std::map<std::string, Plugin> solvers_;
97 
98 #ifdef CASADI_WITH_THREADSAFE_SYMBOLICS
99  static std::mutex mutex_solvers_;
100 #endif // CASADI_WITH_THREADSAFE_SYMBOLICS
101 
103  static const std::string infix_;
104 
106  static std::string shortname() { return "graphmodel"; }
107 
108  protected:
110  std::vector<uint8_t> model_data_;
111 
113  bool verbose_;
114  };
115 
116 } // namespace casadi
117 
119 
120 #endif // CASADI_GRAPH_MODEL_INTERNAL_HPP
The casadi namespace.
Definition: archiver.hpp:32
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.