Skip to content
Snippets Groups Projects

Introduce default assignment simplifications

Merged Markus Holzer requested to merge holzer/pystencils:Simplifications into master
1 file
+ 11
4
Compare changes
  • Side-by-side
  • Inline
from sys import version_info as vs
import pytest
import sympy as sp
import pystencils as ps
@@ -141,15 +142,18 @@ def test_add_subexpressions_for_field_reads():
@pytest.mark.parametrize('target', (ps.Target.CPU, ps.Target.GPU))
@pytest.mark.parametrize('simplification', (True, False))
@pytest.mark.skipif((vs.major, vs.minor, vs.micro) == (3, 8, 2), reason="does not work on python 3.8.2 for some reason")
def test_sympy_optimizations(target, simplification):
x, y, z = ps.fields('x, y, z: float32[2d]')
if target == ps.Target.GPU:
pytest.importorskip("pycuda")
src, dst = ps.fields('src, dst: float32[2d]')
# Triggers Sympy's expm1 optimization
# Sympy's expm1 optimization is tedious to use and the behaviour is highly depended on the sympy version. In
# some cases the exp expression has to be encapsulated in brackets or multiplied with 1 or 1.0
# for sympy to work properly ...
assignments = ps.AssignmentCollection({
x[0, 0]: 1.0 * (sp.exp(y[0, 0]) - 1)
src[0, 0]: 1.0 * (sp.exp(dst[0, 0]) - 1)
})
config = ps.CreateKernelConfig(target=target, default_assignment_simplifications=simplification)
@@ -164,12 +168,15 @@ def test_sympy_optimizations(target, simplification):
@pytest.mark.parametrize('target', (ps.Target.CPU, ps.Target.GPU))
@pytest.mark.parametrize('simplification', (True, False))
@pytest.mark.skipif((vs.major, vs.minor, vs.micro) == (3, 8, 2), reason="does not work on python 3.8.2 for some reason")
def test_evaluate_constant_terms(target, simplification):
x, y, z = ps.fields('x, y, z: float32[2d]')
if target == ps.Target.GPU:
pytest.importorskip("pycuda")
src, dst = ps.fields('src, dst: float32[2d]')
# Triggers Sympy's cos optimization
assignments = ps.AssignmentCollection({
x[0, 0]: -sp.cos(1) + y[0, 0]
src[0, 0]: -sp.cos(1) + dst[0, 0]
})
config = ps.CreateKernelConfig(target=target, default_assignment_simplifications=simplification)
Loading