You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by le...@apache.org on 2022/06/23 00:01:47 UTC

[datasketches-characterization] 01/01: Make consisent with java 3.3-SNAPSHOT

This is an automated email from the ASF dual-hosted git repository.

leerho pushed a commit to branch matchJava3.3Plus
in repository https://gitbox.apache.org/repos/asf/datasketches-characterization.git

commit b78b453fa3e9e2e8623ccdd441925eb8bf90a39e
Author: Lee Rhodes <le...@users.noreply.github.com>
AuthorDate: Wed Jun 22 17:01:40 2022 -0700

    Make consisent with java 3.3-SNAPSHOT
---
 .../org/apache/datasketches/MonotonicPoints.java   |   4 +-
 .../org/apache/datasketches/PowerLawGenerator.java |  12 +-
 .../characterization/AccuracyStats.java            |  35 +++-
 .../characterization/BoundsAccuracyStats.java      |   4 +-
 .../datasketches/characterization/ProfileUtil.java |  18 +-
 .../characterization/fdt/FdtAccuracyProfile.java   |   6 +-
 .../frequencies/BaseFrequenciesSpeedProfile.java   |   4 +-
 .../hash/BaseHashSpeedProfile.java                 |   4 +-
 .../hll/HllConfidenceIntervalInverseProfile.java   |   4 +-
 ...llDoublesSketchRankGaussianAccuracyProfile.java |   4 +-
 ...KllFloatsSketchRankGaussianAccuracyProfile.java |   4 +-
 .../kll/KllSketchSizeSpeedProfile.java             |   4 +-
 .../characterization/memory/BaseSpeedProfile.java  |   4 +-
 .../memory/BaseUtf8SpeedProfile.java               |   4 +-
 .../quantiles/BaseQuantilesAccuracyProfile.java    |   4 +-
 .../quantiles/BaseQuantilesSpeedProfile.java       |   4 +-
 .../tdigest/QuantilesAccuracyProfile.java          |   4 +-
 .../quantiles/tdigest/QuantilesSpeedProfile.java   |   4 +-
 .../req/ReqSketchAccuracyProfile.java              |   4 +-
 .../req/ReqSketchSizeSpeedProfile.java             |   4 +-
 .../ThetaAccuracyIntersectionVsIEProfile.java      | 181 +++++++++++++++++++++
 .../uniquecount/BaseAccuracyProfile.java           |  40 ++---
 .../uniquecount/BaseBoundsAccuracyProfile.java     |   4 +-
 .../uniquecount/BaseSerDeProfile.java              |   4 +-
 .../uniquecount/BaseUpdateSpeedProfile.java        |   4 +-
 .../theta/ThetaAccuracyIntersectionVsIEJob.conf    |  42 +++++
 .../apache/datasketches/PowerLawGeneratorTest.java |  10 +-
 27 files changed, 333 insertions(+), 87 deletions(-)

diff --git a/src/main/java/org/apache/datasketches/MonotonicPoints.java b/src/main/java/org/apache/datasketches/MonotonicPoints.java
index 488e1d0..a7c6a24 100644
--- a/src/main/java/org/apache/datasketches/MonotonicPoints.java
+++ b/src/main/java/org/apache/datasketches/MonotonicPoints.java
@@ -23,7 +23,7 @@ import static java.lang.Math.abs;
 import static java.lang.Math.exp;
 import static java.lang.Math.log;
 import static java.lang.Math.min;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import java.util.Random;
 
@@ -150,7 +150,7 @@ public class MonotonicPoints {
     final int end = 1 << lgEnd;
     int count = 0;
     while (p <= end) {
-      p = pwr2LawNext(ppo, p);
+      p = pwr2SeriesNext(ppo, p);
       count++;
     }
     return count;
diff --git a/src/main/java/org/apache/datasketches/PowerLawGenerator.java b/src/main/java/org/apache/datasketches/PowerLawGenerator.java
index d67a876..92c96c6 100644
--- a/src/main/java/org/apache/datasketches/PowerLawGenerator.java
+++ b/src/main/java/org/apache/datasketches/PowerLawGenerator.java
@@ -20,7 +20,11 @@
 package org.apache.datasketches;
 
 import static java.lang.Math.abs;
+import static java.lang.Math.ceil;
+import static java.lang.Math.exp;
+import static java.lang.Math.floor;
 import static java.lang.Math.log;
+import static java.lang.Math.pow;
 
 /**
  * A simple tool to generate (x,y) pairs of points that follow a power-law
@@ -201,7 +205,7 @@ public class PowerLawGenerator {
       final int ptsPerLogBase) {
     final boolean increasing = end > start;
     final double genIdx = getGenIndex(start, logBase, ptsPerLogBase);
-    return (int) ((increasing) ? Math.floor(genIdx) : Math.ceil(genIdx));
+    return (int) ((increasing) ? floor(genIdx) : ceil(genIdx));
   }
 
   /**
@@ -220,7 +224,7 @@ public class PowerLawGenerator {
       final int ptsPerLogBase) {
     final boolean increasing = end > start;
     final double genIdx = getGenIndex(end, logBase, ptsPerLogBase);
-    return (int) ((!increasing) ? Math.floor(genIdx) : Math.ceil(genIdx));
+    return (int) ((!increasing) ? floor(genIdx) : ceil(genIdx));
   }
 
   /**
@@ -249,7 +253,7 @@ public class PowerLawGenerator {
    * @return the x-coordinate based on the generating index
    */
   public static double getX(final int genIndex, final double logBase, final int ptsPerLogBase) {
-    return Math.pow(logBase, ((double) genIndex) / ptsPerLogBase);
+    return pow(logBase, ((double) genIndex) / ptsPerLogBase);
   }
 
   /**
@@ -261,7 +265,7 @@ public class PowerLawGenerator {
    * @return the y-coordinate
    */
   public static double getY(final DoublePair start, final double slope, final double x) {
-    return start.y * Math.exp(slope * log(x / start.x));
+    return start.y * exp(slope * log(x / start.x));
   }
 
 }
