'maybe drop and use mixin instead
TODO: GMM doesn\'t really care about the data, just the moment conditions'

def __init__(self, endog, exog, instrument, k_moms=None, k_params=None, missing='none', **kwds):

    instrument = self._check_inputs(instrument, endog)
    super(GMM, self).__init__(endog, exog, missing=missing, instrument=instrument)
    self.nobs = endog.shape[0]
    if (k_moms is not None):
        self.nmoms = k_moms
    elif (instrument is not None):
        self.nmoms = instrument.shape[1]
    else:
        self.nmoms = np.nan
    if (k_params is not None):
        self.k_params = k_params
    elif (instrument is not None):
        self.k_params = exog.shape[1]
    else:
        self.k_params = np.nan
    self.__dict__.update(kwds)
    self.epsilon_iter = 1e-06
