final DoublesSketchAccessor samples = DoublesSketchAccessor.wrap(this); long total = 0; int weight = 1; samples.setLevel(DoublesSketchAccessor.BB_LVL_IDX); for (int i = 0; i < samples.numItems(); i++) { if (samples.get(i) < value) { total += weight; weight *= 2; if ((bitPattern & 1L) > 0) { // level is not empty samples.setLevel(lvl); for (int i = 0; i < samples.numItems(); i++) { if (samples.get(i) < value) { total += weight; } else {
final DoublesSketchAccessor sketchAccessor = DoublesSketchAccessor.wrap(sketch); Util.checkSplitPointsOrder(splitPoints); sketchAccessor.setLevel(DoublesSketchAccessor.BB_LVL_IDX); if (numSplitPoints < 50) { // empirically determined crossover sketchAccessor, weight, splitPoints, counters); } else { sketchAccessor.sort(); if ((myBitPattern & 1L) > 0L) { //valid level exists sketchAccessor.setLevel(lvl); DoublesPmfCdfImpl.linearTimeIncrementHistogramCounters( sketchAccessor, weight, splitPoints, counters);
final long bitPattern) { final int endingLevel = Util.lowestZeroBitStartingAt(bitPattern, startingLevel); tgtSketchBuf.setLevel(endingLevel); if (doUpdateVersion) { // update version of computation } else { // mergeInto version of computation assert (optSrcKBuf != null); tgtSketchBuf.putArray(optSrcKBuf.getArray(0, k), 0, 0, k); final DoublesSketchAccessor currLevelBuf = tgtSketchBuf.copyAndSetLevel(lvl); mergeTwoSizeKBuffers(
/** * Advancing the iterator and checking existence of the next entry * is combined here for efficiency. This results in an undefined * state of the iterator before the first call of this method. * @return true if the next element exists */ public boolean next() { if (sketchAccessor_ == null) { // initial setup sketchAccessor_ = DoublesSketchAccessor.wrap(sketch_); } else { // advance index within the current level i_++; } if (i_ < sketchAccessor_.numItems()) { return true; } // go to the next non-empty level do { level_++; if (level_ > 0) { bits_ >>>= 1; } if (bits_ == 0L) { return false; // run out of levels } weight_ *= 2; } while ((bits_ & 1L) == 0L); i_ = 0; sketchAccessor_.setLevel(level_); return true; }
weight *= 2; if ((bits & 1L) > 0L) { sketchAccessor.setLevel(lvl); for (int i = 0; i < sketchAccessor.numItems(); i++) { itemsArr[nxt] = sketchAccessor.get(i); cumWtsArr[nxt] = weight; nxt++; sketchAccessor.setLevel(BB_LVL_IDX); for (int i = 0; i < sketchAccessor.numItems(); i++) { itemsArr[nxt] = sketchAccessor.get(i); cumWtsArr[nxt] = weight; nxt++;
final double[] combBuf = new double[combBufItems]; qsCopy.putCombinedBuffer(combBuf); final DoublesSketchAccessor sketchAccessor = DoublesSketchAccessor.wrap(sketch); final DoublesSketchAccessor copyAccessor = DoublesSketchAccessor.wrap(qsCopy); copyAccessor.putArray(sketchAccessor.getArray(0, sketchAccessor.numItems()), 0, 0, sketchAccessor.numItems()); sketchAccessor.setLevel(lvl); copyAccessor.setLevel(lvl); copyAccessor.putArray(sketchAccessor.getArray(0, sketchAccessor.numItems()), 0, 0, sketchAccessor.numItems());
ret = HeapUpdateDoublesSketch.newInstance(myMaxK); final DoublesSketchAccessor otherAccessor = DoublesSketchAccessor.wrap(other); for (int i = 0; i < otherAccessor.numItems(); ++i) { ret.update(otherAccessor.get(i)); ret = myQS; final DoublesSketchAccessor otherAccessor = DoublesSketchAccessor.wrap(other); for (int i = 0; i < otherAccessor.numItems(); ++i) { ret.update(otherAccessor.get(i));
static DoublesSketchAccessor wrap(final DoublesSketch ds) { return wrap(ds, false); }
/** * Gets a value from the current entry in the sketch. * Don't call this before calling next() for the first time * or after getting false from next(). * @return value from the current entry */ public double getValue() { return sketchAccessor_.get(i_); }
DoublesSketchAccessor(final DoublesSketch ds, final boolean forceSize, final int level) { ds_ = ds; forceSize_ = forceSize; setLevel(level); }
levelStart = ds_.getBaseBufferCount() + (countValidLevelsBelow(lvl) * ds_.getK()); } else { levelStart = (2 + currLvl_) * ds_.getK();
final double[] combinedBuffer = new double[retainedItems]; final DoublesSketchAccessor accessor = DoublesSketchAccessor.wrap(sketch); assert hcds.baseBufferCount_ == accessor.numItems(); System.arraycopy(accessor.getArray(0, hcds.baseBufferCount_), 0, combinedBuffer, 0, hcds.baseBufferCount_); for (int lvl = 0; bitPattern > 0; ++lvl, bitPattern >>>= 1) { if ((bitPattern & 1L) > 0L) { accessor.setLevel(lvl); System.arraycopy(accessor.getArray(0, k), 0, combinedBuffer, combinedBufferOffset, k); combinedBufferOffset += k;
/** * Advancing the iterator and checking existence of the next entry * is combined here for efficiency. This results in an undefined * state of the iterator before the first call of this method. * @return true if the next element exists */ public boolean next() { if (sketchAccessor_ == null) { // initial setup sketchAccessor_ = DoublesSketchAccessor.wrap(sketch_); } else { // advance index within the current level i_++; } if (i_ < sketchAccessor_.numItems()) { return true; } // go to the next non-empty level do { level_++; if (level_ > 0) { bits_ >>>= 1; } if (bits_ == 0L) { return false; // run out of levels } weight_ *= 2; } while ((bits_ & 1L) == 0L); i_ = 0; sketchAccessor_.setLevel(level_); return true; }
weight *= 2; if ((bits & 1L) > 0L) { sketchAccessor.setLevel(lvl); for (int i = 0; i < sketchAccessor.numItems(); i++) { itemsArr[nxt] = sketchAccessor.get(i); cumWtsArr[nxt] = weight; nxt++; sketchAccessor.setLevel(BB_LVL_IDX); for (int i = 0; i < sketchAccessor.numItems(); i++) { itemsArr[nxt] = sketchAccessor.get(i); cumWtsArr[nxt] = weight; nxt++;
ret = HeapUpdateDoublesSketch.newInstance(myMaxK); final DoublesSketchAccessor otherAccessor = DoublesSketchAccessor.wrap(other); for (int i = 0; i < otherAccessor.numItems(); ++i) { ret.update(otherAccessor.get(i)); ret = myQS; final DoublesSketchAccessor otherAccessor = DoublesSketchAccessor.wrap(other); for (int i = 0; i < otherAccessor.numItems(); ++i) { ret.update(otherAccessor.get(i));
/** * Constructs the Auxiliary structure from the DoublesSketch * @param qs a DoublesSketch */ DoublesAuxiliary(final DoublesSketch qs ) { final int k = qs.getK(); final long n = qs.getN(); final long bitPattern = qs.getBitPattern(); final int numSamples = qs.getRetainedItems(); final DoublesSketchAccessor sketchAccessor = DoublesSketchAccessor.wrap(qs); final double[] itemsArr = new double[numSamples]; final long[] cumWtsArr = new long[numSamples + 1]; // the extra slot is very important // Populate from DoublesSketch: // copy over the "levels" and then the base buffer, all with appropriate weights populateFromDoublesSketch(k, n, bitPattern, sketchAccessor, itemsArr, cumWtsArr); // Sort the first "numSamples" slots of the two arrays in tandem, // taking advantage of the already sorted blocks of length k blockyTandemMergeSort(itemsArr, cumWtsArr, numSamples, k); final long total = QuantilesHelper.convertToPrecedingCummulative(cumWtsArr); assert total == n; auxN_ = n; auxSamplesArr_ = itemsArr; auxCumWtsArr_ = cumWtsArr; }
/** * Gets a value from the current entry in the sketch. * Don't call this before calling next() for the first time * or after getting false from next(). * @return value from the current entry */ public double getValue() { return sketchAccessor_.get(i_); }
DoublesSketchAccessor(final DoublesSketch ds, final boolean forceSize, final int level) { ds_ = ds; forceSize_ = forceSize; setLevel(level); }