<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def exponential_binning(data=None, bin_count: Optional[int] = None, *, range=None, **kwargs) -> ExponentialBinning: """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 """

    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)