From 425eabea264460ef166135494152e92631ff3e38 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner <inform@tiker.net> Date: Fri, 26 Sep 2014 16:29:16 -0500 Subject: [PATCH] Sunset subscript-by-getitem --- pymbolic/__init__.py | 2 ++ pymbolic/primitives.py | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/pymbolic/__init__.py b/pymbolic/__init__.py index 7ae3e27..4f1101f 100644 --- a/pymbolic/__init__.py +++ b/pymbolic/__init__.py @@ -146,6 +146,8 @@ linear_combination = pymbolic.primitives.linear_combination cse = pymbolic.primitives.make_common_subexpression make_sym_vector = pymbolic.primitives.make_sym_vector +disable_subscript_by_getitem = pymbolic.primitives.disable_subscript_by_getitem + parse = pymbolic.parser.parse evaluate = pymbolic.mapper.evaluator.evaluate evaluate_kw = pymbolic.mapper.evaluator.evaluate_kw diff --git a/pymbolic/primitives.py b/pymbolic/primitives.py index 3bb6526..b368c92 100644 --- a/pymbolic/primitives.py +++ b/pymbolic/primitives.py @@ -170,6 +170,16 @@ vectors and matrices of :mod:`pymbolic` objects. """ +_SUBSCRIPT_BY_GETITEM = True + + +def disable_subscript_by_getitem(): + global _SUBSCRIPT_BY_GETITEM + _SUBSCRIPT_BY_GETITEM = False + + del Expression.__getitem__ + + class Expression(object): """Superclass for parts of a mathematical expression. Overrides operators to implicitly construct :class:`Sum`, :class:`Product` and other expressions. @@ -362,6 +372,22 @@ class Expression(object): return Call(self, pars) def __getitem__(self, subscript): + if _SUBSCRIPT_BY_GETITEM: + from warning import warn + + warn("creating subscripts using x[i] syntax is deprecated " + "and will be removed in Pymbolic 2016.x. " + "Use x.index(i) instead.", + DeprecationWarning) + + if subscript == (): + return self + else: + return Subscript(self, subscript) + else: + return NotImplemented + + def index(self, subscript): if subscript == (): return self else: @@ -881,7 +907,7 @@ class Comparison(Expression): self.left = left self.right = right - if not operator in [">", ">=", "==", "!=", "<", "<="]: + if operator not in [">", ">=", "==", "!=", "<", "<="]: raise RuntimeError("invalid operator") self.operator = operator -- GitLab