docs: def transform(self, X, batch_size=100, show_progressbar=False):
          """
          Transform input to a distance matrix by measuring the L2 distance.
  
          Parameters
          ----------
          X : numpy array.
              The input data.
          batch_size : int, optional, default 100
              The batch size to use in transformation. This may affect the
              transformation in stateful, i.e. sequential SOMs.
          show_progressbar : bool
              Whether to show a progressbar during transformation.
  
          Returns
          -------
          transformed : numpy array
              A matrix containing the distance from each datapoint to all
              neurons. The distance is normally expressed as euclidean distance,
              but can be any arbitrary metric.
  
          """
          X = self._check_input(X)
  
          batched = self._create_batches(X, batch_size, shuffle_data=False)
  
          activations = []
          prev = self._init_prev(batched)
  
          for x in tqdm(batched, disable=not show_progressbar):
              prev = self.forward(x, prev_activation=prev)[0]
              activations.extend(prev)
  
          activations = np.asarray(activations, dtype=np.float64)
          activations = activations[:X.shape[0]]
          return activations.reshape(X.shape[0], self.num_neurons)