public static Context random(int nbObs, int nbGrp, int nbAttrPerGrp) {
        Context ctx = new Context();
        // Generates Observations.
        for (int i = 1; i <= nbObs; i++) {
            ctx.addToObservations(Integer.toString(i));
        }
        // Generates Attributes.
        for (int i = 1; i <= nbGrp; i++) {
            for (int j = 1; j <= nbAttrPerGrp; j++) {
                int q = i;
                int rem = 0;
                String name = "";
                do {
                    rem = q % 26;
                    q = q / 26;
                    name = name + (char) (rem + 65);
                } while (q != 0);
                ctx.addToAttributes(name + Integer.toString(j)); // These names are cool ...
            }
        }
        // Generates all requested observations.
        Random r = new Random();
        int attr = r.nextInt(nbAttrPerGrp) + 1;
        for (int i = 1; i <= nbObs; i++) { // i : Observation
            for (int j = 1; j <= nbGrp; j++) { // j : Familly
                int q = j;
                int rem = 0;
                String name = "";
                do {
                    rem = q % 26;
                    q = q / 26;
                    name = name + (char) (rem + 65);
                } while (q != 0);
               name = name + Integer.toString(attr); // These names are really cool, aren't they ?
               ctx.addExtentIntent(Integer.toString(i), name);
               attr = r.nextInt(nbAttrPerGrp) + 1;
            }
        }
        ctx.setBitSets();
        return ctx;
    }