'returns a lower bound on model evidence based on X and membership'

def lower_bound(self, X, z):

    check_is_fitted(self, 'means_')
    if (self.covariance_type not in ['full', 'tied', 'diag', 'spherical']):
        raise NotImplementedError(('This    ctype    is    not    implemented:    %s' % self.covariance_type))
    X = np.asarray(X)
    if (X.ndim == 1):
        X = X[:, np.newaxis]
    c = np.sum((z * _bound_state_log_lik(X, (self._initial_bound + self.bound_prec_), self.precs_, self.means_, self.covariance_type)))
    return (c + self._logprior(z))
