'Poisson deviance function
Parameters
endog : array-like
Endogenous response variable
mu : array-like
Fitted mean response variable
iweights : array-like
1d array of weights. The default is 1.
scale : float, optional
An optional scale argument. The default is 1.
Returns
deviance : float
The deviance function at (endog,mu,iweights,scale) as defined
below.
Notes
If a constant term is included it is defined as
.. math::
D = 2 * \sum_i (iweights_i *
(Y_i * \log(Y_i / \mu_i) - (Y_i - \mu_i)))/ scale'

def deviance(self, endog, mu, iweights=1.0, scale=1.0):

    endog_mu = self._clean((endog / mu))
    return ((2 * np.sum((iweights * ((endog * np.log(endog_mu)) - (endog - mu))))) / scale)
