code: def make_dataset(
      directory: PATH_TYPE,
      extensions: Optional[Tuple[str, ...]] = None,
      is_valid_file: Optional[Callable[[str], bool]] = None,
  ) -> Tuple[List[PATH_TYPE], Optional[List[PATH_TYPE]]]:
      """Generates a list of samples of a form (path_to_sample, class).
  
      Args:
          directory (str): root dataset directory
          extensions (optional): A list of allowed extensions.
              Either extensions or is_valid_file should be passed. Defaults to None.
          is_valid_file (optional): A function that takes path of a file
              and checks if the file is a valid file
              (used to check of corrupt files) both extensions and
              is_valid_file should not be passed. Defaults to None.
  
      Raises:
          ValueError: In case ``extensions`` and ``is_valid_file`` are None or both are not None.
  
      Returns:
          (files, targets) Tuple containing the list of files and corresponding list of targets.
  
      """
      files, targets = [], []
      directory = os.path.expanduser(str(directory))
      both_none = extensions is None and is_valid_file is None
      both_something = (
          extensions is not None and is_valid_file is not None
      )
      if both_none or both_something:
          raise ValueError(
              "Both extensions and is_valid_file cannot be None or not None at the same time"
          )
      if extensions is not None:
  
          def is_valid_file(x: str) -> bool:
              return has_file_allowed_extension(
                  x, cast(Tuple[str, ...], extensions)
              )
  
      is_valid_file = cast(Callable[[str], bool], is_valid_file)
      subdirs = list_subdirs(directory)
      if len(subdirs) > 0:
          for target_class in subdirs:
              target_dir = os.path.join(directory, target_class)
              if not os.path.isdir(target_dir):
                  continue
              for root, _, fnames in sorted(
                  os.walk(target_dir, followlinks=True)
              ):
                  for fname in sorted(fnames):
                      path = os.path.join(root, fname)
                      if is_valid_file(path):
                          files.append(path)
                          targets.append(target_class)
          return files, targets
      return list_valid_files(directory), None
  
file_path: lightning-flash/src/flash/core/data/utilities/paths.py
imports: import os
  from typing import Any, Callable, List, Optional, Tuple, Union, cast
  from pytorch_lightning.utilities import rank_zero_warn
  from flash.core.data.utilities.sort import sorted_alphanumeric
label_desc: Use image node_id 2 for calling a global function with example usage: make_dataset(directory, extensions, is_valid_file) and returns: list_valid_files,  None, files,  targets, has_file_allowed_extension