class_docstr: Base class for query-by-committee setup.
  Args:
      learner_list: List of ActiveLearner objects to form committee.
      query_strategy: Function to query labels.
      on_transformed: Whether to transform samples with the pipeline defined by each learner's estimator
          when applying the query strategy.
code: def __init__(
      self,
      learner_list: List[BaseLearner],
      query_strategy: Callable,
      on_transformed: bool = False,
  ) -> None:
      assert (
          type(learner_list) == list
      ), "learners must be supplied in a list"
  
      self.learner_list = learner_list
      self.query_strategy = query_strategy
      self.on_transformed = on_transformed
      # TODO: update training data when using fit() and teach() methods
      self.X_training = None
  
imports: import abc
  import sys
  import warnings
  from typing import Any, Callable, Iterator, List, Tuple, Union
  import numpy
  import scipy.sparse
  from modAL.utils.data import data_hstack, modALinput, retrieve_rows
  from sklearn.base import BaseEstimator
  from sklearn.ensemble._base import _BaseHeterogeneousEnsemble
  from sklearn.pipeline import Pipeline
label_desc: Use image node_id 1 to create a new BaseCommittee object from inherited base classes: ABC, BaseEstimator with example: obj = BaseCommittee(learner_list, query_strategy, on_transformed)