r"""
        Get the diagonal of the prior variance on the weights (regularizer).

        This also returns a slice into the regression weights to which all of
        the concatenated bases' regularizers applies.

        Parameters
        ----------
        X : ndarray
            (N, d) array of observations where N is the number of samples, and
            d is the dimensionality of X.
        *regularizer :
            use these values instead of the values passed into the ``Basis``
            constructors for each regularizer. These are applied to each basis
            in the concatentation in the order they were concatenated.

        Returns
        -------
        ndarray :
            an array of shape (D,) that is the diagonal of the prior variance
            of the weights, :math:`\boldsymbol\Lambda` in :math:`\mathbf{w}
            \sim \mathcal{N}(\mathbf{0}, \boldsymbol\Lambda)`.
        list of slices:
            the slices into the regression weights that each regularizer
            applies to.

def regularizer_diagonal(self, X, *regularizer):
        r"""
        Get the diagonal of the prior variance on the weights (regularizer).

        This also returns a slice into the regression weights to which all of
        the concatenated bases' regularizers applies.

        Parameters
        ----------
        X : ndarray
            (N, d) array of observations where N is the number of samples, and
            d is the dimensionality of X.
        *regularizer :
            use these values instead of the values passed into the ``Basis``
            constructors for each regularizer. These are applied to each basis
            in the concatentation in the order they were concatenated.

        Returns
        -------
        ndarray :
            an array of shape (D,) that is the diagonal of the prior variance
            of the weights, :math:`\boldsymbol\Lambda` in :math:`\mathbf{w}
            \sim \mathcal{N}(\mathbf{0}, \boldsymbol\Lambda)`.
        list of slices:
            the slices into the regression weights that each regularizer
            applies to.
        """
        regularizer = repeat(None) if regularizer is () else regularizer
        regs, _ = zip(*(b.regularizer_diagonal(X, r)
                        for b, r in zip(self.bases, regularizer)))

        if self.__slices is None:
            baseinds = self.__base_locations(X)
            self.__slices = [slice(b, e)
                             for b, e in zip(baseinds[:-1], baseinds[1:])]

        return np.concatenate(regs), self.__slices