docstr: Recover the feature bins from the split points.
  
  Args:
      feature_bin_sizes: the feature bin sizes
      split_points: nid -> split data index
  
  Returns:
      nid -> (fid, bid)
docstr_tok: ["Recover","the","feature","bins","from","the","split","points",".","Args",":","feature_bin_sizes",":","the","feature","bin","sizes","split_points",":","nid","-",">","split","data","index","Returns",":","nid","-",">","(","fid",",","bid",")"]
code: def recover_feature_bins(
      self, feature_bin_sizes, split_points: typing.Dict[int, int]
  ) -> typing.Dict[int, typing.Tuple[int, int]]:
      """
      Recover the feature bins from the split points.
  
      Args:
          feature_bin_sizes: the feature bin sizes
          split_points: nid -> split data index
  
      Returns:
          nid -> (fid, bid)
      """
  
      if self._shuffled:
          split_points = self._recover_from_split_shuffle(split_points)
  
      split_points = self._recover_from_global_shuffle(split_points)
      return self._recover_histogram_position(
          split_points, feature_bin_sizes
      )
  
imports: import logging
  import typing
  from typing import List, MutableMapping, Tuple, Optional
  import torch
  from fate.arch.computing.api import KVTable
  from ._histogram_local import Histogram
  from ._histogram_splits import HistogramSplits
  from .indexer import HistogramIndexer, Shuffler
label_desc: Use image node_id 9 for calling the DistributedHistogram obj's underlying member method code with example usage: obj.recover_feature_bins(feature_bin_sizes, split_points) and returns: self