From 342a47c611e6b62dbfba1444f1bab86eb4c6fc0a Mon Sep 17 00:00:00 2001
From: valentin <valentin.bruch@rwth-aachen.de>
Date: Mon, 10 Feb 2020 18:39:14 +0100
Subject: [PATCH] slightly restructured Keldysh contour ordering

---
 diagrams.py | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

diff --git a/diagrams.py b/diagrams.py
index 064ee4e..b10311c 100644
--- a/diagrams.py
+++ b/diagrams.py
@@ -401,6 +401,7 @@ class Diagram:
         # Clear old data:
         if clear:
             self.clear()
+            self.isKeldysh = False
 
         # Remove ignored characters
         for c in ignore:
@@ -476,6 +477,22 @@ class Diagram:
         if vertex_indices:
             print('Warning: diagram contains uncontracted indices:', *vertex_indices.keys(), file=sys.stderr)
 
+        # Tell contours about their order in Keldysh diagram.
+        if self.isKeldysh:
+            self.updateKeldyshOrder()
+
+    def updateKeldyshOrder(self):
+        'Tell contours about their order in Keldysh diagram.'
+        keldysh_order = 0
+        for i, contour in enumerate(self.contours, 1):
+            # First draw the contour.
+            contour.keldysh_order = keldysh_order
+            try:
+                if self.interruptions[i].isKeldysh():
+                    keldysh_order += 1
+            except IndexError:
+                break
+
     def pprint(self):
         '''
         Produce more or less human readable output (without contractions!) for debugging.
@@ -528,10 +545,8 @@ class Diagram:
 
         # Iterate over contours, interruptions and elements to draw vertices and interruptions.
         last_node = self.interruptions[0]
-        keldysh_order = -1 + self.isKeldysh
         for i, contour in enumerate(self.contours, 1):
             # First draw the contour.
-            contour.keldysh_order = keldysh_order
             for j, e in enumerate(contour.elements):
                 if type(e) != BaseLine:
                     factor = getattr(contour.elements[j-1], 'factor', 1) or 1
@@ -545,7 +560,6 @@ class Diagram:
                     else:
                         assert type(last_node) == Interrupt
                     last_node = self.interruptions[i]
-                    keldysh_order += 1
                 elif self.interruptions[i].label:
                     factor = getattr(contour.elements[-1], 'factor', 1) or 1
                     print(self.interruptions[i].tikz(position='right of=%s, xshift=%g%s'%(last_node.right(), factor*self.sep, self.sep_unit)), file=file)
-- 
GitLab