diff --git a/benchmarks/bench_translations.py b/benchmarks/bench_translations.py index 621ac275d9eb7fcf05763cf5c62d3436dda15e6b..6e87370f2da1d2a568365c088cdd8ee047b3c8c6 100644 --- a/benchmarks/bench_translations.py +++ b/benchmarks/bench_translations.py @@ -65,9 +65,9 @@ class TranslationBenchmarkSuite: dvec = sym.make_sym_vector("d", knl.dim) src_rscale = sym.Symbol("src_rscale") tgt_rscale = sym.Symbol("tgt_rscale") - result = l_expn.translate_from(m_expn, src_coeff_exprs, src_rscale, - dvec, tgt_rscale) sac = SymbolicAssignmentCollection() + result = l_expn.translate_from(m_expn, src_coeff_exprs, src_rscale, + dvec, tgt_rscale, sac) for i, expr in enumerate(result): sac.assign_unique("coeff%d" % i, expr) sac.run_global_cse() diff --git a/sumpy/cse.py b/sumpy/cse.py index 823ef54667ff6c1b8895eab3d59e9b3bd5316f7a..476eb147526b8950a1e4a3db5402a2e9e41b8a54 100644 --- a/sumpy/cse.py +++ b/sumpy/cse.py @@ -145,7 +145,6 @@ class FuncArgTracker(object): for func_i, func in enumerate(funcs): func_argset = set() - for func_arg in func.args: arg_number = self.get_or_add_value_number(func_arg) func_argset.add(arg_number) diff --git a/sumpy/e2e.py b/sumpy/e2e.py index 12e80b5f5d79781ab7ff78bcad8954e3e6ef3271..99f75e81fb93ea1712664423d8759dcfae80bd67 100644 --- a/sumpy/e2e.py +++ b/sumpy/e2e.py @@ -111,7 +111,7 @@ class E2EBase(KernelCacheWrapper): for i, coeff_i in enumerate( self.tgt_expansion.translate_from( self.src_expansion, src_coeff_exprs, src_rscale, - dvec, tgt_rscale))] + dvec, tgt_rscale, sac))] sac.run_global_cse() diff --git a/sumpy/e2p.py b/sumpy/e2p.py index fb5d323ce2b839c3d94eec1c1ed2402d71fae36f..41e6ea3e983984740d4bb3af0df7f7287c826991 100644 --- a/sumpy/e2p.py +++ b/sumpy/e2p.py @@ -94,7 +94,7 @@ class E2PBase(KernelCacheWrapper): result_names = [] for i, knl in enumerate(self.kernels): - value = self.expansion.evaluate(coeff_exprs, bvec, rscale, knl=knl) + value = self.expansion.evaluate(coeff_exprs, bvec, rscale, sac, knl=knl) name = sac.assign_unique("result_%d_p" % i, value) result_names.append(name) diff --git a/sumpy/expansion/__init__.py b/sumpy/expansion/__init__.py index a826bacae25f9602028149a30a00dff679b72bd5..a8f78cfef8fb56fb8cda90ca97e6b2ac91813a12 100644 --- a/sumpy/expansion/__init__.py +++ b/sumpy/expansion/__init__.py @@ -115,20 +115,25 @@ class ExpansionBase(object): """ raise NotImplementedError - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): """Form an expansion from a source point. :arg avec: vector from source to center. :arg bvec: vector from center to target. Not usually necessary, except for line-Taylor expansion. + :arg sac: A SymbolicAssignmentCollction used for storing + temporary expressions. :returns: a list of :mod:`sympy` expressions representing the coefficients of the expansion. """ raise NotImplementedError - def evaluate(self, coeffs, bvec, rscale): + def evaluate(self, coeffs, bvec, rscale, sac): """ + :arg sac: A SymbolicAssignmentCollction used for storing + temporary expressions. + :return: a :mod:`sympy` expression corresponding to the evaluated expansion with the coefficients in *coeffs*. @@ -137,7 +142,7 @@ class ExpansionBase(object): raise NotImplementedError def translate_from(self, src_expansion, src_coeff_exprs, src_rscale, - dvec, tgt_rscale): + dvec, tgt_rscale, sac): raise NotImplementedError def update_persistent_hash(self, key_hash, key_builder): diff --git a/sumpy/expansion/local.py b/sumpy/expansion/local.py index 3879f50d9f3d0c404dd3a697ae51fe125153d873..c52d00160b5216c0840c772eed2bb3aaef8b3ada 100644 --- a/sumpy/expansion/local.py +++ b/sumpy/expansion/local.py @@ -61,7 +61,7 @@ class LineTaylorLocalExpansion(LocalExpansionBase): def get_coefficient_identifiers(self): return list(range(self.order+1)) - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): # no point in heeding rscale here--just ignore it if bvec is None: raise RuntimeError("cannot use line-Taylor expansions in a setting " @@ -102,7 +102,7 @@ class LineTaylorLocalExpansion(LocalExpansionBase): .subs("tau", 0) for i in self.get_coefficient_identifiers()] - def evaluate(self, coeffs, bvec, rscale, knl=None): + def evaluate(self, coeffs, bvec, rscale, sac, knl=None): # no point in heeding rscale here--just ignore it from pytools import factorial return sym.Add(*( @@ -119,7 +119,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): Coefficients represent derivative values of the kernel. """ - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): from sumpy.tools import MiDerivativeTakerWrapper result = [] @@ -132,7 +132,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): return result - def evaluate(self, coeffs, bvec, rscale, knl=None): + def evaluate(self, coeffs, bvec, rscale, sac, knl=None): evaluated_coeffs = ( self.expansion_terms_wrangler.get_full_kernel_derivatives_from_stored( coeffs, rscale)) @@ -152,7 +152,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): return knl.postprocess_at_target(result, bvec) def translate_from(self, src_expansion, src_coeff_exprs, src_rscale, - dvec, tgt_rscale, use_fft=False): + dvec, tgt_rscale, sac, use_fft=False): logger.info("building translation operator: %s(%d) -> %s(%d): start" % (type(src_expansion).__name__, src_expansion.order, @@ -326,7 +326,7 @@ class VolumeTaylorLocalExpansionBase(LocalExpansionBase): # the end in the hope of helping rscale magnitude. dvec_scaled = [d*src_rscale for d in dvec] expr = src_expansion.evaluate(src_coeff_exprs, dvec_scaled, - rscale=src_rscale) + rscale=src_rscale, sac=sac) replace_dict = dict((d, d/src_rscale) for d in dvec) taker = MiDerivativeTaker(expr, dvec) rscale_ratio = sym.UnevaluatedExpr(tgt_rscale/src_rscale) @@ -388,7 +388,7 @@ class _FourierBesselLocalExpansion(LocalExpansionBase): def get_coefficient_identifiers(self): return list(range(-self.order, self.order+1)) - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): if not self.use_rscale: rscale = 1 @@ -406,7 +406,7 @@ class _FourierBesselLocalExpansion(LocalExpansionBase): * sym.exp(sym.I * l * source_angle_rel_center), avec) for l in self.get_coefficient_identifiers()] - def evaluate(self, coeffs, bvec, rscale, knl=None): + def evaluate(self, coeffs, bvec, rscale, sac, knl=None): if not self.use_rscale: rscale = 1 if knl is None: @@ -427,7 +427,7 @@ class _FourierBesselLocalExpansion(LocalExpansionBase): for l in self.get_coefficient_identifiers()) def translate_from(self, src_expansion, src_coeff_exprs, src_rscale, - dvec, tgt_rscale): + dvec, tgt_rscale, sac): from sumpy.symbolic import sym_real_norm_2 if not self.use_rscale: diff --git a/sumpy/expansion/multipole.py b/sumpy/expansion/multipole.py index c4b7f098f44a9f7e69c83878b736486381095cca..c1514357a415554f693eb961b699de412bb773c4 100644 --- a/sumpy/expansion/multipole.py +++ b/sumpy/expansion/multipole.py @@ -55,7 +55,7 @@ class VolumeTaylorMultipoleExpansionBase(MultipoleExpansionBase): Coefficients represent the terms in front of the kernel derivatives. """ - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): from sumpy.kernel import DirectionalSourceDerivative kernel = self.kernel @@ -96,7 +96,7 @@ class VolumeTaylorMultipoleExpansionBase(MultipoleExpansionBase): else: return (rscale**nderivatives_for_scaling * expr) - def evaluate(self, coeffs, bvec, rscale, knl=None): + def evaluate(self, coeffs, bvec, rscale, sac, knl=None): from sumpy.tools import MiDerivativeTakerWrapper from pytools import single_valued if not self.use_rscale: @@ -122,7 +122,7 @@ class VolumeTaylorMultipoleExpansionBase(MultipoleExpansionBase): return result def translate_from(self, src_expansion, src_coeff_exprs, src_rscale, - dvec, tgt_rscale): + dvec, tgt_rscale, sac): if not isinstance(src_expansion, type(self)): raise RuntimeError("do not know how to translate %s to " "Taylor multipole expansion" @@ -324,7 +324,7 @@ class _HankelBased2DMultipoleExpansion(MultipoleExpansionBase): def get_coefficient_identifiers(self): return list(range(-self.order, self.order+1)) - def coefficients_from_source(self, avec, bvec, rscale): + def coefficients_from_source(self, avec, bvec, rscale, sac): if not self.use_rscale: rscale = 1 @@ -344,7 +344,7 @@ class _HankelBased2DMultipoleExpansion(MultipoleExpansionBase): avec) for l in self.get_coefficient_identifiers()] - def evaluate(self, coeffs, bvec, rscale, knl=None): + def evaluate(self, coeffs, bvec, rscale, sac, knl=None): if not self.use_rscale: rscale = 1 if knl is None: diff --git a/sumpy/p2e.py b/sumpy/p2e.py index 2aa648040a7b51645345160ac8288d877ea17c11..f5472fc42e306c21eeec5091b26d548cdb66c71a 100644 --- a/sumpy/p2e.py +++ b/sumpy/p2e.py @@ -88,7 +88,7 @@ class P2EBase(KernelCacheWrapper): coeff_names = [ sac.assign_unique("coeff%d" % i, coeff_i) for i, coeff_i in enumerate( - self.expansion.coefficients_from_source(avec, None, rscale))] + self.expansion.coefficients_from_source(avec, None, rscale, sac))] sac.run_global_cse() diff --git a/sumpy/qbx.py b/sumpy/qbx.py index 9708764c01d0448d7c7e8314efb461989c838acd..e6704ba85f832067349cd3f291c1b47f8243f05c 100644 --- a/sumpy/qbx.py +++ b/sumpy/qbx.py @@ -68,7 +68,7 @@ def stringify_expn_index(i): def expand(expansion_nr, sac, expansion, avec, bvec): rscale = sym.Symbol("rscale") - coefficients = expansion.coefficients_from_source(avec, bvec, rscale) + coefficients = expansion.coefficients_from_source(avec, bvec, rscale, sac) assigned_coeffs = [ sym.Symbol( @@ -78,7 +78,7 @@ def expand(expansion_nr, sac, expansion, avec, bvec): for i in expansion.get_coefficient_identifiers()] return sac.assign_unique("expn%d_result" % expansion_nr, - expansion.evaluate(assigned_coeffs, bvec, rscale)) + expansion.evaluate(assigned_coeffs, bvec, rscale, sac)) # {{{ layer potential computation diff --git a/test/test_codegen.py b/test/test_codegen.py index 7e3c25e0e5f029ef5161ba970106283e01ef245f..02884ebade0ee850e7da9b71734f0b5a1aa5aaee 100644 --- a/test/test_codegen.py +++ b/test/test_codegen.py @@ -91,7 +91,7 @@ def test_line_taylor_coeff_growth(): expn = LineTaylorLocalExpansion(LaplaceKernel(2), order) avec = make_sym_vector("a", 2) bvec = make_sym_vector("b", 2) - coeffs = expn.coefficients_from_source(avec, bvec, rscale=1) + coeffs = expn.coefficients_from_source(avec, bvec, rscale=1, None) sym2pymbolic = SympyToPymbolicMapper() coeffs_pymbolic = [sym2pymbolic(c) for c in coeffs] diff --git a/test/test_kernels.py b/test/test_kernels.py index 64c5b217097db9b8e2987602ab423340cedb5264..c52427c49ab1140262f847f5e383a11f962717c3 100644 --- a/test/test_kernels.py +++ b/test/test_kernels.py @@ -407,7 +407,7 @@ def test_m2l_toeplitz(ctx_getter): expected_output = _m2l_translate_simple(local_expn, mpole_expn, src_coeff_exprs, src_rscale, dvec, tgt_rscale) actual_output = local_expn.translate_from(mpole_expn, src_coeff_exprs, - src_rscale, dvec, tgt_rscale) + src_rscale, dvec, tgt_rscale, sac=None) replace_dict = dict((d, np.random.rand(1)[0]) for d in dvec) for sym_a, sym_b in zip(expected_output, actual_output):