code: def compute_logarithmic_scale(min_, max_, min_scale, max_scale):
      
      if max_ <= 0 or min_ <= 0:
          return []
      min_order = int(floor(log10(min_)))
      max_order = int(ceil(log10(max_)))
      positions = []
      amplitude = max_order - min_order
      if amplitude <= 1:
          return []
      detail = 10.
      while amplitude * detail < min_scale * 5:
          detail *= 2
      while amplitude * detail > max_scale * 3:
          detail /= 2
      for order in range(min_order, max_order + 1):
          for i in range(int(detail)):
              tick = (10 * i / detail or 1) * 10**order
              tick = round_to_scale(tick, tick)
              if min_ <= tick <= max_ and tick not in positions:
                  positions.append(tick)
      return positions
docs: Compute an optimal scale for logarithmic