class_docstr: Class that downloads a dataset and caches it locally.
  Assumes that the file can be downloaded (i.e. publicly available via a URI)
docstr: Ensures that the dataset exists and its MD5 checksum matches the expected hash.
  
  Raises
  -------
  DatasetLoadingException
      if checks fail
  
  Returns
  -------
docstr_tok: ["Ensures","that","the","dataset","exists","and","its","MD5","checksum","matches","the","expected","hash",".","Raises","--","--","--","-","DatasetLoadingException","if","checks","fail","Returns","--","--","--","-"]
code: def _check_dataset_integrity_or_raise(self):
      """
      Ensures that the dataset exists and its MD5 checksum matches the expected hash.
  
      Raises
      -------
      DatasetLoadingException
          if checks fail
  
      Returns
      -------
      """
      if not self._is_already_downloaded():
          raise DatasetLoadingException(
              f"Checking md5 checksum of a absent file: {self._get_path_dataset()}"
          )
  
      with open(self._get_path_dataset(), "rb") as f:
          md5_hash = hashlib.md5(f.read()).hexdigest()
          if md5_hash != self._metadata.hash:
              raise DatasetLoadingException(
                  f"Expected hash for {self._get_path_dataset()}: {self._metadata.hash}"
                  f", got: {md5_hash}"
              )
  
imports: import hashlib
  import os
  import tempfile
  import zipfile
  from abc import ABC, abstractmethod
  from dataclasses import dataclass
  from pathlib import Path
  from typing import Callable, List, Optional, Union
  import pandas
  import requests
  from darts import TimeSeries
  from darts.logging import get_logger
label_desc: Use image node_id 3 for calling the DatasetLoader obj's underlying member method code with example usage: obj._check_dataset_integrity_or_raise() without return types