From: Chris Dams Date: Tue, 13 Feb 2007 14:44:39 +0000 (+0000) Subject: Created pseries::evalm. Patch by Alexei. X-Git-Tag: release_1-4-0~32 X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=commitdiff_plain;h=04aace56d3d2ca82be59460bf1922600ae43449a;hp=38e6775ed4f33912f3d23ebd0291373a275be86e Created pseries::evalm. Patch by Alexei. --- 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;