/** * Heapify takes the sketch image in Memory and instantiates an on-heap Sketch. * The resulting sketch will not retain any link to the source Memory. * @param srcMem a Memory image of a Sketch. * <a href="{@docRoot}/resources/dictionary.html#mem">See Memory</a> * @return a heap-based Sketch based on the given Memory */ public static DoublesSketch heapify(final Memory srcMem) { if (checkIsCompactMemory(srcMem)) { return CompactDoublesSketch.heapify(srcMem); } return UpdateDoublesSketch.heapify(srcMem); }
@Test public void itemsToDoubles() { final ItemsSketch<Double> sketch1 = ItemsSketch.getInstance(Comparator.naturalOrder()); for (int i = 1; i <= 500; i++) { sketch1.update((double) i); } final byte[] bytes = sketch1.toByteArray(serDe); final UpdateDoublesSketch sketch2; sketch2 = UpdateDoublesSketch.heapify(Memory.wrap(bytes)); for (int i = 501; i <= 1000; i++) { sketch2.update(i); } Assert.assertEquals(sketch2.getN(), 1000); Assert.assertTrue(sketch2.getRetainedItems() < 1000); Assert.assertEquals(sketch2.getMinValue(), 1.0); Assert.assertEquals(sketch2.getMaxValue(), 1000.0); // based on ~1.7% normalized rank error for this particular case Assert.assertEquals(sketch2.getQuantile(0.5), 500.0, 17); }
private void getAndCheck(String ver, int n, double quantile) { DoublesSketch.rand.setSeed(131); //make deterministic //create fileName int k = 128; double nf = 0.5; String fileName = String.format("Qk%d_n%d_v%s.bin", k, n, ver); println("fullName: "+ fileName); println("Old Median: " + quantile); //create & Read File File file = new File(getClass().getClassLoader().getResource(fileName).getFile()); byte[] byteArr2 = readFile(file); Memory srcMem = Memory.wrap(byteArr2); // heapify as update sketch DoublesSketch qs2 = UpdateDoublesSketch.heapify(srcMem); //Test the quantile double q2 = qs2.getQuantile(nf); println("New Median: " + q2); Assert.assertEquals(q2, quantile, 0.0); // same thing with compact sketch qs2 = CompactDoublesSketch.heapify(srcMem); //Test the quantile q2 = qs2.getQuantile(nf); println("New Median: " + q2); Assert.assertEquals(q2, quantile, 0.0); }
private static void checkToFromByteArray2(int k, int n) { DoublesSketch qs = buildAndLoadQS(k, n); byte[] byteArr; Memory mem; DoublesSketch qs2; // from compact byteArr = qs.toByteArray(true); mem = Memory.wrap(byteArr); qs2 = UpdateDoublesSketch.heapify(mem); for (double f = 0.1; f < 0.95; f += 0.1) { assertEquals(qs.getQuantile(f), qs2.getQuantile(f), 0.0); } // ordered, non-compact byteArr = qs.toByteArray(false); mem = Memory.wrap(byteArr); qs2 = DoublesSketch.heapify(mem); final DoublesSketchAccessor dsa = DoublesSketchAccessor.wrap(qs2); dsa.sort(); for (double f = 0.1; f < 0.95; f += 0.1) { assertEquals(qs.getQuantile(f), qs2.getQuantile(f), 0.0); } // not ordered, not compact byteArr = qs.toByteArray(false); mem = Memory.wrap(byteArr); qs2 = DoublesSketch.heapify(mem); for (double f = 0.1; f < 0.95; f += 0.1) { assertEquals(qs.getQuantile(f), qs2.getQuantile(f), 0.0); } }
/** * Heapify takes the sketch image in Memory and instantiates an on-heap Sketch. * The resulting sketch will not retain any link to the source Memory. * @param srcMem a Memory image of a Sketch. * <a href="{@docRoot}/resources/dictionary.html#mem">See Memory</a> * @return a heap-based Sketch based on the given Memory */ public static DoublesSketch heapify(final Memory srcMem) { if (checkIsCompactMemory(srcMem)) { return CompactDoublesSketch.heapify(srcMem); } else { return UpdateDoublesSketch.heapify(srcMem); } }