code: def build(self, data):
      features = _IncrementalCOOMatrix(
          self.features_shape(), np.float32
      )
  
      if self._identity_features:
          for _id, idx in self._id_mapping.items():
              features.append(idx, self._feature_mapping[_id], 1.0)
  
      for datum in data:
          for entity_idx, feature_idx, weight in self._process_features(
              datum
          ):
              features.append(entity_idx, feature_idx, weight)
  
      features = features.tocoo().tocsr()
  
      if self._normalize:
          if np.any(features.getnnz(1) == 0):
              raise ValueError(
                  "Cannot normalize feature matrix: some rows have zero norm. "
                  "Ensure that features were provided for all entries."
              )
  
          sklearn.preprocessing.normalize(
              features, norm="l1", copy=False
          )
  
      return features
  
imports: import array
  import numpy
  import scipy.sparse
  import sklearn.preprocessing
label_desc: Use image node_id 5 for calling the _FeatureBuilder obj's underlying member method code with example usage: obj.build(data) and returns: features