@classmethod
def sample(cls, x, y, rope=0, nsamples=50000, **kwargs):
    """
        Compute a sample of posterior distribution.

        Derived classes override this method to implement specific
        sampling methods. Derived methods may have additional arguments.

        Args:
            x (np.array): a vector of scores for the first model
            y (np.array): a vector of scores for the second model
            rope (float): the width of the region of practical equivalence (default: 0)
            nsamples (int): the number of samples (default: 50000)

        Returns:
            np.array of shape (`nsamples`, 3)
        """
