class_docstr: Manages the download and extraction of files, as well as caching.
  
  Downloaded files are cached under `download_dir`. The file name of downloaded
   files follows pattern "{sanitized_url}{content_checksum}.{ext}". Eg:
   'cs.toronto.edu_kriz_cifar-100-pythonJDF[...]I.tar.gz'.
  
  While a file is being downloaded, it is placed into a directory following a
  similar but different pattern:
  "{sanitized_url}{url_checksum}.tmp.{uuid}".
  
  When a file is downloaded, a "{fname}.INFO.json" file is created next to it.
  This INFO file contains the following information:
  {"dataset_names": ["name1", "name2"],
   "urls": ["http://url.of/downloaded_file"]}
  
  Extracted files/dirs are stored under `extract_dir`. The file name or
  directory name is the same as the original name, prefixed with the extraction
  method. E.g.
   "{extract_dir}/TAR_GZ.cs.toronto.edu_kriz_cifar-100-pythonJDF[...]I.tar.gz".
  
  The function members accept either plain value, or values wrapped into list
  or dict. Giving a data structure will parallelize the downloads.
  
  Example of usage:
  
  ```
  # Sequential download: str -> str
  train_dir = dl_manager.download_and_extract('https://abc.org/train.tar.gz')
  test_dir = dl_manager.download_and_extract('https://abc.org/test.tar.gz')
  
  # Parallel download: list -> list
  image_files = dl_manager.download(
      ['https://a.org/1.jpg', 'https://a.org/2.jpg', ...])
  
  # Parallel download: dict -> dict
  data_dirs = dl_manager.download_and_extract({
     'train': 'https://abc.org/train.zip',
     'test': 'https://abc.org/test.zip',
  })
  data_dirs['train']
  data_dirs['test']
  ```
  
  For more customization on the download/extraction (ex: passwords, output_name,
  ...), you can pass a `tfds.download.Resource` as argument.
class_docstr_tok: ["Manages","the","download","and","extraction","of","files",",","as","well","as","caching",".","Downloaded","files","are","cached","under","`","download_dir","`",".","The","file","name","of","downloaded","files","follows","pattern","``","{","sanitized_url","}","{","content_checksum","}",".","{","ext","}","''",".","Eg",":","'cs.toronto.edu_kriz_cifar-100-pythonJDF","[","...","]","I.tar.gz","'",".","While","a","file","is","being","downloaded",",","it","is","placed","into","a","directory","following","a","similar","but","different","pattern",":","''","{","sanitized_url","}","{","url_checksum","}",".tmp.","{","uuid","}","''",".","When","a","file","is","downloaded",",","a","``","{","fname","}",".INFO.json","''","file","is","created","next","to","it",".","This","INFO","file","contains","the","following","information",":","{","``","dataset_names","''",":","[","``","name1","''",",","``","name2","''","]",",","``","urls","''",":","[","``","http",":","\/\/url.of\/downloaded_file","''","]","}","Extracted","files\/dirs","are","stored","under","`","extract_dir","`",".","The","file","name","or","directory","name","is","the","same","as","the","original","name",",","prefixed","with","the","extraction","method",".","E.g",".","``","{","extract_dir","}","\/TAR_GZ.cs.toronto.edu_kriz_cifar-100-pythonJDF","[","...","]","I.tar.gz","''",".","The","function","members","accept","either","plain","value",",","or","values","wrapped","into","list","or","dict",".","Giving","a","data","structure","will","parallelize","the","downloads",".","Example","of","usage",":","``","`","#","Sequential","download",":","str","-",">","str","train_dir","=","dl_manager.download_and_extract","(","'https",":","\/\/abc.org\/train.tar.gz","'",")","test_dir","=","dl_manager.download_and_extract","(","'https",":","\/\/abc.org\/test.tar.gz","'",")","#","Parallel","download",":","list","-",">","list","image_files","=","dl_manager.download","(","[","'https",":","\/\/a.org\/1.jpg","'",",","'https",":","\/\/a.org\/2.jpg","'",",","...","]",")","#","Parallel","download",":","dict","-",">","dict","data_dirs","=","dl_manager.download_and_extract","(","{","'train","'",":","'https",":","\/\/abc.org\/train.zip","'",",","'test","'",":","'https",":","\/\/abc.org\/test.zip","'",",","}",")","data_dirs","[","'train","'","]","data_dirs","[","'test","'","]","``","`","For","more","customization","on","the","download\/extraction","(","ex",":","passwords",",","output_name",",","...",")",",","you","can","pass","a","`","tfds.download.Resource","`","as","argument","."]
code: def download_and_extract(
      self, url_or_urls: Dict[str, Url]
  ) -> Dict[str, epath.Path]:
      ...
  
imports: from __future__ import annotations
  import concurrent.futures
  import dataclasses
  import functools
  import hashlib
  import typing
  from typing import Any, Dict, Iterator, Optional, Tuple, Union
  import uuid
  from absl import logging
  from etils import epath
  import promise
  from tensorflow_datasets.core import utils
  from tensorflow_datasets.core.download import checksums
  from tensorflow_datasets.core.download import downloader
  from tensorflow_datasets.core.download import extractor
  from tensorflow_datasets.core.download import kaggle
  from tensorflow_datasets.core.download import resource
  from tensorflow_datasets.core.download import util
  from tensorflow_datasets.core.utils import shard_utils
  from tensorflow_datasets.core.utils import tree_utils
  from tensorflow_datasets.core.utils import type_utils
label_desc: Use image node_id 26 for calling the DownloadManager obj's underlying member method code with example usage: obj.download_and_extract(url_or_urls) without return types