'Evaluate the score function at a given point.
The score corresponds to the profile (concentrated)
log-likelihood in which the scale parameter has been profiled
out.
Parameters
params : array-like
The parameter vector at which the score function is
computed.
scale : float or None
If None, return the profile (concentrated) log likelihood
(profiled over the scale parameter), else return the
log-likelihood using the given scale value.
Returns
The score vector.'

def score(self, params, scale=None):

    if (not hasattr(self, '_wexog_xprod')):
        self._setup_score_hess()
    xtxb = np.dot(self._wexog_xprod, params)
    sdr = ((- self._wexog_x_wendog) + xtxb)
    if (scale is None):
        ssr = (self._wendog_xprod - (2 * np.dot(self._wexog_x_wendog.T, params)))
        ssr += np.dot(params, xtxb)
        return (((- self.nobs) * sdr) / ssr)
    else:
        return ((- sdr) / scale)
