@@ -176,6 +176,7 @@ def patterns(
176
176
loops = True ,
177
177
node_edge_joint = True ,
178
178
p_connected = True ,
179
+ source_target_edges = True ,
179
180
exclude_isomorphic = True ,
180
181
count_candidates_only = False ,
181
182
):
@@ -192,7 +193,16 @@ def patterns(
192
193
node_edge_joint = node_edge_joint ,
193
194
p_connected = p_connected ,
194
195
)):
195
- numbers = sorted (set ([v for t in num_pat for v in t ]))
196
+ flat_num_pat = [v for t in num_pat for v in t ]
197
+ all_numbers = set (flat_num_pat )
198
+
199
+ if source_target_edges :
200
+ all_numbers = sorted (all_numbers )
201
+ numbers = all_numbers
202
+ else :
203
+ numbers = sorted (all_numbers - set (flat_num_pat [1 ::3 ]))
204
+ all_numbers = sorted (all_numbers )
205
+
196
206
# var_map = {i: '?v%d' % i for i in numbers}
197
207
# pattern = GraphPattern(
198
208
# tuple([tuple([var_map[i] for i in t]) for t in numerical_repr]))
@@ -210,7 +220,9 @@ def patterns(
210
220
211
221
for s , t in permutations (numbers , 2 ):
212
222
pid += 1
213
- leftover_numbers = [n for n in numbers if n != s and n != t ]
223
+ # source and target are mapped to numbers s and t
224
+ # re-enumerate the leftover numbers to close "holes"
225
+ leftover_numbers = [n for n in all_numbers if n != s and n != t ]
214
226
var_map = {n : Variable ('v%d' % i )
215
227
for i , n in enumerate (leftover_numbers )}
216
228
var_map [s ] = SOURCE_VAR
@@ -245,6 +257,7 @@ def pattern_generator(
245
257
loops = True ,
246
258
node_edge_joint = True ,
247
259
p_connected = True ,
260
+ source_target_edges = True ,
248
261
exclude_isomorphic = True ,
249
262
):
250
263
canonicalized_patterns = {}
@@ -344,6 +357,7 @@ def main():
344
357
loops = False ,
345
358
node_edge_joint = False ,
346
359
p_connected = False ,
360
+ source_target_edges = False ,
347
361
exclude_isomorphic = canonical ,
348
362
count_candidates_only = False ,
349
363
)):
@@ -362,8 +376,8 @@ def main():
362
376
if len (mod_gp ) == length :
363
377
cmod_pg = canonicalize (mod_gp )
364
378
assert cmod_pg in _patterns , \
365
- 'mod_gp : %r \n canon : %r \n _patterns : %r ' % (
366
- mod_gp , cmod_pg , _patterns
379
+ 'gp : %smod_gp : %scanon : %s_patterns: %r... ' % (
380
+ gp , mod_gp , cmod_pg , list ( _patterns )[: 20 ]
367
381
)
368
382
369
383
0 commit comments