]> www.ginac.de Git - ginac.git/blobdiff - ginac/add.cpp
fixed a bug where quo() would call vector::reserve() with a negative argument
[ginac.git] / ginac / add.cpp
index 1f71b0606d7ff9b9ed9f9c943e075412a7e945d4..3a7a9126db69f03209f2bb90bafcd8f1574acf3e 100644 (file)
@@ -152,10 +152,20 @@ void add::print(const print_context & c, unsigned level) const
                                c.s << '+';
                        overall_coeff.print(c, precedence());
                }
-       
+               
                if (precedence() <= level)
                        c.s << ")";
 
+       } else if (is_a<print_python_repr>(c)) {
+
+               c.s << class_name() << '(';
+               op(0).print(c);
+               for (unsigned i=1; i<nops(); ++i) {
+                       c.s << ',';
+                       op(i).print(c);
+               }
+               c.s << ')';
+
        } else {
 
                if (precedence() <= level) {
@@ -445,7 +455,7 @@ expair add::split_ex_to_pair(const ex & e) const
 {
        if (is_ex_exactly_of_type(e,mul)) {
                const mul &mulref(ex_to<mul>(e));
-               ex numfactor = mulref.overall_coeff;
+               const ex &numfactor = mulref.overall_coeff;
                mul *mulcopyp = new mul(mulref);
                mulcopyp->overall_coeff = _ex1;
                mulcopyp->clearflag(status_flags::evaluated);
@@ -462,7 +472,7 @@ expair add::combine_ex_with_coeff_to_pair(const ex & e,
        GINAC_ASSERT(is_exactly_a<numeric>(c));
        if (is_ex_exactly_of_type(e, mul)) {
                const mul &mulref(ex_to<mul>(e));
-               ex numfactor = mulref.overall_coeff;
+               const ex &numfactor = mulref.overall_coeff;
                mul *mulcopyp = new mul(mulref);
                mulcopyp->overall_coeff = _ex1;
                mulcopyp->clearflag(status_flags::evaluated);
@@ -501,7 +511,7 @@ ex add::recombine_pair_to_ex(const expair & p) const
        if (ex_to<numeric>(p.coeff).is_equal(_num1))
                return p.rest;
        else
-               return p.rest*p.coeff;
+               return (new mul(p.rest,p.coeff))->setflag(status_flags::dynallocated);
 }
 
 ex add::expand(unsigned options) const