text: import os
  import os.path
  import hashlib
  import errno
  
  
  def check_integrity(fpath, md5):
      if not os.path.isfile(fpath):
          return False
      md5o = hashlib.md5()
      with open(fpath, 'rb') as f:
          # read in 1MB chunks
          for chunk in iter(lambda: f.read(1024 * 1024 * 1024), b''):
              md5o.update(chunk)
      md5c = md5o.hexdigest()
      if md5c != md5:
          return False
      return True
  
  
  def download_url(url, root, filename, md5):
      from six.moves import urllib
  
      root = os.path.expanduser(root)
      fpath = os.path.join(root, filename)
  
      try:
          os.makedirs(root)
      except OSError as e:
          if e.errno == errno.EEXIST:
              pass
          else:
              raise
  
      # downloads file
      if os.path.isfile(fpath) and check_integrity(fpath, md5):
          print('Using downloaded and verified file: ' + fpath)
      else:
          print('Downloading ' + url + ' to ' + fpath)
          urllib.request.urlretrieve(url, fpath)
  