From e8f18ab52ac313a94af0d06296acd4d2b481ba55 Mon Sep 17 00:00:00 2001 From: Dominic Kempf Date: Wed, 6 Sep 2017 17:09:45 +0200 Subject: [PATCH] Move Indexed implementation to sympy only mappers They are no fit for symengine. --- pymbolic/interop/common.py | 12 ------------ pymbolic/interop/sympy.py | 12 ++++++++++++ test/test_sympy.py | 3 +-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/pymbolic/interop/common.py b/pymbolic/interop/common.py index 3f55c29..b0b73e5 100644 --- a/pymbolic/interop/common.py +++ b/pymbolic/interop/common.py @@ -111,12 +111,6 @@ class SympyLikeToPymbolicMapper(SympyLikeMapperBase): return prim.CommonSubexpression( self.rec(expr.args[0]), expr.prefix) - def map_Indexed(self, expr): - return prim.Subscript( - self.rec(expr.args[0].args[0]), - tuple(self.rec(i) for i in expr.args[1:]) - ) - def not_supported(self, expr): # noqa if isinstance(expr, int): return expr @@ -150,12 +144,6 @@ class PymbolicToSympyLikeMapper(EvaluationMapper): else: self.raise_conversion_error(expr) - def map_subscript(self, expr): - return self.sym.tensor.indexed.Indexed( - self.rec(expr.aggregate), - *tuple(self.rec(i) for i in expr.index_tuple) - ) - def map_substitution(self, expr): return self.sym.Subs(self.rec(expr.child), tuple(self.sym.Symbol(v) for v in expr.variables), diff --git a/pymbolic/interop/sympy.py b/pymbolic/interop/sympy.py index b02d5e8..6d7afc8 100644 --- a/pymbolic/interop/sympy.py +++ b/pymbolic/interop/sympy.py @@ -60,6 +60,12 @@ class SympyToPymbolicMapper(SympyLikeToPymbolicMapper): def map_long(self, expr): return long(expr) # noqa + def map_Indexed(self, expr): # noqa + return prim.Subscript( + self.rec(expr.args[0].args[0]), + tuple(self.rec(i) for i in expr.args[1:]) + ) + # }}} @@ -77,6 +83,12 @@ class PymbolicToSympyMapper(PymbolicToSympyLikeMapper): return self.sym.Derivative(self.rec(expr.child), *[self.sym.Symbol(v) for v in expr.variables]) + def map_subscript(self, expr): + return self.sym.tensor.indexed.Indexed( + self.rec(expr.aggregate), + *tuple(self.rec(i) for i in expr.index_tuple) + ) + # }}} diff --git a/test/test_sympy.py b/test/test_sympy.py index 0bcd449..c3b038e 100644 --- a/test/test_sympy.py +++ b/test/test_sympy.py @@ -28,7 +28,6 @@ import pymbolic.primitives as prim x_, y_, i_, j_ = (prim.Variable(s) for s in "x y i j".split()) - # {{{ to pymbolic test def _test_to_pymbolic(mapper, sym, use_symengine): @@ -101,7 +100,7 @@ def _test_from_pymbolic(mapper, sym, use_symengine): assert mapper(x_[0]) == sym.Symbol("x_0") else: i, j = sym.symbols("i,j") - assert mapper(x_[i_,j_]) == sym.tensor.indexed.Indexed(x, i, j) + assert mapper(x_[i_, j_]) == sym.tensor.indexed.Indexed(x, i, j) assert mapper(prim.Variable("f")(x_)) == sym.Function("f")(x) -- GitLab