Skip to content

Commit

Permalink
Merge pull request #491 from apache/adj_to_string_options
Browse files Browse the repository at this point in the history
Made some minor adjustments to the KLL toString(boolean, boolean) methods.
  • Loading branch information
leerho authored Jan 12, 2024
2 parents 1e7cfb5 + e04e534 commit 5eec0c3
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -307,14 +307,14 @@ public byte[] toByteArray() {
}

@Override
public String toString(final boolean withSummary, final boolean withDetail) {
public String toString(final boolean withLevels, final boolean withLevelsAndItems) {
KllSketch sketch = this;
if (withDetail && sketchStructure != UPDATABLE) {
if (withLevelsAndItems && sketchStructure != UPDATABLE) {
final Memory mem = getWritableMemory();
assert mem != null;
sketch = KllDoublesSketch.heapify(getWritableMemory());
}
return KllHelper.toStringImpl(sketch, withSummary, withDetail, getSerDe());
return KllHelper.toStringImpl(sketch, withLevels, withLevelsAndItems, getSerDe());
}

@Override
Expand All @@ -335,7 +335,7 @@ public void update(final double item, final int weight) {
if (readOnly) { throw new SketchesArgumentException(TGT_IS_READ_ONLY_MSG); }
if (weight < 1) { throw new SketchesArgumentException("Weight is less than one."); }
if (weight == 1) { KllDoublesHelper.updateDouble(this, item); }
KllDoublesHelper.updateDouble(this, item, weight);
else { KllDoublesHelper.updateDouble(this, item, weight); }
kllDoublesSV = null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -307,14 +307,14 @@ public byte[] toByteArray() {
}

@Override
public String toString(final boolean withSummary, final boolean withData) {
public String toString(final boolean withLevels, final boolean withLevelsAndItems) {
KllSketch sketch = this;
if (withData && sketchStructure != UPDATABLE) {
if (withLevelsAndItems && sketchStructure != UPDATABLE) {
final Memory mem = getWritableMemory();
assert mem != null;
sketch = KllFloatsSketch.heapify(getWritableMemory());
}
return KllHelper.toStringImpl(sketch, withSummary, withData, getSerDe());
return KllHelper.toStringImpl(sketch, withLevels, withLevelsAndItems, getSerDe());
}

@Override
Expand Down
94 changes: 48 additions & 46 deletions src/main/java/org/apache/datasketches/kll/KllHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,7 @@ static WritableMemory memorySpaceMgmt(
return newWmem;
}

private static String outputData(final KllSketch sketch) {
private static String outputDataDetail(final KllSketch sketch) {
final int[] levelsArr = sketch.getLevelsArray(SketchStructure.UPDATABLE);
final int numLevels = sketch.getNumLevels();
final int k = sketch.getK();
Expand Down Expand Up @@ -492,59 +492,61 @@ static byte[] toByteArray(final KllSketch srcSk, final boolean updatable) {
return bytesOut;
}

static <T> String toStringImpl(final KllSketch sketch, final boolean withSummary, final boolean withData,
static <T> String toStringImpl(final KllSketch sketch, final boolean withLevels, final boolean withLevelsAndItems,
final ArrayOfItemsSerDe<T> serDe) {
final StringBuilder sb = new StringBuilder();
final int k = sketch.getK();
final int m = sketch.getM();
final int numLevels = sketch.getNumLevels();
final int[] fullLevelsArr = sketch.getLevelsArray(UPDATABLE);

if (withSummary) {
final SketchType sketchType = sketch.sketchType;
final boolean hasMemory = sketch.hasMemory();
final long n = sketch.getN();
final String epsPct = String.format("%.3f%%", sketch.getNormalizedRankError(false) * 100);
final String epsPMFPct = String.format("%.3f%%", sketch.getNormalizedRankError(true) * 100);
final boolean compact = sketch.isCompactMemoryFormat();

final String directStr = hasMemory ? "Direct" : "";
final String compactStr = compact ? "Compact" : "";
final String readOnlyStr = sketch.isReadOnly() ? "true" + ("(" + (compact ? "Format" : "Memory") + ")") : "false";
final String skTypeStr = sketchType.getName();
final String className = "Kll" + directStr + compactStr + skTypeStr;

sb.append(LS + "### ").append(className).append(" Summary:").append(LS);
sb.append(" K : ").append(k).append(LS);
sb.append(" Dynamic min K : ").append(sketch.getMinK()).append(LS);
sb.append(" M : ").append(m).append(LS);
sb.append(" N : ").append(n).append(LS);
sb.append(" Epsilon : ").append(epsPct).append(LS);
sb.append(" Epsilon PMF : ").append(epsPMFPct).append(LS);
sb.append(" Empty : ").append(sketch.isEmpty()).append(LS);
sb.append(" Estimation Mode : ").append(sketch.isEstimationMode()).append(LS);
sb.append(" Levels : ").append(numLevels).append(LS);
sb.append(" Level 0 Sorted : ").append(sketch.isLevelZeroSorted()).append(LS);
sb.append(" Capacity Items : ").append(fullLevelsArr[numLevels]).append(LS);
sb.append(" Retained Items : ").append(sketch.getNumRetained()).append(LS);
sb.append(" Free Space : ").append(sketch.levelsArr[0]).append(LS);
sb.append(" ReadOnly : ").append(readOnlyStr).append(LS);
if (sketchType != ITEMS_SKETCH) {
sb.append(" Updatable Storage Bytes: ").append(sketch.currentSerializedSizeBytes(true)).append(LS);
}
sb.append(" Compact Storage Bytes : ").append(sketch.currentSerializedSizeBytes(false)).append(LS);

final String emptyStr = (sketchType == ITEMS_SKETCH) ? "Null" : "NaN";

sb.append(" Min Item : ").append(sketch.isEmpty() ? emptyStr : sketch.getMinItemAsString())
.append(LS);
sb.append(" Max Item : ").append(sketch.isEmpty() ? emptyStr : sketch.getMaxItemAsString())
.append(LS);
sb.append("### End sketch summary").append(LS);
}
if (withData) {
final SketchType sketchType = sketch.sketchType;
final boolean hasMemory = sketch.hasMemory();
final long n = sketch.getN();
final String epsPct = String.format("%.3f%%", sketch.getNormalizedRankError(false) * 100);
final String epsPMFPct = String.format("%.3f%%", sketch.getNormalizedRankError(true) * 100);
final boolean compact = sketch.isCompactMemoryFormat();

final String directStr = hasMemory ? "Direct" : "";
final String compactStr = compact ? "Compact" : "";
final String readOnlyStr = sketch.isReadOnly() ? "true" + ("(" + (compact ? "Format" : "Memory") + ")") : "false";
final String skTypeStr = sketchType.getName();
final String className = "Kll" + directStr + compactStr + skTypeStr;

sb.append(LS + "### ").append(className).append(" Summary:").append(LS);
sb.append(" K : ").append(k).append(LS);
sb.append(" Dynamic min K : ").append(sketch.getMinK()).append(LS);
sb.append(" M : ").append(m).append(LS);
sb.append(" N : ").append(n).append(LS);
sb.append(" Epsilon : ").append(epsPct).append(LS);
sb.append(" Epsilon PMF : ").append(epsPMFPct).append(LS);
sb.append(" Empty : ").append(sketch.isEmpty()).append(LS);
sb.append(" Estimation Mode : ").append(sketch.isEstimationMode()).append(LS);
sb.append(" Levels : ").append(numLevels).append(LS);
sb.append(" Level 0 Sorted : ").append(sketch.isLevelZeroSorted()).append(LS);
sb.append(" Capacity Items : ").append(fullLevelsArr[numLevels]).append(LS);
sb.append(" Retained Items : ").append(sketch.getNumRetained()).append(LS);
sb.append(" Free Space : ").append(sketch.levelsArr[0]).append(LS);
sb.append(" ReadOnly : ").append(readOnlyStr).append(LS);
if (sketchType != ITEMS_SKETCH) {
sb.append(" Updatable Storage Bytes: ").append(sketch.currentSerializedSizeBytes(true)).append(LS);
}
sb.append(" Compact Storage Bytes : ").append(sketch.currentSerializedSizeBytes(false)).append(LS);

final String emptyStr = (sketchType == ITEMS_SKETCH) ? "Null" : "NaN";

sb.append(" Min Item : ").append(sketch.isEmpty() ? emptyStr : sketch.getMinItemAsString())
.append(LS);
sb.append(" Max Item : ").append(sketch.isEmpty() ? emptyStr : sketch.getMaxItemAsString())
.append(LS);
sb.append("### End sketch summary").append(LS);

if (withLevels) {
sb.append(outputLevels(k, m, numLevels, fullLevelsArr));
sb.append(outputData(sketch));
}

if (withLevelsAndItems) {
sb.append(outputDataDetail(sketch));
}
return sb.toString();
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/apache/datasketches/kll/KllItemsSketch.java
Original file line number Diff line number Diff line change
Expand Up @@ -276,14 +276,14 @@ public byte[] toByteArray() {
}

@Override
public String toString(final boolean withSummary, final boolean withData) {
public String toString(final boolean withLevels, final boolean withLevelsAndItems) {
KllSketch sketch = this;
if (withData && sketchStructure != UPDATABLE) {
if (withLevelsAndItems && sketchStructure != UPDATABLE) {
final Memory mem = getWritableMemory();
assert mem != null;
sketch = KllItemsSketch.heapify((Memory)getWritableMemory(), comparator, serDe);
}
return KllHelper.toStringImpl(sketch, withSummary, withData, getSerDe());
return KllHelper.toStringImpl(sketch, withLevels, withLevelsAndItems, getSerDe());
}

@Override
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/org/apache/datasketches/kll/KllSketch.java
Original file line number Diff line number Diff line change
Expand Up @@ -281,18 +281,16 @@ public final boolean isSameResource(final Memory that) {

@Override
public final String toString() {
return toString(true, false);
return toString(false, false);
}

/**
* Returns a summary of the sketch as a string.
* @param withSummary if true includes sketch summary information
* @param withDetail if true include detail of levels array and items array
* @param withLevels if true includes sketch levels array summary information
* @param withLevelsAndItems if true include detail of levels array and items array together
* @return string representation of sketch summary
*/
public String toString(final boolean withSummary, final boolean withDetail) {
return KllHelper.toStringImpl(this, withSummary, withDetail, getSerDe());
}
public abstract String toString(final boolean withLevels, final boolean withLevelsAndItems);

//restricted

Expand Down

0 comments on commit 5eec0c3

Please sign in to comment.