class_docstr: The abstract base class `BaseEstimator` defines the basic requirements of an estimator in ART. The BaseEstimator is
  is the highest abstraction of a machine learning model in ART.
class_docstr_tok: ["The","abstract","base","class","`","BaseEstimator","`","defines","the","basic","requirements","of","an","estimator","in","ART",".","The","BaseEstimator","is","is","the","highest","abstraction","of","a","machine","learning","model","in","ART","."]
code: def _check_params(self) -> None:
      from art.defences.postprocessor.postprocessor import Postprocessor
      from art.defences.preprocessor.preprocessor import Preprocessor
  
      if self._clip_values is not None:
          if len(self._clip_values) != 2:  # pragma: no cover
              raise ValueError(
                  "`clip_values` should be a tuple of 2 floats or arrays containing the allowed data range."
              )
          if np.array(
              self._clip_values[0] >= self._clip_values[1]
          ).any():  # pragma: no cover
              raise ValueError("Invalid `clip_values`: min >= max.")
  
          if isinstance(self._clip_values, np.ndarray):
              self._clip_values = self._clip_values.astype(
                  ART_NUMPY_DTYPE
              )
          else:
              self._clip_values = np.array(self._clip_values, dtype=ART_NUMPY_DTYPE)  # type: ignore
  
      if isinstance(self.preprocessing_operations, list):
          for preprocess in self.preprocessing_operations:
              if not isinstance(
                  preprocess, Preprocessor
              ):  # pragma: no cover
                  raise ValueError(
                      "All preprocessing defences have to be instance of "
                      "art.defences.preprocessor.preprocessor.Preprocessor."
                  )
      else:  # pragma: no cover
          raise ValueError(
              "All preprocessing defences have to be instance of "
              "art.defences.preprocessor.preprocessor.Preprocessor."
          )
  
      if isinstance(self.postprocessing_defences, list):
          for postproc_defence in self.postprocessing_defences:
              if not isinstance(
                  postproc_defence, Postprocessor
              ):  # pragma: no cover
                  raise ValueError(
                      "All postprocessing defences have to be instance of "
                      "art.defences.postprocessor.postprocessor.Postprocessor."
                  )
      elif self.postprocessing_defences is None:
          pass
      else:  # pragma: no cover
          raise ValueError(
              "All postprocessing defences have to be instance of "
              "art.defences.postprocessor.postprocessor.Postprocessor."
          )
  
imports: from abc import ABC, abstractmethod
  from typing import Any, Dict, List, Optional, Tuple, Union, TYPE_CHECKING
  import numpy
  from tqdm.auto import trange
  from art.config import ART_NUMPY_DTYPE
label_desc: Use image node_id 9 for calling the BaseEstimator obj's underlying member method code with example usage: obj._check_params() without return types