code: def get_available_components(
      self,
      dataset_properties: Optional[Dict] = None,
      include: Optional[Dict] = None,
      exclude: Optional[Dict] = None,
  ) -> OrderedDict:
      if dataset_properties is None:
          dataset_properties = {}
  
      if include is not None and exclude is not None:
          raise ValueError(
              "The argument include and exclude cannot be used together."
          )
  
      available_comp = self.get_components()
  
      if include is not None:
          for incl in include:
              if incl not in available_comp:
                  raise ValueError(
                      "Trying to include unknown component: "
                      "%s" % incl
                  )
  
      # TODO check for task type classification and/or regression!
  
      components_dict = OrderedDict()
      for name in available_comp:
          if include is not None and name not in include:
              continue
          elif exclude is not None and name in exclude:
              continue
  
          entry = available_comp[name]
  
          # Exclude itself to avoid infinite loop
          if entry == DataPreprocessorChoice or hasattr(
              entry, "get_components"
          ):
              continue
  
          target_type = dataset_properties["target_type"]
          if target_type == "classification":
              if (
                  entry.get_properties()["handles_classification"]
                  is False
              ):
                  continue
              if (
                  dataset_properties.get("multiclass") is True
                  and entry.get_properties()["handles_multiclass"]
                  is False
              ):
                  continue
              if (
                  dataset_properties.get("multilabel") is True
                  and entry.get_properties()["handles_multilabel"]
                  is False
              ):
                  continue
  
          elif target_type == "regression":
              if entry.get_properties()["handles_regression"] is False:
                  continue
              if (
                  dataset_properties.get("multioutput") is True
                  and entry.get_properties()["handles_multioutput"]
                  is False
              ):
                  continue
  
          else:
              raise ValueError("Unknown target type %s" % target_type)
  
          components_dict[name] = entry
  
      return components_dict
  
file_path: auto-sklearn/autosklearn/pipeline/components/data_preprocessing/__init__.py
imports: from typing import Dict, Optional, Type
  import os
  from collections import OrderedDict
  from ConfigSpace.configuration_space import ConfigurationSpace
  from ConfigSpace.hyperparameters import CategoricalHyperparameter
  from autosklearn.askl_typing import FEAT_TYPE_TYPE
  from autosklearn.pipeline.base import PIPELINE_DATA_DTYPE
  from ..base import AutoSklearnChoice, AutoSklearnPreprocessingAlgorithm, ThirdPartyComponents, find_components
label_desc: Use image node_id 2 for calling the DataPreprocessorChoice obj's underlying member method code with example usage: obj.get_available_components(dataset_properties, include, exclude) and returns: components_dict