Skip to content

Commit ddfc808

Browse files
committed
include node_edge_joint patterns
1 parent db874e4 commit ddfc808

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

eval.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,26 @@
2323
logger.info('init')
2424

2525

26-
# FIXME: properties as subject / object!
27-
2826
def pattern_generator(
29-
length, loops=True, p_connected=True, exclude_isomorphic=True):
27+
length,
28+
loops=True,
29+
node_edge_joint=True,
30+
p_connected=True,
31+
exclude_isomorphic=True,
32+
):
3033
canonicalized_patterns = {}
31-
possible_var_nodes = [Variable('n%d' % i) for i in range(length - 1)]
32-
possible_nodes = possible_var_nodes + [SOURCE_VAR, TARGET_VAR]
33-
possible_edges = [Variable('e%d' % i) for i in range(length)]
34+
35+
# To be connected there are max 3 + 2 + 2 + 2 + ... vars for the triples.
36+
# The first can be 3 different ones (including ?source and ?target, then
37+
# in each of the following triples at least one var has to be an old one
38+
possible_vars = [Variable('v%d' % i) for i in range((2 * length) - 1)]
39+
possible_vars += [SOURCE_VAR, TARGET_VAR]
3440

3541
possible_triples = [
3642
(s, p, o)
37-
for s in possible_nodes
38-
for p in possible_edges
39-
for o in possible_nodes
43+
for s in possible_vars
44+
for p in possible_vars
45+
for o in possible_vars
4046
]
4147

4248
n_patterns = binom(len(possible_triples), length)
@@ -53,15 +59,16 @@ def pattern_generator(
5359
logger.debug(
5460
'excluded %d: source or target missing: %s', pid, gp)
5561
continue
56-
nodes = sorted(gp.nodes - {SOURCE_VAR, TARGET_VAR})
57-
edges = sorted(gp.edges)
62+
vars_ = sorted(gp.vars_in_graph - {SOURCE_VAR, TARGET_VAR})
5863

5964
# check there are no skipped nodes, e.g., link to n2 picked but no n1
60-
if nodes != possible_var_nodes[:len(nodes)]:
61-
logger.debug('excluded %d: skipped node: %s', pid, gp)
65+
if vars_ != possible_vars[:len(vars_)]:
66+
logger.debug('excluded %d: skipped var: %s', pid, gp)
6267
continue
63-
if edges != possible_edges[:len(edges)]:
64-
logger.debug('excluded %d: skipped edge: %s', pid, gp)
68+
69+
# check if nodes and edges are disjoint
70+
if not node_edge_joint and (gp.nodes & gp.edges):
71+
logger.debug('excluded %d: node-edge-joined: %s', pid, gp)
6572
continue
6673

6774
# check for loops if necessary
@@ -101,10 +108,10 @@ def pattern_generator(
101108

102109

103110
def main():
104-
length = 5
105-
# 3: 702 of 17296
106-
# 4: 16473 of 3921225
107-
# 5: of 1488847536
111+
length = 3
112+
# 3: 47478 (pcon, nej) of 6666891
113+
# 4:
114+
# 5:
108115

109116
gen_patterns = []
110117
for n, (i, pattern) in enumerate(pattern_generator(length)):

0 commit comments

Comments
 (0)