def get_variables(self, missing_in_geno=None):
        """Extract the complete set of data based on missingness over all
        for the current locus.

        :param missing_in_geno: mask associated with missingness in genotype
        :return: (phenotypes, covariates, nonmissing used for this set of vars)
        """
        count = 0
        mismatch = 0

        if missing_in_geno is None:
            nonmissing = numpy.invert(self.missing[self.idx])
        else:
            nonmissing = numpy.invert(self.missing[self.idx] | missing_in_geno)
        nmcount = sum(nonmissing)
        covars = numpy.zeros((self.covar_count, nmcount))
        for idx in range(0, self.covar_count):
            covars[idx] = self.covariates[idx][nonmissing]
            min = covars[idx][covars[idx] != pheno_covar.PhenoCovar.missing_encoding].min()
            max = covars[idx][covars[idx] != pheno_covar.PhenoCovar.missing_encoding].max()
            if min == max:
                raise InvariantVar("Covar %s doesn't have enough variation to continue" % (self.datasource.covariate_labels[idx]))

        min = self.phenotypes[self.idx][nonmissing].min()
        max = self.phenotypes[self.idx][nonmissing].max()
        if min == max:
            raise InvariantVar("Phenotype %s doesn't have enough variation to continue" % (self.datasource.phenotype_names[self.idx]))
        return (self.phenotypes[self.idx][nonmissing], covars, nonmissing)
Extract the complete set of data based on missingness over all
        for the current locus.

        :param missing_in_geno: mask associated with missingness in genotype
        :return: (phenotypes, covariates, nonmissing used for this set of vars)