X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Fpseries.cpp;h=14488ba71c222b81e033379d51f61be66e94b062;hp=41ec9036c00dc78559bff80e1f730032e434c634;hb=a57c586be1fb226e9dd234b481c6b1da91013925;hpb=3ac17e18ada69428fe170c10abcc5f33a30f0676 diff --git a/ginac/pseries.cpp b/ginac/pseries.cpp index 41ec9036..14488ba7 100644 --- a/ginac/pseries.cpp +++ b/ginac/pseries.cpp @@ -412,21 +412,53 @@ ex pseries::evalf(int level) const ex pseries::conjugate() const { + if(!var.info(info_flags::real)) + return conjugate_function(*this).hold(); + epvector * newseq = conjugateepvector(seq); - ex newvar = var.conjugate(); ex newpoint = point.conjugate(); - if (!newseq && are_ex_trivially_equal(newvar, var) && are_ex_trivially_equal(point, newpoint)) { + if (!newseq && are_ex_trivially_equal(point, newpoint)) { return *this; } - ex result = (new pseries(newvar==newpoint, newseq ? *newseq : seq))->setflag(status_flags::dynallocated); + ex result = (new pseries(var==newpoint, newseq ? *newseq : seq))->setflag(status_flags::dynallocated); if (newseq) { delete newseq; } return result; } +ex pseries::real_part() const +{ + if(!var.info(info_flags::real)) + return real_part_function(*this).hold(); + ex newpoint = point.real_part(); + if(newpoint != point) + return real_part_function(*this).hold(); + + epvector v; + v.reserve(seq.size()); + for(epvector::const_iterator i=seq.begin(); i!=seq.end(); ++i) + v.push_back(expair((i->rest).real_part(), i->coeff)); + return (new pseries(var==point, v))->setflag(status_flags::dynallocated); +} + +ex pseries::imag_part() const +{ + if(!var.info(info_flags::real)) + return imag_part_function(*this).hold(); + ex newpoint = point.real_part(); + if(newpoint != point) + return imag_part_function(*this).hold(); + + epvector v; + v.reserve(seq.size()); + for(epvector::const_iterator i=seq.begin(); i!=seq.end(); ++i) + v.push_back(expair((i->rest).imag_part(), i->coeff)); + return (new pseries(var==point, v))->setflag(status_flags::dynallocated); +} + ex pseries::eval_integ() const { epvector *newseq = NULL;