public /*@pure@*/ boolean checkInstance(Instance instance) {

        if (instance.numAttributes() != numAttributes()) {
            return false;
        }
        for (int i = 0; i < numAttributes(); i++) {
            if (instance.isMissing(i)) {
                continue;
            } else if (attribute(i).isNominal() ||
                    attribute(i).isString()) {
                if (!(Utils.eq(instance.value(i),
                        (double) (int) instance.value(i)))) {
                    return false;
                } else if (Utils.sm(instance.value(i), 0) ||
                        Utils.gr(instance.value(i),
                                attribute(i).numValues())) {
                    return false;
                }
            }
        }
        return true;
    }