class_docstr: A block transformer that is built by concatenating the blocks of the same
  index from a list of block transformers.
  
  Parameters
  ----------
  block_transformer_list: list of BlockTransformer objects
      The list of block transformers to combine
  rescale_mode: string in {"max", "mean", None}
      Flag for the type of rescaling to be done to the blocks from different
      base transformers. If "max", divide each block by the max std deviation
      of a column within the block. If "mean", divide each block by the mean
      std deviation of a column within the block. If None, do not rescale.
  drop_features: bool
      Flag for whether to return an empty block if that from the first
      transformer in the list is trivial.
class_docstr_tok: ["A","block","transformer","that","is","built","by","concatenating","the","blocks","of","the","same","index","from","a","list","of","block","transformers",".","Parameters","--","--","--","--","--","block_transformer_list",":","list","of","BlockTransformer","objects","The","list","of","block","transformers","to","combine","rescale_mode",":","string","in","{","``","max","''",",","``","mean","''",",","None","}","Flag","for","the","type","of","rescaling","to","be","done","to","the","blocks","from","different","base","transformers",".","If","``","max","''",",","divide","each","block","by","the","max","std","deviation","of","a","column","within","the","block",".","If","``","mean","''",",","divide","each","block","by","the","mean","std","deviation","of","a","column","within","the","block",".","If","None",",","do","not","rescale",".","drop_features",":","bool","Flag","for","whether","to","return","an","empty","block","if","that","from","the","first","transformer","in","the","list","is","trivial","."]
code: def _fit_one_feature(self, X, k):
      data_blocks = []
      for block_transformer in self.block_transformer_list:
          data_block = block_transformer.fit_transform_one_feature(
              X, k, center=False, normalize=False
          )
          data_blocks.append(data_block)
  
      # Handle trivial blocks
      self._trivial_block_indices[k] = [
          idx
          for idx, data_block in enumerate(data_blocks)
          if _empty_or_constant(data_block)
      ]
      if (
          0 in self._trivial_block_indices[k] and self.drop_features
      ) or (len(self._trivial_block_indices[k]) == len(data_blocks)):
          # If first block is trivial and self.drop_features is True,
          self._centers[k] = np.array([0])
          self._scales[k] = np.array([1])
          return
      else:
          # Remove trivial blocks
          for idx in reversed(self._trivial_block_indices[k]):
              data_blocks.pop(idx)
      self._rescale_factors[k] = _get_rescale_factors(
          data_blocks, self.rescale_mode
      )
      composite_block = np.hstack(
          [
              data_block / scale_factor
              for data_block, scale_factor in zip(
                  data_blocks, self._rescale_factors[k]
              )
          ]
      )
      self._centers[k] = composite_block.mean(axis=0)
      self._scales[k] = composite_block.std(axis=0)
  
imports: from abc import ABC, abstractmethod
  import numpy
  from collections import defaultdict
  from sklearn.ensemble import BaseEnsemble
  from sklearn.ensemble._forest import _generate_unsampled_indices, _generate_sample_indices
  from .local_stumps import make_stumps, tree_feature_transform
label_desc: Use image node_id 2 for calling the CompositeTransformer obj's underlying member method code with example usage: obj._fit_one_feature(X, k) without return types