class_docstr: Class used to compute legend best placements.
  Each group contains at least one legend, and has a position and span (with bounds). LegendGroup are then
  responsible for providing each of its legends' position (non-overlapping)
  
  
  Parameters
  ----------
  indices: List[int]
      identifying index of each of the legends
  init_position: List[float]
      best position for each of the legends (if there was no overlapping)
  min_diff: float
      minimal distance between two legends so that they do not overlap
code: def bounds(self) -> tp.Tuple[float, float]:
      half_span = len(self.indices) * self.min_diff / 2.0
      return (self.position - half_span, self.position + half_span)
  
imports: import os
  import re
  import string
  import hashlib
  import warnings
  import argparse
  import itertools
  from collections import defaultdict
  from pathlib import Path
  import numpy
  import pandas
  from matplotlib import pyplot
  from matplotlib.legend import Legend
  from matplotlib import cm
  from mpl_toolkits.axes_grid1 import make_axes_locatable
  import nevergrad.common.typing
  from .None import utils
  from .exporttable import export_table
label_desc: Use image node_id 4 for calling the LegendGroup obj's underlying member method code with example usage: obj.bounds() and returns: unknown,  unknown