Dune::Copasi 2.1.0-git79717215+dune.gitlab.629933
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages Concepts
symengine.hh
Go to the documentation of this file.
1#ifndef DUNE_COPASI_SYMENGINE_PARSER_HH
2#define DUNE_COPASI_SYMENGINE_PARSER_HH
3
5
6#include <symengine/lambda_double.h>
7#include <symengine/parser.h>
8#include <symengine/parser/sbml/sbml_parser.h>
9#ifdef HAVE_SYMENGINE_LLVM
10#include <symengine/llvm_double.h>
11#endif
12
13#include <functional>
14#include <string>
15#include <unordered_map>
16#include <vector>
17
18namespace Dune::Copasi {
19
20class SymEngineParser final : public Parser
21{
22
23public:
24 enum class Type
25 {
26 Native,
27 SBML
28 };
29
31
37
39
42
45
46 ~SymEngineParser() override final = default;
47
48 void set_expression(const std::string& expression) override final;
49
50 void define_constant(const std::string& symbol, const RangeField& value) override final;
51
52 std::vector<std::shared_ptr<std::size_t>> setup_function_symbol(const std::string& symbol);
53
54 void define_function(const std::string& symbol, Function0D&& function) override final;
55 void define_function(const std::string& symbol, Function1D&& function) override final;
56 void define_function(const std::string& symbol, Function2D&& function) override final;
57 void define_function(const std::string& symbol, Function3D&& function) override final;
58 void define_function(const std::string& symbol, Function4D&& function) override final;
59
60 void compile() override final;
61
62 [[nodiscard]] RangeField operator()() const noexcept override final;
63
64private:
65 using Parser::_compiled;
66 using Parser::_symbols;
67 using Parser::_variables;
68
69 Type _parser_type;
70 std::vector<std::string> _const_symbols;
71 mutable std::vector<RangeField> _input;
72
73 SymEngine::RCP<const SymEngine::Basic> _se_expression;
74 SymEngine::vec_basic _arguments;
75
76#ifdef HAVE_SYMENGINE_LLVM
77 std::list<SymEngine::LLVMDoubleVisitor> _visitors;
78#else
79 std::list<SymEngine::LambdaRealDoubleVisitor> _visitors;
80#endif
81
82 mutable std::vector<fu2::unique_function<void()>> _setup, _callbacks;
83 RangeField _result;
84};
85
86} // namespace Dune::Copasi
87
88#endif // DUNE_COPASI_SYMENGINE_PARSER_HH
Definition: parser.hh:16
std::string expression() const
fu2::unique_function< RangeField(RangeField, RangeField, RangeField) const > Function3D
Definition: parser.hh:34
fu2::unique_function< RangeField() const > Function0D
Definition: parser.hh:31
fu2::unique_function< RangeField(RangeField, RangeField, RangeField, RangeField) const > Function4D
Definition: parser.hh:35
double RangeField
Definition: parser.hh:29
fu2::unique_function< RangeField(RangeField, RangeField) const > Function2D
Definition: parser.hh:33
fu2::unique_function< RangeField(RangeField) const > Function1D
Definition: parser.hh:32
Definition: symengine.hh:21
SymEngineParser & operator=(SymEngineParser &&)=default
SymEngineParser(Type parser_type=Type::Native)
void compile() override final
void define_function(const std::string &symbol, Function0D &&function) override final
Type
Definition: symengine.hh:25
typename Parser::RangeField RangeField
Definition: symengine.hh:30
~SymEngineParser() override final=default
SymEngineParser(SymEngineParser &&)=default
SymEngineParser & operator=(const SymEngineParser &)=delete
void define_constant(const std::string &symbol, const RangeField &value) override final
void set_expression(const std::string &expression) override final
std::vector< std::shared_ptr< std::size_t > > setup_function_symbol(const std::string &symbol)
SymEngineParser(const SymEngineParser &)=delete
Definition: axis_names.hh:7