From 04aace56d3d2ca82be59460bf1922600ae43449a Mon Sep 17 00:00:00 2001 From: Chris Dams Date: Tue, 13 Feb 2007 14:44:39 +0000 Subject: [PATCH 1/1] Created pseries::evalm. Patch by Alexei. --- ginac/pseries.cpp | 28 ++++++++++++++++++++++++++++ ginac/pseries.h | 1 + 2 files changed, 29 insertions(+) diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index db7cef30..0e1f1833 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -489,6 +489,34 @@ ex pseries::eval_integ() const return *this; } +ex pseries::evalm() const +{ + // evalm each coefficient + epvector newseq; + bool something_changed = false; + for (epvector::const_iterator i=seq.begin(); i!=seq.end(); ++i) { + if (something_changed) { + ex newcoeff = i->rest.evalm(); + if (!newcoeff.is_zero()) + newseq.push_back(expair(newcoeff, i->coeff)); + } + else { + ex newcoeff = i->rest.evalm(); + if (!are_ex_trivially_equal(newcoeff, i->rest)) { + something_changed = true; + newseq.reserve(seq.size()); + std::copy(seq.begin(), i, std::back_inserter(newseq)); + if (!newcoeff.is_zero()) + newseq.push_back(expair(newcoeff, i->coeff)); + } + } + } + if (something_changed) + return (new pseries(var==point, newseq))->setflag(status_flags::dynallocated); + else + return *this; +} + ex pseries::subs(const exmap & m, unsigned options) const { // If expansion variable is being substituted, convert the series to a diff --git a/ginac/pseries.h b/ginac/pseries.h index ed266c49..e53baf6e 100644 --- a/ginac/pseries.h +++ b/ginac/pseries.h @@ -59,6 +59,7 @@ public: ex real_part() const; ex imag_part() const; ex eval_integ() const; + ex evalm() const; protected: ex derivative(const symbol & s) const; -- 2.44.0