delpi
0.0.1
DElta-complete LP solver
Toggle main menu visibility
Loading...
Searching...
No Matches
Expression.h
1
7
#pragma once
8
9
#include <cstddef>
10
#include <functional>
11
#include <map>
12
#include <memory>
13
#include <random>
14
#include <string>
15
#include <unordered_map>
16
#include <utility>
17
#include <vector>
18
19
#include "delpi/libs/gmp.h"
20
#include "delpi/symbolic/Variable.h"
21
#include "delpi/util/concepts.h"
22
#include "delpi/util/intrusive_ptr.hpp"
23
24
namespace
delpi
{
25
26
// Forward declaration. Found in "delpi/symbolic/ExpressionCell.h"
27
class
ExpressionCell
;
28
37
class
Expression {
38
public
:
39
using
Addend = std::pair<Variable, mpq_class>;
40
using
Addends = std::map<Variable, mpq_class>;
41
using
SubstitutionMap = std::unordered_map<Variable, Variable>;
42
44
Expression();
45
Expression(
Variable
var);
// NOLINT (runtime/explicit): This conversion is desirable.
46
Expression(Addend addend);
// NOLINT (runtime/explicit): This conversion is desirable.
47
explicit
Expression(Addends addends);
48
explicit
Expression(std::vector<Addend> addends);
49
Expression(
const
Expression& e);
50
Expression(Expression&& e)
noexcept
;
51
Expression& operator=(
const
Expression& e);
52
Expression& operator=(Expression&& e)
noexcept
;
53
~Expression();
54
56
[[nodiscard]] std::vector<Variable> variables()
const
;
58
[[nodiscard]]
const
Addends& addends()
const
;
60
[[nodiscard]] std::size_t use_count()
const
;
61
63
[[nodiscard]]
bool
equal_to(
const
Expression& o)
const
noexcept
;
65
[[nodiscard]]
bool
less(
const
Expression& o)
const
noexcept
;
67
[[nodiscard]] std::size_t hash()
const
noexcept
;
75
template
<MapFromTo<Variable, mpq_
class
> T>
76
[[nodiscard]] mpq_class
Evaluate
(
const
T& env = {})
const
;
77
91
[[nodiscard]] Expression
Substitute
(
const
SubstitutionMap& s)
const
;
93
[[nodiscard]] std::string ToString()
const
;
94
102
Expression&
Add
(
const
Variable
& var,
const
mpq_class& coeff);
110
Expression&
Subtract
(
const
Variable
& var,
const
mpq_class& coeff);
111
112
Expression operator-()
const
;
113
Expression operator+()
const
;
114
115
Expression& operator*=(
const
mpq_class& o);
116
Expression& operator/=(
const
mpq_class& o);
117
Expression operator*(
const
mpq_class& o)
const
;
118
Expression operator/(
const
mpq_class& o)
const
;
119
120
Expression& operator+=(
const
Variable
& o);
121
Expression& operator-=(
const
Variable
& o);
122
Expression operator+(
const
Variable
& o)
const
;
123
Expression operator-(
const
Variable
& o)
const
;
124
Expression& operator+=(
const
Addend& o);
125
Expression& operator-=(
const
Addend& o);
126
Expression operator+(
const
Addend& o)
const
;
127
Expression operator-(
const
Addend& o)
const
;
128
Expression& operator+=(
const
Expression& o);
129
Expression& operator-=(
const
Expression& o);
130
Expression operator+(
const
Expression& o)
const
;
131
Expression operator-(
const
Expression& o)
const
;
132
140
std::ostream&
Print
(std::ostream& os)
const
;
141
142
private
:
143
intrusive_ptr<ExpressionCell>
ptr_
;
144
};
145
146
Expression
operator-
(
const
Variable
& var);
147
148
Expression
operator*(
const
mpq_class& lhs,
const
Expression
& rhs);
149
Expression
operator*(
const
mpq_class& lhs,
const
Variable
& rhs);
150
Expression
operator*(
const
Variable
& lhs,
const
mpq_class& rhs);
151
Expression
operator/(
const
Variable
& lhs,
const
mpq_class& rhs);
152
153
Expression
operator+(
const
Variable
& lhs,
const
Expression
& rhs);
154
Expression
operator-
(
const
Variable
& lhs,
const
Expression
& rhs);
155
Expression
operator+(
const
Expression::Addend& lhs,
const
Expression
& rhs);
156
Expression
operator-
(
const
Expression::Addend& lhs,
const
Expression
& rhs);
157
158
std::ostream& operator<<(std::ostream& os,
const
Expression
& e);
159
160
}
// namespace delpi
161
162
/* Provides std::hash<smats::Expression>. */
163
template
<>
164
struct
std::hash<
delpi
::Expression> {
165
size_t
operator()(
const
delpi::Expression
& e)
const
noexcept
{
return
e.hash(); }
166
};
167
168
/* Provides std::less<smats::Expression>. */
169
template
<>
170
struct
std::less<
delpi
::Expression> {
171
bool
operator()(
const
delpi::Expression
& lhs,
const
delpi::Expression
& rhs)
const
noexcept
{
return
lhs.less(rhs); }
172
};
173
174
/* Provides std::equal_to<smats::Expression>. */
175
template
<>
176
struct
std::equal_to<
delpi
::Expression> {
177
bool
operator()(
const
delpi::Expression
& lhs,
const
delpi::Expression
& rhs)
const
noexcept
{
178
return
lhs.equal_to(rhs);
179
}
180
};
181
182
#ifdef DELPI_INCLUDE_FMT
183
184
#include "delpi/util/logging.h"
185
186
OSTREAM_FORMATTER(
delpi::Expression
);
187
188
#endif
delpi::ExpressionCell
Symbolic expression representing an addition between linear monomials.
Definition
ExpressionCell.h:27
delpi::Expression
Represents a symbolic form of an expression.
Definition
Expression.h:37
delpi::Expression::Subtract
Expression & Subtract(const Variable &var, const mpq_class &coeff)
Subtract a linear monomial , where is a constant and is a Variable, to the current expression.
Definition
Expression.cpp:84
delpi::Expression::Substitute
Expression Substitute(const SubstitutionMap &s) const
Create a copy of this expression, replacing all occurrences of the variables in s with corresponding ...
Definition
Expression.cpp:48
delpi::Expression::Print
std::ostream & Print(std::ostream &os) const
Print a string representation of this class to the provided os.
Definition
Expression.cpp:50
delpi::Expression::Add
Expression & Add(const Variable &var, const mpq_class &coeff)
Add a linear monomial , where is a constant and is a Variable, to the current expression.
Definition
Expression.cpp:76
delpi::Expression::Evaluate
mpq_class Evaluate(const T &env={}) const
Evaluates using a given environment (by default, an empty environment).
Definition
Expression.cpp:45
delpi::Expression::ptr_
intrusive_ptr< ExpressionCell > ptr_
Internal pointer to the ExpressionCell.
Definition
Expression.h:143
delpi::Variable
Real symbolic variable.
Definition
Variable.h:20
delpi::intrusive_ptr
Pointer to a generic object that supports intrusive reference counting.
Definition
intrusive_ptr.hpp:22
delpi
Global namespace for the delpi library.
delpi::operator-
LpRowSense operator-(const LpRowSense sense)
Invert the sense with delta > 0.
Definition
LpRowSense.cpp:80
delpi
symbolic
Expression.h
Generated by
1.17.0