Просмотр исходного кода

play around with action code in pattern matching

Joeri Exelmans 1 год назад
Родитель
Сommit
6752c45cf6
1 измененных файлов с 7 добавлено и 4 удалено
  1. 7 4
      pattern_matching/matcher.py

+ 7 - 4
pattern_matching/matcher.py

@@ -172,7 +172,7 @@ class MatcherVF2:
             h_indegree = len(h_candidate_vtx.incoming)
             if g_indegree > h_indegree:
                 return
-            if not self.compare_fn(h_candidate_vtx.value, g_candidate_vtx.value):
+            if not self.compare_fn(g_candidate_vtx.value, h_candidate_vtx.value):
                 return
             new_state = state.grow_vtx(
                 h_candidate_vtx,
@@ -205,16 +205,19 @@ if __name__ == "__main__":
     ]
 
     guest = Graph()
-    guest.vtxs = [Vertex('src'), Vertex('tgt')]
+    guest.vtxs = [
+        Vertex('v != 3'), # cannot be matched with Vertex(3) - changing this to True, you get 2 morphisms instead of one
+        Vertex('True')] # can be matched with any node
     guest.edges = [
+        # Look for a simple loop:
         Edge(guest.vtxs[0], guest.vtxs[1]),
         Edge(guest.vtxs[1], guest.vtxs[0]),
     ]
 
-    m = MatcherVF2(host, guest, lambda hv, gv: True)
+    m = MatcherVF2(host, guest, lambda g_val, h_val: eval(g_val, {}, {'v':h_val}))
     import time
     durations = 0
-    iterations = 100
+    iterations = 1
     print("Patience...")
     for n in range(iterations):
         time_start = time.perf_counter_ns()