class_docstr: Row-normalizes the attributes given in :obj:`attrs` to sum-up to one
  (functional name: :obj:`normalize_features`).
  
  Args:
      attrs (List[str]): The names of attributes to normalize.
          (default: :obj:`["x"]`)
code: def forward(
      self,
      data: Union[Data, HeteroData],
  ) -> Union[Data, HeteroData]:
      for store in data.stores:
          for key, value in store.items(*self.attrs):
              if value.numel() > 0:
                  value = value - value.min()
                  value.div_(
                      value.sum(dim=-1, keepdim=True).clamp_(min=1.0)
                  )
                  store[key] = value
      return data
  
imports: from typing import List, Union
  from torch_geometric.data import Data, HeteroData
  from torch_geometric.data.datapipes import functional_transform
  from torch_geometric.transforms import BaseTransform
label_desc: Use image node_id 2 for calling the NormalizeFeatures obj's underlying member method code with example usage: obj.forward(data) and returns: data