nodes: 0, module; 1, function_definition; 2, function_name:interleave_keys; 3, parameters; 4, block; 5, identifier:a; 6, identifier:b; 7, expression_statement; 8, function_definition; 9, return_statement; 10, comment:"""Interleave bits from two sort keys to form a joint sort key.
  
      Examples that are similar in both of the provided keys will have similar
      values for the key defined by this function. Useful for tasks with two
      text fields like machine translation or natural language inference.
      """; 11, function_name:interleave; 12, parameters; 13, block; 14, call; 15, identifier:args; 16, return_statement; 17, identifier:int; 18, argument_list; 19, call; 20, call; 21, keyword_argument; 22, attribute; 23, argument_list; 24, attribute; 25, argument_list; 26, identifier:base; 27, integer:2; 28, string; 29, identifier:join; 30, list_comprehension; 31, string; 32, identifier:join; 33, call; 34, identifier:x; 35, for_in_clause; 36, for_in_clause; 37, identifier:interleave; 38, generator_expression; 39, identifier:t; 40, call; 41, identifier:x; 42, identifier:t; 43, call; 44, for_in_clause; 45, identifier:zip; 46, argument_list; 47, identifier:format; 48, argument_list; 49, identifier:x; 50, tuple; 51, list_splat; 52, identifier:x; 53, string; 54, identifier:a; 55, identifier:b; 56, identifier:args; 57, string_content:016b
code: def interleave_keys(a, b):
      """Interleave bits from two sort keys to form a joint sort key.
  
      Examples that are similar in both of the provided keys will have similar
      values for the key defined by this function. Useful for tasks with two
      text fields like machine translation or natural language inference.
      """
      def interleave(args):
          return ''.join([x for t in zip(*args) for x in t])
      return int(''.join(interleave(format(x, '016b') for x in (a, b))), base=2)