32#include <exprtk/exprtk.hpp>
35 static std::mutex parser_mutex;
36 static exprtk::parser<double> parser;
50 Expression(
unsigned, std::vector<std::string>&&);
52 [[nodiscard]]
virtual unique_ptr<Expression>
unique_copy()
const = 0;
54 [[nodiscard]]
virtual uword
input_size()
const;
58 static std::string
error();
61 virtual Mat<double>
evaluate(
const Col<double>&) = 0;
64 virtual Mat<double>
gradient(
const Col<double>&) = 0;
66 void print()
override;
73 [[nodiscard]] unique_ptr<Expression>
unique_copy()
const override;
75 Mat<double>
evaluate(
const Col<double>&)
override;
77 Mat<double>
gradient(
const Col<double>&)
override;
86 [[nodiscard]] unique_ptr<Expression>
unique_copy()
const override;
90 Mat<double>
evaluate(
const Col<double>&)
override;
92 Mat<double>
gradient(
const Col<double>&)
override {
throw std::runtime_error(
"gradient is not implemented for vector expression"); }
A Expression class represents a maths expression.
Definition Expression.h:34
Mat< double > gradient(double)
Definition Expression.cpp:57
exprtk::expression< double > expression
Definition Expression.h:45
virtual Mat< double > gradient(const Col< double > &)=0
Mat< double > evaluate(double)
Definition Expression.cpp:55
void print() override
Definition Expression.cpp:59
virtual uword output_size() const
Definition Expression.cpp:45
virtual unique_ptr< Expression > unique_copy() const =0
std::string expression_text
Definition Expression.h:41
static std::string error()
Definition Expression.cpp:53
virtual uword input_size() const
Definition Expression.cpp:43
Col< double > x
Definition Expression.h:39
std::vector< std::string > variable_text_list
Definition Expression.h:43
exprtk::symbol_table< double > symbol_table
Definition Expression.h:47
virtual Mat< double > evaluate(const Col< double > &)=0
bool compile(std::string_view)
Definition Expression.cpp:47
Definition Expression.h:69
unique_ptr< Expression > unique_copy() const override
Definition Expression.cpp:66
Mat< double > gradient(const Col< double > &) override
Definition Expression.cpp:79
Mat< double > evaluate(const Col< double > &) override
Definition Expression.cpp:72
Definition Expression.h:80
unique_ptr< Expression > unique_copy() const override
Definition Expression.cpp:97
uword output_size() const override
Definition Expression.cpp:103
Mat< double > evaluate(const Col< double > &) override
Definition Expression.cpp:105
Mat< double > gradient(const Col< double > &) override
Definition Expression.h:92
Label objects that cannot be copied.
Definition Tag.h:88