predict the loss of an unseen configuration

            Parameters:
            -----------

            times: numpy array
                times where to predict the loss
            config: numpy array
                the numerical representation of the config

            Returns:
            --------
            
            mean and variance prediction at input times for the given config

def predict_unseen(self, times, config):
        """
            predict the loss of an unseen configuration

            Parameters:
            -----------

            times: numpy array
                times where to predict the loss
            config: numpy array
                the numerical representation of the config

            Returns:
            --------
            
            mean and variance prediction at input times for the given config
        """

        assert np.all(times > 0) and np.all(times <= self.max_num_epochs)

        x = np.array(config)[None, :]

        idx = times / self.max_num_epochs
        x = np.repeat(x, idx.shape[0], axis=0)

        x = np.concatenate((x, idx[:, None]), axis=1)

        mean, var = self.model.predict(x)
        return 1 - mean, var