static unsigned check_series(const ex &e, const ex &point, const ex &d, int order = 8)
{
ex es = e.series(x, point, order);
- ex ep = static_cast<const pseries &>(*es.bp).convert_to_poly();
+ ex ep = ex_to_pseries(es).convert_to_poly();
if (!(ep - d).is_zero()) {
clog << "series expansion of " << e << " at " << point
<< " erroneously returned " << ep << " (instead of " << d
unsigned v=golden_ratio_hash(tinfo());
for (unsigned i=0; i<nops(); i++) {
v=rotate_left_31(v);
- v ^= (const_cast<basic *>(this))->let_op(i).gethash();
+ v ^= (const_cast<basic *>(this))->op(i).gethash();
}
v = v & 0x7FFFFFFFU;
return seq.size()+1;
}
-ex expairseq::op(int const i) const
+ex expairseq::op(int i) const
{
if (unsigned(i)<seq.size()) {
return recombine_pair_to_ex(seq[i]);
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <stdexcept>
+
#include "pseries.h"
#include "add.h"
#include "inifcns.h"
os << ")";
}
+unsigned pseries::nops(void) const
+{
+ return seq.size();
+}
+
+ex pseries::op(int i) const
+{
+ if (i < 0 || i >= seq.size())
+ throw (std::out_of_range("op() out of range"));
+ return seq[i].rest * power(var - point, seq[i].coeff);
+}
+
+ex &pseries::let_op(int i)
+{
+ throw (std::logic_error("let_op not defined for pseries"));
+}
+
int pseries::degree(symbol const &s) const
{
if (var.is_equal(s)) {
basic *duplicate() const;
void print(ostream &os, unsigned upper_precedence=0) const;
void printraw(ostream &os) const;
+ unsigned nops(void) const;
+ ex op(int i) const;
+ ex &let_op(int i);
int degree(symbol const &s) const;
int ldegree(symbol const &s) const;
ex coeff(symbol const &s, int const n=1) const;