code: def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
            parse_int=None, parse_constant=None, object_pairs_hook=None):
      
  
      assert cls is None, 'Custom decoders are not supported'
  
      if sys.version_info[0] < 3:
          decodable_type = type('')
      else:
          decodable_type = type(b'')
      if isinstance(s, decodable_type):
          encoding = encoding or 'utf-8'
          s = s.decode(encoding)
  
      if not s:
          raise ValueError('Empty strings are not legal JSON5')
      parser = Parser(s, '<string>')
      ast, err, newpos = parser.parse()
      if err:
          raise ValueError(err)
  
      def _fp_constant_parser(s):
          return float(s.replace('Infinity', 'inf').replace('NaN', 'nan'))
  
      if object_pairs_hook:
          dictify = object_pairs_hook
      elif object_hook:
          dictify = lambda pairs: object_hook(dict(pairs))
      else:
          dictify = dict
  
      parse_float = parse_float or float
      parse_int = parse_int or int
      parse_constant = parse_constant or _fp_constant_parser
  
      return _walk_ast(ast, dictify, parse_float, parse_int, parse_constant)
docs: Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a
      JSON5 document) to a Python object.