docs: def forward(self, x, **kwargs):
          """
          Perform a forward pass through the network.
  
          The forward pass in recursive som is based on a combination between
          the activation in the last time-step and the current time-step.
  
          Parameters
          ----------
          x : numpy array
              The input data.
          prev_activation : numpy array.
              The activation of the network in the previous time-step.
  
          Returns
          -------
          activations : tuple of activations and differences
              A tuple containing the activation of each unit, the differences
              between the weights and input and the differences between the
              context input and context weights.
  
          """
          prev = kwargs['prev_activation']
  
          # Differences is the components of the weights subtracted from
          # the weight vector.
          distance_x, diff_x = self.distance_function(x, self.weights)
          distance_y, diff_y = self.distance_function(prev, self.context_weights)
  
          x_ = distance_x * self.alpha
          y_ = distance_y * self.beta
          activation = np.exp(-(x_ + y_))
  
          return activation, diff_x, diff_y