code: def stream_url(
      url: str,
      start_byte: Optional[int] = None,
      block_size: int = 32 * 1024,
      progress_bar: bool = True,
  ) -> Iterable:
      """Stream url by chunk
  
      Args:
          url (str): Url.
          start_byte (int or None, optional): Start streaming at that point (Default: ``None``).
          block_size (int, optional): Size of chunks to stream (Default: ``32 * 1024``).
          progress_bar (bool, optional): Display a progress bar (Default: ``True``).
      """
  
      # If we already have the whole file, there is no need to download it again
      req = urllib.request.Request(url, method="HEAD")
      with urllib.request.urlopen(req) as response:
          url_size = int(response.info().get("Content-Length", -1))
      if url_size == start_byte:
          return
  
      req = urllib.request.Request(url)
      if start_byte:
          req.headers["Range"] = "bytes={}-".format(start_byte)
  
      with urllib.request.urlopen(req) as upointer, tqdm(
          unit="B",
          unit_scale=True,
          unit_divisor=1024,
          total=url_size,
          disable=not progress_bar,
      ) as pbar:
          num_bytes = 0
          while True:
              chunk = upointer.read(block_size)
              if not chunk:
                  break
              yield chunk
              num_bytes += len(chunk)
              pbar.update(len(chunk))
  
file_path: TTS/TTS/utils/download.py
imports: import hashlib
  import logging
  import os
  import tarfile
  import urllib
  import urllib.request
  import zipfile
  from os.path import expanduser
  from typing import Any, Iterable, List, Optional
  from torch.utils.model_zoo import tqdm
label_desc: Use image node_id 1 for calling a global function with example usage: stream_url(url, start_byte, block_size, progress_bar) without return types