21#include <unordered_map>
25#include "smats/symbolic/environment.h"
26#include "smats/symbolic/expression_kind.h"
27#include "smats/symbolic/variable.h"
28#include "smats/symbolic/variables.h"
29#include "smats/util/definitions.h"
30#include "smats/util/hash.hpp"
39class UnaryExpressionCell;
41class BinaryExpressionCell;
194 static Expression pi{
static_cast<T
>(std::numbers::pi)};
198 static Expression e{
static_cast<T
>(std::numbers::e)};
322 [[nodiscard]] std::string to_string()
const;
339 [[nodiscard]]
bool is_leaf()
const;
340 [[nodiscard]]
bool is_constant()
const;
341 [[nodiscard]]
bool is_constant(
const T& value)
const;
342 [[nodiscard]]
bool is_variable()
const;
343 [[nodiscard]]
bool is_variable(
const Variable& var)
const;
344 [[nodiscard]]
bool is_addition()
const;
345 [[nodiscard]]
bool is_multiplication()
const;
346 [[nodiscard]]
bool is_division()
const;
347 [[nodiscard]]
bool is_nan()
const;
348 [[nodiscard]]
bool is_pow()
const;
349 template <ExpressionKind K>
350 [[nodiscard]]
bool is()
const {
351 return cell_->kind() == K;
354 [[nodiscard]]
const T& constant()
const;
355 [[nodiscard]]
const std::map<Expression<T>, T>& expression_to_coeff_map()
const;
356 [[nodiscard]]
const std::map<Expression<T>,
Expression<T>>& base_to_exponent_map()
const;
361 [[nodiscard]]
long use_count()
const {
return cell_.use_count(); }
375 std::shared_ptr<const ExpressionCell<T>> cell_;
390std::ostream& operator<<(std::ostream& os,
const Expression<T>& e);
392EXTERNAL_TEMPLATE_INSTANTIATION_NUMERIC(
Expression);
Definition environment.h:45
Definition expression.h:51
Definition expression.h:67
Definition expression_factory.h:18
Definition expression.h:65
Definition expression.h:71
Definition expression.h:69
Definition expression.h:83
Definition expression_cell.h:54
Definition expression.h:61
Definition expression.h:75
Definition expression.h:53
Definition expression.h:85
Definition expression.h:87
Definition expression.h:49
Definition expression.h:81
Definition expression.h:79
Definition expression_factory.h:56
Definition expression_cell.h:530
Definition expression.h:59
Definition expression.h:73
Definition expression.h:55
Definition expression.h:63
Definition expression.h:77
Definition expression.h:89
Definition expression.h:185
Variables variables() const
Definition expression.cpp:40
bool is_polynomial() const
Definition expression.cpp:57
Expression< T > evaluate_partial(const Environment< T > &env) const
Definition expression.cpp:107
ExpressionKind kind() const
Definition expression.cpp:36
T evaluate(const Environment< T > &env={}) const
Definition expression.cpp:103
Expression()
Definition expression.cpp:19
bool equal_to(const Expression< T > &e) const
Definition expression.cpp:45
bool is_expanded() const
Definition expression.cpp:111
bool less(const Expression< T > &e) const
Definition expression.cpp:51
Definition variables.h:27
ExpressionKind
Definition expression_kind.h:20