From 78b4d76e0e2a0861245c1451dafc16d7d8b23fce Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Wed, 29 Apr 2020 16:11:44 +0200
Subject: [PATCH] Improved AUTO handling. Made safe-cell logic auto generated

---
 robotlab_safety/pluto_auto.py   |  29 ++++++++++++++++-------------
 robotlab_safety/safety_2020.sps | Bin 36900 -> 37380 bytes
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/robotlab_safety/pluto_auto.py b/robotlab_safety/pluto_auto.py
index aad70ac..1c509d0 100755
--- a/robotlab_safety/pluto_auto.py
+++ b/robotlab_safety/pluto_auto.py
@@ -17,23 +17,26 @@ class PlutoVariables:
         pass
 
     def codegen(self, expr):
-        m = re.match('([^=]+)=AND\{(.*),(.*)\}', expr)
+        m = re.match('([^=]+)=(AND|OR)\{(.*),(.*)\}', expr)
         if m:
             lh = m.group(1)
-            regexp = m.group(2).replace('*', '.*')
-            rh = [ m.group(3).format(v, pluto=self.by_name[v][0])
-                   for v in self.by_name if re.match(regexp, v)]
-            return("%s=%s" % (lh, '*'.join(rh)))
-        m = re.match('([^=]+)=OR\{(.*),(.*)\}', expr)
-        if m:
-            lh = m.group(1)
-            regexp = m.group(2).replace('*', '.*')
-            rh = [ m.group(3).format(v, pluto=self.by_name[v][0])
-                   for v in self.by_name if re.match(regexp, v)]
-            return("%s=%s" % (lh, '+'.join(rh)))
+            op = m.group(2)
+            regexp = m.group(3).replace('*', '.*')
+            expr = m.group(4)
+            rh = []
+            for k,v in sorted(self.by_name.items()):
+                rh_m = re.match(regexp, k)
+                if rh_m:
+                    matches = (k,)+rh_m.groups()
+                    rh.append(expr.format(*matches, pluto=v[0]))
+                    pass
+                pass
+            if op == 'AND':
+                return("%s=%s" % (lh, '*'.join(rh)))
+            elif op == 'OR':
+                return("%s=%s" % (lh, '+'.join(rh)))
         raise Exception('Invalid expression', expr)
 
-    
 class SPS:
 
     def __init__(self, path):
diff --git a/robotlab_safety/safety_2020.sps b/robotlab_safety/safety_2020.sps
index ee34758432839b35543cfa953662fb5b4fbd4fc9..d99544cff6b84fd63ddda81b2e6ef2fde151cff0 100644
GIT binary patch
delta 582
zcmZ3ofT?8((}oMYlO5F9ChPFoOcvr3nS6oQX>$f&Uov|zLn1>OL+a#M4oP7xh5!a*
zhIj@?hIj^;xM`7MG7_JGmw}7Hn!%AFlp%z{pTUYDfWeT#0HL12mcgGPh@l!Tp2$$b
z5YM2&5Wt|tpvj=aP|aY#P|KjjP|aY-P>awv`FUZaq$5KqLkUAZ1IQgHrf#k;`pye?
zYG8u!<aeqZf|!mq)DfP%A(3P9g$A}{XN2Kc9c_ptkL+lWII)gSZ$Ni6NH;X-Hvez<
z&C3bpFxXDkSCbURa597T<o&$j^&lUcFvK%BAvp?LNE;!^BRd)-PNbt5YQez)iZ_rh
YSB78)+sXg?T+u=wBnNf-<mUc`0H+CbR{#J2

delta 117
zcmZo!!n9-o(}oMYlN%<mP1fPFnJmO7GWi0p)8-7mzU0Y!io7P96p2mNh~b(1fthFW
zp**3@3dP@eC*NuGnrx%PF?mBG$7H1#xyg&_gf=@g{o<W8(Q9(W1c-))XdXc=h5!ab
V1|x=e21kZch7yMS$;lHJ0sv|hDv|&I

-- 
GitLab