code: def exponential_binning(data=None, bin_count: Optional[int] = None, *, range=None, **kwargs) -> ExponentialBinning:
      
      if bin_count is None:
          bin_count = ideal_bin_count(data)
  
      if range:
          range = (np.log10(range[0]), np.log10(range[1]))
      else:
          range = (np.log10(data.min()), np.log10(data.max()))
      log_width = (range[1] - range[0]) / bin_count
      return ExponentialBinning(log_min=range[0], log_width=log_width, bin_count=bin_count, **kwargs)
docs: Construct exponential binning schema.
  
      Parameters
      ----------
      bin_count: Optional[int]
          Number of bins
      range: Optional[tuple]
          (min, max)
  
      See also
      --------
      numpy.logspace - note that our range semantics is different