nodes: 0, module; 1, function_definition; 2, function_name:iterkeys; 3, parameters; 4, block; 5, identifier:self; 6, expression_statement; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, for_statement; 11, for_statement; 12, comment:"""Unsorted iterator over keys"""; 13, assignment; 14, assignment; 15, assignment; 16, identifier:key; 17, call; 18, block; 19, identifier:key; 20, call; 21, block; 22, identifier:patterns; 23, attribute; 24, identifier:replace; 25, attribute; 26, identifier:seen; 27, call; 28, attribute; 29, argument_list; 30, for_statement; 31, attribute; 32, argument_list; 33, if_statement; 34, identifier:self; 35, identifier:patterns; 36, identifier:self; 37, identifier:replace; 38, identifier:set; 39, argument_list; 40, identifier:six; 41, identifier:iterkeys; 42, attribute; 43, identifier:pattern; 44, identifier:patterns; 45, block; 46, identifier:DictMethods; 47, identifier:iterkeys; 48, identifier:self; 49, comparison_operator:key not in seen; 50, block; 51, identifier:self; 52, identifier:base; 53, expression_statement; 54, if_statement; 55, identifier:key; 56, identifier:seen; 57, expression_statement; 58, assignment; 59, identifier:m; 60, block; 61, yield; 62, identifier:m; 63, call; 64, expression_statement; 65, if_statement; 66, break_statement; 67, identifier:key; 68, attribute; 69, argument_list; 70, assignment; 71, comparison_operator:ret not in seen; 72, block; 73, identifier:pattern; 74, identifier:match; 75, identifier:key; 76, identifier:ret; 77, conditional_expression:m.group('key') if replace else m.group(); 78, identifier:ret; 79, identifier:seen; 80, expression_statement; 81, expression_statement; 82, call; 83, identifier:replace; 84, call; 85, call; 86, yield; 87, attribute; 88, argument_list; 89, attribute; 90, argument_list; 91, attribute; 92, argument_list; 93, identifier:ret; 94, identifier:m; 95, identifier:group; 96, string; 97, identifier:m; 98, identifier:group; 99, identifier:seen; 100, identifier:add; 101, identifier:ret; 102, string_content:key
code: def iterkeys(self):
          """Unsorted iterator over keys"""
          patterns = self.patterns
          replace = self.replace
          seen = set()
          for key in six.iterkeys(self.base):
              for pattern in patterns:
                  m = pattern.match(key)
                  if m:
                      ret = m.group('key') if replace else m.group()
                      if ret not in seen:
                          seen.add(ret)
                          yield ret
                      break
          for key in DictMethods.iterkeys(self):
              if key not in seen:
                  yield key