nodes: 0, module; 1, function_definition; 2, function_name:serialize_to_normalized_pretty_json; 3, parameters; 4, block; 5, identifier:py_obj; 6, expression_statement; 7, return_statement; 8, comment:"""Serialize a native object to normalized, pretty printed JSON.
  
      The JSON string is normalized by sorting any dictionary keys.
  
      Args:
        py_obj: object
          Any object that can be represented in JSON. Some types, such as datetimes are
          automatically converted to strings.
  
      Returns:
        str: normalized, pretty printed JSON string.
  
      """; 9, call; 10, attribute; 11, argument_list; 12, identifier:json; 13, identifier:dumps; 14, identifier:py_obj; 15, keyword_argument; 16, keyword_argument; 17, keyword_argument; 18, identifier:sort_keys; 19, True; 20, identifier:indent; 21, integer:2; 22, identifier:cls; 23, identifier:ToJsonCompatibleTypes
code: def serialize_to_normalized_pretty_json(py_obj):
      """Serialize a native object to normalized, pretty printed JSON.
  
      The JSON string is normalized by sorting any dictionary keys.
  
      Args:
        py_obj: object
          Any object that can be represented in JSON. Some types, such as datetimes are
          automatically converted to strings.
  
      Returns:
        str: normalized, pretty printed JSON string.
  
      """
      return json.dumps(py_obj, sort_keys=True, indent=2, cls=ToJsonCompatibleTypes)