+ virtual ex evalm() const;
+ virtual ex eval_integ() const;
+protected:
+ virtual ex eval_ncmul(const exvector & v) const;
+public:
+ virtual ex eval_indexed(const basic & i) const;
+
+ // printing
+ virtual void print(const print_context & c, unsigned level = 0) const;
+ virtual void dbgprint() const;
+ virtual void dbgprinttree() const;
+ virtual unsigned precedence() const;
+
+ // info
+ virtual bool info(unsigned inf) const;
+
+ // operand access
+ virtual size_t nops() const;
+ virtual ex op(size_t i) const;
+ virtual ex operator[](const ex & index) const;
+ virtual ex operator[](size_t i) const;
+ virtual ex & let_op(size_t i);
+ virtual ex & operator[](const ex & index);
+ virtual ex & operator[](size_t i);
+
+ // pattern matching
+ virtual bool has(const ex & other, unsigned options = 0) const;
+ virtual bool match(const ex & pattern, lst & repl_lst) const;
+protected:
+ virtual bool match_same_type(const basic & other) const;
+public:
+
+ // substitutions
+ virtual ex subs(const exmap & m, unsigned options = 0) const;
+
+ // function mapping
+ virtual ex map(map_function & f) const;
+
+ // visitors and tree traversal
+ virtual void accept(GiNaC::visitor & v) const
+ {
+ if (visitor *p = dynamic_cast<visitor *>(&v))
+ p->visit(*this);
+ }
+
+ // degree/coeff
+ virtual bool is_polynomial(const ex & var) const;
+ virtual int degree(const ex & s) const;
+ virtual int ldegree(const ex & s) const;
+ virtual ex coeff(const ex & s, int n = 1) const;
+
+ // expand/collect
+ virtual ex expand(unsigned options = 0) const;
+ virtual ex collect(const ex & s, bool distributed = false) const;
+
+ // differentiation and series expansion
+protected:
+ virtual ex derivative(const symbol & s) const;
+public: