diff --git a/test/test_codegen.py b/test/test_codegen.py index c7b5e0bc357ace12ecc59d11ead7ac9af7d19b1d..fb1655986bb2ffa6b69cd6c1bd86bd5de594e342 100644 --- a/test/test_codegen.py +++ b/test/test_codegen.py @@ -78,6 +78,33 @@ def test_symbolic_assignment_name_uniqueness(): assert len(sac.assignments) == 3 +def test_line_taylor_coeff_growth(): + # Regression test for LineTaylorLocalExpansion. + # See https://gitlab.tiker.net/inducer/pytential/merge_requests/12 + from sumpy.kernel import LaplaceKernel + from sumpy.expansion.local import LineTaylorLocalExpansion + from sumpy.symbolic import make_sym_vector, SympyToPymbolicMapper + + import numpy as np + + order = 10 + expn = LineTaylorLocalExpansion(LaplaceKernel(2), order) + avec = make_sym_vector("a", 2) + bvec = make_sym_vector("b", 2) + coeffs = expn.coefficients_from_source(avec, bvec) + + sym2pymbolic = SympyToPymbolicMapper() + coeffs_pymbolic = [sym2pymbolic(c) for c in coeffs] + + from pymbolic.mapper.flop_counter import FlopCounter + flop_counter = FlopCounter() + counts = [flop_counter(c) for c in coeffs_pymbolic] + + indices = np.arange(1, order + 2) + max_order = 2 + assert np.polyfit(np.log(indices), np.log(counts), deg=1)[0] < max_order + + # You can test individual routines by typing # $ python test_fmm.py 'test_sumpy_fmm(cl.create_some_context)'