class_docstr: The config transformer transforms a set of model configs into a set of
  NumPy arrays.
class_docstr_tok: ["The","config","transformer","transforms","a","set","of","model","configs","into","a","set","of","NumPy","arrays","."]
docstr: Uses the provided configurations to fit the transformer pipeline.
  
  Args:
      X: The input configurations.
code: def fit(
      self, X: list[Config[EnsembleConfig]]
  ) -> EnsembleConfigTransformer:
      """
      Uses the provided configurations to fit the transformer pipeline.
  
      Args:
          X: The input configurations.
      """
      configs = [model for ensemble in X for model in ensemble.model]
  
      # Extract model types and attributes
      model_types = {c.name() for c in configs}
      self.model_type_map = {
          k: i for i, k in enumerate(sorted(model_types))
      }
  
      # pylint: disable=no-member
      shared_attributes = set(TrainConfig.__dataclass_fields__.keys())
      attributes = {
          k if k in shared_attributes else f"{c.name()}_{k}"
          for c in configs
          for k in c.__dataclass_fields__.keys()
      }
      self.attribute_map = {
          k: i + len(self.model_type_map)
          for i, k in enumerate(sorted(attributes))
      }
  
      # Transform the configs to fit the scaler for the attributes
      out = self._transform(configs)
      rhs = out[:, len(MODEL_REGISTRY) :]
      self.scaler.fit(rhs)
      return self
  
imports: from __future__ import annotations
  from abc import ABC, abstractmethod
  from typing import Any, cast, Dict, List, Optional, Set, Union
  import numpy
  import numpy.typing
  import pandas
  from sklearn.base import TransformerMixin
  from sklearn.feature_extraction import DictVectorizer
  from sklearn.impute import SimpleImputer
  from sklearn.pipeline import make_pipeline, make_union
  from sklearn.preprocessing import MinMaxScaler, PowerTransformer, StandardScaler
  from tsbench.config import Config, EnsembleConfig, MODEL_REGISTRY, ModelConfig, TrainConfig
  from tsbench.config.model.models import SeasonalNaiveModelConfig
  from tsbench.evaluations.tracking import ModelTracker
label_desc: Use image node_id 3 for calling the EnsembleConfigTransformer obj's underlying member method code with example usage: obj.fit(X) and returns: self