code: def parse_bdd100k_dataset(
      source_dir, dataset_dir, copy_files=True, overwrite=False
  ):
      """Parses the raw BDD100K download files in the specified directory into
      per-split directories in BDD format.
  
      This function assumes that the input ``source_dir`` contains the following
      contents::
  
          source_dir/
              labels/
                  bdd100k_labels_images_train.json
                  bdd100k_labels_images_val.json
              images/
                  100k/
                      train/
                      test/
                      val/
              ...
  
      and will populate ``dataset_dir`` as follows::
  
          dataset_dir/
              train/
                  data/
                  labels.json
              validation/
                  data/
                  labels.json
              test/
                  data/
  
      Args:
          source_dir: the source directory containing the manually dowloaded
              BDD100K files
          dataset_dir: the directory to construct the output split directories
          copy_files (True): whether to move (False) or create copies (True) of
              the source files when populating ``dataset_dir``
          overwrite (False): whether to overwrite existing files/directories in
              the output location, if they exist
  
      Raises:
          OSError: if any required source files are not present
      """
      put_dir = etau.copy_dir if copy_files else etau.move_dir
      put_file = etau.copy_file if copy_files else etau.move_file
  
      _ensure_bdd100k_dir(source_dir)
  
      # Train images
      logger.info("Preparing training images...")
      in_train_data_dir = os.path.join(
          source_dir, "images", "100k", "train"
      )
      out_train_data_dir = os.path.join(dataset_dir, "train", "data")
      if overwrite or not os.path.isdir(out_train_data_dir):
          _ensure_bdd100k_subdir(source_dir, in_train_data_dir)
          put_dir(in_train_data_dir, out_train_data_dir)
  
      # Train labels
      logger.info("Preparing training labels...")
      in_train_labels_path = os.path.join(
          source_dir, "labels", "bdd100k_labels_images_train.json"
      )
      out_train_labels_path = os.path.join(
          dataset_dir, "train", "labels.json"
      )
      if overwrite or not os.path.isfile(out_train_labels_path):
          _ensure_bdd100k_file(source_dir, in_train_labels_path)
          put_file(in_train_labels_path, out_train_labels_path)
  
      # Validation images
      logger.info("Preparing validation images...")
      in_val_data_dir = os.path.join(
          source_dir, "images", "100k", "val"
      )
      out_val_data_dir = os.path.join(dataset_dir, "validation", "data")
      if overwrite or not os.path.isdir(out_val_data_dir):
          _ensure_bdd100k_subdir(source_dir, in_val_data_dir)
          put_dir(in_val_data_dir, out_val_data_dir)
  
      # Validation labels
      logger.info("Preparing validation labels...")
      in_val_labels_path = os.path.join(
          source_dir, "labels", "bdd100k_labels_images_val.json"
      )
      out_val_labels_path = os.path.join(
          dataset_dir, "validation", "labels.json"
      )
      if overwrite or not os.path.isfile(out_val_labels_path):
          _ensure_bdd100k_file(source_dir, in_val_labels_path)
          put_file(in_val_labels_path, out_val_labels_path)
  
      # Test images
      logger.info("Preparing test images...")
      in_test_data_dir = os.path.join(
          source_dir, "images", "100k", "test"
      )
      out_test_data_dir = os.path.join(dataset_dir, "test", "data")
      if overwrite or not os.path.isdir(out_test_data_dir):
          _ensure_bdd100k_subdir(source_dir, in_test_data_dir)
          put_dir(in_test_data_dir, out_test_data_dir)
  
imports: from copy import deepcopy
  import logging
  import os
  import warnings
  import eta.core.serial
  import eta.core.utils
  import fiftyone
  import fiftyone.core.labels
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.utils.data
label_desc: Use image node_id 2 for calling a global function with example usage: parse_bdd100k_dataset(source_dir, dataset_dir, copy_files, overwrite) without return types