switch (outlier.getHypothesis()) { case SAME_DEFINITION: sb.append( " Hypothesis: every " + outlier.getStructType() + " named " + outlier.getName() + " should have the same definition\n"); break; case SAME_NAME: sb.append(" Hypothesis:"); if (outlier.getNamedStructure() != null) { sb.append(" every "); } else { + outlier.getStructType() + " named " + outlier.getName() + "\n"); break; default: throw new BatfishException("Unexpected hypothesis" + outlier.getHypothesis()); sb.append(outlier.getOutliers() + "\n"); sb.append(" Conformers: "); sb.append(outlier.getConformers() + "\n\n");
@Override public int compareTo(NamedStructureOutlierSet<T> other) { int superScore = super.compareTo(other); if (superScore != 0) { return superScore; } int structComp = _structType.compareTo(other.getStructType()); if (structComp != 0) { return structComp; } return _name.compareTo(other.getName()); }
outliers.removeIf(oset -> oset.getNamedStructure() == null); outliers.removeIf(oset -> !isWithinThreshold(oset.getConformers(), oset.getOutliers()));
@Override public NamedStructureRoleConsistencyAnswerElement answer() { NamedStructureRoleConsistencyQuestion question = (NamedStructureRoleConsistencyQuestion) _question; _answerElement = new NamedStructureRoleConsistencyAnswerElement(); OutliersQuestion innerQ = new OutliersQuestionPlugin().createQuestion(); innerQ.setHypothesis(question.getHypothesis()); SortedSet<String> structTypes = new TreeSet<>(); structTypes.add(question.getStructType()); innerQ.setNamedStructTypes(structTypes); innerQ.setVerbose(true); PerRoleQuestion outerQ = new PerRoleQuestion(null, innerQ, question.getRoleDimension(), null); PerRoleQuestionPlugin outerPlugin = new PerRoleQuestionPlugin(); PerRoleAnswerElement roleAE = outerPlugin.createAnswerer(outerQ, _batfish).answer(); List<NamedStructureOutlierSet<?>> answers = new LinkedList<>(); for (Map.Entry<String, AnswerElement> entry : roleAE.getAnswers().entrySet()) { String role = entry.getKey(); OutliersAnswerElement ae = (OutliersAnswerElement) entry.getValue(); for (NamedStructureOutlierSet<?> answer : ae.getNamedStructureOutliers()) { answer.setRole(role); answers.add(answer); } } _answerElement.setAnswers(answers); return _answerElement; } }
private <T> void addNamedStructureOutliers( OutliersHypothesis hypothesis, NamedStructureEquivalenceSets<T> equivSet, SortedSet<NamedStructureOutlierSet<?>> rankedOutliers) { String structType = equivSet.getStructureClassName(); for (Map.Entry<String, SortedSet<NamedStructureEquivalenceSet<T>>> entry : equivSet.getSameNamedStructures().entrySet()) { String name = entry.getKey(); SortedSet<NamedStructureEquivalenceSet<T>> eClasses = entry.getValue(); NamedStructureEquivalenceSet<T> max = eClasses.stream() .max(Comparator.comparingInt(es -> es.getNodes().size())) .orElseThrow( () -> new BatfishException( "Named structure " + name + " has no equivalence classes")); SortedSet<String> conformers = max.getNodes(); SortedSet<String> outliers = eClasses.stream() .filter(eClass -> eClass != max) .flatMap(eClass -> eClass.getNodes().stream()) .collect(ImmutableSortedSet.toImmutableSortedSet(Comparator.naturalOrder())); rankedOutliers.add( new NamedStructureOutlierSet<>( hypothesis, structType, name, max.getNamedStructure(), conformers, outliers)); } }
@Override public boolean equals(Object o) { if (o == this) { return true; } else if (!(o instanceof NamedStructureOutlierSet)) { return false; } NamedStructureOutlierSet<?> rhs = (NamedStructureOutlierSet<?>) o; return super.equals(rhs) && _structType.equals(rhs.getStructType()) && _name.equals(rhs.getName()); }
OutliersAnswerElement oae = (OutliersAnswerElement) entry.getValue(); for (NamedStructureOutlierSet<?> nsos : oae.getNamedStructureOutliers()) { nsos.setRole(role); nsOutliers.add(nsos);
Optional<String> role = outlier.getRole(); role.ifPresent(s -> sb.append(" for role " + s)); sb.append(":\n"); switch (outlier.getHypothesis()) { case SAME_DEFINITION: sb.append( " every " + outlier.getStructType() + " named " + outlier.getName() + " should have the same definition\n"); break; case SAME_NAME: if (outlier.getNamedStructure() != null) { sb.append(" every "); } else { + outlier.getStructType() + " named " + outlier.getName() + "\n"); break; default: throw new BatfishException("Unexpected hypothesis" + outlier.getHypothesis()); sb.append(outlier.getOutliers() + "\n"); sb.append(" Conformers: "); sb.append(outlier.getConformers() + "\n\n");