From bb265e0bbb19c0c12d100eb88f08590760d13676 Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Mon, 21 Nov 2016 17:52:06 +0100 Subject: [PATCH] Benchmarked compilation step - added optimizations --- finitedifferences.py | 12 +----------- transformations.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/finitedifferences.py b/finitedifferences.py index b81a8fa48..171260cdc 100644 --- a/finitedifferences.py +++ b/finitedifferences.py @@ -1,6 +1,7 @@ import numpy as np import sympy as sp from pystencils.field import Field +from pystencils.transformations import fastSubs def grad(var, dim=3): @@ -131,14 +132,3 @@ def __upDownOffsets(d, dim): coord[d] = -1 down = np.array(coord, dtype=np.int) return up, down - - -def fastSubs(term, subsDict): - """Similar to sympy subs function. - This version is much faster for big substitution dictionaries than sympy version""" - def visit(expr): - if expr in subsDict: - return subsDict[expr] - paramList = [visit(a) for a in expr.args] - return expr if not paramList else expr.func(*paramList) - return visit(term) diff --git a/transformations.py b/transformations.py index e2189ace6..e2c2e2291 100644 --- a/transformations.py +++ b/transformations.py @@ -9,6 +9,17 @@ from pystencils.slicing import normalizeSlice import pystencils.ast as ast +def fastSubs(term, subsDict): + """Similar to sympy subs function. + This version is much faster for big substitution dictionaries than sympy version""" + def visit(expr): + if expr in subsDict: + return subsDict[expr] + paramList = [visit(a) for a in expr.args] + return expr if not paramList else expr.func(*paramList) + return visit(term) + + def makeLoopOverDomain(body, functionName, iterationSlice=None, ghostLayers=None, loopOrder=None): """ Uses :class:`pystencils.field.Field.Access` to create (multiple) loops around given AST. -- GitLab