def download_open_images_split(
    dataset_dir,
    split,
    version="v6",
    label_types=None,
    classes=None,
    attrs=None,
    image_ids=None,
    num_workers=None,
    shuffle=None,
    seed=None,
    max_samples=None,
):
    """Utility that downloads full or partial splits of the
    `Open Images dataset
    <https://storage.googleapis.com/openimages/web/index.html>`_.

    See :class:`fiftyone.types.OpenImagesDataset` for the format in which
    ``dataset_dir`` will be arranged.

    Any existing files are not re-downloaded.

    This method specifically downloads the subsets of annotations corresponding
    to the 600 boxable classes of Open Images.
    `See here <https://storage.googleapis.com/openimages/web/download.html>`_
    for other download options.

    Args:
        dataset_dir: the directory to download the dataset
        split: the split to download. Supported values are
            ``("train", "validation", "test")``
        version ("v7"): the version of the Open Images dataset to download.
            Supported values are ``("v6", "v7")``
        label_types (None): a label type or list of label types to load. The
            supported values are
            ``("detections", "classifications", "relationships",
            "segmentations")``
            for ``"v6"`` and
            ``("detections", "classifications", "points", "relationships",
            "segmentations")`` for ``"v7"``.
            By default, all label types are loaded
        classes (None): a string or list of strings specifying required classes
            to load. If provided, only samples containing at least one instance
            of a specified class will be loaded
        attrs (None): a string or list of strings specifying required
            relationship attributes to load. Only applicable when
            ``label_types`` includes "relationships". If provided, only samples
            containing at least one instance of a specified attribute will be
            loaded
        image_ids (None): an optional list of specific image IDs to load. Can
            be provided in any of the following formats:

            -   a list of ``<image-id>`` strings
            -   a list of ``<split>/<image-id>`` strings
            -   the path to a text (newline-separated), JSON, or CSV file
                containing the list of image IDs to load in either of the first
                two formats
        num_workers (None): a suggested number of threads to use when
            downloading individual images
        shuffle (False): whether to randomly shuffle the order in which samples
            are chosen for partial downloads
        seed (None): a random seed to use when shuffling
        max_samples (None): a maximum number of samples to load per split. If
            ``label_types``, ``classes``, and/or ``attrs`` are also specified,
            first priority will be given to samples that contain all of the
            specified label types, classes, and/or attributes, followed by
            samples that contain at least one of the specified labels types or
            classes. The actual number of samples loaded may be less than this
            maximum value if the dataset does not contain sufficient samples
            matching your requirements. By default, all matching samples are
            loaded

    Returns:
        a tuple of:

        -   num_samples: the total number of downloaded images, or ``None`` if
            everything was already downloaded
        -   classes: the list of all classes, or ``None`` if everything was
            already downloaded
        -   did_download: whether any content was downloaded (True) or if all
            necessary files were already downloaded (False)
    """
    _verify_version(version)
    label_types = _parse_label_types(version, label_types)

    did_download = False

    if image_ids is not None:
        image_ids, _did_download = _parse_and_verify_image_ids(
            image_ids, dataset_dir, split, download=True
        )
        did_download |= _did_download
    else:
        image_ids, _did_download = _load_all_image_ids(
            dataset_dir, split=split, download=True
        )
        did_download |= _did_download

    downloaded_ids = _get_downloaded_image_ids(dataset_dir)

    (
        classes_map,
        all_classes,
        classes,
        oi_classes,
        attrs_map,
        all_attrs,
        attrs,
        oi_attrs,
        seg_classes,
        pnt_classes_map,
        _did_download,
    ) = _setup(
        dataset_dir,
        label_types=label_types,
        classes=classes,
        attrs=attrs,
        seed=seed,
        download=True,
    )

    did_download |= _did_download

    # Download class hierarchy if necessary (used in evaluation)
    _, _did_download = _get_hierarchy(
        dataset_dir, classes_map=classes_map, download=True
    )
    did_download |= _did_download

    num_samples, _did_download = _download(
        image_ids,
        downloaded_ids,
        oi_classes,
        oi_attrs,
        seg_classes,
        pnt_classes_map,
        dataset_dir,
        split,
        label_types=label_types,
        classes=classes,
        attrs=attrs,
        max_samples=max_samples,
        shuffle=shuffle,
        num_workers=num_workers,
        download=True,
        version=version,
    )

    did_download |= _did_download

    return num_samples, all_classes, did_download
Utility that downloads full or partial splits of the
    `Open Images dataset
    <https://storage.googleapis.com/openimages/web/index.html>`_.

    See :class:`fiftyone.types.OpenImagesDataset` for the format in which
    ``dataset_dir`` will be arranged.

    Any existing files are not re-downloaded.

    This method specifically downloads the subsets of annotations corresponding
    to the 600 boxable classes of Open Images.
    `See here <https://storage.googleapis.com/openimages/web/download.html>`_
    for other download options.

    Args:
        dataset_dir: the directory to download the dataset
        split: the split to download. Supported values are
            ``("train", "validation", "test")``
        version ("v7"): the version of the Open Images dataset to download.
            Supported values are ``("v6", "v7")``
        label_types (None): a label type or list of label types to load. The
            supported values are
            ``("detections", "classifications", "relationships",
            "segmentations")``
            for ``"v6"`` and
            ``("detections", "classifications", "points", "relationships",
            "segmentations")`` for ``"v7"``.
            By default, all label types are loaded
        classes (None): a string or list of strings specifying required classes
            to load. If provided, only samples containing at least one instance
            of a specified class will be loaded
        attrs (None): a string or list of strings specifying required
            relationship attributes to load. Only applicable when
            ``label_types`` includes "relationships". If provided, only samples
            containing at least one instance of a specified attribute will be
            loaded
        image_ids (None): an optional list of specific image IDs to load. Can
            be provided in any of the following formats:

            -   a list of ``<image-id>`` strings
            -   a list of ``<split>/<image-id>`` strings
            -   the path to a text (newline-separated), JSON, or CSV file
                containing the list of image IDs to load in either of the first
                two formats
        num_workers (None): a suggested number of threads to use when
            downloading individual images
        shuffle (False): whether to randomly shuffle the order in which samples
            are chosen for partial downloads
        seed (None): a random seed to use when shuffling
        max_samples (None): a maximum number of samples to load per split. If
            ``label_types``, ``classes``, and/or ``attrs`` are also specified,
            first priority will be given to samples that contain all of the
            specified label types, classes, and/or attributes, followed by
            samples that contain at least one of the specified labels types or
            classes. The actual number of samples loaded may be less than this
            maximum value if the dataset does not contain sufficient samples
            matching your requirements. By default, all matching samples are
            loaded

    Returns:
        a tuple of:

        -   num_samples: the total number of downloaded images, or ``None`` if
            everything was already downloaded
        -   classes: the list of all classes, or ``None`` if everything was
            already downloaded
        -   did_download: whether any content was downloaded (True) or if all
            necessary files were already downloaded (False)
    
fiftyone/utils/openimages.py