code: def search_files(source: str, extensions: List[str]) -> List[Path]:
      
      files = [
          path for path in Path(source).glob('**/*')
          if path.is_file() and path.suffix.lstrip('.') in extensions]
      nb_files = len(files)
      LOGGER.debug("Total files found: %d", nb_files)
  
      if nb_files < NB_FILES_MIN:
          LOGGER.error("Too few source files")
          raise GuesslangError(
              '{} source files found in {}. {} files minimum is required'.format(
                  nb_files, source, NB_FILES_MIN))
  
      random.shuffle(files)
      return files
docs: Retrieve files located the source directory and its subdirectories,
      whose extension match one of the listed extensions.
  
      :raise GuesslangError: when there is not enough files in the directory
      :param source: directory name
      :param extensions: list of file extensions
      :return: filenames