diff --git a/sumpy/expansion/local.py b/sumpy/expansion/local.py index 884332572d94e7dfbb11f5a5797227fb2e33737f..809120776b79e518e4e8727dc9bcf94fa9082c55 100644 --- a/sumpy/expansion/local.py +++ b/sumpy/expansion/local.py @@ -130,10 +130,10 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): evaluated_coeffs = ( self.derivative_wrangler.get_full_kernel_derivatives_from_stored( coeffs, rscale)) - bvec = [sym.UnevaluatedExpr(b * rscale**-1) for b in bvec] + bvec = bvec * rscale**-1 result = sum( coeff - * mi_power(bvec, mi) + * mi_power(bvec, mi, evaluate=False) / mi_factorial(mi) for coeff, mi in zip( evaluated_coeffs, self.get_full_coefficient_identifiers())) diff --git a/sumpy/symbolic.py b/sumpy/symbolic.py index c7ed61e60c937cd18020b1ced0bd9629c5a0aa30..1ddfb8765cdca703d35111691b89b8691410563f 100644 --- a/sumpy/symbolic.py +++ b/sumpy/symbolic.py @@ -111,6 +111,13 @@ if not have_unevaluated_expr: return x +if USE_SYMENGINE: + def UnevaluatedPow(a, b): + return Pow(a, b) +else: + def UnevaluatedPow(a, b): + return Pow(a, b, evaluate=False) + # {{{ debugging of sympy CSE via Maxima class _DerivativeKiller(IdentityMapperBase): diff --git a/sumpy/tools.py b/sumpy/tools.py index 469cb5e15238299092d55841f2bf43486bd11e0c..4e71c43ccf70b62749922caa120b05730544fd1e 100644 --- a/sumpy/tools.py +++ b/sumpy/tools.py @@ -55,10 +55,13 @@ def mi_factorial(mi): return result -def mi_power(vector, mi): +def mi_power(vector, mi, evaluate=True): result = 1 for mi_i, vec_i in zip(mi, vector): - result *= vec_i**mi_i + if evaluate: + result *= vec_i**mi_i + else + result *= sym.UnevaluatedPow(vec_i, mi_i) return result