class_docstr: Logarithmically spaced time stretching.
  
  `n_samples` are generated with stretching spaced logarithmically
  between `2.0**lower` and 2`.0**upper`.
  
  This transformation affects the following attributes:
  
  - Annotations
      - all: time, duration
      - tempo: values
  - metadata
      - duration
  - Audio
  
  Attributes
  ----------
  n_samples : int > 0
      Number of deformations to generate
  
  lower : float
  upper : float > lower
      Minimum and maximum bounds on the stretch parameters
  
  See Also
  --------
  TimeStretch
  RandomTimeStretch
code: def __init__(self, n_samples=3, lower=-0.3, upper=0.3):
      AbstractTimeStretch.__init__(self)
  
      if upper <= lower:
          raise ValueError("upper must be strictly larger than lower")
  
      if n_samples <= 0:
          raise ValueError("n_samples must be strictly positive")
  
      self.n_samples = n_samples
      self.lower = float(lower)
      self.upper = float(upper)
  
imports: import pyrubberband
  import numpy
  from ..base import BaseTransformer, _get_rng
label_desc: Use image node_id 1 to create a new LogspaceTimeStretch object from inherited base classes: AbstractTimeStretch with example: obj = LogspaceTimeStretch(n_samples, lower, upper)