code: def _get_type_boundaries(self) -> List[int]:
      feature_starts = []
      on_feature_type = -1
      for i, feature in enumerate(self.sorted_features):
          feature_type = self.normalization_parameters[
              feature
          ].feature_type
          feature_type_index = FEATURE_TYPES.index(feature_type)
          assert (
              feature_type_index >= on_feature_type
          ), "Features are not sorted by feature type!"
          while feature_type_index > on_feature_type:
              feature_starts.append(i)
              on_feature_type += 1
      while on_feature_type < len(FEATURE_TYPES):
          feature_starts.append(len(self.sorted_features))
          on_feature_type += 1
      return feature_starts
  
imports: import logging
  from typing import cast, Dict, List, Optional, Tuple
  import torch
  from reagent.core.parameters import NormalizationParameters
  from reagent.preprocessing.identify_types import DO_NOT_PREPROCESS, ENUM, FEATURE_TYPES
  from reagent.preprocessing.normalization import EPS, MAX_FEATURE_VALUE, MIN_FEATURE_VALUE
  from torch.nn import Module, Parameter
label_desc: Use image node_id 27 for calling the Preprocessor obj's underlying member method code with example usage: obj._get_type_boundaries() and returns: feature_starts