in samoa-api/src/main/java/org/apache/samoa/moa/clusterers/AbstractClusterer.java [214:260]
public static boolean contextIsCompatible(InstancesHeader originalContext,
InstancesHeader newContext) {
// rule 1: num classes can increase but never decrease
// rule 2: num attributes can increase but never decrease
// rule 3: num nominal attribute values can increase but never decrease
// rule 4: attribute types must stay in the same order (although class
// can
// move; is always skipped over)
// attribute names are free to change, but should always still represent
// the original attributes
if (newContext.numClasses() < originalContext.numClasses()) {
return false; // rule 1
}
if (newContext.numAttributes() < originalContext.numAttributes()) {
return false; // rule 2
}
int oPos = 0;
int nPos = 0;
while (oPos < originalContext.numAttributes()) {
if (oPos == originalContext.classIndex()) {
oPos++;
if (!(oPos < originalContext.numAttributes())) {
break;
}
}
if (nPos == newContext.classIndex()) {
nPos++;
}
if (originalContext.attribute(oPos).isNominal()) {
if (!newContext.attribute(nPos).isNominal()) {
return false; // rule 4
}
if (newContext.attribute(nPos).numValues() < originalContext
.attribute(oPos).numValues()) {
return false; // rule 3
}
} else {
assert (originalContext.attribute(oPos).isNumeric());
if (!newContext.attribute(nPos).isNumeric()) {
return false; // rule 4
}
}
oPos++;
nPos++;
}
return true; // all checks clear
}