@Override public Optional<CardinalityEstimator> createCardinalityEstimator(int outputIndex, Configuration configuration) { switch (outputIndex) { case 0: return Optional.of((optimizationContext, inputEstimates) -> { assert inputEstimates.length == 1; return new CardinalityEstimate( calculateNumVertices(inputEstimates[0].getLowerEstimate(), PageRankOperator.this.graphDensity.getUpperEstimate()), calculateNumVertices(inputEstimates[0].getUpperEstimate(), PageRankOperator.this.graphDensity.getLowerEstimate()), inputEstimates[0].getCorrectnessProbability() * PageRankOperator.this.graphDensity.getCorrectnessProbability() ); }); default: throw new IllegalArgumentException(String.format("%s does not have an OutputSlot with index %d.", this, outputIndex)); } }