diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c49ab232cb268e68dde24ce875113b5e03358d4a..946ff3b118a645e8d78c8489789480c60e8c0d94 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -69,7 +69,9 @@ Python 3.6 POCL: Python 3.5 Conda: script: + # Disable caching to ensure SymEngine code generation is exercised. - export SUMPY_NO_CACHE=1 + - export SUMPY_FORCE_SYMBOLIC_BACKEND=symengine - CONDA_ENVIRONMENT=.test-conda-env-py3.yml - REQUIREMENTS_TXT=.test-conda-env-py3-requirements.txt - curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project-within-miniconda.sh diff --git a/.test-conda-env-py3.yml b/.test-conda-env-py3.yml index a53d2c220b3ff0f3fe936d3ecfa59c7465281072..d5e01eadd507ed75edf704a20147160d801b65e2 100644 --- a/.test-conda-env-py3.yml +++ b/.test-conda-env-py3.yml @@ -12,5 +12,6 @@ dependencies: - islpy - pyopencl - python=3.5 -- python-symengine=0.3.0 +- symengine::symengine=0.3.0 +- symengine::python-symengine=0.3.0 # things not in here: loopy boxtree pymbolic pyfmmlib 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..49fa405929ed713579b27e2b52d6af2493da482b 100644 --- a/sumpy/symbolic.py +++ b/sumpy/symbolic.py @@ -42,8 +42,9 @@ def _find_symbolic_backend(): try: import symengine # noqa symengine_found = True - except ImportError: + except ImportError as import_error: symengine_found = False + symengine_error = import_error ALLOWED_BACKENDS = ("sympy", "symengine") # noqa BACKEND_ENV_VAR = "SUMPY_FORCE_SYMBOLIC_BACKEND" # noqa @@ -60,11 +61,9 @@ def _find_symbolic_backend(): ", ".join("'%s'" % val for val in ALLOWED_BACKENDS))) if backend == "symengine" and not symengine_found: - from warnings import warn - warn("%s=symengine was specified, but could not find symengine. " - "Using sympy." % BACKEND_ENV_VAR, RuntimeWarning) + raise RuntimeError("could not find SymEngine: %s" % symengine_error) - USE_SYMENGINE = backend == "symengine" and symengine_found + USE_SYMENGINE = True else: USE_SYMENGINE = symengine_found @@ -199,7 +198,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):