def _iter_matches(self, input_match, subject_graph, one_match, level=<NUM_LIT:0>):
self.print_debug("<STR_LIT>", <NUM_LIT:1>)<EOL>self.print_debug("<STR_LIT>" % input_match)<EOL>edges0, constraints0 = self.pattern.get_new_edges(level)<EOL>edges1 = input_match.get_new_edges(subject_graph)<EOL>self.print_debug("<STR_LIT>" % edges0)<EOL>self.print_debug("<STR_LIT>" % constraints0)<EOL>self.print_debug("<STR_LIT>" % edges1)<EOL>inr = self._iter_new_relations(input_match, subject_graph, edges0,<EOL>constraints0, edges1)<EOL>for new_relations in inr:<EOL><INDENT>next_match = input_match.copy_with_new_relations(new_relations)<EOL>if not self.pattern.check_next_match(next_match, new_relations, subject_graph, one_match):<EOL><INDENT>continue<EOL><DEDENT>if self.pattern.complete(next_match, subject_graph):<EOL><INDENT>yield next_match<EOL><DEDENT>else:<EOL><INDENT>for match in self._iter_matches(next_match, subject_graph, one_match, level+<NUM_LIT:1>):<EOL><INDENT>yield match<EOL><DEDENT><DEDENT><DEDENT>self.print_debug("<STR_LIT>", -<NUM_LIT:1>)<EOL>
Given an onset for a match, iterate over all completions of that match

           This iterator works recursively. At each level the match is extended
           with a new set of relations based on vertices in the pattern graph
           that are at a distances 'level' from the starting vertex