static String toStringImpl()

in src/main/java/org/apache/datasketches/kll/KllHelper.java [660:730]


  static String toStringImpl(final KllSketch sketch, final boolean withLevels, final boolean withData) {
    final SketchType sketchType = sketch.sketchType;
    final int k = sketch.getK();
    final int m = sketch.getM();
    final int numLevels = sketch.getNumLevels();
    final int[] levelsArr = sketch.getLevelsArray();
    final String epsPct = String.format("%.3f%%", sketch.getNormalizedRankError(false) * 100);
    final String epsPMFPct = String.format("%.3f%%", sketch.getNormalizedRankError(true) * 100);
    final StringBuilder sb = new StringBuilder();
    final String directStr = sketch.serialVersionUpdatable ? "Direct" : "";
    final String skType = sketchType == DOUBLES_SKETCH ? directStr + "Doubles" :
      sketchType == FLOATS_SKETCH ? directStr + "Floats" : directStr + "Items";
    sb.append(Util.LS).append("### Kll").append(skType).append("Sketch Summary:").append(Util.LS);
    sb.append("   K                      : ").append(k).append(Util.LS);
    sb.append("   Dynamic min K          : ").append(sketch.getMinK()).append(Util.LS);
    sb.append("   M                      : ").append(m).append(Util.LS);
    sb.append("   N                      : ").append(sketch.getN()).append(Util.LS);
    sb.append("   Epsilon                : ").append(epsPct).append(Util.LS);
    sb.append("   Epsison PMF            : ").append(epsPMFPct).append(Util.LS);
    sb.append("   Empty                  : ").append(sketch.isEmpty()).append(Util.LS);
    sb.append("   Estimation Mode        : ").append(sketch.isEstimationMode()).append(Util.LS);
    sb.append("   Levels                 : ").append(numLevels).append(Util.LS);
    sb.append("   Level 0 Sorted         : ").append(sketch.isLevelZeroSorted()).append(Util.LS);
    sb.append("   Capacity Items         : ").append(levelsArr[numLevels]).append(Util.LS);
    sb.append("   Retained Items         : ").append(sketch.getNumRetained()).append(Util.LS);
    if (sketch.serialVersionUpdatable) {
      sb.append("   Updatable Storage Bytes: ").append(sketch.getCurrentUpdatableSerializedSizeBytes()).append(Util.LS);
    } else {
      sb.append("   Compact Storage Bytes  : ").append(sketch.getCurrentCompactSerializedSizeBytes()).append(Util.LS);
    }

    if (sketchType == DOUBLES_SKETCH) {
      final KllDoublesSketch dblSk = (KllDoublesSketch) sketch;
      sb.append("   Min Item               : ").append(dblSk.getMinDoubleItem()).append(Util.LS);
      sb.append("   Max Item               : ").append(dblSk.getMaxDoubleItem()).append(Util.LS);
    } else if (sketchType == FLOATS_SKETCH) {
      final KllFloatsSketch fltSk = (KllFloatsSketch) sketch;
      sb.append("   Min Item               : ").append(fltSk.getMinFloatItem()).append(Util.LS);
      sb.append("   Max Item               : ").append(fltSk.getMaxFloatItem()).append(Util.LS);
    }
//    else {
//      KllItemsSketch itmSk = (KllItemsSketch) sketch;
//      sb.append("   Min Item               : ").append(itmSk.getMinItem()).append(Util.LS);
//      sb.append("   Max Item               : ").append(itmSk.getMaxItem()).append(Util.LS);
//    }
    sb.append("### End sketch summary").append(Util.LS);

    double[] myDoubleItemsArr = null;
    float[] myFloatItemsArr = null;
    //Object[] myItemsArr = null;

    if (withLevels) {
      sb.append(outputLevels(k, m, numLevels, levelsArr));
    }
    if (withData) {
      if (sketchType == DOUBLES_SKETCH) {
        final KllDoublesSketch dblSk = (KllDoublesSketch) sketch;
        myDoubleItemsArr = dblSk.getDoubleItemsArray();
        sb.append(outputDoublesData(numLevels, levelsArr, myDoubleItemsArr));
      } else if (sketchType == FLOATS_SKETCH) {
        final KllFloatsSketch fltSk = (KllFloatsSketch) sketch;
        myFloatItemsArr = fltSk.getFloatItemsArray();
        sb.append(outputFloatsData(numLevels, levelsArr, myFloatItemsArr));
      }
//      else { //Items Sketch //TODO
//        myItemsArr = null;
//        sb.append(outputGenericItemsData(numLevels, levelsArr, myItemsArr));
//      }
    }
    return sb.toString();
  }