diff --git a/src/main/java/org/apache/datasketches/characterization/AccuracyStats.java b/src/main/java/org/apache/datasketches/characterization/AccuracyStats.java
index fd5e2a2..b714fe9 100644
--- a/src/main/java/org/apache/datasketches/characterization/AccuracyStats.java
+++ b/src/main/java/org/apache/datasketches/characterization/AccuracyStats.java
@@ -19,7 +19,10 @@
 
 package org.apache.datasketches.characterization;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static java.lang.Math.pow;
+import static java.lang.Math.round;
+import static org.apache.datasketches.Util.powerSeriesNextDouble;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.MonotonicPoints;
 import org.apache.datasketches.quantiles.DoublesSketchBuilder;
@@ -35,7 +38,7 @@ public class AccuracyStats {
   public double sumEst = 0;
   public double sumRelErr = 0;
   public double sumSqErr = 0;
-  public double rmsre = 0; //used later for plotting
+  public double rmsre = 0; //used later for plotting, set externally
   public double trueValue; //set by constructor
   public int bytes = 0;
 
@@ -43,7 +46,7 @@ public class AccuracyStats {
    * @param k the configuration value for the quantiles sketch. It must be a power of two.
    * @param trueValue the true value
    */
-  public AccuracyStats(final int k, final int trueValue) {
+  public AccuracyStats(final int k, final long trueValue) {
     qsk = new DoublesSketchBuilder().setK(k).build(); //Quantiles
     this.trueValue = trueValue;
   }
@@ -51,7 +54,7 @@ public class AccuracyStats {
   /**
    * Update
    *
-   * @param est the value of the estimate for a single trial
+   * @param est the value of the estimate for a single measurement
    */
   public void update(final double est) {
     qsk.update(est);
@@ -69,14 +72,34 @@ public class AccuracyStats {
    * @param lgQK the lgK for the Quantiles sketch
    * @return an AccuracyStats array
    */
-  public static final AccuracyStats[] buildAccuracyStatsArray(
+  public static final AccuracyStats[] buildLog2AccuracyStatsArray(
       final int lgMin, final int lgMax, final int ppo, final int lgQK) {
     final int qLen = MonotonicPoints.countPoints(lgMin, lgMax, ppo);
     final AccuracyStats[] qArr = new AccuracyStats[qLen];
     int p = 1 << lgMin;
     for (int i = 0; i < qLen; i++) {
       qArr[i] = new AccuracyStats(1 << lgQK, p);
-      p = pwr2LawNext(ppo, p);
+      p = pwr2SeriesNext(ppo, p);
+    }
+    return qArr;
+  }
+
+  /**
+   * Build the AccuracyStats Array
+   * @param log10Min log_base2 of the minimum number of uniques used
+   * @param log10Max log_base2 of the maximum number of uniques used
+   * @param ppb the number of points per base (10)
+   * @param lgQK the lgK for the Quantiles sketch
+   * @return an AccuracyStats array
+   */
+  public static final AccuracyStats[] buildLog10AccuracyStatsArray(
+      final int log10Min, final int log10Max, final int ppb, final int lgQK) {
+    final int qLen = MonotonicPoints.countPoints(log10Min, log10Max, ppb);
+    final AccuracyStats[] qArr = new AccuracyStats[qLen];
+    long p = round(pow(10, log10Min));
+    for (int i = 0; i < qLen; i++) {
+      qArr[i] = new AccuracyStats(1 << lgQK, p);
+      p = (int) powerSeriesNextDouble(ppb, p, true, 10.0);
     }
     return qArr;
   }
diff --git a/src/main/java/org/apache/datasketches/characterization/BoundsAccuracyStats.java b/src/main/java/org/apache/datasketches/characterization/BoundsAccuracyStats.java
index 4e12229..4451fea 100644
--- a/src/main/java/org/apache/datasketches/characterization/BoundsAccuracyStats.java
+++ b/src/main/java/org/apache/datasketches/characterization/BoundsAccuracyStats.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.characterization;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.MonotonicPoints;
 import org.apache.datasketches.quantiles.DoublesSketchBuilder;
@@ -87,7 +87,7 @@ public class BoundsAccuracyStats {
     int p = 1 << lgMin;
     for (int i = 0; i < qLen; i++) {
       qArr[i] = new BoundsAccuracyStats(1 << lgQK, p);
-      p = pwr2LawNext(ppo, p);
+      p = pwr2SeriesNext(ppo, p);
     }
     return qArr;
   }
diff --git a/src/main/java/org/apache/datasketches/characterization/ProfileUtil.java b/src/main/java/org/apache/datasketches/characterization/ProfileUtil.java
index c99fe25..e42abe6 100644
--- a/src/main/java/org/apache/datasketches/characterization/ProfileUtil.java
+++ b/src/main/java/org/apache/datasketches/characterization/ProfileUtil.java
@@ -21,9 +21,9 @@ package org.apache.datasketches.characterization;
 
 import static java.lang.Math.ceil;
 import static java.lang.Math.max;
-import static org.apache.datasketches.Util.ceilingPowerOfBdouble;
-import static org.apache.datasketches.Util.logB;
-import static org.apache.datasketches.Util.pwrLawNextDouble;
+import static org.apache.datasketches.Util.ceilingPowerBaseOfDouble;
+import static org.apache.datasketches.Util.logBaseOfX;
+import static org.apache.datasketches.Util.powerSeriesNextDouble;
 
 /**
  * @author Lee Rhodes
@@ -42,10 +42,10 @@ public class ProfileUtil {
    */
   public static double[] buildSplitPointsArr(final double min, final double max,
       final int pplb, final double logBase, final double eps) {
-    final double ceilPwrBmin = ceilingPowerOfBdouble(logBase, min);
-    final double ceilPwrBmax = ceilingPowerOfBdouble(logBase, max);
-    final int bot = (int) ceil(logB(logBase, max(1.0, ceilPwrBmin)));
-    final int top = (int) ceil(logB(logBase, ceilPwrBmax));
+    final double ceilPwrBmin = ceilingPowerBaseOfDouble(logBase, min);
+    final double ceilPwrBmax = ceilingPowerBaseOfDouble(logBase, max);
+    final int bot = (int) ceil(logBaseOfX(logBase, max(1.0, ceilPwrBmin)));
+    final int top = (int) ceil(logBaseOfX(logBase, ceilPwrBmax));
     final int numSP;
     double next;
     final double[] spArr;
@@ -56,7 +56,7 @@ public class ProfileUtil {
       spArr[1] = 1;
       next = 1.0;
       for (int i = 2; i < numSP; i++) {
-        next = pwrLawNextDouble(pplb, next, false, logBase);
+        next = powerSeriesNextDouble(pplb, next, false, logBase);
         spArr[i] = next;
       }
     } else {
@@ -65,7 +65,7 @@ public class ProfileUtil {
       spArr[0] = ceilPwrBmin;
       next = ceilPwrBmin;
       for (int i = 1; i < numSP; i++) {
-        next = pwrLawNextDouble(pplb, next, false, logBase);
+        next = powerSeriesNextDouble(pplb, next, false, logBase);
         spArr[i] = next;
       }
     }
diff --git a/src/main/java/org/apache/datasketches/characterization/fdt/FdtAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/fdt/FdtAccuracyProfile.java
index 36eabbc..2531505 100644
--- a/src/main/java/org/apache/datasketches/characterization/fdt/FdtAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/fdt/FdtAccuracyProfile.java
@@ -22,7 +22,7 @@ package org.apache.datasketches.characterization.fdt;
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_4SD;
 import static org.apache.datasketches.PowerLawGenerator.getSlope;
 import static org.apache.datasketches.PowerLawGenerator.getY;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -129,7 +129,7 @@ public class FdtAccuracyProfile implements JobProfile {
     slope = getSlope(p1, p2);
     xPoints = 0;
     int xG;
-    for (xG = minG; xG <= maxG; xG = pwr2LawNext(gPPO, xG)) {
+    for (xG = minG; xG <= maxG; xG = pwr2SeriesNext(gPPO, xG)) {
       xPoints++;
     }
   }
@@ -139,7 +139,7 @@ public class FdtAccuracyProfile implements JobProfile {
     groupsGenerated = 0;
     sketchUpdates = 0;
     int xG, yU;
-    for (xG = minG; xG <= maxG; xG = pwr2LawNext(gPPO, xG)) { //select major group
+    for (xG = minG; xG <= maxG; xG = pwr2SeriesNext(gPPO, xG)) { //select major group
       groupsGenerated += xG;
       yU = (int) Math.round(getY(p1, slope, xG)); //compute target # uniques
       for (int g = 1; g <= xG; g++) { //select the minor group
diff --git a/src/main/java/org/apache/datasketches/characterization/frequencies/BaseFrequenciesSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/frequencies/BaseFrequenciesSpeedProfile.java
index 83afefc..bda641b 100644
--- a/src/main/java/org/apache/datasketches/characterization/frequencies/BaseFrequenciesSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/frequencies/BaseFrequenciesSpeedProfile.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.characterization.frequencies;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -65,7 +65,7 @@ public abstract class BaseFrequenciesSpeedProfile implements JobProfile {
         doTrial();
       }
       job.println(getStats(streamLength, numTrials));
-      streamLength = pwr2LawNext(pointsPerOctave, streamLength);
+      streamLength = pwr2SeriesNext(pointsPerOctave, streamLength);
     }
   }
 
diff --git a/src/main/java/org/apache/datasketches/characterization/hash/BaseHashSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/hash/BaseHashSpeedProfile.java
index 86a2fa2..d0a35bf 100644
--- a/src/main/java/org/apache/datasketches/characterization/hash/BaseHashSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/hash/BaseHashSpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.hash;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -98,7 +98,7 @@ public abstract class BaseHashSpeedProfile implements JobProfile {
     final int minX = 1 << lgMinX;
     int lastX = 0;
     while (lastX < maxX) {
-      final int nextX = lastX == 0 ? minX : pwr2LawNext(xPPO, lastX);
+      final int nextX = lastX == 0 ? minX : pwr2SeriesNext(xPPO, lastX);
       lastX = nextX;
       final int trials = getNumTrials(nextX);
       p.reset(nextX, trials);
diff --git a/src/main/java/org/apache/datasketches/characterization/hll/HllConfidenceIntervalInverseProfile.java b/src/main/java/org/apache/datasketches/characterization/hll/HllConfidenceIntervalInverseProfile.java
index 6f9945a..51991ba 100644
--- a/src/main/java/org/apache/datasketches/characterization/hll/HllConfidenceIntervalInverseProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/hll/HllConfidenceIntervalInverseProfile.java
@@ -23,7 +23,7 @@ import static java.lang.Math.max;
 import static java.lang.Math.min;
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_3SD;
 import static org.apache.datasketches.Util.milliSecToString;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import java.io.PrintWriter;
 import java.util.Arrays;
@@ -161,7 +161,7 @@ public class HllConfidenceIntervalInverseProfile implements JobProfile {
     //This will generate a table of data for each intermediate Trials point
     int lastT = 0;
     while (lastT < maxT) {
-      final int nextT = lastT == 0 ? minT : pwr2LawNext(tPPO, lastT);
+      final int nextT = lastT == 0 ? minT : pwr2SeriesNext(tPPO, lastT);
       final int delta = nextT - lastT;
       for (int i = 0; i < delta; i++) {
         doTrial();
diff --git a/src/main/java/org/apache/datasketches/characterization/kll/KllDoublesSketchRankGaussianAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/kll/KllDoublesSketchRankGaussianAccuracyProfile.java
index d76e929..d6db0e7 100644
--- a/src/main/java/org/apache/datasketches/characterization/kll/KllDoublesSketchRankGaussianAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/kll/KllDoublesSketchRankGaussianAccuracyProfile.java
@@ -22,7 +22,7 @@ package org.apache.datasketches.characterization.kll;
 import static java.lang.Math.round;
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_3SD;
 import static org.apache.datasketches.Util.evenlySpaced;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -155,7 +155,7 @@ public class KllDoublesSketchRankGaussianAccuracyProfile implements JobProfile {
       doStreamLength(streamLength);
       //go to next stream length
       if (useppo) {
-        streamLength = pwr2LawNext(ppo, streamLength);
+        streamLength = pwr2SeriesNext(ppo, streamLength);
       } else {
         lgCurSL += lgDelta;
         streamLength = 1 << lgCurSL;
diff --git a/src/main/java/org/apache/datasketches/characterization/kll/KllFloatsSketchRankGaussianAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/kll/KllFloatsSketchRankGaussianAccuracyProfile.java
index 3b3ecd8..f553db7 100644
--- a/src/main/java/org/apache/datasketches/characterization/kll/KllFloatsSketchRankGaussianAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/kll/KllFloatsSketchRankGaussianAccuracyProfile.java
@@ -22,7 +22,7 @@ package org.apache.datasketches.characterization.kll;
 import static java.lang.Math.round;
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_3SD;
 import static org.apache.datasketches.Util.evenlySpacedFloats;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -161,7 +161,7 @@ public class KllFloatsSketchRankGaussianAccuracyProfile implements JobProfile {
       doStreamLength(streamLength);
       //go to next stream length
       if (useppo) {
-        streamLength = pwr2LawNext(ppo, streamLength);
+        streamLength = pwr2SeriesNext(ppo, streamLength);
       } else {
         lgCurSL += lgDelta;
         streamLength = 1 << lgCurSL;
diff --git a/src/main/java/org/apache/datasketches/characterization/kll/KllSketchSizeSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/kll/KllSketchSizeSpeedProfile.java
index 129bfc5..2ea9095 100644
--- a/src/main/java/org/apache/datasketches/characterization/kll/KllSketchSizeSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/kll/KllSketchSizeSpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.kll;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -135,7 +135,7 @@ public class KllSketchSizeSpeedProfile implements JobProfile {
     job.printf(sFmt, (Object[]) columnLabels); //Header
     int pp = 1;
     while (lastSL < maxSL) { //Trials for each plotPoint on X-axis, and one row on output
-      final int nextSL = lastSL == 0 ? minSL : pwr2LawNext(ppoSL, lastSL);
+      final int nextSL = lastSL == 0 ? minSL : pwr2SeriesNext(ppoSL, lastSL);
       lastSL = nextSL;
       final int trials = getNumTrials(nextSL);
 
diff --git a/src/main/java/org/apache/datasketches/characterization/memory/BaseSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/memory/BaseSpeedProfile.java
index 3e3df81..0b05ebe 100644
--- a/src/main/java/org/apache/datasketches/characterization/memory/BaseSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/memory/BaseSpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.memory;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -117,7 +117,7 @@ static class Point {
     final int minX = 1 << lgMinX;
     int lastX = 0;
     while (lastX < maxX) {
-      final int nextX = lastX == 0 ? minX : pwr2LawNext(xPPO, lastX);
+      final int nextX = lastX == 0 ? minX : pwr2SeriesNext(xPPO, lastX);
       lastX = nextX;
       final int trials = getNumTrials(nextX);
       configure(nextX);
diff --git a/src/main/java/org/apache/datasketches/characterization/memory/BaseUtf8SpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/memory/BaseUtf8SpeedProfile.java
index 6d95eae..919afb9 100644
--- a/src/main/java/org/apache/datasketches/characterization/memory/BaseUtf8SpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/memory/BaseUtf8SpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.memory;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 //import static org.testng.Assert.fail;
 
 import java.util.ArrayList;
@@ -154,7 +154,7 @@ public abstract class BaseUtf8SpeedProfile implements JobProfile {
     final int minX = 1 << lgMinX;
     int lastX = 0;
     while (lastX < maxX) { //do each plot point on the X-axis
-      final int nextX = lastX == 0 ? minX : pwr2LawNext(xPPO, lastX);
+      final int nextX = lastX == 0 ? minX : pwr2SeriesNext(xPPO, lastX);
       lastX = nextX;
       final int trials = getNumTrials(nextX);
       //configure();
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesAccuracyProfile.java
index cf62ac0..9cb7d7d 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesAccuracyProfile.java
@@ -26,7 +26,7 @@ import static org.apache.datasketches.GaussianRanks.MED;
 import static org.apache.datasketches.GaussianRanks.P1SD;
 import static org.apache.datasketches.GaussianRanks.P2SD;
 import static org.apache.datasketches.GaussianRanks.P3SD;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -107,7 +107,7 @@ public abstract class BaseQuantilesAccuracyProfile implements JobProfile {
       job.println(streamLength + "\t"
           + String.format("%.16f\t%.16f\t%.16f\t%.16f\t%.16f\t%.16f\t%.16f",
               qArr[0], qArr[1], qArr[2], qArr[3], qArr[4], qArr[5], qArr[6]));
-      streamLength = pwr2LawNext(ppo, streamLength);
+      streamLength = pwr2SeriesNext(ppo, streamLength);
     }
     job.println("");
   }
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesSpeedProfile.java
index 52629ab..7762e2d 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/BaseQuantilesSpeedProfile.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.characterization.quantiles;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -69,7 +69,7 @@ public abstract class BaseQuantilesSpeedProfile implements JobProfile {
         doTrial();
       }
       job.println(getStats(streamLength, numTrials, numQueryValues));
-      streamLength = pwr2LawNext(pointsPerOctave, streamLength);
+      streamLength = pwr2SeriesNext(pointsPerOctave, streamLength);
     }
   }
 
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesAccuracyProfile.java
index fb8a60d..248b1f4 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesAccuracyProfile.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.characterization.quantiles.tdigest;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -66,7 +66,7 @@ public abstract class QuantilesAccuracyProfile implements JobProfile {
       }
       job.println(streamLength + "\t"
           + String.format("%.2f", rankErrorSketch.getQuantile((double) errorPct / 100) * 100));
-      streamLength = pwr2LawNext(ppo, streamLength);
+      streamLength = pwr2SeriesNext(ppo, streamLength);
     }
   }
 
diff --git a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesSpeedProfile.java
index b58a03f..caba3bd 100644
--- a/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/quantiles/tdigest/QuantilesSpeedProfile.java
@@ -19,7 +19,7 @@
 
 package org.apache.datasketches.characterization.quantiles.tdigest;
 
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -61,7 +61,7 @@ public abstract class QuantilesSpeedProfile implements JobProfile {
         doTrial();
       }
       job.println(getStats(streamLength, numTrials, numQueryValues));
-      streamLength = pwr2LawNext(pointsPerOctave, streamLength);
+      streamLength = pwr2SeriesNext(pointsPerOctave, streamLength);
     }
   }
 
diff --git a/src/main/java/org/apache/datasketches/characterization/req/ReqSketchAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/req/ReqSketchAccuracyProfile.java
index df45e40..1682f9d 100644
--- a/src/main/java/org/apache/datasketches/characterization/req/ReqSketchAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/req/ReqSketchAccuracyProfile.java
@@ -23,7 +23,7 @@ import static java.lang.Math.round;
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_3SD;
 import static org.apache.datasketches.SpacedPoints.expSpaced;
 import static org.apache.datasketches.Util.evenlySpaced;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -222,7 +222,7 @@ public class ReqSketchAccuracyProfile implements JobProfile {
 
       //go to next stream length
       if (useppo) {
-        streamLength = pwr2LawNext(ppo, streamLength);
+        streamLength = pwr2SeriesNext(ppo, streamLength);
       } else {
         lgCurSL += lgDelta;
         streamLength = 1 << lgCurSL;
diff --git a/src/main/java/org/apache/datasketches/characterization/req/ReqSketchSizeSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/req/ReqSketchSizeSpeedProfile.java
index ac3d1c4..4e52c36 100644
--- a/src/main/java/org/apache/datasketches/characterization/req/ReqSketchSizeSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/req/ReqSketchSizeSpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.req;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -128,7 +128,7 @@ public class ReqSketchSizeSpeedProfile implements JobProfile {
     job.printf(sFmt, (Object[]) columnLabels); //Header
     int pp = 1;
     while (lastSL < maxSL) { //Trials for each plotPoint on X-axis, and one row on output
-      final int nextSL = lastSL == 0 ? minSL : pwr2LawNext(ppoSL, lastSL);
+      final int nextSL = lastSL == 0 ? minSL : pwr2SeriesNext(ppoSL, lastSL);
       lastSL = nextSL;
       final int trials = getNumTrials(nextSL);
 
diff --git a/src/main/java/org/apache/datasketches/characterization/theta/ThetaAccuracyIntersectionVsIEProfile.java b/src/main/java/org/apache/datasketches/characterization/theta/ThetaAccuracyIntersectionVsIEProfile.java
new file mode 100644
index 0000000..9d96e70
--- /dev/null
+++ b/src/main/java/org/apache/datasketches/characterization/theta/ThetaAccuracyIntersectionVsIEProfile.java
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.datasketches.characterization.theta;
+
+import org.apache.datasketches.Job;
+import org.apache.datasketches.JobProfile;
+import org.apache.datasketches.Properties;
+import org.apache.datasketches.ResizeFactor;
+import org.apache.datasketches.theta.Intersection;
+import org.apache.datasketches.theta.SetOperationBuilder;
+import org.apache.datasketches.theta.Union;
+import org.apache.datasketches.theta.UpdateSketch;
+import org.apache.datasketches.theta.UpdateSketchBuilder;
+
+public class ThetaAccuracyIntersectionVsIEProfile implements JobProfile {
+  final static String LS = System.getProperty("line.separator");
+  Job job;
+  Properties prop;
+  long vIn = 0;
+  int lgK;
+  ResizeFactor rf;
+  float p;
+  boolean direct;
+  boolean rebuild;
+
+  int trials;
+  int minLg10U;
+  int maxLg10U;
+  int ppom;
+
+  UpdateSketch skSm;
+  UpdateSketch skLg;
+  Intersection intersection;
+  Union union;
+
+  int plotPoints;
+  long[] uPoints;
+  double[] fArr;
+  double[] yTheorThetaREArr; // sqrt(F) * 1/sqrt(k) //plot of theoretical Theta RE
+  double[] yTheorIE_REArr;     // F * 1/sqrt(k) //plot of theoretical IE RE
+  double[] yThetaREArr;    //plot of measured Theta RE
+  double[] yIE_REArr;      //plot of meausred IE RE
+
+  double[] yThetaRESumArr;
+  double[] yIE_RESumArr;
+
+  @Override
+  public void start(final Job job) {
+    this.job = job;
+    prop = job.getProperties();
+    lgK = Integer.parseInt(prop.mustGet("LgK"));
+    rf = ResizeFactor.getRF(Integer.parseInt(prop.mustGet("LgRF")));
+    p = Float.parseFloat(prop.mustGet("P"));
+    direct = Boolean.parseBoolean(prop.mustGet("Direct"));
+    rebuild = Boolean.parseBoolean(prop.mustGet("Rebuild"));
+
+    trials = Integer.parseInt(prop.mustGet("Trials"));
+
+    minLg10U = Integer.parseInt(prop.mustGet("MinLg10U"));
+    maxLg10U = Integer.parseInt(prop.mustGet("MaxLg10U"));
+    ppom = Integer.parseInt(prop.mustGet("PPOM"));
+    configure();
+    doTrials();
+    process();
+    shutdown();
+    cleanup();
+    job.println("");
+  }
+
+  void configure() {
+    final double theorRSE = 1.0 / Math.sqrt(1 << lgK);
+    plotPoints = (maxLg10U - minLg10U) * ppom + 1;
+    fArr = new double[plotPoints];
+    uPoints = new long[plotPoints];
+    yTheorThetaREArr = new double[plotPoints];
+    yTheorIE_REArr = new double[plotPoints];
+    yThetaREArr = new double[plotPoints];
+    yIE_REArr = new double[plotPoints];
+
+    yThetaRESumArr = new double[plotPoints];
+    yIE_RESumArr = new double[plotPoints];
+
+    final double inc = 1.0 / ppom;
+    for (int i = 0; i < plotPoints; i++) {
+      final long aUb = (long)Math.pow(10, minLg10U + (i * inc));
+      uPoints[i] = aUb;
+      final long aIb = uPoints[0];
+      final double F = (double)aUb / aIb;
+      fArr[i] = F;
+      yTheorIE_REArr[i] = F * theorRSE;
+      yTheorThetaREArr[i] = Math.sqrt(F) * theorRSE;
+    }
+    configureSketches();
+  }
+
+  void configureSketches() {
+    final UpdateSketchBuilder udBldr = new UpdateSketchBuilder()
+      .setLogNominalEntries(lgK)
+      .setP(p)
+      .setResizeFactor(rf);
+    skSm = udBldr.build();
+    skLg = udBldr.build();
+    final SetOperationBuilder soBldr = new SetOperationBuilder()
+        .setLogNominalEntries(lgK);
+    intersection = soBldr.buildIntersection();
+    union = soBldr.buildUnion();
+  }
+
+  void doTrials() {
+    for (int t = 1; t <= trials; t++) {
+      doTrial();
+    }
+    for (int pp = 0; pp < plotPoints; pp++) {
+      yThetaREArr[pp] = yThetaRESumArr[pp] / trials;
+      yIE_REArr[pp] = yIE_RESumArr[pp] / trials;
+    }
+  }
+
+  void doTrial() {
+    final long base = uPoints[0];
+    for (long u = 0; u < base; u++) {
+      skSm.update(vIn);
+      skLg.update(vIn++);
+    }
+    skSm.rebuild();
+    skLg.rebuild();
+    yThetaRESumArr[0] += (intersection.intersect(skLg, skSm).getEstimate() / base - 1.0) * 2.0;
+    yIE_RESumArr[0] +=
+        ((skSm.getEstimate() + skLg.getEstimate() - union.union(skSm, skLg).getEstimate()) / base - 1.0) * 2.0;
+
+    for (int pp = 1; pp < plotPoints; pp++) {
+      final long delta = uPoints[pp] - uPoints[pp - 1];
+      for (long u = 0; u < delta; u++) {
+        skLg.update(vIn++);
+      }
+      skLg.rebuild();
+      yThetaRESumArr[pp] += intersection.intersect(skLg, skSm).getEstimate() / base - 1.0;
+      yIE_RESumArr[pp] += (skSm.getEstimate() + skLg.getEstimate() - union.union(skSm, skLg).getEstimate())
+          / base - 1.0;
+    }
+    skSm.reset();
+    skLg.reset();
+  }
+
+  final String[] hdr = {"PP","F", "TheorThetaRE", "TheorIE_RE", "ThetaRE", "IE_RE"};
+  final String hfmt  = "%6s %12s %12s %12s %12s %12s" + LS;
+  final String fmt   = "%6d %12.3e %12.6f %12.6f %12.6f %12.6f" + LS;
+
+  void process() {
+    job.println("");
+    job.printf(hfmt, (Object[]) hdr );
+    for (int i = 0; i < plotPoints; i++) {
+      job.printf(fmt, i, fArr[i], yTheorThetaREArr[i], yTheorIE_REArr[i], yThetaREArr[i], yIE_REArr[i]);
+    }
+  }
+
+  @Override
+  public void shutdown() { }
+
+  @Override
+  public void cleanup() { }
+
+}
+
diff --git a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseAccuracyProfile.java
index bb78000..0f43707 100644
--- a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseAccuracyProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.uniquecount;
 
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_4SD;
 import static org.apache.datasketches.Util.milliSecToString;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -63,7 +63,7 @@ public abstract class BaseAccuracyProfile implements JobProfile {
     postPMFs = Boolean.parseBoolean(prop.mustGet("Trials_postPMFs"));
     uPPO = Integer.parseInt(prop.mustGet("Trials_UPPO"));
     lgQK = Integer.parseInt(prop.mustGet("Trials_lgQK"));
-    qArr = AccuracyStats.buildAccuracyStatsArray(lgMinU, lgMaxU, uPPO, lgQK);
+    qArr = AccuracyStats.buildLog2AccuracyStatsArray(lgMinU, lgMaxU, uPPO, lgQK);
     lgK = Integer.parseInt(prop.mustGet("LgK"));
     final String getSizeStr = prop.get("Trials_bytes");
     getSize = getSizeStr == null ? false : Boolean.parseBoolean(getSizeStr);
@@ -93,7 +93,7 @@ public abstract class BaseAccuracyProfile implements JobProfile {
    * Manages multiple trials for measuring accuracy.
    *
    * <p>An accuracy trial is run along the count axis (X-axis) first. The "points" along the X-axis
-   * where accuracy data is collected is controlled by the data loaded into the CountAccuracyStats
+   * where accuracy data is collected is controlled by the data loaded into the AccuracyStats
    * array. A single trial consists of a single sketch being updated with the Trials_lgMaxU unique
    * values, stopping at the configured x-axis points along the way where the accuracy is recorded
    * into the corresponding stats array. Each stats array retains the distribution of
@@ -110,42 +110,42 @@ public abstract class BaseAccuracyProfile implements JobProfile {
     final int maxT = 1 << lgMaxT;
     final int maxU = 1 << lgMaxU;
 
-    //This will generate a table of data up for each intermediate Trials point
-    int lastT = 0;
-    while (lastT < maxT) {
-      final int nextT = lastT == 0 ? minT : pwr2LawNext(tPPO, lastT);
-      final int delta = nextT - lastT;
+    //This will generate a table of data for each intermediate Trials point
+    int lastTpt = 0;
+    while (lastTpt < maxT) {
+      final int nextT = lastTpt == 0 ? minT : pwr2SeriesNext(tPPO, lastTpt);
+      final int delta = nextT - lastTpt;
       for (int i = 0; i < delta; i++) {
         doTrial();
       }
-      lastT = nextT;
+      lastTpt = nextT;
       final StringBuilder sb = new StringBuilder();
       if (nextT < maxT) { // intermediate
         if (interData) {
           job.println(getHeader());
-          process(getSize, qArr, lastT, sb);
+          process(getSize, qArr, lastTpt, sb);
           job.println(sb.toString());
         }
       } else { //done
         job.println(getHeader());
-        process(getSize, qArr, lastT, sb);
+        process(getSize, qArr, lastTpt, sb);
         job.println(sb.toString());
       }
 
       job.println(prop.extractKvPairs());
-      job.println("Cum Trials             : " + lastT);
+      job.println("Cum Trials             : " + lastTpt);
       job.println("Cum Updates            : " + vIn);
       final long currentTime_mS = System.currentTimeMillis();
       final long cumTime_mS = currentTime_mS - job.getStartTime();
       job.println("Cum Time               : " + milliSecToString(cumTime_mS));
-      final double timePerTrial_mS = cumTime_mS * 1.0 / lastT;
+      final double timePerTrial_mS = cumTime_mS * 1.0 / lastTpt;
       final double avgUpdateTime_ns = timePerTrial_mS * 1e6 / maxU;
       job.println("Time Per Trial, mSec   : " + timePerTrial_mS);
       job.println("Avg Update Time, nSec  : " + avgUpdateTime_ns);
       job.println("Date Time              : "
           + job.getReadableDateString(currentTime_mS));
 
-      final long timeToComplete_mS = (long)(timePerTrial_mS * (maxT - lastT));
+      final long timeToComplete_mS = (long)(timePerTrial_mS * (maxT - lastTpt));
       job.println("Est Time to Complete   : " + milliSecToString(timeToComplete_mS));
       job.println("Est Time at Completion : "
           + job.getReadableDateString(timeToComplete_mS + currentTime_mS));
@@ -166,18 +166,18 @@ public abstract class BaseAccuracyProfile implements JobProfile {
     sb.setLength(0);
     for (int pt = 0; pt < points; pt++) {
       final AccuracyStats q = qArr[pt];
-      final double uniques = q.trueValue;
+      final double trueUniques = q.trueValue;
       final double meanEst = q.sumEst / cumTrials;
       final double meanRelErr = q.sumRelErr / cumTrials;
-      final double meanSqErr = q.sumSqErr / cumTrials; //intermediate
-      final double normMeanSqErr = meanSqErr / (1.0 * uniques * uniques); //intermediate
-      final double rmsRelErr = Math.sqrt(normMeanSqErr);
+      final double meanSqErr = q.sumSqErr / cumTrials; //intermediate value
+      final double normMeanSqErr = meanSqErr / (1.0 * trueUniques * trueUniques); //intermediate value
+      final double rmsRelErr = Math.sqrt(normMeanSqErr); //a.k.a. Normalied RMS Error or NRMSE
       q.rmsre = rmsRelErr;
       final int bytes = q.bytes;
 
       //OUTPUT
       //sb.setLength(0);
-      sb.append(uniques).append(TAB);
+      sb.append(trueUniques).append(TAB);
 
       //Sketch meanEst, meanEstErr, norm RMS Err
       sb.append(meanEst).append(TAB);
@@ -191,7 +191,7 @@ public abstract class BaseAccuracyProfile implements JobProfile {
       final double[] quants = qArr[pt].qsk.getQuantiles(GAUSSIANS_4SD);
       final int quantsLen = quants.length;
       for (int i = 0; i < quantsLen; i++) {
-        sb.append(quants[i] / uniques - 1.0).append(TAB);
+        sb.append(quants[i] / trueUniques - 1.0).append(TAB);
       }
       if (getSize) {
         sb.append(bytes).append(TAB);
diff --git a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseBoundsAccuracyProfile.java b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseBoundsAccuracyProfile.java
index 9a244c2..f301a9e 100644
--- a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseBoundsAccuracyProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseBoundsAccuracyProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.uniquecount;
 
 import static org.apache.datasketches.GaussianRanks.GAUSSIANS_3SD;
 import static org.apache.datasketches.Util.milliSecToString;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import java.io.PrintWriter;
 
@@ -115,7 +115,7 @@ public abstract class BaseBoundsAccuracyProfile implements JobProfile {
     //This will generate a table of data up for each intermediate Trials point
     int lastT = 0;
     while (lastT < maxT) {
-      final int nextT = lastT == 0 ? minT : pwr2LawNext(tPPO, lastT);
+      final int nextT = lastT == 0 ? minT : pwr2SeriesNext(tPPO, lastT);
       final int delta = nextT - lastT;
       for (int i = 0; i < delta; i++) {
         doTrial();
diff --git a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
index a046ae7..6f3f1c7 100644
--- a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseSerDeProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.uniquecount;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import java.util.Arrays;
 
@@ -103,7 +103,7 @@ public abstract class BaseSerDeProfile implements JobProfile {
     job.println(getHeader());
 
     while (lastU < maxU) { //for each U point on X-axis, OR one row on output
-      final int nextU = lastU == 0 ? minU : pwr2LawNext(uPPO, lastU);
+      final int nextU = lastU == 0 ? minU : pwr2SeriesNext(uPPO, lastU);
       lastU = nextU;
       final int trials = getNumTrials(nextU);
 
diff --git a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseUpdateSpeedProfile.java b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseUpdateSpeedProfile.java
index fd123ac..6ac98a8 100644
--- a/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseUpdateSpeedProfile.java
+++ b/src/main/java/org/apache/datasketches/characterization/uniquecount/BaseUpdateSpeedProfile.java
@@ -21,7 +21,7 @@ package org.apache.datasketches.characterization.uniquecount;
 
 import static java.lang.Math.log;
 import static java.lang.Math.pow;
-import static org.apache.datasketches.Util.pwr2LawNext;
+import static org.apache.datasketches.Util.pwr2SeriesNext;
 
 import org.apache.datasketches.Job;
 import org.apache.datasketches.JobProfile;
@@ -92,7 +92,7 @@ public abstract class BaseUpdateSpeedProfile implements JobProfile {
     final StringBuilder dataStr = new StringBuilder();
     job.println(getHeader());
     while (lastU < maxU) { //Trials for each U point on X-axis, and one row on output
-      final int nextU = lastU == 0 ? minU : pwr2LawNext(uPPO, lastU);
+      final int nextU = lastU == 0 ? minU : pwr2SeriesNext(uPPO, lastU);
       lastU = nextU;
       final int trials = getNumTrials(nextU);
 
diff --git a/src/main/resources/theta/ThetaAccuracyIntersectionVsIEJob.conf b/src/main/resources/theta/ThetaAccuracyIntersectionVsIEJob.conf
new file mode 100644
index 0000000..6cc8ffe
--- /dev/null
+++ b/src/main/resources/theta/ThetaAccuracyIntersectionVsIEJob.conf
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Job
+
+# Job Profile
+JobProfile=org.apache.datasketches.characterization.theta.ThetaAccuracyIntersectionVsIEProfile
+
+#Theta Sketch configure
+LgK=12
+LgRF=0     #set the log resize factor to 0 (RF = 1)
+P=1.0
+Direct=false
+Rebuild=true
+
+# Trials
+Trials=500
+
+# X-Axis, Uniques
+MinLg10U=6
+MaxLg10U=7
+PPOM=4   # points per order-of-magnitude
+
+# Date-Time Profile
+TimeZone=PST
+TimeZoneOffset=-28800000 # offset in millisec
+FileNameDateFormat=yyyyMMdd'_'HHmmssz
+ReadableDateFormat=yyyy/MM/dd HH:mm:ss 
diff --git a/src/test/java/org/apache/datasketches/PowerLawGeneratorTest.java b/src/test/java/org/apache/datasketches/PowerLawGeneratorTest.java
index 8f6edbd..31a578e 100644
--- a/src/test/java/org/apache/datasketches/PowerLawGeneratorTest.java
+++ b/src/test/java/org/apache/datasketches/PowerLawGeneratorTest.java
@@ -19,11 +19,8 @@
 
 package org.apache.datasketches;
 
-//import org.testng.Assert;
 import org.testng.annotations.Test;
 
-//import org.apache.datasketches.PowerLawGenerator.Pair;
-
 /**
  * This provides sample code that generates tables of values that can be used
  * for plotting or other analytic computations. The first column is just the
@@ -151,7 +148,6 @@ public class PowerLawGeneratorTest {
       }
       outputX(row++, gi, cur);
     }
-
   }
 
   /**
@@ -182,11 +178,11 @@ public class PowerLawGeneratorTest {
   }
 
   /**
-   * @param s
+   * @param o
    *          value to print
    */
-  private static void println(String s) {
-    //System.out.println(s); //disable here
+  private static void println(Object o) {
+    //System.out.println(o.toString()); //disable here
   }
 
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org