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