code: def generate_search_space(code_dir):
      
      search_space = {}
      
      if code_dir.endswith(slash):
          code_dir = code_dir[:-1]
  
      for subdir, _, files in os.walk(code_dir):
          # generate module name from path
          if subdir == code_dir:
              package = ''
          else:
              assert subdir.startswith(code_dir + slash), subdir
              prefix_len = len(code_dir) + 1
              package = subdir[prefix_len:].replace(slash, '.') + '.'
  
          for file_name in files:
              if file_name.endswith('.py'):
                  path = os.path.join(subdir, file_name)
                  module = package + file_name[:-3]
                  search_space.update(_generate_file_search_space(path, module))
  
      return search_space
docs: Generate search space from Python source code.
      Return a serializable search space object.
      code_dir: directory path of source files (str)