class_docstr: HistogramIndexer is used to index the `VectorizedHistogram` data.
  
  The data is stored in a flatten array with the shape is (num_node * sum(feature_bin_sizes)) and the
  data is indexed by (node_id, feature_id, bin_id) in the flatten array.
  At logical level, the data is indexed by (node_id, feature_id, bin_id) likes:
  
  node_id_0:
      feature_id_0:
          bin_id_0: data
          bin_id_1: data
          ...
      feature_id_1:
          bin_id_0: data
          bin_id_1: data
          ...
      ...
  node_id_1:
      feature_id_0:
          bin_id_0: data
          bin_id_1: data
          ...
      feature_id_1:
          bin_id_0: data
          bin_id_1: data
          ...
      ...
  ...
  notice that the data is stored in the flatten array, so the index is calculated by:
      position = node_id * sum(feature_bin_sizes) + feature_bin_sizes[feature_id] + bin_id
  
  which means the bin_size of each feature is not necessary to be the same but the sum of all feature_bin_sizes
  should be the same.
  
  Notes: This class will be rewritten in rust in the future.
code: def reshape(self, feature_bin_sizes):
      return HistogramIndexer(self.node_size, feature_bin_sizes)
  
imports: from typing import List, Tuple, Dict
  import numpy
  import torch
label_desc: Use image node_id 15 for calling the HistogramIndexer obj's underlying member method code with example usage: obj.reshape(feature_bin_sizes) and returns: HistogramIndexer