'Returns
update : array-like
The update vector such that params + update is the next
iterate when solving the score equations.
score : array-like
The current value of the score equations, not
incorporating the scale parameter.  If desired,
multiply this vector by the scale parameter to
incorporate the scale.'

def _update_mean_params(self):

    endog = self.endog_li
    exog = self.exog_li
    cached_means = self.cached_means
    varfunc = self.family.variance
    (bmat, score) = (0, 0)
    for i in range(self.num_group):
        (expval, lpr) = cached_means[i]
        resid = (endog[i] - expval)
        dmat = self.mean_deriv(exog[i], lpr)
        sdev = np.sqrt(varfunc(expval))
        rslt = self.cov_struct.covariance_matrix_solve(expval, i, sdev, (dmat, resid))
        if (rslt is None):
            return (None, None)
        (vinv_d, vinv_resid) = tuple(rslt)
        f = (self.weights_li[i] if (self.weights is not None) else 1.0)
        bmat += (f * np.dot(dmat.T, vinv_d))
        score += (f * np.dot(dmat.T, vinv_resid))
    update = np.linalg.solve(bmat, score)
    self._fit_history['cov_adjust'].append(self.cov_struct.cov_adjust)
    return (update, score)
