Browse Source

Added dict_eq as a compiled function

Yentl Van Tendeloo 8 years ago
parent
commit
419531a026
1 changed files with 22 additions and 0 deletions
  1. 22 0
      kernel/modelverse_kernel/compiled.py

+ 22 - 0
kernel/modelverse_kernel/compiled.py

@@ -49,6 +49,28 @@ def read_attribute(a, b, c, **remainder):
     raise Exception("Error in reading edge!")
 """
 
+def dict_eq(a, b, **remainder):
+    keys_a, keys_b = yield [("RDK", [a]), ("RDK", [b])]
+    if len(keys_a) != len(keys_b):
+        false, = yield [("CNV", [False])]
+        raise PrimitiveFinished(false)
+
+    resolved_names_a = yield [("RV", [i]) for i in keys_a]
+    resolved_names_b = yield [("RV", [i]) for i in keys_b]
+
+    if (set(resolved_names_a) != set(resolved_names_b)):
+        false, = yield [("CNV", [False])]
+        raise PrimitiveFinished(false)
+
+    values_a = yield [("RD", [a, i]) for i in resolved_names_a]
+    values_b = yield [("RD", [b, i]) for i in resolved_names_b]
+
+    dict_a = dict(zip(resolved_names_a, values_a))
+    dict_b = dict(zip(resolved_names_b, values_b))
+
+    result, = yield [("CNV", [dict_a == dict_b])]
+    raise PrimitiveFinished(result)
+
 def set_copy(a, **remainder):
     b, =         yield [("CN", [])]
     links, =     yield [("RO", [a])]