X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fpseries.cpp;h=0e1f183322c47114404c1c4c7b502f6cc44d68f4;hp=db7cef30d8bfe44234658770726822c578271385;hb=04aace56d3d2ca82be59460bf1922600ae43449a;hpb=38e6775ed4f33912f3d23ebd0291373a275be86e 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