]> www.ginac.de Git - ginac.git/blobdiff - ginac/pseries.cpp
- small efficiency fix in mul_series
[ginac.git] / ginac / pseries.cpp
index 035551d8889ab0f2bef95853d18bd8117c53dd70..58f8d629c48c02ad535408cf2640fdc021e8817b 100644 (file)
@@ -165,6 +165,9 @@ basic *pseries::duplicate() const
 void pseries::print(ostream &os, unsigned upper_precedence) const
 {
     debugmsg("pseries print", LOGLEVEL_PRINT);
+    // This could be made better, since series expansion at x==1 might print
+    // -1+2*x+Order((-1+x)^2) instead of 1+2*(-1+x)+Order((-1+x)^2), which is
+    // correct but can be rather confusing.
     convert_to_poly().print(os, upper_precedence);
 }
 
@@ -178,6 +181,23 @@ void pseries::printraw(ostream &os) const
        os << ")";
 }
 
+void pseries::printtree(ostream & os, unsigned indent) const
+{
+    debugmsg("pseries printtree",LOGLEVEL_PRINT);
+    os << string(indent,' ') << "pseries " 
+       << ", hash=" << hashvalue << " (0x" << hex << hashvalue << dec << ")"
+       << ", flags=" << flags << endl;
+    for (unsigned i=0; i<seq.size(); ++i) {
+        seq[i].rest.printtree(os,indent+delta_indent);
+        seq[i].coeff.printtree(os,indent+delta_indent);
+        if (i!=seq.size()-1) {
+            os << string(indent+delta_indent,' ') << "-----" << endl;
+        }
+    }
+    var.printtree(os, indent+delta_indent);
+    point.printtree(os, indent+delta_indent);
+}
+
 unsigned pseries::nops(void) const
 {
     return seq.size();
@@ -616,7 +636,7 @@ ex pseries::mul_series(const pseries &other) const
             ex a_coeff = coeff(*s, i);
             ex b_coeff = other.coeff(*s, cdeg-i);
             if (!is_order_function(a_coeff) && !is_order_function(b_coeff))
-                co += coeff(*s, i) * other.coeff(*s, cdeg-i);
+                co += a_coeff * b_coeff;
         }
         if (!co.is_zero())
             new_seq.push_back(expair(co, numeric(cdeg)));