Loading...
Searching...
No Matches
SymEngine::TransformVisitor Class Reference
+ Inheritance diagram for SymEngine::TransformVisitor:
+ Collaboration diagram for SymEngine::TransformVisitor:

Public Member Functions

virtual RCP< const Basicapply (const RCP< const Basic > &x)
 
void bvisit (const Basic &x)
 
void bvisit (const Add &x)
 
void bvisit (const Mul &x)
 
void bvisit (const Pow &x)
 
void bvisit (const OneArgFunction &x)
 
template<class T >
void bvisit (const TwoArgBasic< T > &x)
 
void bvisit (const MultiArgFunction &x)
 
void bvisit (const Piecewise &x)
 

Protected Attributes

RCP< const Basicresult_
 

Detailed Description

Definition at line 236 of file visitor.h.

Constructor & Destructor Documentation

◆ TransformVisitor()

SymEngine::TransformVisitor::TransformVisitor ( )
inline

Definition at line 242 of file visitor.h.

242{}

Member Function Documentation

◆ apply()

RCP< const Basic > SymEngine::TransformVisitor::apply ( const RCP< const Basic > &  x)
virtual

Definition at line 142 of file visitor.cpp.

143{
144 x->accept(*this);
145 return result_;
146}

◆ bvisit() [1/8]

void SymEngine::TransformVisitor::bvisit ( const Add x)

Definition at line 153 of file visitor.cpp.

154{
155 vec_basic newargs;
156 for (const auto &a : x.get_args()) {
157 newargs.push_back(apply(a));
158 }
159 result_ = add(newargs);
160}
void hash_combine(hash_t &seed, const T &v)
Definition basic-inl.h:95
RCP< const Basic > add(const RCP< const Basic > &a, const RCP< const Basic > &b)
Adds two objects (safely).
Definition add.cpp:425
T push_back(T... args)

◆ bvisit() [2/8]

void SymEngine::TransformVisitor::bvisit ( const Basic x)

Definition at line 148 of file visitor.cpp.

149{
150 result_ = x.rcp_from_this();
151}

◆ bvisit() [3/8]

void SymEngine::TransformVisitor::bvisit ( const Mul x)

Definition at line 162 of file visitor.cpp.

163{
164 vec_basic newargs;
165 for (const auto &a : x.get_args()) {
166 newargs.push_back(apply(a));
167 }
168 result_ = mul(newargs);
169}
RCP< const Basic > mul(const RCP< const Basic > &a, const RCP< const Basic > &b)
Multiplication.
Definition mul.cpp:352

◆ bvisit() [4/8]

void SymEngine::TransformVisitor::bvisit ( const MultiArgFunction x)

Definition at line 193 of file visitor.cpp.

194{
195 auto fargs = x.get_args();
196 vec_basic newargs;
197 for (const auto &a : fargs) {
198 newargs.push_back(apply(a));
199 }
200 auto nbarg = x.create(newargs);
201 result_ = nbarg;
202}

◆ bvisit() [5/8]

void SymEngine::TransformVisitor::bvisit ( const OneArgFunction x)

Definition at line 182 of file visitor.cpp.

183{
184 auto farg = x.get_arg();
185 auto newarg = apply(farg);
186 if (eq(*newarg, *farg)) {
187 result_ = x.rcp_from_this();
188 } else {
189 result_ = x.create(newarg);
190 }
191}
bool eq(const Basic &a, const Basic &b)
Checks equality for a and b
Definition basic-inl.h:21

◆ bvisit() [6/8]

void SymEngine::TransformVisitor::bvisit ( const Piecewise x)

Definition at line 204 of file visitor.cpp.

205{
206 auto branch_cond_pairs = x.get_vec();
207 PiecewiseVec new_pairs;
208 for (const auto &branch_cond : branch_cond_pairs) {
209 auto branch = branch_cond.first;
210 auto cond = branch_cond.second;
211 auto new_branch = apply(branch);
212 auto new_cond = apply(cond);
213 if (!is_a_Boolean(*new_cond)) {
214 new_cond = Eq(new_cond, boolTrue);
215 }
216 new_pairs.push_back(
218 }
219 result_ = piecewise(new_pairs);
220}
RCP< const Boolean > Eq(const RCP< const Basic > &lhs)
Returns the canonicalized Equality object from a single argument.
Definition logic.cpp:653

◆ bvisit() [7/8]

void SymEngine::TransformVisitor::bvisit ( const Pow x)

Definition at line 171 of file visitor.cpp.

172{
173 auto base_ = x.get_base(), exp_ = x.get_exp();
174 auto newarg1 = apply(base_), newarg2 = apply(exp_);
175 if (base_ != newarg1 or exp_ != newarg2) {
176 result_ = pow(newarg1, newarg2);
177 } else {
178 result_ = x.rcp_from_this();
179 }
180}
T pow(T... args)

◆ bvisit() [8/8]

template<class T >
void SymEngine::TransformVisitor::bvisit ( const TwoArgBasic< T > &  x)
inline

Definition at line 253 of file visitor.h.

254 {
255 auto farg1 = x.get_arg1(), farg2 = x.get_arg2();
256 auto newarg1 = apply(farg1), newarg2 = apply(farg2);
257 if (farg1 != newarg1 or farg2 != newarg2) {
258 result_ = x.create(newarg1, newarg2);
259 } else {
260 result_ = x.rcp_from_this();
261 }
262 }

Field Documentation

◆ result_

RCP<const Basic> SymEngine::TransformVisitor::result_
protected

Definition at line 239 of file visitor.h.


The documentation for this class was generated from the following files: