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.

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