From 3acbdbe85df9ce3cd799b05480bd794ace7e7629 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Fri, 4 Aug 2017 08:21:30 +0200
Subject: [PATCH] Generalization of Chapman Enskog analysis

---
 sympyextensions.py | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/sympyextensions.py b/sympyextensions.py
index 79fe02448..d14630b9d 100644
--- a/sympyextensions.py
+++ b/sympyextensions.py
@@ -97,6 +97,37 @@ def fastSubs(term, subsDict):
         return visit(term)
 
 
+def fastSubsWithNormalize(term, subsDict, normalizeFunc):
+    def visit(expr):
+        if expr in subsDict:
+            return subsDict[expr], True
+        if not hasattr(expr, 'args'):
+            return expr, False
+
+        paramList = []
+        substituted = False
+        for a in expr.args:
+            replacedExpr, s = visit(a)
+            paramList.append(replacedExpr)
+            if s:
+                substituted = True
+
+        if not paramList:
+            return expr, False
+        else:
+            if substituted:
+                result, _ = visit(normalizeFunc(expr.func(*paramList)))
+                return result, True
+            else:
+                return expr.func(*paramList), False
+
+    if len(subsDict) == 0:
+        return term
+    else:
+        res, _ = visit(term)
+        return res
+
+
 def replaceAdditive(expr, replacement, subExpression, requiredMatchReplacement=0.5, requiredMatchOriginal=None):
     """
     Transformation for replacing a given subexpression inside a sum
-- 
GitLab