diff --git a/pymbolic/__init__.py b/pymbolic/__init__.py index 7ae3e27278efbe89227ad1fe5ae44aec38901894..4f1101f99f8dae4aef8fa5f578fada7ec371b739 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 3bb652657ef502348f1c0d75e5ab4fe9b24022a9..b368c92ad71a7f6cdf9e1dfe32f7b761a7107481 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