From 2cd33f6e5154f22f5027762bf518a154e5168001 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Fri, 25 Aug 2017 14:38:40 +0200
Subject: [PATCH] Fixed display issue with field access subscripts

---
 field.py | 28 +++++++++++++++++++++++-----
 1 file changed, 23 insertions(+), 5 deletions(-)

diff --git a/field.py b/field.py
index 93915a37b..fd8641c74 100644
--- a/field.py
+++ b/field.py
@@ -255,17 +255,21 @@ class Field(object):
             if constantOffsets:
                 offsetName = offsetToDirectionString(offsets)
                 if field.indexDimensions == 0:
-                    symbolName = fieldName + "_" + offsetName
+                    superscript = None
                 elif field.indexDimensions == 1:
-                    symbolName = fieldName + "_" + offsetName + "^" + str(idx[0])
+                    superscript = str(idx[0])
                 else:
                     idxStr = ",".join([str(e) for e in idx])
-                    symbolName = fieldName + "_" + offsetName + "^" + idxStr
+                    superscript = idxStr
             else:
                 offsetName = "%0.10X" % (abs(hash(tuple(offsetsAndIndex))))
-                symbolName = fieldName + "_" + offsetName
+                superscript = None
 
-            obj = super(Field.Access, self).__xnew__(self, "{" + symbolName + "}")
+            symbolName = "%s_%s" % (fieldName, offsetName)
+            if superscript is not None:
+                symbolName += "^" + superscript
+
+            obj = super(Field.Access, self).__xnew__(self, symbolName)
             obj._field = field
             obj._offsets = []
             for o in offsets:
@@ -274,6 +278,7 @@ class Field(object):
                 else:
                     obj._offsets.append(int(o))
             obj._offsetName = offsetName
+            obj._superscript = superscript
             obj._index = idx
 
             return obj
@@ -323,6 +328,12 @@ class Field(object):
         def offsetName(self):
             return self._offsetName
 
+        def _latex(self, arg):
+            if self._superscript:
+                return "{{%s}_{%s}^{%s}}" % (self._field.name, self._offsetName, self._superscript)
+            else:
+                return "{{%s}_{%s}}" % (self._field.name, self._offsetName)
+
         @property
         def index(self):
             return self._index
@@ -553,3 +564,10 @@ def directionStringToOffset(directionStr, dim=3):
         offset += factor * curOffset
         directionStr = directionStr[1:]
     return offset[:dim]
+
+
+if __name__ == '__main__':
+    f = Field.createGeneric('f', spatialDimensions=2, indexDimensions=1)
+    fa = f[0, 1](4) ** 2
+    print(fa)
+    print(sp.latex(fa))
\ No newline at end of file
-- 
GitLab