mul.h
Go to the documentation of this file.
1 
6 #ifndef SYMENGINE_MUL_H
7 #define SYMENGINE_MUL_H
8 
9 #include <symengine/basic.h>
10 
11 namespace SymEngine
12 {
13 
73 class SYMENGINE_EXPORT Mul : public Basic
74 {
75 private:
76  RCP<const Number> coef_;
77  map_basic_basic
79 
80 public:
81  IMPLEMENT_TYPEID(SYMENGINE_MUL)
84  Mul(const RCP<const Number> &coef, map_basic_basic &&dict);
86  hash_t __hash__() const override;
91  bool __eq__(const Basic &o) const override;
92  int compare(const Basic &o) const override;
93 
94  // Performs canonicalization first:
96  static RCP<const Basic> from_dict(const RCP<const Number> &coef,
97  map_basic_basic &&d);
99  static void dict_add_term(map_basic_basic &d, const RCP<const Basic> &exp,
100  const RCP<const Basic> &t);
101  static void dict_add_term_new(const Ptr<RCP<const Number>> &coef,
102  map_basic_basic &d,
103  const RCP<const Basic> &exp,
104  const RCP<const Basic> &t);
106  static void as_base_exp(const RCP<const Basic> &self,
107  const Ptr<RCP<const Basic>> &exp,
108  const Ptr<RCP<const Basic>> &base);
110 
113  void as_two_terms(const Ptr<RCP<const Basic>> &a,
114  const Ptr<RCP<const Basic>> &b) const;
116  void power_num(const Ptr<RCP<const Number>> &coef, map_basic_basic &d,
117  const RCP<const Number> &exp) const;
118 
120  bool is_canonical(const RCP<const Number> &coef,
121  const map_basic_basic &dict) const;
122 
123  vec_basic get_args() const override;
124 
125  inline const RCP<const Number> &get_coef() const
126  {
127  return coef_;
128  }
129  inline const map_basic_basic &get_dict() const
130  {
131  return dict_;
132  }
133 };
135 SYMENGINE_EXPORT RCP<const Basic> mul(const RCP<const Basic> &a,
136  const RCP<const Basic> &b);
137 SYMENGINE_EXPORT RCP<const Basic> mul(const vec_basic &a);
139 SYMENGINE_EXPORT RCP<const Basic> div(const RCP<const Basic> &a,
140  const RCP<const Basic> &b);
142 SYMENGINE_EXPORT RCP<const Basic> neg(const RCP<const Basic> &a);
143 
144 } // namespace SymEngine
145 
146 #endif
The base class for SymEngine.
#define IMPLEMENT_TYPEID(SYMENGINE_ID)
Inline members and functions.
Definition: basic.h:344
The lowest unit of symbolic representation.
Definition: basic.h:97
map_basic_basic dict_
The coefficient (e.g. 2 in 2*x*y)
Definition: mul.h:78
Main namespace for SymEngine package.
Definition: add.cpp:19
RCP< const Basic > mul(const RCP< const Basic > &a, const RCP< const Basic > &b)
Multiplication.
Definition: mul.cpp:352
RCP< const Basic > neg(const RCP< const Basic > &a)
Negation.
Definition: mul.cpp:443
RCP< const Basic > exp(const RCP< const Basic > &x)
Returns the natural exponential function E**x = pow(E, x)
Definition: pow.cpp:271
RCP< const Basic > div(const RCP< const Basic > &a, const RCP< const Basic > &b)
Division.
Definition: mul.cpp:431