diff --git a/sumpy/expansion/local.py b/sumpy/expansion/local.py index 9e891a2dc48399bfded9e7cb0fc6ed63f38c40e4..483bc0eb16fcee7b43d54aedb4eaa8092f593620 100644 --- a/sumpy/expansion/local.py +++ b/sumpy/expansion/local.py @@ -130,7 +130,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): evaluated_coeffs = ( self.derivative_wrangler.get_full_kernel_derivatives_from_stored( coeffs, rscale)) - bvec = bvec / rscale + bvec = bvec * rscale**-1 result = sum( coeff * mi_power(bvec, mi) @@ -195,7 +195,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): # canceling "rscales" closer to each other in the hope of helping # with that. result = [ - (taker.diff(mi) * tgt_rscale**sum(mi)).expand(deep=False) + (taker.diff(mi) * tgt_rscale**sum(mi)).expand() for mi in self.get_coefficient_identifiers()] logger.info("building translation operator: done") diff --git a/sumpy/expansion/multipole.py b/sumpy/expansion/multipole.py index 4db9250b329602ead272e122c0c128059829277d..0ddbb428108ff0bd52dd896f88ba1115a66428c5 100644 --- a/sumpy/expansion/multipole.py +++ b/sumpy/expansion/multipole.py @@ -88,7 +88,7 @@ class VolumeTaylorMultipoleExpansionBase(MultipoleExpansionBase): for i, mi in enumerate(coeff_identifiers): result[i] /= (mi_factorial(mi) * rscale ** sum(mi)) else: - avec = avec/rscale + avec = avec * rscale**-1 result = [ mi_power(avec, mi) / mi_factorial(mi) @@ -107,7 +107,7 @@ class VolumeTaylorMultipoleExpansionBase(MultipoleExpansionBase): self.kernel.adjust_for_kernel_scaling( vector_subs( expr, - bvec, bvec/rscale), + bvec, bvec * rscale**-1), rscale, nderivatives) / rscale ** (nderivatives - nderivatives_for_scaling)) else: diff --git a/sumpy/symbolic.py b/sumpy/symbolic.py index 55f91284d62c536c290c2ccf8f2c07f4d829796f..665aff9d80b6fb9f5ae0e67770a361110db36210 100644 --- a/sumpy/symbolic.py +++ b/sumpy/symbolic.py @@ -199,7 +199,7 @@ def vector_subs(expr, from_vec, to_vec): for icol in range(from_vec.cols): subs_pairs.append((from_vec[irow, icol], to_vec[irow, icol])) - return expr.subs(subs_pairs) + return expr.subs(dict(subs_pairs)) def find_power_of(base, prod): diff --git a/test/test_kernels.py b/test/test_kernels.py index 65295e29451e039619ef65076926cc1b5b182d22..a0cf8ae7f34a529d60e1cc07d45af87c854d3db8 100644 --- a/test/test_kernels.py +++ b/test/test_kernels.py @@ -141,6 +141,9 @@ def test_p2e2p(ctx_getter, base_knl, expn_class, order, with_source_derivative): from sympy.core.cache import clear_cache clear_cache() + from sumpy import set_caching_enabled + set_caching_enabled(False) + ctx = ctx_getter() queue = cl.CommandQueue(ctx) @@ -331,6 +334,8 @@ def test_p2e2p(ctx_getter, base_knl, expn_class, order, with_source_derivative): slack += 0.3 grad_slack += 0.3 + set_caching_enabled(True) + assert eoc_rec_pot.order_estimate() > tgt_order - slack assert eoc_rec_grad_x.order_estimate() > tgt_order_grad - grad_slack @@ -350,6 +355,9 @@ def test_translations(ctx_getter, knl, local_expn_class, mpole_expn_class): from sympy.core.cache import clear_cache clear_cache() + from sumpy import set_caching_enabled + set_caching_enabled(False) + ctx = ctx_getter() queue = cl.CommandQueue(ctx) @@ -597,6 +605,8 @@ def test_translations(ctx_getter, knl, local_expn_class, mpole_expn_class): pconv_verifier_full.add_data_point(order, err) + set_caching_enabled(True) + for name, verifier in [ ("p2m2p", pconv_verifier_p2m2p), ("p2m2m2p", pconv_verifier_p2m2m2p),