From 4bacd765e297f33ba67ed02b67fcdbf5729f0b29 Mon Sep 17 00:00:00 2001 From: Dave Witte Morris Date: Sun, 4 Apr 2021 17:48:22 -0600 Subject: [PATCH 1/5] trac 31554 do not use handle_factor --- build/pkgs/pynac/patches/handle_factor.patch | 47 ++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 build/pkgs/pynac/patches/handle_factor.patch diff --git a/build/pkgs/pynac/patches/handle_factor.patch b/build/pkgs/pynac/patches/handle_factor.patch new file mode 100644 index 00000000000..253d3a4a0d3 --- /dev/null +++ b/build/pkgs/pynac/patches/handle_factor.patch @@ -0,0 +1,47 @@ +diff --git a/ginac/expairseq.cpp b/ginac/expairseq.cpp +index dd87d18..c459604 100644 +--- a/ginac/expairseq.cpp ++++ b/ginac/expairseq.cpp +@@ -1032,7 +1032,14 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) + + if (ex_to(elem.rest).tinfo()==this->tinfo() && + this->can_make_flat(elem)) { +- ex newrest = mf.handle_factor(elem.rest, elem.coeff); ++ ex newrest; ++ if (is_exactly_a(elem.coeff) and elem.coeff.is_zero()) { ++ newrest = default_overall_coeff(); ++ std::cout << dflt << "here A" << std::endl; ++ } else { ++ newrest = elem.rest; ++ std::cout << dflt << "here B" << std::endl; ++ } + const expairseq &subseqref = ex_to(newrest); + combine_overall_coeff(subseqref.overall_coeff, + ex_to(elem.coeff)); +@@ -1043,15 +1050,17 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) + if (elem.is_canonical_numeric()) + combine_overall_coeff(ex_to(mf.handle_factor(elem.rest, _ex1))); + else { +- const ex& rest = elem.rest; +- const ex& newrest = mf.handle_factor(rest, elem.coeff); +- if (newrest.is_zero()) +- combine_overall_coeff(*_num0_p); +- else if (are_ex_trivially_equal(newrest, rest)) +- seq.push_back(elem); +- else +- seq.emplace_back(newrest, elem.coeff); +- } ++ if ((is_exactly_a(elem.coeff) and elem.coeff.is_zero()) ++ or (is_exactly_a(elem.rest) ++ and (ex_to(elem.rest).is_equal(default_overall_coeff())))) { ++ std::cout << dflt << "here C" << std::endl; ++ combine_overall_coeff(default_overall_coeff()); ++ } ++ else { ++ seq.push_back(elem); ++ std::cout << dflt << "here D" << std::endl; ++ } ++ } + } + } + } From 00b44eb082cf37308879b28dd81c8ba37824511b Mon Sep 17 00:00:00 2001 From: Dave Witte Morris Date: Sun, 4 Apr 2021 17:59:14 -0600 Subject: [PATCH 2/5] add doctest --- src/sage/symbolic/expression.pyx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sage/symbolic/expression.pyx b/src/sage/symbolic/expression.pyx index 67110432d2c..d3776d42af2 100644 --- a/src/sage/symbolic/expression.pyx +++ b/src/sage/symbolic/expression.pyx @@ -5489,6 +5489,13 @@ cdef class Expression(CommutativeRingElement): sage: f = function("f") sage: integrate(f(x), x, 0, a).subs(a=cos(a)) integrate(f(x), x, 0, cos(a)) + + Check that :trac:`31554` is fixed:: + + sage: a,b,c,d,x,y = var("a b c d x y") + sage: with hold: + ....: print((2*x^0*a + b*y^1).subs({x:c, y:c*d})) + b*c*d + 2*a """ cdef dict sdict = {} cdef GEx res From 707560af492648a95db55271917374bfeffe9996 Mon Sep 17 00:00:00 2001 From: Dave Witte Morris Date: Sun, 4 Apr 2021 18:00:37 -0600 Subject: [PATCH 3/5] increment pynac patch number --- build/pkgs/pynac/package-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/pkgs/pynac/package-version.txt b/build/pkgs/pynac/package-version.txt index 36905e8533b..07036e5ad8b 100644 --- a/build/pkgs/pynac/package-version.txt +++ b/build/pkgs/pynac/package-version.txt @@ -1 +1 @@ -0.7.27.p1 +0.7.27.p2 From 82843fe4baefd24072af0ab8fdd16ff4b15ca30d Mon Sep 17 00:00:00 2001 From: Dave Witte Morris Date: Sun, 4 Apr 2021 18:40:20 -0600 Subject: [PATCH 4/5] remove debugging code --- build/pkgs/pynac/patches/handle_factor.patch | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/build/pkgs/pynac/patches/handle_factor.patch b/build/pkgs/pynac/patches/handle_factor.patch index 253d3a4a0d3..12a876371c1 100644 --- a/build/pkgs/pynac/patches/handle_factor.patch +++ b/build/pkgs/pynac/patches/handle_factor.patch @@ -1,8 +1,8 @@ diff --git a/ginac/expairseq.cpp b/ginac/expairseq.cpp -index dd87d18..c459604 100644 +index dd87d18..556b713 100644 --- a/ginac/expairseq.cpp +++ b/ginac/expairseq.cpp -@@ -1032,7 +1032,14 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) +@@ -1032,7 +1032,12 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) if (ex_to(elem.rest).tinfo()==this->tinfo() && this->can_make_flat(elem)) { @@ -10,15 +10,13 @@ index dd87d18..c459604 100644 + ex newrest; + if (is_exactly_a(elem.coeff) and elem.coeff.is_zero()) { + newrest = default_overall_coeff(); -+ std::cout << dflt << "here A" << std::endl; + } else { + newrest = elem.rest; -+ std::cout << dflt << "here B" << std::endl; + } const expairseq &subseqref = ex_to(newrest); combine_overall_coeff(subseqref.overall_coeff, ex_to(elem.coeff)); -@@ -1043,15 +1050,17 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) +@@ -1043,15 +1048,15 @@ void expairseq::make_flat(const epvector &v, bool do_index_renaming) if (elem.is_canonical_numeric()) combine_overall_coeff(ex_to(mf.handle_factor(elem.rest, _ex1))); else { @@ -34,12 +32,10 @@ index dd87d18..c459604 100644 + if ((is_exactly_a(elem.coeff) and elem.coeff.is_zero()) + or (is_exactly_a(elem.rest) + and (ex_to(elem.rest).is_equal(default_overall_coeff())))) { -+ std::cout << dflt << "here C" << std::endl; + combine_overall_coeff(default_overall_coeff()); + } + else { + seq.push_back(elem); -+ std::cout << dflt << "here D" << std::endl; + } + } } From eeb6cc28b30923aeaaf26a4375683e20ee5c27df Mon Sep 17 00:00:00 2001 From: Matthias Koeppe Date: Mon, 5 Apr 2021 16:22:22 -0700 Subject: [PATCH 5/5] build/pkgs/pynac/package-version.txt: Bump patch level --- build/pkgs/pynac/package-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/pkgs/pynac/package-version.txt b/build/pkgs/pynac/package-version.txt index a3cd6f51f7a..0d98118e038 100644 --- a/build/pkgs/pynac/package-version.txt +++ b/build/pkgs/pynac/package-version.txt @@ -1 +1 @@ -0.7.27.p3 +0.7.27.p4