dReal4
expression_evaluator.h
1 #pragma once
2 
3 #include <ostream>
4 
5 #include "./ibex.h"
6 
8 #include "dreal/util/box.h"
9 
10 namespace dreal {
11 
13  public:
14  explicit ExpressionEvaluator(Expression e);
15 
16  /// Evaluates the expression with @p box.
17  Box::Interval operator()(const Box& box) const;
18 
19  const Variables& variables() const { return e_.GetVariables(); }
20 
21  private:
22  Box::Interval Visit(const Expression& e, const Box& box) const;
23  static Box::Interval VisitVariable(const Expression& e, const Box& box);
24  static Box::Interval VisitConstant(const Expression& e, const Box& box);
25  static Box::Interval VisitRealConstant(const Expression& e, const Box& box);
26  Box::Interval VisitAddition(const Expression& e, const Box& box) const;
27  Box::Interval VisitMultiplication(const Expression& e, const Box& box) const;
28  Box::Interval VisitDivision(const Expression& e, const Box& box) const;
29  Box::Interval VisitLog(const Expression& e, const Box& box) const;
30  Box::Interval VisitAbs(const Expression& e, const Box& box) const;
31  Box::Interval VisitExp(const Expression& e, const Box& box) const;
32  Box::Interval VisitSqrt(const Expression& e, const Box& box) const;
33  Box::Interval VisitPow(const Expression& e, const Box& box) const;
34 
35  // Evaluates `pow(e1, e2)` with the @p box.
36  Box::Interval VisitPow(const Expression& e1, const Expression& e2,
37  const Box& box) const;
38  Box::Interval VisitSin(const Expression& e, const Box& box) const;
39  Box::Interval VisitCos(const Expression& e, const Box& box) const;
40  Box::Interval VisitTan(const Expression& e, const Box& box) const;
41  Box::Interval VisitAsin(const Expression& e, const Box& box) const;
42  Box::Interval VisitAcos(const Expression& e, const Box& box) const;
43  Box::Interval VisitAtan(const Expression& e, const Box& box) const;
44  Box::Interval VisitAtan2(const Expression& e, const Box& box) const;
45  Box::Interval VisitSinh(const Expression& e, const Box& box) const;
46  Box::Interval VisitCosh(const Expression& e, const Box& box) const;
47  Box::Interval VisitTanh(const Expression& e, const Box& box) const;
48  Box::Interval VisitMin(const Expression& e, const Box& box) const;
49  Box::Interval VisitMax(const Expression& e, const Box& box) const;
50  static Box::Interval VisitIfThenElse(const Expression& e, const Box& box);
51  static Box::Interval VisitUninterpretedFunction(const Expression& e,
52  const Box& box);
53 
54  // Makes VisitExpression a friend of this class so that it can use private
55  // operator()s.
56  friend Box::Interval drake::symbolic::VisitExpression<Box::Interval>(
57  const ExpressionEvaluator*, const Expression&, const Box&);
58 
59  friend std::ostream& operator<<(
60  std::ostream& os, const ExpressionEvaluator& expression_evaluator);
61 
62  const Expression e_;
63 };
64 
65 std::ostream& operator<<(std::ostream& os,
66  const ExpressionEvaluator& expression_evaluator);
67 
68 } // namespace dreal
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
Definition: expression_evaluator.h:12
Represents a n-dimensional interval vector.
Definition: box.h:17
const Variables & GetVariables() const
Collects variables in expression.
Definition: symbolic_expression.cc:174
Box::Interval operator()(const Box &box) const
Evaluates the expression with box.
Definition: expression_evaluator.cc:19
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
Represents a set of variables.
Definition: symbolic_variables.h:25
Represents a symbolic form of an expression.
Definition: symbolic_expression.h:164